I just noticed that the __syscall call is dropping the 6th argument (providing garbage) when I use it on amd64. The attached program makes an mmap call "normally" and with __syscall. Running the program in ktrace reveals that the last argument is garbage when using the __syscall entry, and not when using the "normal" entry. Is this known/expected behavior or a bug?
--- $ ktrace ./a.out p 0x100000 p 0x100528 --- $ kdump 2631 a.out CALL mmap(0,0x10000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0) 2631 a.out RET mmap 27609139748864/0x191c40f7a000 2631 a.out CALL mmap(0x100000,0x4000,0x7<PROT_READ|PROT_WRITE|PROT_EXEC>,0x1000<MAP_ANON>,-1,0x7f7ffffc5bd8) 2631 a.out RET mmap 1051608/0x100bd8 ---- #include <stdio.h> #include <sys/mman.h> int main(int argc, char **argv) { void *p; unsigned long long p2; p = mmap((void*)0x100000, 4*4096, 7, MAP_ANON, -1, 0); printf("p %p\n", p); munmap(p, 4*4096); p2 = __syscall(197, 0x100000, 4*4096, 7, MAP_ANON, -1, 0); printf("p 0x%llx\n", p2); return 0; } -- Tim Newsham | www.thenewsh.com/~newsham | @newshtwit | thenewsh.blogspot.com