about summary refs log tree commit diff
path: root/sysdeps/generic/ldsodefs.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2005-08-30 22:48:53 +0000
committerUlrich Drepper <drepper@redhat.com>2005-08-30 22:48:53 +0000
commit0b3cf801428e0d246e19ef5fbae185b949347aa3 (patch)
tree697aa0b6eeed38e26e6ff5eaed31bc7ec9ff3619 /sysdeps/generic/ldsodefs.h
parent4fb5ab741ac5b498fd0591d82b5d225abac7b8ce (diff)
downloadglibc-0b3cf801428e0d246e19ef5fbae185b949347aa3.tar.gz
glibc-0b3cf801428e0d246e19ef5fbae185b949347aa3.tar.xz
glibc-0b3cf801428e0d246e19ef5fbae185b949347aa3.zip
* sysdeps/ieee754/flt-32/e_hypotf.c [!__STDC__]: Fix function name.
2005-08-01  Bob Wilson  <bob.wilson@acm.org>
        Richard Sandiford  <richard@codesourcery.com>

	* sysdeps/ieee754/flt-32/e_hypotf.c (__ieee754_hypotf): Add missing
	exponent bias to the value for 2^126.

2005-08-30  Jakub Jelinek  <jakub@redhat.com>
	    Alan Modra  <amodra@bigpond.net.au>

	* elf/dl-addr.c (_dl_addr): Use DL_ADDR_SYM_MATCH macro.
	* sysdeps/generic/ldsodefs.h (DL_ADDR_SYM_MATCH): Define.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h: New file.
Diffstat (limited to 'sysdeps/generic/ldsodefs.h')
-rw-r--r--sysdeps/generic/ldsodefs.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index a24c2ff58e..191ae4d4fb 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -62,7 +62,7 @@ typedef struct link_map *lookup_t;
 # define LOOKUP_VALUE(map) map
 # define LOOKUP_VALUE_ADDRESS(map) ((map) ? (map)->l_addr : 0)
 
-/* on some architectures a pointer to a function is not just a pointer
+/* On some architectures a pointer to a function is not just a pointer
    to the actual code of the function but rather an architecture
    specific descriptor. */
 #ifndef ELF_FUNCTION_PTR_IS_SPECIAL
@@ -73,6 +73,14 @@ typedef struct link_map *lookup_t;
 # define DL_DT_FINI_ADDRESS(map, start) (start)
 #endif
 
+/* On some architectures dladdr can't use st_size of all symbols this way.  */
+#define DL_ADDR_SYM_MATCH(L, SYM, MATCHSYM, ADDR) \
+  ((ADDR) >= (L)->l_addr + (SYM)->st_value				\
+   && (((SYM)->st_size == 0						\
+	&& (ADDR) == (L)->l_addr + (SYM)->st_value)			\
+       || (ADDR) < (L)->l_addr + (SYM)->st_value + (SYM)->st_size)	\
+   && ((MATCHSYM) == NULL || (MATCHSYM)->st_value < (SYM)->st_value))
+
 /* Unmap a loaded object, called by _dl_close (). */
 #ifndef DL_UNMAP_IS_SPECIAL
 # define DL_UNMAP(map) \