Clean up linker architecture macros.

We don't need our own architecture macros; the standard ones will do.

This patch also fixes some __x86_64__ tests to be USE_RELA tests instead,
because they're not actually x86_64-specific.

I've cleaned up architecture-specific code slightly so where possible
all the code corresponding to a particular architecture is together.

This patch also fixes a bug in LP64 DT_PLTGOT handling, which should be
an error rather than falling through into DT_DEBUG! There was another #ifdef
bug where we'd only report unexpected DT_ entries on MIPS.

Change-Id: Id1d04e372611f641c1aa278a18e379f28af9eaf5
This commit is contained in:
Elliott Hughes
2013-10-25 17:38:02 -07:00
parent 93fcfeee2b
commit 4eeb1f12a8
8 changed files with 147 additions and 174 deletions

View File

@@ -97,6 +97,11 @@ struct r_debug {
typedef void (*linker_function_t)();
// Android uses REL for 32-bit but only uses RELA for 64-bit.
#if defined(__LP64__)
#define USE_RELA 1
#endif
struct soinfo {
public:
char name[SOINFO_NAME_LEN];
@@ -128,15 +133,19 @@ struct soinfo {
unsigned* bucket;
unsigned* chain;
#if defined(ANDROID_X86_64_LINKER)
Elf_Rela *plt_rela;
#if !defined(__LP64__)
// This is only used by 32-bit MIPS, but needs to be here for
// all 32-bit architectures to preserve binary compatibility.
unsigned* plt_got;
#endif
#if defined(USE_RELA)
Elf_Rela* plt_rela;
size_t plt_rela_count;
Elf_Rela *rela;
Elf_Rela* rela;
size_t rela_count;
#else
unsigned* plt_got;
Elf_Rel* plt_rel;
size_t plt_rel_count;
@@ -155,11 +164,11 @@ struct soinfo {
linker_function_t init_func;
linker_function_t fini_func;
#if defined(ANDROID_ARM_LINKER)
#if defined(__arm__)
// ARM EABI section used for stack unwinding.
unsigned* ARM_exidx;
size_t ARM_exidx_count;
#elif defined(ANDROID_MIPS_LINKER)
#elif defined(__mips__)
unsigned mips_symtabno;
unsigned mips_local_gotno;
unsigned mips_gotsym;