1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Pack relative relocations into a more compact form. 6 7 #ifndef TOOLS_RELOCATION_PACKER_SRC_PACKER_H_ 8 #define TOOLS_RELOCATION_PACKER_SRC_PACKER_H_ 9 10 #include <stdint.h> 11 #include <vector> 12 13 #include "elf.h" 14 15 namespace relocation_packer { 16 17 // A RelocationPacker packs vectors of relocations into more 18 // compact forms, and unpacks them to reproduce the pre-packed data. 19 template <typename ELF> 20 class RelocationPacker { 21 public: 22 // Pack relocations into a more compact form. 23 // |relocations| is a vector of relocation structs. 24 // |packed| is the vector of packed bytes into which relocations are packed. 25 static void PackRelocations(const std::vector<typename ELF::Rela>& relocations, 26 std::vector<uint8_t>* packed); 27 28 // Unpack relocations from their more compact form. 29 // |packed| is the vector of packed relocations. 30 // |relocations| is a vector of unpacked relocation structs. 31 static void UnpackRelocations(const std::vector<uint8_t>& packed, 32 std::vector<typename ELF::Rela>* relocations); 33 }; 34 35 } // namespace relocation_packer 36 37 #endif // TOOLS_RELOCATION_PACKER_SRC_PACKER_H_ 38