diff options
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h b/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h index 0eb5f32ac3..5e59962a48 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h @@ -1,4 +1,4 @@ -/* System-specific settings for dynamic linker code. Generic version. +/* System-specific settings for dynamic linker code. IA-32 version. Copyright (C) 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -42,4 +42,28 @@ #define RTLD_CORRECT_DYNAMIC_WEAK 1 + +/* Traditionally system calls have been made using int $0x80. A + second method was introduced which, if possible, will use the + sysenter/syscall instructions. To signal the presence and where to + find the code the kernel passes an AT_SYSINFO value in the + auxiliary vector to the application. + sysenter/syscall is not useful on i386 through i586, but the dynamic + linker and dl code in libc.a has to be able to load i686 compiled + libraries. */ +#define NEED_DL_SYSINFO 1 +#undef USE_DL_SYSINFO + +#if defined NEED_DL_SYSINFO && !defined __ASSEMBLER__ +extern void _dl_sysinfo_int80 (void) attribute_hidden; +# define DL_SYSINFO_DEFAULT (uintptr_t) _dl_sysinfo_int80 +# define DL_SYSINFO_IMPLEMENTATION \ + asm (".type _dl_sysinfo_int80,@function\n\t" \ + ".hidden _dl_sysinfo_int80\n" \ + "_dl_sysinfo_int80:\n\t" \ + "int $0x80;\n\t" \ + "ret;\n\t" \ + ".size _dl_sysinfo_int80,.-_dl_sysinfo_int80"); +#endif + #endif /* dl-sysdep.h */ |