diff options
| author | Chris Bieneman <beanz@apple.com> | 2016-05-26 20:06:14 +0000 |
|---|---|---|
| committer | Chris Bieneman <beanz@apple.com> | 2016-05-26 20:06:14 +0000 |
| commit | 524243d61e9ed6f99be875cdc63071ff86b3a4a1 (patch) | |
| tree | 6c6132369f2687f5bd68039f86303a7cf7b3b50b /llvm/tools/yaml2obj/yaml2macho.cpp | |
| parent | f1f3f93c9efe6a409bc79d17cd8be1f860a758b4 (diff) | |
| download | bcm5719-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.cpp | 17 |
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); |

