diff options
author | Eric Andersen <andersen@codepoet.org> | 2001-04-23 21:18:14 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2001-04-23 21:18:14 +0000 |
commit | e5b0dc856bb1e5eeec57be3bd63b091c10ef67a9 (patch) | |
tree | adb4a3fd9b97df4434194d94939462edec9eac1c /ldso | |
parent | 842e41a3b7bec9c93f59ef90930cdfeca9fb00c1 (diff) |
Revert my syscall changes. The _syscall# macros are not PIC
friendly and don't work. Back to nasty asm...
With this change in place, it now works for me on x86.
-Erik
Diffstat (limited to 'ldso')
-rw-r--r-- | ldso/ldso/i386/elfinterp.c | 2 | ||||
-rw-r--r-- | ldso/ldso/ld_syscall.h | 108 | ||||
-rw-r--r-- | ldso/ldso/syscall.h | 108 |
3 files changed, 1 insertions, 217 deletions
diff --git a/ldso/ldso/i386/elfinterp.c b/ldso/ldso/i386/elfinterp.c index 3347882d6..01149c69b 100644 --- a/ldso/ldso/i386/elfinterp.c +++ b/ldso/ldso/i386/elfinterp.c @@ -44,8 +44,8 @@ an ELF sharable library or a linux style of shared library. */ #include "hash.h" #include "linuxelf.h" +#include "syscall.h" #include "../string.h" -#include "../syscall.h" #define SVR4_COMPATIBILITY diff --git a/ldso/ldso/ld_syscall.h b/ldso/ldso/ld_syscall.h deleted file mode 100644 index 3cf244338..000000000 --- a/ldso/ldso/ld_syscall.h +++ /dev/null @@ -1,108 +0,0 @@ -#include <linux/types.h> -#include <asm/unistd.h> - -#ifndef _dl_MAX_ERRNO -#define _dl_MAX_ERRNO 4096 -#endif - -#define _dl_mmap_check_error(__res) \ - (((int)__res) < 0 && ((int)__res) >= -_dl_MAX_ERRNO) - - -/* Here are the definitions for some syscalls that are used - by the dynamic linker. The idea is that we want to be able - to call these before the errno symbol is dynamicly linked, so - we use our own version here. Note that we cannot assume any - dynamic linking at all, so we cannot return any error codes. - We just punt if there is an error. */ - -/* Do not include unistd.h, so gcc doesn't whine about - * _exit returning. It really doesn't return... */ -#define __NR__dl_exit __NR_exit -static inline _syscall1(void, _dl_exit, int, status); - - -#define __NR__dl_close __NR_close -static inline _syscall1(int, _dl_close, int, fd); - - -#define __NR__dl_mmap_real __NR_mmap -static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); - -static inline void * _dl_mmap(void * addr, unsigned long size, int prot, - int flags, int fd, unsigned long offset) -{ - unsigned long buffer[6]; - - buffer[0] = (unsigned long) addr; - buffer[1] = (unsigned long) size; - buffer[2] = (unsigned long) prot; - buffer[3] = (unsigned long) flags; - buffer[4] = (unsigned long) fd; - buffer[5] = (unsigned long) offset; - return (void *) _dl_mmap_real(buffer); -} - -#define __NR__dl_open __NR_open -static inline _syscall2(int, _dl_open, const char *, fn, int, flags); - -#define __NR__dl_write __NR_write -static inline _syscall3(unsigned long, _dl_write, int, fd, - const void *, buf, unsigned long, count); - - -#define __NR__dl_read __NR_read -static inline _syscall3(unsigned long, _dl_read, int, fd, - const void *, buf, unsigned long, count); - -#define __NR__dl_mprotect __NR_mprotect -static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); - - - -/* Pull in whatever this particular arch's kernel thinks the kernel version of - * struct stat should look like. It turns out that each arch has a different - * opinion on the subject, and different kernel revs use different names... */ -#define __NR__dl_stat __NR_stat -#define stat kernel_stat -#define new_stat kernel_stat -#include <asm/stat.h> -#undef new_stat -#undef stat -static inline _syscall2(int, _dl_stat, const char *, file_name, struct kernel_stat *, buf); - - -#define __NR__dl_munmap __NR_munmap -static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); - -#define __NR__dl_getuid __NR_getuid -static inline _syscall0(gid_t, _dl_getuid); - -#define __NR__dl_geteuid __NR_geteuid -static inline _syscall0(uid_t, _dl_geteuid); - -#define __NR__dl_getgid __NR_getgid -static inline _syscall0(gid_t, _dl_getgid); - -#define __NR__dl_getegid __NR_getegid -static inline _syscall0(gid_t, _dl_getegid); - -/* - * Not an actual syscall, but we need something in assembly to say whether - * this is OK or not. - */ -extern inline int _dl_suid_ok(void) -{ - uid_t uid, euid, gid, egid; - - uid = _dl_getuid(); - euid = _dl_geteuid(); - gid = _dl_getgid(); - egid = _dl_getegid(); - - if(uid == euid && gid == egid) - return 1; - else - return 0; -} - diff --git a/ldso/ldso/syscall.h b/ldso/ldso/syscall.h deleted file mode 100644 index 3cf244338..000000000 --- a/ldso/ldso/syscall.h +++ /dev/null @@ -1,108 +0,0 @@ -#include <linux/types.h> -#include <asm/unistd.h> - -#ifndef _dl_MAX_ERRNO -#define _dl_MAX_ERRNO 4096 -#endif - -#define _dl_mmap_check_error(__res) \ - (((int)__res) < 0 && ((int)__res) >= -_dl_MAX_ERRNO) - - -/* Here are the definitions for some syscalls that are used - by the dynamic linker. The idea is that we want to be able - to call these before the errno symbol is dynamicly linked, so - we use our own version here. Note that we cannot assume any - dynamic linking at all, so we cannot return any error codes. - We just punt if there is an error. */ - -/* Do not include unistd.h, so gcc doesn't whine about - * _exit returning. It really doesn't return... */ -#define __NR__dl_exit __NR_exit -static inline _syscall1(void, _dl_exit, int, status); - - -#define __NR__dl_close __NR_close -static inline _syscall1(int, _dl_close, int, fd); - - -#define __NR__dl_mmap_real __NR_mmap -static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); - -static inline void * _dl_mmap(void * addr, unsigned long size, int prot, - int flags, int fd, unsigned long offset) -{ - unsigned long buffer[6]; - - buffer[0] = (unsigned long) addr; - buffer[1] = (unsigned long) size; - buffer[2] = (unsigned long) prot; - buffer[3] = (unsigned long) flags; - buffer[4] = (unsigned long) fd; - buffer[5] = (unsigned long) offset; - return (void *) _dl_mmap_real(buffer); -} - -#define __NR__dl_open __NR_open -static inline _syscall2(int, _dl_open, const char *, fn, int, flags); - -#define __NR__dl_write __NR_write -static inline _syscall3(unsigned long, _dl_write, int, fd, - const void *, buf, unsigned long, count); - - -#define __NR__dl_read __NR_read -static inline _syscall3(unsigned long, _dl_read, int, fd, - const void *, buf, unsigned long, count); - -#define __NR__dl_mprotect __NR_mprotect -static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); - - - -/* Pull in whatever this particular arch's kernel thinks the kernel version of - * struct stat should look like. It turns out that each arch has a different - * opinion on the subject, and different kernel revs use different names... */ -#define __NR__dl_stat __NR_stat -#define stat kernel_stat -#define new_stat kernel_stat -#include <asm/stat.h> -#undef new_stat -#undef stat -static inline _syscall2(int, _dl_stat, const char *, file_name, struct kernel_stat *, buf); - - -#define __NR__dl_munmap __NR_munmap -static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); - -#define __NR__dl_getuid __NR_getuid -static inline _syscall0(gid_t, _dl_getuid); - -#define __NR__dl_geteuid __NR_geteuid -static inline _syscall0(uid_t, _dl_geteuid); - -#define __NR__dl_getgid __NR_getgid -static inline _syscall0(gid_t, _dl_getgid); - -#define __NR__dl_getegid __NR_getegid -static inline _syscall0(gid_t, _dl_getegid); - -/* - * Not an actual syscall, but we need something in assembly to say whether - * this is OK or not. - */ -extern inline int _dl_suid_ok(void) -{ - uid_t uid, euid, gid, egid; - - uid = _dl_getuid(); - euid = _dl_geteuid(); - gid = _dl_getgid(); - egid = _dl_getegid(); - - if(uid == euid && gid == egid) - return 1; - else - return 0; -} - |