summaryrefslogtreecommitdiffstats
path: root/tools/relocation_packer/src/packer.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/relocation_packer/src/packer.h')
-rw-r--r--tools/relocation_packer/src/packer.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/tools/relocation_packer/src/packer.h b/tools/relocation_packer/src/packer.h
new file mode 100644
index 0000000..63f50e2
--- /dev/null
+++ b/tools/relocation_packer/src/packer.h
@@ -0,0 +1,37 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Pack relative relocations into a more compact form.
+
+#ifndef TOOLS_RELOCATION_PACKER_SRC_PACKER_H_
+#define TOOLS_RELOCATION_PACKER_SRC_PACKER_H_
+
+#include <stdint.h>
+#include <vector>
+
+#include "elf.h"
+
+namespace relocation_packer {
+
+// A RelocationPacker packs vectors of relocations into more
+// compact forms, and unpacks them to reproduce the pre-packed data.
+template <typename ELF>
+class RelocationPacker {
+ public:
+ // Pack relocations into a more compact form.
+ // |relocations| is a vector of relocation structs.
+ // |packed| is the vector of packed bytes into which relocations are packed.
+ static void PackRelocations(const std::vector<typename ELF::Rela>& relocations,
+ std::vector<uint8_t>* packed);
+
+ // Unpack relocations from their more compact form.
+ // |packed| is the vector of packed relocations.
+ // |relocations| is a vector of unpacked relocation structs.
+ static void UnpackRelocations(const std::vector<uint8_t>& packed,
+ std::vector<typename ELF::Rela>* relocations);
+};
+
+} // namespace relocation_packer
+
+#endif // TOOLS_RELOCATION_PACKER_SRC_PACKER_H_