[Top][All Lists]
[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);
}
- PA: dl_function_address,
Matthew Wilcox <=