MIPS support to the linker
Change-Id: I37ec2d6c51d82bb9e9dbfef4b38c85366bead255
Signed-off-by: Chris Dearman <chris@mips.com>
Signed-off-by: Raghu Gandham <raghu@mips.com>
Signed-off-by: Bhanu Chetlapalli <bhanu@mips.com>
diff --git a/linker/linker.h b/linker/linker.h
index 0956ac5..cb2eab6 100644
--- a/linker/linker.h
+++ b/linker/linker.h
@@ -150,11 +150,19 @@
void (*init_func)(void);
void (*fini_func)(void);
-#ifdef ANDROID_ARM_LINKER
+#if defined(ANDROID_ARM_LINKER)
/* ARM EABI section used for stack unwinding. */
unsigned *ARM_exidx;
unsigned ARM_exidx_count;
+#elif defined(ANDROID_MIPS_LINKER)
+#if 0
+ /* not yet */
+ unsigned *mips_pltgot
#endif
+ unsigned mips_symtabno;
+ unsigned mips_local_gotno;
+ unsigned mips_gotsym;
+#endif /* ANDROID_*_LINKER */
unsigned refcount;
struct link_map linkmap;
@@ -169,29 +177,31 @@
extern soinfo libdl_info;
-#ifdef ANDROID_ARM_LINKER
+#include <asm/elf.h>
+
+#if defined(ANDROID_ARM_LINKER)
+
+// These aren't defined in <arch-arm/asm/elf.h>.
+#define R_ARM_REL32 3
#define R_ARM_COPY 20
#define R_ARM_GLOB_DAT 21
#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_MIPS_LINKER)
+
+// These aren't defined in <arch-arm/mips/elf.h>.
+#define R_MIPS_JUMP_SLOT 127
+
+#define DT_MIPS_PLTGOT 0x70000032
+#define DT_MIPS_RWPLT 0x70000034
#elif defined(ANDROID_X86_LINKER)
-#define R_386_32 1
-#define R_386_PC32 2
-#define R_386_GLOB_DAT 6
-#define R_386_JUMP_SLOT 7
-#define R_386_RELATIVE 8
+// x86 has everything it needs in <arch-arm/x86/elf.h>.
-#endif
+#endif /* ANDROID_*_LINKER */
#ifndef DT_INIT_ARRAY
#define DT_INIT_ARRAY 25
@@ -227,10 +237,10 @@
Elf32_Sym *soinfo_lookup(soinfo *si, const char *name);
void soinfo_call_constructors(soinfo *si);
-#ifdef ANDROID_ARM_LINKER
+#if defined(ANDROID_ARM_LINKER)
typedef long unsigned int *_Unwind_Ptr;
_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int *pcount);
-#elif defined(ANDROID_X86_LINKER)
+#elif defined(ANDROID_X86_LINKER) || defined(ANDROID_MIPS_LINKER)
int dl_iterate_phdr(int (*cb)(struct dl_phdr_info *, size_t, void *), void *);
#endif