Add support for R_ARM_REL32 to the dynamic linker.
Merged from eclair-mr2
This commit is contained in:
parent
cd5df2d92c
commit
fe62de1ad0
@ -1294,6 +1294,13 @@ static int reloc_library(soinfo *si, Elf32_Rel *rel, unsigned count)
|
|||||||
reloc, sym_addr, sym_name);
|
reloc, sym_addr, sym_name);
|
||||||
*((unsigned*)reloc) += sym_addr;
|
*((unsigned*)reloc) += sym_addr;
|
||||||
break;
|
break;
|
||||||
|
case R_ARM_REL32:
|
||||||
|
COUNT_RELOC(RELOC_RELATIVE);
|
||||||
|
MARK(rel->r_offset);
|
||||||
|
TRACE_TYPE(RELO, "%5d RELO REL32 %08x <- %08x - %08x %s\n", pid,
|
||||||
|
reloc, sym_addr, rel->r_offset, sym_name);
|
||||||
|
*((unsigned*)reloc) += sym_addr - rel->r_offset;
|
||||||
|
break;
|
||||||
#elif defined(ANDROID_X86_LINKER)
|
#elif defined(ANDROID_X86_LINKER)
|
||||||
case R_386_JUMP_SLOT:
|
case R_386_JUMP_SLOT:
|
||||||
COUNT_RELOC(RELOC_ABSOLUTE);
|
COUNT_RELOC(RELOC_ABSOLUTE);
|
||||||
|
@ -159,6 +159,13 @@ extern soinfo libdl_info;
|
|||||||
#define R_ARM_JUMP_SLOT 22
|
#define R_ARM_JUMP_SLOT 22
|
||||||
#define R_ARM_RELATIVE 23
|
#define R_ARM_RELATIVE 23
|
||||||
|
|
||||||
|
/* According to the AAPCS specification, we only
|
||||||
|
* need the above relocations. However, in practice,
|
||||||
|
* the following ones turn up from time to time.
|
||||||
|
*/
|
||||||
|
#define R_ARM_ABS32 2
|
||||||
|
#define R_ARM_REL32 3
|
||||||
|
|
||||||
#elif defined(ANDROID_X86_LINKER)
|
#elif defined(ANDROID_X86_LINKER)
|
||||||
|
|
||||||
#define R_386_32 1
|
#define R_386_32 1
|
||||||
@ -194,12 +201,6 @@ extern soinfo libdl_info;
|
|||||||
#define DT_PREINIT_ARRAYSZ 33
|
#define DT_PREINIT_ARRAYSZ 33
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* in theory we only need the above relative relocations,
|
|
||||||
but in practice the following one turns up from time
|
|
||||||
to time. fushigi na.
|
|
||||||
*/
|
|
||||||
#define R_ARM_ABS32 2
|
|
||||||
|
|
||||||
soinfo *find_library(const char *name);
|
soinfo *find_library(const char *name);
|
||||||
unsigned unload_library(soinfo *si);
|
unsigned unload_library(soinfo *si);
|
||||||
Elf32_Sym *lookup_in_library(soinfo *si, const char *name);
|
Elf32_Sym *lookup_in_library(soinfo *si, const char *name);
|
||||||
|
Loading…
Reference in New Issue
Block a user