bug-glibc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

PA: dl_function_address


From: Matthew Wilcox
Subject: PA: dl_function_address
Date: Fri, 20 Apr 2001 14:24:25 -0600

2001-04-20  Alan Modra  <address@hidden>

        * sysdeps/hppa/dl-lookupcfg.h (_dl_function_address): Prototype.
        (DL_FUNCTION_ADDRESS): Define.
        (DL_DT_INIT_ADDRESS): Define.
        (DL_DT_FINI_ADDRESS): Define.

        * sysdeps/hppa/Versions: Add _dl_function_address.

        * sysdeps/hppa/dl-machine.h (ELF_MACHINE_START_ADDRESS): Define.

        * sysdeps/hppa/dl-symaddr.c (_dl_start_address): Rename to
        _dl_function_address.

diff -urNx CVS glibc-2.2.1/sysdeps/hppa/Versions glibc/sysdeps/hppa/Versions
--- glibc-2.2.1/sysdeps/hppa/Versions   Thu Nov 16 13:00:28 2000
+++ glibc/sysdeps/hppa/Versions Wed Nov 22 01:32:21 2000
@@ -2,5 +2,6 @@
   GLIBC_2.2 {
     # hppa specific functions in the dynamic linker, but used by libc.so.
     _dl_symbol_address; _dl_unmap; _dl_lookup_address;
+    _dl_function_address;
   }
 }
diff -urNx CVS glibc-2.2.1/sysdeps/hppa/dl-lookupcfg.h 
glibc/sysdeps/hppa/dl-lookupcfg.h
--- glibc-2.2.1/sysdeps/hppa/dl-lookupcfg.h     Thu Nov 16 13:00:28 2000
+++ glibc/sysdeps/hppa/dl-lookupcfg.h   Wed Nov 22 01:32:21 2000
@@ -34,3 +34,16 @@
 void _dl_unmap (struct link_map *map);
 
 #define DL_UNMAP(map) _dl_unmap (map)
+
+extern Elf32_Addr _dl_function_address (const struct link_map *map,
+                                       Elf32_Addr start);
+
+#define DL_FUNCTION_ADDRESS(map, addr) _dl_function_address (map, addr)
+
+/* The test for "addr & 2" below is to accomodate old binaries which
+   violated the ELF ABI by pointing DT_INIT and DT_FINI at a function
+   pointer.  */
+#define DL_DT_INIT_ADDRESS(map, addr) \
+  ((Elf32_Addr)(addr) & 2 ? (addr) : DL_FUNCTION_ADDRESS (map, addr))
+#define DL_DT_FINI_ADDRESS(map, addr) \
+  ((Elf32_Addr)(addr) & 2 ? (addr) : DL_FUNCTION_ADDRESS (map, addr))
diff -urNx CVS glibc-2.2.1/sysdeps/hppa/dl-machine.h 
glibc/sysdeps/hppa/dl-machine.h
--- glibc-2.2.1/sysdeps/hppa/dl-machine.h       Thu Nov 16 13:00:28 2000
+++ glibc/sysdeps/hppa/dl-machine.h     Thu Mar 22 21:49:15 2001
@@ -447,6 +474,10 @@
 
 /* We only use RELA. */
 #define ELF_MACHINE_NO_REL 1
+
+/* Return the address of the entry point. */
+#define ELF_MACHINE_START_ADDRESS(map, start) \
+  DL_FUNCTION_ADDRESS (map, start)
 
 #endif /* !dl_machine_h */
 
diff -urNx CVS glibc-2.2.1/sysdeps/hppa/dl-symaddr.c 
glibc/sysdeps/hppa/dl-symaddr.c
--- glibc-2.2.1/sysdeps/hppa/dl-symaddr.c       Thu Nov 16 13:00:28 2000
+++ glibc/sysdeps/hppa/dl-symaddr.c     Wed Nov 22 01:32:21 2000
@@ -33,7 +33,7 @@
 }
 
 ElfW(Addr)
-_dl_start_address (const struct link_map *map, ElfW(Addr) start)
+_dl_function_address (const struct link_map *map, ElfW(Addr) start)
 {
   return __hppa_make_fptr (map, start, &__fptr_root, NULL);
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]