summaryrefslogtreecommitdiffstats
path: root/llvm/tools/yaml2obj/yaml2macho.cpp
diff options
context:
space:
mode:
authorChris Bieneman <beanz@apple.com>2016-05-26 20:06:14 +0000
committerChris Bieneman <beanz@apple.com>2016-05-26 20:06:14 +0000
commit524243d61e9ed6f99be875cdc63071ff86b3a4a1 (patch)
tree6c6132369f2687f5bd68039f86303a7cf7b3b50b /llvm/tools/yaml2obj/yaml2macho.cpp
parentf1f3f93c9efe6a409bc79d17cd8be1f860a758b4 (diff)
downloadbcm5719-llvm-524243d61e9ed6f99be875cdc63071ff86b3a4a1.tar.gz
bcm5719-llvm-524243d61e9ed6f99be875cdc63071ff86b3a4a1.zip
[obj2yaml][yaml2obj] Support for MachO bind opcodes
This adds support for YAML round tripping dyld info bind opcodes. Bind opcodes can have signed or unsigned LEB128 data, and they can have symbols associated with them. llvm-svn: 270901
Diffstat (limited to 'llvm/tools/yaml2obj/yaml2macho.cpp')
-rw-r--r--llvm/tools/yaml2obj/yaml2macho.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/tools/yaml2obj/yaml2macho.cpp b/llvm/tools/yaml2obj/yaml2macho.cpp
index d24a08c6e54..a1f5dda9d9d 100644
--- a/llvm/tools/yaml2obj/yaml2macho.cpp
+++ b/llvm/tools/yaml2obj/yaml2macho.cpp
@@ -289,6 +289,23 @@ Error MachOWriter::writeLinkEditData(raw_ostream &OS) {
}
}
+ ZeroToOffset(OS, DyldInfoOnlyCmd->bind_off);
+
+ for (auto Opcode : LinkEdit.BindOpcodes) {
+ uint8_t OpByte = Opcode.Opcode | Opcode.Imm;
+ OS.write(reinterpret_cast<char *>(&OpByte), 1);
+ for (auto Data : Opcode.ULEBExtraData) {
+ encodeULEB128(Data, OS);
+ }
+ for (auto Data : Opcode.SLEBExtraData) {
+ encodeSLEB128(Data, OS);
+ }
+ if(!Opcode.Symbol.empty()) {
+ OS.write(Opcode.Symbol.data(), Opcode.Symbol.size());
+ OS.write("\0", 1);
+ }
+ }
+
// Fill to the end of the string table
ZeroToOffset(OS, SymtabCmd->stroff + SymtabCmd->strsize);
OpenPOWER on IntegriCloud