aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/hppa/dl-lookupcfg.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-12-18 04:02:31 +0000
committerUlrich Drepper <drepper@redhat.com>2003-12-18 04:02:31 +0000
commit592f26a3ed6e74aad8ff65eec9c139a6bc4aa89e (patch)
tree3eabb471cd2153b059302d3dedc628241fbb9071 /sysdeps/hppa/dl-lookupcfg.h
parent4ae4facccf1286dae59ccc4758b64a76ab985aff (diff)
downloadglibc-592f26a3ed6e74aad8ff65eec9c139a6bc4aa89e.zip
glibc-592f26a3ed6e74aad8ff65eec9c139a6bc4aa89e.tar.gz
glibc-592f26a3ed6e74aad8ff65eec9c139a6bc4aa89e.tar.bz2
Update.
2003-12-17 Carlos O'Donell <carlos@baldric.uwo.ca> * sysdeps/hppa/fpu/fclrexcpt.c (feclearexcept): Right shift FE_ALL_EXCEPT before complimenting. * sysdeps/hppa/fpu/fegetenv.c (fegetenv): Use asm 'ma,' completer, and gcc '+r' constraint. * sysdeps/hppa/fpu/feholdexcpt.c (feholdexcept): Likewise. * sysdeps/hppa/fpu/fesetenv.c (fesetenv): Likewise. * sysdeps/hppa/fpu/feupdateenv.c (feupdateenv): Read raised exception bits, OR with envp, pass to fesetenv. * sysdeps/hppa/fpu/fraiseexcpt.c (feraiseexcept): Add delayed exception flushing, FE_UNDERFLOW is DBL_MIN/3.0, FE_INEXACT is triggered by M_PI/69.69 converted to single precision. * sysdeps/hppa/fpu/fsetexcptflg.c (fesetexceptflag): Set enable bits not raised exception bits. * sysdeps/hppa/Makefile: Add dl-symaddr and dl-fptr to the correct build strings. * sysdeps/hppa/dl-fptr.h: New file. * sysdeps/hppa/dl-fptr.c: Removed. * sysdeps/hppa/dl-symaddr.c (_dl_symbol_address): Use _dl_make_ftpr, remove const qualifier for map. (_dl_function_address): Removed. * sysdeps/hppa/dl-lookupcfg.h: DL_LOOKUP_ADDRESS must clear PLABEL32 bits, define DL_AUTO_FUNCTION_ADDRESS and DL_STATIC_FUNCTION_ADDRESS, DL_DT_INIT_ADDRESS and DL_DT_FINI_ADDRESS use the previous two macros. * misc/mntent_r.c: Change encoding to match recently changed decoder.
Diffstat (limited to 'sysdeps/hppa/dl-lookupcfg.h')
-rw-r--r--sysdeps/hppa/dl-lookupcfg.h33
1 files changed, 25 insertions, 8 deletions
diff --git a/sysdeps/hppa/dl-lookupcfg.h b/sysdeps/hppa/dl-lookupcfg.h
index d76ea12..d393b3e 100644
--- a/sysdeps/hppa/dl-lookupcfg.h
+++ b/sysdeps/hppa/dl-lookupcfg.h
@@ -26,27 +26,44 @@
/* Forward declaration. */
struct link_map;
-void *_dl_symbol_address (const struct link_map *map, const ElfW(Sym) *ref);
+void *_dl_symbol_address (struct link_map *map, const ElfW(Sym) *ref);
#define DL_SYMBOL_ADDRESS(map, ref) _dl_symbol_address(map, ref)
Elf32_Addr _dl_lookup_address (const void *address);
-#define DL_LOOKUP_ADDRESS(addr) _dl_lookup_address (addr)
+/* Clear the bottom two bits so generic code can find the fdesc entry */
+#define DL_LOOKUP_ADDRESS(addr) \
+ (_dl_lookup_address ((void *)((unsigned long)addr & ~3)))
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_AUTO_FUNCTION_ADDRESS(map, addr) \
+({ \
+ unsigned int fptr[2]; \
+ fptr[0] = (unsigned int) (addr); \
+ fptr[1] = (map)->l_info[DT_PLTGOT]->d_un.d_ptr; \
+ /* Set bit 30 to indicate to $$dyncall that this is a PLABEL. */ \
+ (ElfW(Addr))((unsigned int)fptr | 2); \
+})
+
+#define DL_STATIC_FUNCTION_ADDRESS(map, addr) \
+({ \
+ static unsigned int fptr[2]; \
+ fptr[0] = (unsigned int) (addr); \
+ fptr[1] = (map)->l_info[DT_PLTGOT]->d_un.d_ptr; \
+ /* Set bit 30 to indicate to $$dyncall that this is a PLABEL. */ \
+ (ElfW(Addr))((unsigned int)fptr | 2); \
+})
-#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. */
+ descriptor. */
#define DL_DT_INIT_ADDRESS(map, addr) \
- ((Elf32_Addr)(addr) & 2 ? (addr) : DL_FUNCTION_ADDRESS (map, addr))
+ ((Elf32_Addr)(addr) & 2 ? (addr) : DL_AUTO_FUNCTION_ADDRESS (map, addr))
#define DL_DT_FINI_ADDRESS(map, addr) \
- ((Elf32_Addr)(addr) & 2 ? (addr) : DL_FUNCTION_ADDRESS (map, addr))
+ ((Elf32_Addr)(addr) & 2 ? (addr) : DL_AUTO_FUNCTION_ADDRESS (map, addr))
+