summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-08-24 20:29:43 +0000
committerUlrich Drepper <drepper@redhat.com>2006-08-24 20:29:43 +0000
commit2ac9ca73009c3f4ad0039f24eff5d2db4be6b488 (patch)
tree4a42286d2b3aec1d8ed8a6c2b704dfc9b7c1c3c9
parent93b53ca279865363a3352017c1d4456cc58e7de4 (diff)
* sysdeps/generic/ldsodefs.h (DL_ADDR_SYM_MATCH): For undefined
symbol require exact match (these are PLTs). * sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h (_dl_ppc64_addr_sym_match): Likewise.
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/generic/ldsodefs.h2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h4
3 files changed, 8 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index ec0015065a..483f5ac256 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2006-08-24 Ulrich Drepper <drepper@redhat.com>
+ * sysdeps/generic/ldsodefs.h (DL_ADDR_SYM_MATCH): For undefined
+ symbol require exact match (these are PLTs).
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h
+ (_dl_ppc64_addr_sym_match): Likewise.
+
[BZ #2683]
* elf/dl-addr.c (_dl_addr): Don't ignore all undefined symbols.
If symbol has a value use it.
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 2c3ce81dd0..b7d0f9b7e7 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -76,7 +76,7 @@ typedef struct link_map *lookup_t;
/* 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 \
+ && ((((SYM)->st_shndx == SHN_UNDEF || (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))
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h
index 1ead3dd63d..ac4a0d5aa9 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h
@@ -1,5 +1,5 @@
/* Run-time dynamic linker data structures for loaded ELF shared objects.
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -47,7 +47,7 @@ _dl_ppc64_addr_sym_match (const struct link_map *l, const ElfW(Sym) *sym,
return false;
}
}
- else if (sym->st_size == 0)
+ else if (sym->st_shndx == SHN_UNDEF || sym->st_size == 0)
{
if (addr != value)
return false;