summaryrefslogtreecommitdiffstats
path: root/linker
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@google.com>2009-11-17 16:16:52 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2009-11-17 16:16:52 -0800
commit83d3d7491a2d3870efd8d5be9281ee942f5fad07 (patch)
tree9a82b536c53a2d45e6f23aa827b3bd1822cc502b /linker
parent0493b61c1a23cbcf0edb4667ff84ab0152327cb2 (diff)
parentebf3ea006e5367fff93d2491eec24c4b1a633805 (diff)
downloadbionic-83d3d7491a2d3870efd8d5be9281ee942f5fad07.zip
bionic-83d3d7491a2d3870efd8d5be9281ee942f5fad07.tar.gz
bionic-83d3d7491a2d3870efd8d5be9281ee942f5fad07.tar.bz2
am ebf3ea00: am 34ea5117: Add support for R_ARM_REL32 to the dynamic linker.
Merge commit 'ebf3ea006e5367fff93d2491eec24c4b1a633805' * commit 'ebf3ea006e5367fff93d2491eec24c4b1a633805': Add support for R_ARM_REL32 to the dynamic linker.
Diffstat (limited to 'linker')
-rw-r--r--linker/linker.c7
-rw-r--r--linker/linker.h13
2 files changed, 14 insertions, 6 deletions
diff --git a/linker/linker.c b/linker/linker.c
index 1c2a28c..d61d0d7 100644
--- a/linker/linker.c
+++ b/linker/linker.c
@@ -1336,6 +1336,13 @@ static int reloc_library(soinfo *si, Elf32_Rel *rel, unsigned count)
reloc, sym_addr, sym_name);
*((unsigned*)reloc) += sym_addr;
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)
case R_386_JUMP_SLOT:
COUNT_RELOC(RELOC_ABSOLUTE);
diff --git a/linker/linker.h b/linker/linker.h
index 2e51338..ec01489 100644
--- a/linker/linker.h
+++ b/linker/linker.h
@@ -172,6 +172,13 @@ extern soinfo libdl_info;
#define R_ARM_JUMP_SLOT 22
#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)
#define R_386_32 1
@@ -214,12 +221,6 @@ extern soinfo libdl_info;
#define DT_PREINIT_ARRAYSZ 33
#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);
unsigned unload_library(soinfo *si);
Elf32_Sym *lookup_in_library(soinfo *si, const char *name);