symbol require exact match (these are PLTs).
* sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h
(_dl_ppc64_addr_sym_match): Likewise.
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.
/* 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))
/* 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
return false;
}
}
- else if (sym->st_size == 0)
+ else if (sym->st_shndx == SHN_UNDEF || sym->st_size == 0)
{
if (addr != value)
return false;