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 | |
| parent | 1f6fd64fe9c996b4795ee4a6c66b8f9216747560 (diff) | |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ObjectYAML')
4 files changed, 32 insertions, 18 deletions
diff --git a/contrib/llvm-project/llvm/lib/ObjectYAML/COFFEmitter.cpp b/contrib/llvm-project/llvm/lib/ObjectYAML/COFFEmitter.cpp index 5f38ca13cfc2..66ad16db1ba4 100644 --- a/contrib/llvm-project/llvm/lib/ObjectYAML/COFFEmitter.cpp +++ b/contrib/llvm-project/llvm/lib/ObjectYAML/COFFEmitter.cpp @@ -476,29 +476,25 @@ static bool writeCOFF(COFFParser &CP, raw_ostream &OS) { assert(OS.tell() == CP.SectionTableStart); // Output section table. - for (std::vector<COFFYAML::Section>::iterator i = CP.Obj.Sections.begin(), - e = CP.Obj.Sections.end(); - i != e; ++i) { - OS.write(i->Header.Name, COFF::NameSize); - OS << binary_le(i->Header.VirtualSize) - << binary_le(i->Header.VirtualAddress) - << binary_le(i->Header.SizeOfRawData) - << binary_le(i->Header.PointerToRawData) - << binary_le(i->Header.PointerToRelocations) - << binary_le(i->Header.PointerToLineNumbers) - << binary_le(i->Header.NumberOfRelocations) - << binary_le(i->Header.NumberOfLineNumbers) - << binary_le(i->Header.Characteristics); + for (const COFFYAML::Section &S : CP.Obj.Sections) { + OS.write(S.Header.Name, COFF::NameSize); + OS << binary_le(S.Header.VirtualSize) + << binary_le(S.Header.VirtualAddress) + << binary_le(S.Header.SizeOfRawData) + << binary_le(S.Header.PointerToRawData) + << binary_le(S.Header.PointerToRelocations) + << binary_le(S.Header.PointerToLineNumbers) + << binary_le(S.Header.NumberOfRelocations) + << binary_le(S.Header.NumberOfLineNumbers) + << binary_le(S.Header.Characteristics); } assert(OS.tell() == CP.SectionTableStart + CP.SectionTableSize); unsigned CurSymbol = 0; StringMap<unsigned> SymbolTableIndexMap; - for (std::vector<COFFYAML::Symbol>::iterator I = CP.Obj.Symbols.begin(), - E = CP.Obj.Symbols.end(); - I != E; ++I) { - SymbolTableIndexMap[I->Name] = CurSymbol; - CurSymbol += 1 + I->Header.NumberOfAuxSymbols; + for (const COFFYAML::Symbol &Sym : CP.Obj.Symbols) { + SymbolTableIndexMap[Sym.Name] = CurSymbol; + CurSymbol += 1 + Sym.Header.NumberOfAuxSymbols; } // Output section data. diff --git a/contrib/llvm-project/llvm/lib/ObjectYAML/ELFYAML.cpp b/contrib/llvm-project/llvm/lib/ObjectYAML/ELFYAML.cpp index fdf9aeae1622..e0dde4433d24 100644 --- a/contrib/llvm-project/llvm/lib/ObjectYAML/ELFYAML.cpp +++ b/contrib/llvm-project/llvm/lib/ObjectYAML/ELFYAML.cpp @@ -155,6 +155,10 @@ void ScalarEnumerationTraits<ELFYAML::ELF_NT>::enumeration( ECase(NT_FREEBSD_PROCSTAT_OSREL); ECase(NT_FREEBSD_PROCSTAT_PSSTRINGS); ECase(NT_FREEBSD_PROCSTAT_AUXV); + // NetBSD core note types. + ECase(NT_NETBSDCORE_PROCINFO); + ECase(NT_NETBSDCORE_AUXV); + ECase(NT_NETBSDCORE_LWPSTATUS); // OpenBSD core note types. ECase(NT_OPENBSD_PROCINFO); ECase(NT_OPENBSD_AUXV); 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) diff --git a/contrib/llvm-project/llvm/lib/ObjectYAML/MachOYAML.cpp b/contrib/llvm-project/llvm/lib/ObjectYAML/MachOYAML.cpp index c9562bd72258..f32009458110 100644 --- a/contrib/llvm-project/llvm/lib/ObjectYAML/MachOYAML.cpp +++ b/contrib/llvm-project/llvm/lib/ObjectYAML/MachOYAML.cpp @@ -164,6 +164,7 @@ void MappingTraits<MachOYAML::LinkEditData>::mapping( IO.mapOptional("ExportTrie", LinkEditData.ExportTrie); IO.mapOptional("NameList", LinkEditData.NameList); IO.mapOptional("StringTable", LinkEditData.StringTable); + IO.mapOptional("IndirectSymbols", LinkEditData.IndirectSymbols); } void MappingTraits<MachOYAML::RebaseOpcode>::mapping( |
