summaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-02-11 22:33:07 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-02-11 22:33:07 +0000
commitcb4a292812c8b5547d142d894f2305259e67fa61 (patch)
treed999cde2ce986bf7af5daae7056a825184e6867c /elf
parent7e6424e343b5213ae12bae83c0d018f4fcafd5cd (diff)
Merge MIPS dl-lookup.c into generic file.
MIPS has its own version of dl-lookup.c to deal with differences between undefined symbol semantics in the PIC and non-PIC ABIs. This is often liable to get out of date with respect to the generic file (for example, the recent __builtin_expect changes didn't cover ports, and it's not obvious to anyone changing dl-lookup.c that there would be architecture-specific versions). This patch adds a macro that dl-machine.h can define that is used in the appropriate place in dl-lookup.c, so that MIPS no longer needs its own version of that file. Tested for mips64 that the only changes to disassembly of installed shared libraries appear to be ld.so changes attributable to different line numbers and paths in assertions. * elf/dl-lookup.c (ELF_MACHINE_SYM_NO_MATCH): Define if not already defined. (do_lookup_x): Use ELF_MACHINE_SYM_NO_MATCH. * sysdeps/mips/dl-lookup.c: Remove. * sysdeps/mips/dl-machine.h (ELF_MACHINE_SYM_NO_MATCH): New macro.
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-lookup.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 690f4046c5..0b43db8d9b 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -31,6 +31,13 @@
#include <assert.h>
+/* Return nonzero if do_lookup_x:check_match should consider SYM to
+ fail to match a symbol reference for some machine-specific
+ reason. */
+#ifndef ELF_MACHINE_SYM_NO_MATCH
+# define ELF_MACHINE_SYM_NO_MATCH(sym) 0
+#endif
+
#define VERSTAG(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (tag))
/* We need this string more than once. */
@@ -133,6 +140,7 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
assert (ELF_RTYPE_CLASS_PLT == 1);
if (__builtin_expect ((sym->st_value == 0 /* No value. */
&& stt != STT_TLS)
+ || ELF_MACHINE_SYM_NO_MATCH (sym)
|| (type_class & (sym->st_shndx == SHN_UNDEF)),
0))
return NULL;