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