You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
340 lines
9.4 KiB
340 lines
9.4 KiB
4 months ago
|
RUN: llvm-dsymutil -o - %p/../Inputs/basic.macho.i386 -f | llvm-readobj -file-headers -program-headers -sections -symbols - | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK32
|
||
|
RUN: llvm-dsymutil -o - -oso-prepend-path=%p/.. %p/../Inputs/basic.macho.x86_64 -f | llvm-readobj -file-headers -program-headers -sections -symbols - | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK64
|
||
|
|
||
|
This test checks that the dSYM companion binaries generated in 32 and 64 bits
|
||
|
are correct. The check are pretty strict (we check even the offsets and sizes
|
||
|
of the sections) in order to test the VM address layout algorithm. As the
|
||
|
debug sections are generated, this is a bit risky, but I don't expect
|
||
|
llvm-dsymutil's output to change much for these tiny C programs so this should
|
||
|
be OK.
|
||
|
The 32bits version doesn't have object files, thus it has basically no debug
|
||
|
sections.
|
||
|
|
||
|
CHECK32: Format: Mach-O 32-bit i386
|
||
|
CHECK32: Arch: i386
|
||
|
CHECK32: AddressSize: 32bit
|
||
|
CHECK64: Format: Mach-O 64-bit x86-64
|
||
|
CHECK64: Arch: x86_64
|
||
|
CHECK64: AddressSize: 64bit
|
||
|
CHECK: MachHeader {
|
||
|
CHECK32: Magic: Magic (0xFEEDFACE)
|
||
|
CHECK32: CpuType: X86 (0x7)
|
||
|
CHECK32: CpuSubType: CPU_SUBTYPE_I386_ALL (0x3)
|
||
|
CHECK64: Magic: Magic64 (0xFEEDFACF)
|
||
|
CHECK64: CpuType: X86-64 (0x1000007)
|
||
|
CHECK64: CpuSubType: CPU_SUBTYPE_X86_64_ALL (0x3)
|
||
|
CHECK: FileType: DWARFSymbol (0xA)
|
||
|
CHECK: NumOfLoadCommands: 7
|
||
|
CHECK: Flags [ (0x0)
|
||
|
CHECK: }
|
||
|
CHECK: Sections [
|
||
|
CHECK: Section {
|
||
|
CHECK: Name: __text
|
||
|
CHECK: Segment: __TEXT
|
||
|
CHECK32: Address: 0x1E90
|
||
|
CHECK32: Size: 0x11A
|
||
|
CHECK64: Address: 0x100000EA0
|
||
|
CHECK64: Size: 0x109
|
||
|
CHECK: Offset: 0
|
||
|
CHECK: Alignment: 4
|
||
|
CHECK: RelocationOffset: 0x0
|
||
|
CHECK: RelocationCount: 0
|
||
|
CHECK: Type: 0x0
|
||
|
CHECK: Attributes [ (0x800004)
|
||
|
CHECK: PureInstructions (0x800000)
|
||
|
CHECK: SomeInstructions (0x4)
|
||
|
CHECK: ]
|
||
|
CHECK: Reserved1: 0x0
|
||
|
CHECK: Reserved2: 0x0
|
||
|
CHECK: }
|
||
|
CHECK: Section {
|
||
|
CHECK: Name: __unwind_info
|
||
|
CHECK: Segment: __TEXT
|
||
|
CHECK32: Address: 0x1FAC
|
||
|
CHECK64: Address: 0x100000FAC
|
||
|
CHECK: Size: 0x48
|
||
|
CHECK: Offset: 0
|
||
|
CHECK: Alignment: 2
|
||
|
CHECK: RelocationOffset: 0x0
|
||
|
CHECK: RelocationCount: 0
|
||
|
CHECK: Type: 0x0
|
||
|
CHECK: Attributes [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK: Reserved1: 0x0
|
||
|
CHECK: Reserved2: 0x0
|
||
|
CHECK: }
|
||
|
CHECK32: Section {
|
||
|
CHECK32: Name: __nl_symbol_ptr
|
||
|
CHECK32: Segment: __DATA
|
||
|
CHECK32: Address: 0x2000
|
||
|
CHECK32: Size: 0x4
|
||
|
CHECK32: Offset: 0
|
||
|
CHECK32: Alignment: 2
|
||
|
CHECK32: RelocationOffset: 0x0
|
||
|
CHECK32: RelocationCount: 0
|
||
|
CHECK32: Type: 0x6
|
||
|
CHECK32: Attributes [ (0x0)
|
||
|
CHECK32: ]
|
||
|
CHECK32: Reserved1: 0x0
|
||
|
CHECK32: Reserved2: 0x0
|
||
|
CHECK32: }
|
||
|
CHECK: Section {
|
||
|
CHECK: Name: __data
|
||
|
CHECK: Segment: __DATA
|
||
|
CHECK32: Address: 0x2004
|
||
|
CHECK64: Address: 0x100001000
|
||
|
CHECK: Size: 0x4
|
||
|
CHECK: Offset: 0
|
||
|
CHECK: Alignment: 2
|
||
|
CHECK: RelocationOffset: 0x0
|
||
|
CHECK: RelocationCount: 0
|
||
|
CHECK: Type: 0x0
|
||
|
CHECK: Attributes [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK: Reserved1: 0x0
|
||
|
CHECK: Reserved2: 0x0
|
||
|
CHECK: }
|
||
|
CHECK: Section {
|
||
|
CHECK: Name: __common
|
||
|
CHECK: Segment: __DATA
|
||
|
CHECK32: Address: 0x2008
|
||
|
CHECK64: Address: 0x100001004
|
||
|
CHECK: Size: 0x4
|
||
|
CHECK: Offset: 0
|
||
|
CHECK: Alignment: 2
|
||
|
CHECK: RelocationOffset: 0x0
|
||
|
CHECK: RelocationCount: 0
|
||
|
CHECK: Type: LocReloc (0x1)
|
||
|
CHECK: Attributes [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK: Reserved1: 0x0
|
||
|
CHECK: Reserved2: 0x0
|
||
|
CHECK: }
|
||
|
CHECK: Section {
|
||
|
CHECK: Name: __bss
|
||
|
CHECK: Segment: __DATA
|
||
|
CHECK32: Address: 0x200C
|
||
|
CHECK64: Address: 0x100001008
|
||
|
CHECK: Size: 0x4
|
||
|
CHECK: Offset: 0
|
||
|
CHECK: Alignment: 2
|
||
|
CHECK: RelocationOffset: 0x0
|
||
|
CHECK: RelocationCount: 0
|
||
|
CHECK: Type: LocReloc (0x1)
|
||
|
CHECK: Attributes [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK: Reserved1: 0x0
|
||
|
CHECK: Reserved2: 0x0
|
||
|
CHECK: }
|
||
|
CHECK64: Section {
|
||
|
CHECK64: Name: __debug_line
|
||
|
CHECK64: Segment: __DWARF
|
||
|
CHECK64: Address: 0x100003000
|
||
|
CHECK64: Size: 0xEA
|
||
|
CHECK64: Offset: 8192
|
||
|
CHECK64: Alignment: 0
|
||
|
CHECK64: RelocationOffset: 0x0
|
||
|
CHECK64: RelocationCount: 0
|
||
|
CHECK64: Type: 0x0
|
||
|
CHECK64: Attributes [ (0x0)
|
||
|
CHECK64: ]
|
||
|
CHECK64: Reserved1: 0x0
|
||
|
CHECK64: Reserved2: 0x0
|
||
|
CHECK64: }
|
||
|
CHECK64: Section {
|
||
|
CHECK64: Name: __debug_pubnames
|
||
|
CHECK64: Segment: __DWARF
|
||
|
CHECK64: Address: 0x1000030EA
|
||
|
CHECK64: Size: 0x7F
|
||
|
CHECK64: Offset: 8426
|
||
|
CHECK64: Alignment: 0
|
||
|
CHECK64: RelocationOffset: 0x0
|
||
|
CHECK64: RelocationCount: 0
|
||
|
CHECK64: Type: 0x0
|
||
|
CHECK64: Attributes [ (0x0)
|
||
|
CHECK64: ]
|
||
|
CHECK64: Reserved1: 0x0
|
||
|
CHECK64: Reserved2: 0x0
|
||
|
CHECK64: }
|
||
|
CHECK64: Section {
|
||
|
CHECK64: Name: __debug_pubtypes
|
||
|
CHECK64: Segment: __DWARF
|
||
|
CHECK64: Address: 0x100003169
|
||
|
CHECK64: Size: 0x57
|
||
|
CHECK64: Offset: 8553
|
||
|
CHECK64: Alignment: 0
|
||
|
CHECK64: RelocationOffset: 0x0
|
||
|
CHECK64: RelocationCount: 0
|
||
|
CHECK64: Type: 0x0
|
||
|
CHECK64: Attributes [ (0x0)
|
||
|
CHECK64: ]
|
||
|
CHECK64: Reserved1: 0x0
|
||
|
CHECK64: Reserved2: 0x0
|
||
|
CHECK64: }
|
||
|
CHECK64: Section {
|
||
|
CHECK64: Name: __debug_aranges
|
||
|
CHECK64: Segment: __DWARF
|
||
|
CHECK64: Address: 0x1000031C0
|
||
|
CHECK64: Size: 0xB0
|
||
|
CHECK64: Offset: 8640
|
||
|
CHECK64: Alignment: 0
|
||
|
CHECK64: RelocationOffset: 0x0
|
||
|
CHECK64: RelocationCount: 0
|
||
|
CHECK64: Type: 0x0
|
||
|
CHECK64: Attributes [ (0x0)
|
||
|
CHECK64: ]
|
||
|
CHECK64: Reserved1: 0x0
|
||
|
CHECK64: Reserved2: 0x0
|
||
|
CHECK64: }
|
||
|
CHECK64: Section {
|
||
|
CHECK64: Name: __debug_info
|
||
|
CHECK64: Segment: __DWARF
|
||
|
CHECK64: Address: 0x100003270
|
||
|
CHECK64: Size: 0x1BC
|
||
|
CHECK64: Offset: 8816
|
||
|
CHECK64: Alignment: 0
|
||
|
CHECK64: RelocationOffset: 0x0
|
||
|
CHECK64: RelocationCount: 0
|
||
|
CHECK64: Type: 0x0
|
||
|
CHECK64: Attributes [ (0x0)
|
||
|
CHECK64: ]
|
||
|
CHECK64: Reserved1: 0x0
|
||
|
CHECK64: Reserved2: 0x0
|
||
|
CHECK64: }
|
||
|
CHECK: Section {
|
||
|
CHECK: Name: __debug_abbrev
|
||
|
CHECK: Segment: __DWARF
|
||
|
CHECK32: Address: 0x4000
|
||
|
CHECK32: Size: 0x1
|
||
|
CHECK32: Offset: 8192
|
||
|
CHECK64: Address: 0x10000342C
|
||
|
CHECK64: Size: 0x8F
|
||
|
CHECK64: Offset: 9260
|
||
|
CHECK: Alignment: 0
|
||
|
CHECK: RelocationOffset: 0x0
|
||
|
CHECK: RelocationCount: 0
|
||
|
CHECK: Type: 0x0
|
||
|
CHECK: Attributes [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK: Reserved1: 0x0
|
||
|
CHECK: Reserved2: 0x0
|
||
|
CHECK: }
|
||
|
CHECK: Section {
|
||
|
CHECK: Name: __debug_str
|
||
|
CHECK: Segment: __DWARF
|
||
|
CHECK32: Address: 0x4001
|
||
|
CHECK32: Size: 0x1
|
||
|
CHECK32: Offset: 8193
|
||
|
CHECK64: Address: 0x1000034BB
|
||
|
CHECK64: Size: 0x9F
|
||
|
CHECK64: Offset: 9403
|
||
|
CHECK: Alignment: 0
|
||
|
CHECK: RelocationOffset: 0x0
|
||
|
CHECK: RelocationCount: 0
|
||
|
CHECK: Type: 0x0
|
||
|
CHECK: Attributes [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK: Reserved1: 0x0
|
||
|
CHECK: Reserved2: 0x0
|
||
|
CHECK: }
|
||
|
CHECK: ]
|
||
|
CHECK: Symbols [
|
||
|
CHECK: Symbol {
|
||
|
CHECK: Name: _inc (2)
|
||
|
CHECK: Type: Section (0xE)
|
||
|
CHECK: Section: __text
|
||
|
CHECK: RefType: UndefinedNonLazy (0x0)
|
||
|
CHECK: Flags [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK32: Value: 0x1F20
|
||
|
CHECK64: Value: 0x100000F20
|
||
|
CHECK: }
|
||
|
CHECK: Symbol {
|
||
|
CHECK: Name: _inc (2)
|
||
|
CHECK: Type: Section (0xE)
|
||
|
CHECK: Section: __text
|
||
|
CHECK: RefType: UndefinedNonLazy (0x0)
|
||
|
CHECK: Flags [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK32: Value: 0x1F90
|
||
|
CHECK64: Value: 0x100000F90
|
||
|
CHECK: }
|
||
|
CHECK: Symbol {
|
||
|
CHECK: Name: _baz (7)
|
||
|
CHECK: Type: Section (0xE)
|
||
|
CHECK: Section: __data
|
||
|
CHECK: RefType: UndefinedNonLazy (0x0)
|
||
|
CHECK: Flags [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK32: Value: 0x2004
|
||
|
CHECK64: Value: 0x100001000
|
||
|
CHECK: }
|
||
|
CHECK: Symbol {
|
||
|
CHECK: Name: _private_int (12)
|
||
|
CHECK: Type: Section (0xE)
|
||
|
CHECK: Section: __bss
|
||
|
CHECK: RefType: UndefinedNonLazy (0x0)
|
||
|
CHECK: Flags [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK32: Value: 0x200C
|
||
|
CHECK64: Value: 0x100001008
|
||
|
CHECK: }
|
||
|
CHECK: Symbol {
|
||
|
CHECK: Name: __mh_execute_header (25)
|
||
|
CHECK: Extern
|
||
|
CHECK: Type: Section (0xE)
|
||
|
CHECK: Section: __text
|
||
|
CHECK: RefType: UndefinedNonLazy (0x0)
|
||
|
CHECK: Flags [ (0x10)
|
||
|
CHECK: ReferencedDynamically (0x10)
|
||
|
CHECK: ]
|
||
|
CHECK32: Value: 0x1000
|
||
|
CHECK64: Value: 0x100000000
|
||
|
CHECK: }
|
||
|
CHECK: Symbol {
|
||
|
CHECK: Name: _bar (45)
|
||
|
CHECK: Extern
|
||
|
CHECK: Type: Section (0xE)
|
||
|
CHECK: Section: __text
|
||
|
CHECK: RefType: UndefinedNonLazy (0x0)
|
||
|
CHECK: Flags [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK32: Value: 0x1F40
|
||
|
CHECK64: Value: 0x100000F40
|
||
|
CHECK: }
|
||
|
CHECK: Symbol {
|
||
|
CHECK: Name: _foo (50)
|
||
|
CHECK: Extern
|
||
|
CHECK: Type: Section (0xE)
|
||
|
CHECK: Section: __text
|
||
|
CHECK: RefType: UndefinedNonLazy (0x0)
|
||
|
CHECK: Flags [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK32: Value: 0x1EC0
|
||
|
CHECK64: Value: 0x100000ED0
|
||
|
CHECK: }
|
||
|
CHECK: Symbol {
|
||
|
CHECK: Name: _main (55)
|
||
|
CHECK: Extern
|
||
|
CHECK: Type: Section (0xE)
|
||
|
CHECK: Section: __text
|
||
|
CHECK: RefType: UndefinedNonLazy (0x0)
|
||
|
CHECK: Flags [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK32: Value: 0x1E90
|
||
|
CHECK64: Value: 0x100000EA0
|
||
|
CHECK: }
|
||
|
CHECK: Symbol {
|
||
|
CHECK: Name: _val (61)
|
||
|
CHECK: Extern
|
||
|
CHECK: Type: Section (0xE)
|
||
|
CHECK: Section: __common
|
||
|
CHECK: RefType: UndefinedNonLazy (0x0)
|
||
|
CHECK: Flags [ (0x0)
|
||
|
CHECK: ]
|
||
|
CHECK32: Value: 0x2008
|
||
|
CHECK64: Value: 0x100001004
|
||
|
CHECK: }
|
||
|
CHECK: ]
|
||
|
|