提交 71392a91 编写于 作者: R Rich Felker

generalize mips-specific reloc code not to hard-code sym/type encoding

this change is made in preparation for adding the mips64 port, which
needs a 64-bit (and mips64-specific) form of the R_INFO macro, but
it's a better abstraction anyway.

based on part of the mips64 port patch by Mahesh Bodapati and Jaydeep
Patil of Imagination Technologies.
上级 b023c03b
...@@ -1134,7 +1134,7 @@ static void do_mips_relocs(struct dso *p, size_t *got) ...@@ -1134,7 +1134,7 @@ static void do_mips_relocs(struct dso *p, size_t *got)
Sym *sym = p->syms + j; Sym *sym = p->syms + j;
rel[0] = (unsigned char *)got - base; rel[0] = (unsigned char *)got - base;
for (i-=j; i; i--, sym++, rel[0]+=sizeof(size_t)) { for (i-=j; i; i--, sym++, rel[0]+=sizeof(size_t)) {
rel[1] = sym-p->syms << 8 | R_MIPS_JUMP_SLOT; rel[1] = R_INFO(sym-p->syms, R_MIPS_JUMP_SLOT);
do_relocs(p, rel, sizeof rel, 2); do_relocs(p, rel, sizeof rel, 2);
} }
} }
......
...@@ -11,12 +11,14 @@ typedef Elf32_Phdr Phdr; ...@@ -11,12 +11,14 @@ typedef Elf32_Phdr Phdr;
typedef Elf32_Sym Sym; typedef Elf32_Sym Sym;
#define R_TYPE(x) ((x)&255) #define R_TYPE(x) ((x)&255)
#define R_SYM(x) ((x)>>8) #define R_SYM(x) ((x)>>8)
#define R_INFO ELF32_R_INFO
#else #else
typedef Elf64_Ehdr Ehdr; typedef Elf64_Ehdr Ehdr;
typedef Elf64_Phdr Phdr; typedef Elf64_Phdr Phdr;
typedef Elf64_Sym Sym; typedef Elf64_Sym Sym;
#define R_TYPE(x) ((x)&0x7fffffff) #define R_TYPE(x) ((x)&0x7fffffff)
#define R_SYM(x) ((x)>>32) #define R_SYM(x) ((x)>>32)
#define R_INFO ELF64_R_INFO
#endif #endif
/* These enum constants provide unmatchable default values for /* These enum constants provide unmatchable default values for
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册