From 8e5ffc980389d12a1dea21173b374574eb109c51 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Tue, 17 May 2016 23:38:22 +0000 Subject: [PATCH] Revert "[obj2yaml] [yaml2obj] Support MachO section and section_64 structs" This reverts commits r269845, r269846, and r269850 as they introduce a crash in obj2yaml when trying to do a roundtrip. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269865 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ObjectYAML/MachOYAML.h | 22 -- lib/ObjectYAML/MachOYAML.cpp | 26 +-- test/ObjectYAML/MachO/load_commands.yaml | 12 +- test/ObjectYAML/MachO/sections.yaml | 284 ----------------------- tools/obj2yaml/macho2yaml.cpp | 54 ----- tools/yaml2obj/yaml2macho.cpp | 32 --- 6 files changed, 6 insertions(+), 424 deletions(-) delete mode 100644 test/ObjectYAML/MachO/sections.yaml diff --git a/include/llvm/ObjectYAML/MachOYAML.h b/include/llvm/ObjectYAML/MachOYAML.h index 3c79a20c55a..21558f00cc0 100644 --- a/include/llvm/ObjectYAML/MachOYAML.h +++ b/include/llvm/ObjectYAML/MachOYAML.h @@ -22,21 +22,6 @@ namespace llvm { namespace MachOYAML { -struct Section { - char sectname[16]; - char segname[16]; - llvm::yaml::Hex64 addr; - uint64_t size; - llvm::yaml::Hex32 offset; - uint32_t align; - llvm::yaml::Hex32 reloff; - uint32_t nreloc; - llvm::yaml::Hex32 flags; - llvm::yaml::Hex32 reserved1; - llvm::yaml::Hex32 reserved2; - llvm::yaml::Hex32 reserved3; -}; - struct FileHeader { llvm::yaml::Hex32 magic; llvm::yaml::Hex32 cputype; @@ -51,20 +36,17 @@ struct FileHeader { struct LoadCommand { virtual ~LoadCommand(); llvm::MachO::macho_load_command Data; - std::vector
Sections; }; struct Object { FileHeader Header; std::vector LoadCommands; - std::vector
Sections; }; } // namespace llvm::MachOYAML } // namespace llvm LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::LoadCommand) -LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::Section) namespace llvm { namespace yaml { @@ -81,10 +63,6 @@ template <> struct MappingTraits { static void mapping(IO &IO, MachOYAML::LoadCommand &LoadCommand); }; -template <> struct MappingTraits { - static void mapping(IO &IO, MachOYAML::Section &Section); -}; - #define HANDLE_LOAD_COMMAND(LCName, LCValue, LCStruct) \ io.enumCase(value, #LCName, MachO::LCName); diff --git a/lib/ObjectYAML/MachOYAML.cpp b/lib/ObjectYAML/MachOYAML.cpp index 7ef48c691cb..b98d4622a36 100644 --- a/lib/ObjectYAML/MachOYAML.cpp +++ b/lib/ObjectYAML/MachOYAML.cpp @@ -110,42 +110,20 @@ void MappingTraits::mapping( switch (LoadCommand.Data.load_command_data.cmd) { #include "llvm/Support/MachO.def" } - if (LoadCommand.Data.load_command_data.cmd == MachO::LC_SEGMENT || - LoadCommand.Data.load_command_data.cmd == MachO::LC_SEGMENT_64) { - IO.mapOptional("Sections", LoadCommand.Sections); - } } void MappingTraits::mapping( IO &IO, MachO::dyld_info_command &LoadCommand) { IO.mapRequired("rebase_off", LoadCommand.rebase_off); IO.mapRequired("rebase_size", LoadCommand.rebase_size); - IO.mapRequired("bind_off", LoadCommand.bind_off); - IO.mapRequired("bind_size", LoadCommand.bind_size); + IO.mapRequired("bind_off", LoadCommand.bind_size); IO.mapRequired("weak_bind_off", LoadCommand.weak_bind_off); IO.mapRequired("weak_bind_size", LoadCommand.weak_bind_size); - IO.mapRequired("lazy_bind_off", LoadCommand.lazy_bind_off); - IO.mapRequired("lazy_bind_size", LoadCommand.lazy_bind_size); + IO.mapRequired("lazy_bind_off", LoadCommand.lazy_bind_size); IO.mapRequired("export_off", LoadCommand.export_off); IO.mapRequired("export_size", LoadCommand.export_size); } -void MappingTraits::mapping(IO &IO, - MachOYAML::Section &Section) { - IO.mapRequired("sectname", Section.sectname); - IO.mapRequired("segname", Section.segname); - IO.mapRequired("addr", Section.addr); - IO.mapRequired("size", Section.size); - IO.mapRequired("offset", Section.offset); - IO.mapRequired("align", Section.align); - IO.mapRequired("reloff", Section.reloff); - IO.mapRequired("nreloc", Section.nreloc); - IO.mapRequired("flags", Section.flags); - IO.mapRequired("reserved1", Section.reserved1); - IO.mapRequired("reserved2", Section.reserved2); - IO.mapOptional("reserved3", Section.reserved3); -} - void MappingTraits::mapping(IO &IO, MachO::dylib &DylibStruct) { IO.mapRequired("name", DylibStruct.name); IO.mapRequired("timestamp", DylibStruct.timestamp); diff --git a/test/ObjectYAML/MachO/load_commands.yaml b/test/ObjectYAML/MachO/load_commands.yaml index 6de6b3ce1a1..b8b3407aa7a 100644 --- a/test/ObjectYAML/MachO/load_commands.yaml +++ b/test/ObjectYAML/MachO/load_commands.yaml @@ -59,12 +59,10 @@ LoadCommands: cmdsize: 48 rebase_off: 12288 rebase_size: 8 - bind_off: 12296 - bind_size: 96 + bind_off: 96 weak_bind_off: 0 weak_bind_size: 0 - lazy_bind_off: 12392 - lazy_bind_size: 624 + lazy_bind_off: 624 export_off: 13016 export_size: 48 - cmd: LC_SYMTAB @@ -186,12 +184,10 @@ LoadCommands: #CHECK: cmdsize: 48 #CHECK: rebase_off: 12288 #CHECK: rebase_size: 8 -#CHECK: bind_off: 12296 -#CHECK: bind_size: 96 +#CHECK: bind_off: 96 #CHECK: weak_bind_off: 0 #CHECK: weak_bind_size: 0 -#CHECK: lazy_bind_off: 12392 -#CHECK: lazy_bind_size: 624 +#CHECK: lazy_bind_off: 624 #CHECK: export_off: 13016 #CHECK: export_size: 48 #CHECK: - cmd: LC_SYMTAB diff --git a/test/ObjectYAML/MachO/sections.yaml b/test/ObjectYAML/MachO/sections.yaml deleted file mode 100644 index 62f80520aed..00000000000 --- a/test/ObjectYAML/MachO/sections.yaml +++ /dev/null @@ -1,284 +0,0 @@ -# RUN: yaml2obj -format=macho %s | obj2yaml | FileCheck %s - ---- !mach-o -FileHeader: - magic: 0xFEEDFACF - cputype: 0x01000007 - cpusubtype: 0x80000003 - filetype: 0x00000002 - ncmds: 16 - sizeofcmds: 1408 - flags: 0x00218085 - reserved: 0x00000000 -LoadCommands: - - cmd: LC_SEGMENT_64 - cmdsize: 72 - segname: __PAGEZERO - vmaddr: 0 - vmsize: 4294967296 - fileoff: 0 - filesize: 0 - maxprot: 0 - initprot: 0 - nsects: 0 - flags: 0 - - cmd: LC_SEGMENT_64 - cmdsize: 552 - segname: __TEXT - vmaddr: 4294967296 - vmsize: 8192 - fileoff: 0 - filesize: 8192 - maxprot: 7 - initprot: 5 - nsects: 6 - flags: 0 - Sections: - - sectname: __text - segname: __TEXT - addr: 0x0000000100001160 - size: 3099 - offset: 0x00001160 - align: 4 - reloff: 0x00000000 - nreloc: 0 - flags: 0x80000400 - reserved1: 0x00000000 - reserved2: 0x00000000 - reserved3: 0x00000000 - - sectname: __stubs - segname: __TEXT - addr: 0x0000000100001D7C - size: 90 - offset: 0x00001D7C - align: 1 - reloff: 0x00000000 - nreloc: 0 - flags: 0x80000408 - reserved1: 0x00000000 - reserved2: 0x00000006 - reserved3: 0x00000000 - - sectname: __stub_helper - segname: __TEXT - addr: 0x0000000100001DD8 - size: 166 - offset: 0x00001DD8 - align: 2 - reloff: 0x00000000 - nreloc: 0 - flags: 0x80000400 - reserved1: 0x00000000 - reserved2: 0x00000000 - reserved3: 0x00000000 - - sectname: __gcc_except_tab__TEXT - segname: __TEXT - addr: 0x0000000100001E80 - size: 240 - offset: 0x00001E80 - align: 2 - reloff: 0x00000000 - nreloc: 0 - flags: 0x00000000 - reserved1: 0x00000000 - reserved2: 0x00000000 - reserved3: 0x00000000 - - sectname: __cstring - segname: __TEXT - addr: 0x0000000100001F70 - size: 15 - offset: 0x00001F70 - align: 0 - reloff: 0x00000000 - nreloc: 0 - flags: 0x00000002 - reserved1: 0x00000000 - reserved2: 0x00000000 - reserved3: 0x00000000 - - sectname: __unwind_info - segname: __TEXT - addr: 0x0000000100001F80 - size: 120 - offset: 0x00001F80 - align: 2 - reloff: 0x00000000 - nreloc: 0 - flags: 0x00000000 - reserved1: 0x00000000 - reserved2: 0x00000000 - reserved3: 0x00000000 - - cmd: LC_SEGMENT_64 - cmdsize: 312 - segname: __DATA - vmaddr: 4294975488 - vmsize: 4096 - fileoff: 8192 - filesize: 4096 - maxprot: 7 - initprot: 3 - nsects: 3 - flags: 0 - Sections: - - sectname: __got - segname: __DATA - addr: 0x0000000100002000 - size: 24 - offset: 0x00002000 - align: 3 - reloff: 0x00000000 - nreloc: 0 - flags: 0x00000006 - reserved1: 0x0000000F - reserved2: 0x00000000 - reserved3: 0x00000000 - - sectname: __nl_symbol_ptr - segname: __DATA - addr: 0x0000000100002018 - size: 16 - offset: 0x00002018 - align: 3 - reloff: 0x00000000 - nreloc: 0 - flags: 0x00000006 - reserved1: 0x00000012 - reserved2: 0x00000000 - reserved3: 0x00000000 - - sectname: __la_symbol_ptr - segname: __DATA - addr: 0x0000000100002028 - size: 120 - offset: 0x00002028 - align: 3 - reloff: 0x00000000 - nreloc: 0 - flags: 0x00000007 - reserved1: 0x00000014 - reserved2: 0x00000000 - reserved3: 0x00000000 - - cmd: LC_SEGMENT_64 - cmdsize: 72 - segname: __LINKEDIT - vmaddr: 4294979584 - vmsize: 4096 - fileoff: 12288 - filesize: 2508 - maxprot: 7 - initprot: 1 - nsects: 0 - flags: 0 - - cmd: LC_DYLD_INFO_ONLY - cmdsize: 48 - rebase_off: 12288 - rebase_size: 8 - bind_off: 12296 - bind_size: 96 - weak_bind_off: 0 - weak_bind_size: 0 - lazy_bind_off: 12392 - lazy_bind_size: 624 - export_off: 13016 - export_size: 48 - - cmd: LC_SYMTAB - cmdsize: 24 - symoff: 13080 - nsyms: 30 - stroff: 13700 - strsize: 1096 - - cmd: LC_DYSYMTAB - cmdsize: 80 - ilocalsym: 0 - nlocalsym: 9 - iextdefsym: 9 - nextdefsym: 2 - iundefsym: 11 - nundefsym: 19 - tocoff: 0 - ntoc: 0 - modtaboff: 0 - nmodtab: 0 - extrefsymoff: 0 - nextrefsyms: 0 - indirectsymoff: 13560 - nindirectsyms: 35 - extreloff: 0 - nextrel: 0 - locreloff: 0 - nlocrel: 0 - - cmd: LC_LOAD_DYLINKER - cmdsize: 32 - name: 12 - - cmd: LC_UUID - cmdsize: 24 - cmdsize: 24 - uuid: 461A1B28-822F-3F38-B670-645419E636F5 - - cmd: LC_VERSION_MIN_MACOSX - cmdsize: 16 - version: 658176 - sdk: 658176 - - cmd: LC_SOURCE_VERSION - cmdsize: 16 - version: 0 - - cmd: LC_MAIN - cmdsize: 24 - entryoff: 4448 - stacksize: 0 - - cmd: LC_LOAD_DYLIB - cmdsize: 48 - dylib: - name: 24 - timestamp: 2 - current_version: 7864576 - compatibility_version: 65536 - - cmd: LC_LOAD_DYLIB - cmdsize: 56 - dylib: - name: 24 - timestamp: 2 - current_version: 80349697 - compatibility_version: 65536 - - cmd: LC_FUNCTION_STARTS - cmdsize: 16 - dataoff: 13064 - datasize: 16 - - cmd: LC_DATA_IN_CODE - cmdsize: 16 - dataoff: 13080 - datasize: 0 -... - - -#CHECK: - cmd: LC_SEGMENT_64 -#CHECK: segname: __PAGEZERO -#CHECK: - cmd: LC_SEGMENT_64 -#CHECK: segname: __TEXT -#CHECK: Sections: -#CHECK: - sectname: __text -#CHECK: segname: __TEXT -#CHECK: addr: 0x0000000100001160 -#CHECK: size: 3099 -#CHECK: offset: 0x00001160 -#CHECK: align: 4 -#CHECK: reloff: 0x00000000 -#CHECK: nreloc: 0 -#CHECK: flags: 0x80000400 -#CHECK: reserved1: 0x00000000 -#CHECK: reserved2: 0x00000000 -#CHECK: reserved3: 0x00000000 -#CHECK: - sectname: __stubs -#CHECK: segname: __TEXT -#CHECK: - sectname: __stub_helper -#CHECK: segname: __TEXT -#CHECK: - sectname: __gcc_except_tab__TEXT -#CHECK: segname: __TEXT -#CHECK: - sectname: __cstring -#CHECK: segname: __TEXT -#CHECK: - sectname: __unwind_info -#CHECK: segname: __TEXT -#CHECK: - cmd: LC_SEGMENT_64 -#CHECK: segname: __DATA -#CHECK: Sections: -#CHECK: - sectname: __got -#CHECK: segname: __DATA -#CHECK: - sectname: __nl_symbol_ptr -#CHECK: segname: __DATA -#CHECK: - sectname: __la_symbol_ptr -#CHECK: segname: __DATA diff --git a/tools/obj2yaml/macho2yaml.cpp b/tools/obj2yaml/macho2yaml.cpp index 66244c30e40..cbf55ba35a5 100644 --- a/tools/obj2yaml/macho2yaml.cpp +++ b/tools/obj2yaml/macho2yaml.cpp @@ -13,8 +13,6 @@ #include "llvm/ObjectYAML/MachOYAML.h" #include "llvm/Support/ErrorHandling.h" -#include // for memcpy - using namespace llvm; class MachODumper { @@ -34,24 +32,6 @@ public: MachO::swapStruct(LC.Data.LCStruct##_data); \ break; -template -MachOYAML::Section constructSection(SectionType Sec) { - MachOYAML::Section TempSec; - memcpy(reinterpret_cast(&TempSec.sectname[0]), &Sec.sectname[0], 16); - memcpy(reinterpret_cast(&TempSec.segname[0]), &Sec.segname[0], 16); - TempSec.addr = Sec.addr; - TempSec.size = Sec.size; - TempSec.offset = Sec.offset; - TempSec.align = Sec.align; - TempSec.reloff = Sec.reloff; - TempSec.nreloc = Sec.nreloc; - TempSec.flags = Sec.flags; - TempSec.reserved1 = Sec.reserved1; - TempSec.reserved2 = Sec.reserved2; - TempSec.reserved3 = 0; - return TempSec; -} - Expected> MachODumper::dump() { auto Y = make_unique(); Y->Header.magic = Obj.getHeader().magic; @@ -74,40 +54,6 @@ Expected> MachODumper::dump() { break; #include "llvm/Support/MachO.def" } - if (LoadCmd.C.cmd == MachO::LC_SEGMENT) { - auto End = LoadCmd.Ptr + LoadCmd.C.cmdsize; - const MachO::section *Curr = reinterpret_cast( - LoadCmd.Ptr + sizeof(MachO::segment_command)); - for (; reinterpret_cast(Curr) < End; Curr++) { - if (Obj.isLittleEndian() != sys::IsLittleEndianHost) { - MachO::section Sec; - memcpy((void *)&Sec, Curr, sizeof(MachO::section)); - MachO::swapStruct(Sec); - LC.Sections.push_back(constructSection(Sec)); - } else { - LC.Sections.push_back(constructSection(*Curr)); - } - } - } else if (LoadCmd.C.cmd == MachO::LC_SEGMENT_64) { - auto End = LoadCmd.Ptr + LoadCmd.C.cmdsize; - const MachO::section_64 *Curr = - reinterpret_cast( - LoadCmd.Ptr + sizeof(MachO::segment_command_64)); - for (; reinterpret_cast(Curr) < End; Curr++) { - MachOYAML::Section TempSec; - if (Obj.isLittleEndian() != sys::IsLittleEndianHost) { - MachO::section_64 Sec; - memcpy((void *)&Sec, Curr, sizeof(MachO::section_64)); - MachO::swapStruct(Sec); - LC.Sections.push_back(constructSection(Sec)); - TempSec = constructSection(Sec); - } else { - TempSec = constructSection(*Curr); - } - TempSec.reserved3 = Curr->reserved3; - LC.Sections.push_back(TempSec); - } - } Y->LoadCommands.push_back(std::move(LC)); } diff --git a/tools/yaml2obj/yaml2macho.cpp b/tools/yaml2obj/yaml2macho.cpp index 0e8799e2ce1..772c710c098 100644 --- a/tools/yaml2obj/yaml2macho.cpp +++ b/tools/yaml2obj/yaml2macho.cpp @@ -77,23 +77,6 @@ Error MachOWriter::writeHeader(raw_ostream &OS) { return Error::success(); } -template -SectionType constructSection(MachOYAML::Section Sec) { - SectionType TempSec; - memcpy(reinterpret_cast(&TempSec.sectname[0]), &Sec.sectname[0], 16); - memcpy(reinterpret_cast(&TempSec.segname[0]), &Sec.segname[0], 16); - TempSec.addr = Sec.addr; - TempSec.size = Sec.size; - TempSec.offset = Sec.offset; - TempSec.align = Sec.align; - TempSec.reloff = Sec.reloff; - TempSec.nreloc = Sec.nreloc; - TempSec.flags = Sec.flags; - TempSec.reserved1 = Sec.reserved1; - TempSec.reserved2 = Sec.reserved2; - return TempSec; -} - Error MachOWriter::writeLoadCommands(raw_ostream &OS) { for (auto &LC : Obj.LoadCommands) { size_t BytesWritten = 0; @@ -113,21 +96,6 @@ Error MachOWriter::writeLoadCommands(raw_ostream &OS) { #include "llvm/Support/MachO.def" } - if(LC.Data.load_command_data.cmd == MachO::LC_SEGMENT) { - for(auto Sec : LC.Sections) { - auto TempSec = constructSection(Sec); - OS.write(reinterpret_cast(&(TempSec)), sizeof(MachO::section)); - BytesWritten += sizeof(MachO::section); - } - } else if(LC.Data.load_command_data.cmd == MachO::LC_SEGMENT_64) { - for(auto Sec : LC.Sections) { - auto TempSec = constructSection(Sec); - TempSec.reserved3 = Sec.reserved3; - OS.write(reinterpret_cast(&(TempSec)), sizeof(MachO::section_64)); - BytesWritten += sizeof(MachO::section_64); - } - } - auto BytesRemaining = LC.Data.load_command_data.cmdsize - BytesWritten; if (BytesRemaining > 0) {