mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-16 11:24:39 +00:00
llvm-readobj: teach it to handle MachO Universal Archive correctly
Patch by Chilledheart (rwindz0@gmail.com). Reviewed By: rafael Differential Revision: http://reviews.llvm.org/D8773 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234758 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Binary file not shown.
@@ -4,6 +4,12 @@ RUN: | FileCheck %s -check-prefix MULTIHEADER
|
|||||||
RUN: llvm-readobj -sections %p/Inputs/macho-universal.x86_64.i386 \
|
RUN: llvm-readobj -sections %p/Inputs/macho-universal.x86_64.i386 \
|
||||||
RUN: | FileCheck %s -check-prefix MULTISECTIONS
|
RUN: | FileCheck %s -check-prefix MULTISECTIONS
|
||||||
|
|
||||||
|
RUN: llvm-readobj -h %p/Inputs/macho-universal-archive.x86_64.i386 \
|
||||||
|
RUN: | FileCheck %s -check-prefix MULTIHEADER-ARCHIVE
|
||||||
|
|
||||||
|
RUN: llvm-readobj -sections %p/Inputs/macho-universal-archive.x86_64.i386 \
|
||||||
|
RUN: | FileCheck %s -check-prefix MULTISECTIONS-ARCHIVE
|
||||||
|
|
||||||
MULTIHEADER: Format: Mach-O 64-bit x86-64
|
MULTIHEADER: Format: Mach-O 64-bit x86-64
|
||||||
MULTIHEADER: Arch: x86_64
|
MULTIHEADER: Arch: x86_64
|
||||||
MULTIHEADER: AddressSize: 64bit
|
MULTIHEADER: AddressSize: 64bit
|
||||||
@@ -139,3 +145,153 @@ MULTISECTIONS: Reserved1: 0x0
|
|||||||
MULTISECTIONS: Reserved2: 0x0
|
MULTISECTIONS: Reserved2: 0x0
|
||||||
MULTISECTIONS: }
|
MULTISECTIONS: }
|
||||||
MULTISECTIONS: ]
|
MULTISECTIONS: ]
|
||||||
|
|
||||||
|
MULTIHEADER-ARCHIVE: File: hello.o
|
||||||
|
MULTIHEADER-ARCHIVE: Format: Mach-O 64-bit x86-64
|
||||||
|
MULTIHEADER-ARCHIVE: Arch: x86_64
|
||||||
|
MULTIHEADER-ARCHIVE: AddressSize: 64bit
|
||||||
|
MULTIHEADER-ARCHIVE: MachHeader {
|
||||||
|
MULTIHEADER-ARCHIVE: Magic: Magic64 (0xFEEDFACF)
|
||||||
|
MULTIHEADER-ARCHIVE: CpuType: X86-64 (0x1000007)
|
||||||
|
MULTIHEADER-ARCHIVE: CpuSubType: CPU_SUBTYPE_X86_64_ALL (0x3)
|
||||||
|
MULTIHEADER-ARCHIVE: FileType: Relocatable (0x1)
|
||||||
|
MULTIHEADER-ARCHIVE: NumOfLoadCommands: 3
|
||||||
|
MULTIHEADER-ARCHIVE: SizeOfLoadCommands: 496
|
||||||
|
MULTIHEADER-ARCHIVE: Flags [ (0x2000)
|
||||||
|
MULTIHEADER-ARCHIVE: MH_SUBSECTIONS_VIA_SYMBOLS (0x2000)
|
||||||
|
MULTIHEADER-ARCHIVE: ]
|
||||||
|
MULTIHEADER-ARCHIVE: Reserved: 0x0
|
||||||
|
MULTIHEADER-ARCHIVE: }
|
||||||
|
MULTIHEADER-ARCHIVE: File: foo.o
|
||||||
|
MULTIHEADER-ARCHIVE: Format: Mach-O 32-bit i386
|
||||||
|
MULTIHEADER-ARCHIVE: Arch: i386
|
||||||
|
MULTIHEADER-ARCHIVE: AddressSize: 32bit
|
||||||
|
MULTIHEADER-ARCHIVE: MachHeader {
|
||||||
|
MULTIHEADER-ARCHIVE: Magic: Magic (0xFEEDFACE)
|
||||||
|
MULTIHEADER-ARCHIVE: CpuType: X86 (0x7)
|
||||||
|
MULTIHEADER-ARCHIVE: CpuSubType: CPU_SUBTYPE_I386_ALL (0x3)
|
||||||
|
MULTIHEADER-ARCHIVE: FileType: Relocatable (0x1)
|
||||||
|
MULTIHEADER-ARCHIVE: NumOfLoadCommands: 3
|
||||||
|
MULTIHEADER-ARCHIVE: SizeOfLoadCommands: 296
|
||||||
|
MULTIHEADER-ARCHIVE: Flags [ (0x2000)
|
||||||
|
MULTIHEADER-ARCHIVE: MH_SUBSECTIONS_VIA_SYMBOLS (0x2000)
|
||||||
|
MULTIHEADER-ARCHIVE: ]
|
||||||
|
MULTIHEADER-ARCHIVE: }
|
||||||
|
|
||||||
|
MULTISECTIONS-ARCHIVE: File: hello.o
|
||||||
|
MULTISECTIONS-ARCHIVE: Format: Mach-O 64-bit x86-64
|
||||||
|
MULTISECTIONS-ARCHIVE: Arch: x86_64
|
||||||
|
MULTISECTIONS-ARCHIVE: AddressSize: 64bit
|
||||||
|
MULTISECTIONS-ARCHIVE: Sections [
|
||||||
|
MULTISECTIONS-ARCHIVE: Section {
|
||||||
|
MULTISECTIONS-ARCHIVE: Index: 0
|
||||||
|
MULTISECTIONS-ARCHIVE: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Address: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Size: 0x3B
|
||||||
|
MULTISECTIONS-ARCHIVE: Offset: 528
|
||||||
|
MULTISECTIONS-ARCHIVE: Alignment: 4
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationOffset: 0x2B8
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationCount: 2
|
||||||
|
MULTISECTIONS-ARCHIVE: Type: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Attributes [ (0x800004)
|
||||||
|
MULTISECTIONS-ARCHIVE: PureInstructions (0x800000)
|
||||||
|
MULTISECTIONS-ARCHIVE: SomeInstructions (0x4)
|
||||||
|
MULTISECTIONS-ARCHIVE: ]
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved1: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved2: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: }
|
||||||
|
MULTISECTIONS-ARCHIVE: Section {
|
||||||
|
MULTISECTIONS-ARCHIVE: Index: 1
|
||||||
|
MULTISECTIONS-ARCHIVE: Name: __cstring (5F 5F 63 73 74 72 69 6E 67 00 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Address: 0x3B
|
||||||
|
MULTISECTIONS-ARCHIVE: Size: 0xD
|
||||||
|
MULTISECTIONS-ARCHIVE: Offset: 587
|
||||||
|
MULTISECTIONS-ARCHIVE: Alignment: 0
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationOffset: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationCount: 0
|
||||||
|
MULTISECTIONS-ARCHIVE: Type: ExtReloc (0x2)
|
||||||
|
MULTISECTIONS-ARCHIVE: Attributes [ (0x0)
|
||||||
|
MULTISECTIONS-ARCHIVE: ]
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved1: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved2: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: }
|
||||||
|
MULTISECTIONS-ARCHIVE: Section {
|
||||||
|
MULTISECTIONS-ARCHIVE: Index: 2
|
||||||
|
MULTISECTIONS-ARCHIVE: Name: __compact_unwind (5F 5F 63 6F 6D 70 61 63 74 5F 75 6E 77 69 6E 64)
|
||||||
|
MULTISECTIONS-ARCHIVE: Segment: __LD (5F 5F 4C 44 00 00 00 00 00 00 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Address: 0x48
|
||||||
|
MULTISECTIONS-ARCHIVE: Size: 0x20
|
||||||
|
MULTISECTIONS-ARCHIVE: Offset: 600
|
||||||
|
MULTISECTIONS-ARCHIVE: Alignment: 3
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationOffset: 0x2C8
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationCount: 1
|
||||||
|
MULTISECTIONS-ARCHIVE: Type: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Attributes [ (0x20000)
|
||||||
|
MULTISECTIONS-ARCHIVE: Debug (0x20000)
|
||||||
|
MULTISECTIONS-ARCHIVE: ]
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved1: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved2: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: }
|
||||||
|
MULTISECTIONS-ARCHIVE: Section {
|
||||||
|
MULTISECTIONS-ARCHIVE: Index: 3
|
||||||
|
MULTISECTIONS-ARCHIVE: Name: __eh_frame (5F 5F 65 68 5F 66 72 61 6D 65 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Address: 0x68
|
||||||
|
MULTISECTIONS-ARCHIVE: Size: 0x40
|
||||||
|
MULTISECTIONS-ARCHIVE: Offset: 632
|
||||||
|
MULTISECTIONS-ARCHIVE: Alignment: 3
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationOffset: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationCount: 0
|
||||||
|
MULTISECTIONS-ARCHIVE: Type: 0xB
|
||||||
|
MULTISECTIONS-ARCHIVE: Attributes [ (0x680000)
|
||||||
|
MULTISECTIONS-ARCHIVE: LiveSupport (0x80000)
|
||||||
|
MULTISECTIONS-ARCHIVE: NoTOC (0x400000)
|
||||||
|
MULTISECTIONS-ARCHIVE: StripStaticSyms (0x200000)
|
||||||
|
MULTISECTIONS-ARCHIVE: ]
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved1: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved2: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: }
|
||||||
|
MULTISECTIONS-ARCHIVE: ]
|
||||||
|
MULTISECTIONS-ARCHIVE: File: foo.o
|
||||||
|
MULTISECTIONS-ARCHIVE: Format: Mach-O 32-bit i386
|
||||||
|
MULTISECTIONS-ARCHIVE: Arch: i386
|
||||||
|
MULTISECTIONS-ARCHIVE: AddressSize: 32bit
|
||||||
|
MULTISECTIONS-ARCHIVE: Sections [
|
||||||
|
MULTISECTIONS-ARCHIVE: Section {
|
||||||
|
MULTISECTIONS-ARCHIVE: Index: 0
|
||||||
|
MULTISECTIONS-ARCHIVE: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Address: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Size: 0x5
|
||||||
|
MULTISECTIONS-ARCHIVE: Offset: 324
|
||||||
|
MULTISECTIONS-ARCHIVE: Alignment: 4
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationOffset: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationCount: 0
|
||||||
|
MULTISECTIONS-ARCHIVE: Type: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Attributes [ (0x800004)
|
||||||
|
MULTISECTIONS-ARCHIVE: PureInstructions (0x800000)
|
||||||
|
MULTISECTIONS-ARCHIVE: SomeInstructions (0x4)
|
||||||
|
MULTISECTIONS-ARCHIVE: ]
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved1: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved2: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: }
|
||||||
|
MULTISECTIONS-ARCHIVE: Section {
|
||||||
|
MULTISECTIONS-ARCHIVE: Index: 1
|
||||||
|
MULTISECTIONS-ARCHIVE: Name: __data (5F 5F 64 61 74 61 00 00 00 00 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Segment: __DATA (5F 5F 44 41 54 41 00 00 00 00 00 00 00 00 00 00)
|
||||||
|
MULTISECTIONS-ARCHIVE: Address: 0x8
|
||||||
|
MULTISECTIONS-ARCHIVE: Size: 0x4
|
||||||
|
MULTISECTIONS-ARCHIVE: Offset: 332
|
||||||
|
MULTISECTIONS-ARCHIVE: Alignment: 2
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationOffset: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: RelocationCount: 0
|
||||||
|
MULTISECTIONS-ARCHIVE: Type: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Attributes [ (0x0)
|
||||||
|
MULTISECTIONS-ARCHIVE: ]
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved1: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: Reserved2: 0x0
|
||||||
|
MULTISECTIONS-ARCHIVE: }
|
||||||
|
MULTISECTIONS-ARCHIVE: ]
|
||||||
|
|
||||||
|
@@ -325,13 +325,12 @@ static void dumpArchive(const Archive *Arc) {
|
|||||||
static void dumpMachOUniversalBinary(const MachOUniversalBinary *UBinary) {
|
static void dumpMachOUniversalBinary(const MachOUniversalBinary *UBinary) {
|
||||||
for (const MachOUniversalBinary::ObjectForArch &Obj : UBinary->objects()) {
|
for (const MachOUniversalBinary::ObjectForArch &Obj : UBinary->objects()) {
|
||||||
ErrorOr<std::unique_ptr<MachOObjectFile>> ObjOrErr = Obj.getAsObjectFile();
|
ErrorOr<std::unique_ptr<MachOObjectFile>> ObjOrErr = Obj.getAsObjectFile();
|
||||||
if (std::error_code EC = ObjOrErr.getError()) {
|
if (ObjOrErr)
|
||||||
reportError(UBinary->getFileName(), EC.message());
|
dumpObject(&*ObjOrErr.get());
|
||||||
continue;
|
else if (ErrorOr<std::unique_ptr<Archive>> AOrErr = Obj.getAsArchive())
|
||||||
}
|
dumpArchive(&*AOrErr.get());
|
||||||
|
else
|
||||||
if (MachOObjectFile *MachOObj = ObjOrErr.get().get())
|
reportError(UBinary->getFileName(), ObjOrErr.getError().message());
|
||||||
dumpObject(MachOObj);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user