summaryrefslogtreecommitdiffstats
path: root/third_party/android_crazy_linker/src/src/crazy_linker_elf_relocations.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/android_crazy_linker/src/src/crazy_linker_elf_relocations.h')
-rw-r--r--third_party/android_crazy_linker/src/src/crazy_linker_elf_relocations.h51
1 files changed, 42 insertions, 9 deletions
diff --git a/third_party/android_crazy_linker/src/src/crazy_linker_elf_relocations.h b/third_party/android_crazy_linker/src/src/crazy_linker_elf_relocations.h
index e3ef893..edf2f4b 100644
--- a/third_party/android_crazy_linker/src/src/crazy_linker_elf_relocations.h
+++ b/third_party/android_crazy_linker/src/src/crazy_linker_elf_relocations.h
@@ -56,11 +56,43 @@ class ElfRelocations {
size_t size);
private:
- bool ApplyRelocs(const ELF::Rel* relocs,
- size_t relocs_count,
- const ElfSymbols* symbols,
- SymbolResolver* resolver,
- Error* error);
+ bool ResolveSymbol(unsigned rel_type,
+ unsigned rel_symbol,
+ const ElfSymbols* symbols,
+ SymbolResolver* resolver,
+ ELF::Addr reloc,
+ ELF::Addr* sym_addr,
+ Error* error);
+ bool ApplyRelaReloc(const ELF::Rela* rela,
+ ELF::Addr sym_addr,
+ bool resolved,
+ Error* error);
+ bool ApplyRelReloc(const ELF::Rel* rel,
+ ELF::Addr sym_addr,
+ bool resolved,
+ Error* error);
+ bool ApplyRelaRelocs(const ELF::Rela* relocs,
+ size_t relocs_count,
+ const ElfSymbols* symbols,
+ SymbolResolver* resolver,
+ Error* error);
+ bool ApplyRelRelocs(const ELF::Rel* relocs,
+ size_t relocs_count,
+ const ElfSymbols* symbols,
+ SymbolResolver* resolver,
+ Error* error);
+ void AdjustRelocation(ELF::Word rel_type,
+ ELF::Addr src_reloc,
+ size_t dst_delta,
+ size_t map_delta);
+ void RelocateRela(size_t src_addr,
+ size_t dst_addr,
+ size_t map_addr,
+ size_t size);
+ void RelocateRel(size_t src_addr,
+ size_t dst_addr,
+ size_t map_addr,
+ size_t size);
#if defined(__mips__)
bool RelocateMipsGot(const ElfSymbols* symbols,
@@ -72,12 +104,13 @@ class ElfRelocations {
size_t phdr_count_;
size_t load_bias_;
- const ELF::Rel* plt_relocations_;
- size_t plt_relocations_count_;
+ ELF::Addr relocations_type_;
+ ELF::Addr plt_relocations_;
+ size_t plt_relocations_size_;
ELF::Addr* plt_got_;
- const ELF::Rel* relocations_;
- size_t relocations_count_;
+ ELF::Addr relocations_;
+ size_t relocations_size_;
#if defined(__mips__)
// MIPS-specific relocation fields.