From d945a07eecee9851173365459d196bcd22c3e636 Mon Sep 17 00:00:00 2001 From: David Smith Date: Tue, 23 Feb 2010 15:57:25 -0600 Subject: Fixed PR 11269 by properly handling mmap syscall 'fd' argument. * testsuite/systemtap.syscall/mmap.c (main): Added mprotect and mremap testing (along with testing of anonymous maps). * tapset/i386/syscalls.stp: In mmap probes, handle the fact that the kernel gets an unsigned long 'fd', but the user-side passes a signed int. * tapset/i386/nd_syscalls.stp: Ditto. * tapset/ia64/syscalls.stp: Ditto. * tapset/powerpc/nd_syscalls.stp: Ditto. * tapset/powerpc/syscalls.stp: Ditto. * tapset/x86_64/nd_syscalls.stp: Ditto. * tapset/x86_64/syscalls.stp: Ditto. --- testsuite/systemtap.syscall/mmap.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'testsuite/systemtap.syscall/mmap.c') diff --git a/testsuite/systemtap.syscall/mmap.c b/testsuite/systemtap.syscall/mmap.c index a09888b4..bc788227 100644 --- a/testsuite/systemtap.syscall/mmap.c +++ b/testsuite/systemtap.syscall/mmap.c @@ -1,6 +1,7 @@ -/* COVERAGE: mmap2 munmap msync mlock mlockall munlock munlockall fstat open close */ +/* COVERAGE: mmap2 munmap msync mlock mlockall munlock munlockall mprotect mremap fstat open close */ #include #include +#define __USE_GNU #include #include #include @@ -49,5 +50,23 @@ int main() munmap(r, fs.st_size); //staptest// munmap (XXXX, 1030) = 0 + r = mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + //staptest// mmap[2]* (XXXX, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = XXXX + + mprotect(r, 4096, PROT_READ); + //staptest// mprotect (XXXX, 4096, PROT_READ) = 0 + + munmap(r, 12288); + //staptest// munmap (XXXX, 12288) = 0 + + r = mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + //staptest// mmap[2]* (XXXX, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = XXXX + + r = mremap(r, 8192, 4096, 0); + //// mremap (XXXX, 8192, 4096, 0) = XXXX + + munmap(r, 4096); + //// munmap (XXXX, 4096) = 0 + return 0; } -- cgit