mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 15:20:10 +00:00
* 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.
This commit is contained in:
parent
93b53ca279
commit
2ac9ca7300
@ -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.
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user