summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-08-29 23:24:40 +0000
committerRoland McGrath <roland@gnu.org>2002-08-29 23:24:40 +0000
commit868b78c83cef264d69a854d9128a68845f346fe3 (patch)
tree73f59b7ed8640199040d8bc32a7415a0edbdb1cd
parentc5738211bd4a61e6950c3e4a61fbb4c366fd13df (diff)
* elf/dl-runtime.c (IN_DL_RUNTIME): Define this macro first thing.
* sysdeps/i386/dl-machine.h: Only declare fixup, profile_fixup and define ELF_MACHINE_RUNTIME_TRAMPOLINE under #ifdef IN_DL_RUNTIME.
-rw-r--r--ChangeLog4
-rw-r--r--elf/dl-runtime.c2
-rw-r--r--sysdeps/i386/dl-machine.h41
3 files changed, 28 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index ce7fe274f0..d2d72db499 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2002-08-29 Roland McGrath <roland@redhat.com>
+ * elf/dl-runtime.c (IN_DL_RUNTIME): Define this macro first thing.
+ * sysdeps/i386/dl-machine.h: Only declare fixup, profile_fixup and
+ define ELF_MACHINE_RUNTIME_TRAMPOLINE under #ifdef IN_DL_RUNTIME.
+
* sysdeps/generic/readelflib.c (process_elf_file): Fix typo.
* iconv/gconv_int.h: Include <stdlib.h> for alloca decl.
diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c
index ed1c337367..9b24c30841 100644
--- a/elf/dl-runtime.c
+++ b/elf/dl-runtime.c
@@ -17,6 +17,8 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
+#define IN_DL_RUNTIME 1 /* This can be tested in dl-machine.h. */
+
#include <alloca.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
index c499875023..fa6ce04d99 100644
--- a/sysdeps/i386/dl-machine.h
+++ b/sysdeps/i386/dl-machine.h
@@ -92,22 +92,6 @@ elf_machine_load_address (void)
#endif
-#if !defined PROF && !__BOUNDED_POINTERS__
-/* We add a declaration of this function here so that in dl-runtime.c
- the ELF_MACHINE_RUNTIME_TRAMPOLINE macro really can pass the parameters
- in registers.
-
- We cannot use this scheme for profiling because the _mcount call
- destroys the passed register information. */
-/* GKM FIXME: Fix trampoline to pass bounds so we can do
- without the `__unbounded' qualifier. */
-static ElfW(Addr) fixup (struct link_map *__unbounded l, ElfW(Word) reloc_offset)
- __attribute__ ((regparm (2), unused));
-static ElfW(Addr) profile_fixup (struct link_map *l, ElfW(Word) reloc_offset,
- ElfW(Addr) retaddr)
- __attribute__ ((regparm (3), unused));
-#endif
-
/* Set up the loaded object described by L so its unrelocated PLT
entries will jump to the on-demand fixup code in dl-runtime.c. */
@@ -159,10 +143,28 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
return lazy;
}
+#ifdef IN_DL_RUNTIME
+
+# if !defined PROF && !__BOUNDED_POINTERS__
+/* We add a declaration of this function here so that in dl-runtime.c
+ the ELF_MACHINE_RUNTIME_TRAMPOLINE macro really can pass the parameters
+ in registers.
+
+ We cannot use this scheme for profiling because the _mcount call
+ destroys the passed register information. */
+/* GKM FIXME: Fix trampoline to pass bounds so we can do
+ without the `__unbounded' qualifier. */
+static ElfW(Addr) fixup (struct link_map *__unbounded l, ElfW(Word) reloc_offset)
+ __attribute__ ((regparm (2), unused));
+static ElfW(Addr) profile_fixup (struct link_map *l, ElfW(Word) reloc_offset,
+ ElfW(Addr) retaddr)
+ __attribute__ ((regparm (3), unused));
+# endif
+
/* This code is used in dl-runtime.c to call the `fixup' function
and then redirect to the address it returns. */
-#if !defined PROF && !__BOUNDED_POINTERS__
-# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+# if !defined PROF && !__BOUNDED_POINTERS__
+# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
.text\n\
.globl _dl_runtime_resolve\n\
.type _dl_runtime_resolve, @function\n\
@@ -198,7 +200,7 @@ _dl_runtime_profile:\n\
.size _dl_runtime_profile, .-_dl_runtime_profile\n\
.previous\n\
");
-#else
+# else
# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\n\
.text\n\
.globl _dl_runtime_resolve\n\
@@ -226,6 +228,7 @@ _dl_runtime_profile:\n\
.size _dl_runtime_profile, .-_dl_runtime_profile\n\
.previous\n\
");
+# endif
#endif
/* Mask identifying addresses reserved for the user program,