diff options
| author | Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> | 2006-10-30 01:46:41 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-30 15:08:41 -0500 |
| commit | b428b51ed9a4ff8445ea50769961f948480c1d36 (patch) | |
| tree | ea9f79dc8c56310710c39d7472b55f272b63c401 | |
| parent | bbb5bbb037812ba36d638014a93134148a568684 (diff) | |
[PATCH] Fix "Remove the use of _syscallX macros in UML"
Fix commit 5f4c6bc1f369f20807a8e753c2308d1629478c61: it spits out warnings
about missing syscall prototype (it is in <unistd.h>) and it does not
recognize that two uses of _syscallX are to be resolved against kernel
headers in the source tree, not against _syscallX; they in fact do not
compile and would not work anyway.
If _syscallX macros will be removed from the kernel tree altogether, the
only reasonable solution for that piece of code is switching to open-coded
inline assembly (it's remapping the whole executable from memory, except
the page containing this code).
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | arch/um/os-Linux/sys-i386/tls.c | 3 | ||||
| -rw-r--r-- | arch/um/os-Linux/tls.c | 1 | ||||
| -rw-r--r-- | arch/um/sys-i386/unmap.c | 11 | ||||
| -rw-r--r-- | arch/um/sys-x86_64/unmap.c | 11 |
4 files changed, 18 insertions, 8 deletions
diff --git a/arch/um/os-Linux/sys-i386/tls.c b/arch/um/os-Linux/sys-i386/tls.c index 6e945ab45843..256532034c62 100644 --- a/arch/um/os-Linux/sys-i386/tls.c +++ b/arch/um/os-Linux/sys-i386/tls.c | |||
| @@ -1,6 +1,9 @@ | |||
| 1 | #include <errno.h> | 1 | #include <errno.h> |
| 2 | #include <linux/unistd.h> | 2 | #include <linux/unistd.h> |
| 3 | |||
| 3 | #include <sys/syscall.h> | 4 | #include <sys/syscall.h> |
| 5 | #include <unistd.h> | ||
| 6 | |||
| 4 | #include "sysdep/tls.h" | 7 | #include "sysdep/tls.h" |
| 5 | #include "user_util.h" | 8 | #include "user_util.h" |
| 6 | 9 | ||
diff --git a/arch/um/os-Linux/tls.c b/arch/um/os-Linux/tls.c index a2de2580b8af..9f7999f27c77 100644 --- a/arch/um/os-Linux/tls.c +++ b/arch/um/os-Linux/tls.c | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #include <errno.h> | 1 | #include <errno.h> |
| 2 | #include <sys/ptrace.h> | 2 | #include <sys/ptrace.h> |
| 3 | #include <sys/syscall.h> | 3 | #include <sys/syscall.h> |
| 4 | #include <unistd.h> | ||
| 4 | #include <asm/ldt.h> | 5 | #include <asm/ldt.h> |
| 5 | #include "sysdep/tls.h" | 6 | #include "sysdep/tls.h" |
| 6 | #include "uml-config.h" | 7 | #include "uml-config.h" |
diff --git a/arch/um/sys-i386/unmap.c b/arch/um/sys-i386/unmap.c index 8e55cd5d3d07..1b0ad0e4adcd 100644 --- a/arch/um/sys-i386/unmap.c +++ b/arch/um/sys-i386/unmap.c | |||
| @@ -5,17 +5,20 @@ | |||
| 5 | 5 | ||
| 6 | #include <linux/mman.h> | 6 | #include <linux/mman.h> |
| 7 | #include <asm/unistd.h> | 7 | #include <asm/unistd.h> |
| 8 | #include <sys/syscall.h> | ||
| 9 | 8 | ||
| 9 | static int errno; | ||
| 10 | |||
| 11 | static inline _syscall2(int,munmap,void *,start,size_t,len) | ||
| 12 | static inline _syscall6(void *,mmap2,void *,addr,size_t,len,int,prot,int,flags,int,fd,off_t,offset) | ||
| 10 | int switcheroo(int fd, int prot, void *from, void *to, int size) | 13 | int switcheroo(int fd, int prot, void *from, void *to, int size) |
| 11 | { | 14 | { |
| 12 | if (syscall(__NR_munmap, to, size) < 0){ | 15 | if(munmap(to, size) < 0){ |
| 13 | return(-1); | 16 | return(-1); |
| 14 | } | 17 | } |
| 15 | if (syscall(__NR_mmap2, to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1 ){ | 18 | if(mmap2(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1 ){ |
| 16 | return(-1); | 19 | return(-1); |
| 17 | } | 20 | } |
| 18 | if (syscall(__NR_munmap, from, size) < 0){ | 21 | if(munmap(from, size) < 0){ |
| 19 | return(-1); | 22 | return(-1); |
| 20 | } | 23 | } |
| 21 | return(0); | 24 | return(0); |
diff --git a/arch/um/sys-x86_64/unmap.c b/arch/um/sys-x86_64/unmap.c index 57c9286a701b..f4a4bffd8a18 100644 --- a/arch/um/sys-x86_64/unmap.c +++ b/arch/um/sys-x86_64/unmap.c | |||
| @@ -5,17 +5,20 @@ | |||
| 5 | 5 | ||
| 6 | #include <linux/mman.h> | 6 | #include <linux/mman.h> |
| 7 | #include <asm/unistd.h> | 7 | #include <asm/unistd.h> |
| 8 | #include <sys/syscall.h> | ||
| 9 | 8 | ||
| 9 | static int errno; | ||
| 10 | |||
| 11 | static inline _syscall2(int,munmap,void *,start,size_t,len) | ||
| 12 | static inline _syscall6(void *,mmap,void *,addr,size_t,len,int,prot,int,flags,int,fd,off_t,offset) | ||
| 10 | int switcheroo(int fd, int prot, void *from, void *to, int size) | 13 | int switcheroo(int fd, int prot, void *from, void *to, int size) |
| 11 | { | 14 | { |
| 12 | if (syscall(__NR_munmap, to, size) < 0){ | 15 | if(munmap(to, size) < 0){ |
| 13 | return(-1); | 16 | return(-1); |
| 14 | } | 17 | } |
| 15 | if (syscall(__NR_mmap, to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1){ | 18 | if(mmap(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1){ |
| 16 | return(-1); | 19 | return(-1); |
| 17 | } | 20 | } |
| 18 | if (syscall(__NR_munmap, from, size) < 0){ | 21 | if(munmap(from, size) < 0){ |
| 19 | return(-1); | 22 | return(-1); |
| 20 | } | 23 | } |
| 21 | return(0); | 24 | return(0); |
