makra v Linuxu

Milan Pikula - WWW www na fornax.elf.stuba.sk
Čtvrtek Březen 26 19:15:04 CET 1998


W>Vazeni, 
W>poradi mi nekdo, jak donutit linker, aby nasel a zalinkoval makra typu
W>inb(), outb() a podobne. Znam na to jednu fintu, je to pouziti parametru
W>-O. Optimalizace ale znemoznuje rozumne debuggovani. 

kedze nikto neodpovedal, zostava to zial na mne.. mozno nemam pravdu,
opravte ma niekto, ak sa v nasledujucom mylim.

outb a podobne su inline funkcie (vec tusim z c++, skratka sa to vraza
zakazdym namiesto volania subrut), gcc-cko ich vklada priamo (tak ako ma),
iba ak ma zapnutu optimalizaciu. inak da iba call. pozrel som asm/io.h, je
tam doslova
#define __OUT1(s,x) \
extern inline void out##s(unsigned x value, unsigned short port) {

#define __OUT2(s,s1,s2) \
__asm__ __volatile__ ("out" #s " %" s1 "0,%" s2 "1"

#define __OUT(s,s1,x) \
__OUT1(s,x) __OUT2(s,s1,"w") : : "a" (value), "Nd" (port)); } \
__OUT1(s##_p,x) __OUT2(s,s1,"w") __FULL_SLOW_DOWN_IO : : "a" (value), "Nd"
(port
));} \

a o kusok neskor

__OUT(b,"b",char)
__OUT(w,"w",short)
__OUT(l,,int)

mozno existuje cistejsie riesenie, ale (prave som to skusil a bezi):
skopiruj si io.h k sebe a zmaz vsetky inline a extern inline. namiesto
include <asm/io.h> daj include "io.h".

inline funkcie v klasickom c-cku skratka sax, cistejsie by to bolo cez
#define.

caw,
					wWw

          -----------------------------------------------------
             WWW/4CP, Milan Pikula,  www na fornax.elf.stuba.sk
              .. dajte mi pewnu linku a pohnem zemegulow ..




Další informace o konferenci Linux