Fórumok
http://gcc.gnu.org/onlinedocs/gcc-4.2.2/gcc/Constraints.html#Constraints
http://blogs.sun.com/x86be/entry/gcc_style_asm_inlining_support
__asm__ __volatile__ /*mmap */
(
"mov %5,%%r10\n"
"mov %6,%%r8\n"
"xor %%r9,%%r9\n"
"syscall"
: "=a"(posvect)
: "a"(SYS_mmap),"D"(0),"S"(bits_length),"d"(PROT_READ),"i"(MAP_SHARED|MAP_POPULATE),"r"(fd)
: "%rcx","%r11" ,"%r10", "%r8", "%r9"
);
Hogy a retekbe tudom elmagyarazni az inline csodanak, hogy r10,r8,r9 -ben szeretnem latni a megatott erteket. "%r8"(ERTEK) -formaban mondjuk.
Vagy, hogy __volatile__ nelkul se tegye rossz helyre, az utasitasokat. (nem mindegy mi van a syscall elott es utan)
Ez azert rossz nekem, mert pl. ket ilyen mmap kozott mondjuk r9 erteke nem valtozik, de volatile miatt ujra megadja, nelkule meg nem garantalt a helyes sorrend.
Hozzászólások
hat ugy latszik a volatile kell, mert bugos (vagy hulye) a fordito. azonkivul nem hiszem, hogy meg lehet mondani, hogy r8-ba akarsz valamit, mert a gcc forrasaban (amit az altalad linkelt doksi ir) a gcc/config/i386/constraints.md-ben sincs ilyesmi ugy latom.
ilyen az elet.
- Use the Source Luke ! -
szerintem az a gond, hogy az utolsó regiszter, amibe a fd változódat teszed az 64 bites, a fd változód pedig 32.
unsigned long -ot eszik kernel beli mmap , de ez most mindegy. a kód helyes jelen formájában.
fd változóm meg long tipusú volt.
bocs...
welcome to gcc :)
-. . - -... ... -..
aha, akkor irjal jobbat. vagy kuldj be patch-t, hogy lehessen ilyen constraint.
- Use the Source Luke ! -