aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--elf/dl-reloc.c4
-rw-r--r--elf/dl-runtime.c8
3 files changed, 11 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index de1cb9d..52ad654 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2000-04-04 Ulrich Drepper <drepper@redhat.com>
+ * elf/dl-runtime.c (fixup): Correct handling of symbols marked
+ STV_HIDDEN and STV_INTERNAL during lookup.
+ (profile_fixup): Likewise.
+ * elf/dl-reloc.c (RESOLVE): Likewise.
+
* iconv/skeleton.c (FUNCTION_NAME): Reorder initialization of
unaligned so that it compiles for system which need unaligned
access handling.
diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c
index 8d18073..fa8e31b 100644
--- a/elf/dl-reloc.c
+++ b/elf/dl-reloc.c
@@ -71,7 +71,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
/* This macro is used as a callback from the ELF_DYNAMIC_RELOCATE code. */
#define RESOLVE(ref, version, flags) \
- (ELFW(ST_VISIBILITY) ((*ref)->st_other) != STV_PROTECTED \
+ (__builtin_expect (ELFW(ST_VISIBILITY) ((*ref)->st_other), 0) == 0 \
? ((version) != NULL && (version)->hash != 0 \
? _dl_lookup_versioned_symbol (strtab + (*ref)->st_name, l, (ref), \
scope, (version), (flags)) \
@@ -134,7 +134,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
#ifdef CLEAR_CACHE
CLEAR_CACHE (mapstart, mapend);
-#endif
+#endif
}
}
}
diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c
index ab944a8..d76b513 100644
--- a/elf/dl-runtime.c
+++ b/elf/dl-runtime.c
@@ -68,9 +68,9 @@ fixup (
/* Sanity check that we're really looking at a PLT relocation. */
assert (ELFW(R_TYPE)(reloc->r_info) == ELF_MACHINE_JMP_SLOT);
- /* Look up the target symbol. If the symbol is marked STV_PROTECTED
- don't look in the global scope. */
- if (ELFW(ST_VISIBILITY) (sym->st_other) != STV_PROTECTED)
+ /* Look up the target symbol. If the normal lookup rules are not
+ used don't look in the global scope. */
+ if (__builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0)
{
switch (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL)
{
@@ -153,7 +153,7 @@ profile_fixup (
/* Look up the target symbol. If the symbol is marked STV_PROTEXTED
don't look in the global scope. */
- if (ELFW(ST_VISIBILITY) (sym->st_other) != STV_PROTECTED)
+ if (__builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0)
{
switch (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL)
{