Allow the dynamic linker to relocate references to thumb symbols in NDK libraries.
The lowest bit of the symbol's value should be ignored when looking at UNDEF symbols for correctness. It is used as an ARM/Thumb flag by the linker.
This commit is contained in:
parent
9a96aaa8ef
commit
3c99876116
@ -1240,9 +1240,13 @@ static int reloc_library(soinfo *si, Elf32_Rel *rel, unsigned count)
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
if ((s->st_shndx == SHN_UNDEF) && (s->st_value != 0)) {
|
||||
DL_ERR("%5d In '%s', shndx=%d && value=0x%08x. We do not "
|
||||
"handle this yet", pid, si->name, s->st_shndx,
|
||||
// st_shndx==SHN_UNDEF means an undefined symbol.
|
||||
// st_value should be 0 then, except that the low bit of st_value is
|
||||
// used to indicate whether the symbol points to an ARM or thumb function,
|
||||
// and should be ignored in the following check.
|
||||
if ((s->st_shndx == SHN_UNDEF) && ((s->st_value & ~1) != 0)) {
|
||||
DL_ERR("%5d In '%s', symbol=%s shndx=%d && value=0x%08x. We do not "
|
||||
"handle this yet", pid, si->name, sym_name, s->st_shndx,
|
||||
s->st_value);
|
||||
return -1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user