diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2021-12-02 21:49:08 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2022-06-04 11:59:04 +0000 |
| commit | 574b7079b96703a748f89ef5adb7dc3e26b8f7fc (patch) | |
| tree | 195000196b1e0cc13dea43258fa240e006f48184 /contrib/llvm-project/llvm/lib/ObjectYAML/MachOEmitter.cpp | |
| parent | 1f6fd64fe9c996b4795ee4a6c66b8f9216747560 (diff) | |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ObjectYAML/MachOEmitter.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/ObjectYAML/MachOEmitter.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/ObjectYAML/MachOEmitter.cpp b/contrib/llvm-project/llvm/lib/ObjectYAML/MachOEmitter.cpp index c653c29ec9a7..e5ffb12df434 100644 --- a/contrib/llvm-project/llvm/lib/ObjectYAML/MachOEmitter.cpp +++ b/contrib/llvm-project/llvm/lib/ObjectYAML/MachOEmitter.cpp @@ -54,6 +54,7 @@ private: void writeNameList(raw_ostream &OS); void writeStringTable(raw_ostream &OS); void writeExportTrie(raw_ostream &OS); + void writeDynamicSymbolTable(raw_ostream &OS); void dumpExportEntry(raw_ostream &OS, MachOYAML::ExportEntry &Entry); void ZeroToOffset(raw_ostream &OS, size_t offset); @@ -482,6 +483,7 @@ void MachOWriter::writeLinkEditData(raw_ostream &OS) { MachO::dyld_info_command *DyldInfoOnlyCmd = 0; MachO::symtab_command *SymtabCmd = 0; + MachO::dysymtab_command *DSymtabCmd = 0; for (auto &LC : Obj.LoadCommands) { switch (LC.Data.load_command_data.cmd) { case MachO::LC_SYMTAB: @@ -504,6 +506,11 @@ void MachOWriter::writeLinkEditData(raw_ostream &OS) { WriteQueue.push_back(std::make_pair(DyldInfoOnlyCmd->export_off, &MachOWriter::writeExportTrie)); break; + case MachO::LC_DYSYMTAB: + DSymtabCmd = &LC.Data.dysymtab_command_data; + WriteQueue.push_back(std::make_pair( + DSymtabCmd->indirectsymoff, &MachOWriter::writeDynamicSymbolTable)); + break; } } @@ -556,6 +563,12 @@ void MachOWriter::writeStringTable(raw_ostream &OS) { } } +void MachOWriter::writeDynamicSymbolTable(raw_ostream &OS) { + for (auto Data : Obj.LinkEdit.IndirectSymbols) + OS.write(reinterpret_cast<const char *>(&Data), + sizeof(yaml::Hex32::BaseType)); +} + class UniversalWriter { public: UniversalWriter(yaml::YamlObjectFile &ObjectFile) |
