diff options
author | Joseph Myers <joseph@codesourcery.com> | 2014-02-11 22:33:07 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2014-02-11 22:33:07 +0000 |
commit | cb4a292812c8b5547d142d894f2305259e67fa61 (patch) | |
tree | d999cde2ce986bf7af5daae7056a825184e6867c /elf | |
parent | 7e6424e343b5213ae12bae83c0d018f4fcafd5cd (diff) | |
download | glibc-cb4a292812c8b5547d142d894f2305259e67fa61.tar.gz |
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.c | 8 |
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; |