From: Ulrich Drepper Date: Thu, 24 Aug 2006 20:29:43 +0000 (+0000) Subject: * sysdeps/generic/ldsodefs.h (DL_ADDR_SYM_MATCH): For undefined X-Git-Tag: cvs/fedora-glibc-20060825T0639~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ac9ca73009c3f4ad0039f24eff5d2db4be6b488;p=thirdparty%2Fglibc.git * 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. --- diff --git a/ChangeLog b/ChangeLog index ec0015065af..483f5ac2566 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2006-08-24 Ulrich Drepper + * 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 2c3ce81dd0b..b7d0f9b7e7d 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 1ead3dd63df..ac4a0d5aa9e 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;