Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(440)

Unified Diff: third_party/android_platform/bionic/tools/relocation_packer/src/elf_file.h

Issue 1027823002: Port Android relocation packer to chromium build (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed two nugatory files Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/android_platform/bionic/tools/relocation_packer/src/elf_file.h
diff --git a/tools/relocation_packer/src/elf_file.h b/third_party/android_platform/bionic/tools/relocation_packer/src/elf_file.h
similarity index 78%
copy from tools/relocation_packer/src/elf_file.h
copy to third_party/android_platform/bionic/tools/relocation_packer/src/elf_file.h
index 6550274976590581ff7a91a65894ec619a5b0ead..73c31923fcc823662f996832b8debb731f62f259 100644
--- a/tools/relocation_packer/src/elf_file.h
+++ b/third_party/android_platform/bionic/tools/relocation_packer/src/elf_file.h
@@ -67,12 +67,13 @@ namespace relocation_packer {
// An ElfFile reads shared objects, and shuttles relative relocations
// between .rel.dyn or .rela.dyn and .android.rel.dyn or .android.rela.dyn
// sections.
+template <typename ELF>
class ElfFile {
public:
explicit ElfFile(int fd)
: fd_(fd), is_padding_relocations_(false), elf_(NULL),
relocations_section_(NULL), dynamic_section_(NULL),
- android_relocations_section_(NULL), relocations_type_(NONE) {}
+ relocations_type_(NONE) {}
~ElfFile() {}
// Set padding mode. When padding, PackRelocations() will not shrink
@@ -92,6 +93,10 @@ class ElfFile {
bool UnpackRelocations();
private:
+ enum relocations_type_t {
+ NONE = 0, REL, RELA
+ };
+
// Load a new ElfFile from a filedescriptor. If flushing, the file must
// be open for read/write. Returns true on successful ELF file load.
// |fd| is an open file descriptor for the shared object.
@@ -99,17 +104,34 @@ class ElfFile {
// Templated packer, helper for PackRelocations(). Rel type is one of
// ELF::Rel or ELF::Rela.
- template <typename Rel>
- bool PackTypedRelocations(const std::vector<Rel>& relocations);
+ bool PackTypedRelocations(std::vector<typename ELF::Rela>* relocations);
// Templated unpacker, helper for UnpackRelocations(). Rel type is one of
// ELF::Rel or ELF::Rela.
- template <typename Rel>
bool UnpackTypedRelocations(const std::vector<uint8_t>& packed);
// Write ELF file changes.
void Flush();
+ void AdjustRelativeRelocationTargets(typename ELF::Off hole_start,
+ ssize_t hole_size,
+ std::vector<typename ELF::Rela>* relocations);
+
+ static void ResizeSection(Elf* elf, Elf_Scn* section, size_t new_size,
+ typename ELF::Word new_sh_type, relocations_type_t relocations_type);
+
+ static void AdjustDynamicSectionForHole(Elf_Scn* dynamic_section,
+ typename ELF::Off hole_start,
+ ssize_t hole_size,
+ relocations_type_t relocations_type);
+
+ static void ConvertRelArrayToRelaVector(const typename ELF::Rel* rel_array, size_t rel_array_size,
+ std::vector<typename ELF::Rela>* rela_vector);
+
+ static void ConvertRelaVectorToRelVector(const std::vector<typename ELF::Rela>& rela_vector,
+ std::vector<typename ELF::Rel>* rel_vector);
+
+
// File descriptor opened on the shared object.
int fd_;
@@ -123,10 +145,9 @@ class ElfFile {
// Sections that we manipulate, assigned by Load().
Elf_Scn* relocations_section_;
Elf_Scn* dynamic_section_;
- Elf_Scn* android_relocations_section_;
// Relocation type found, assigned by Load().
- enum { NONE = 0, REL, RELA } relocations_type_;
+ relocations_type_t relocations_type_;
};
} // namespace relocation_packer

Powered by Google App Engine
This is Rietveld 408576698