From 5691e74f97fc8cad671d50450ad986347875e1d1 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sat, 13 Mar 2010 22:49:35 +0000 Subject: [PATCH] MC/X86_64: Symbol support. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98456 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCAssembler.cpp | 16 +- test/MC/MachO/symbols-1.s | 437 +++++++++++++++++++++++++------------- test/Scripts/macho-dump | 8 +- 3 files changed, 309 insertions(+), 152 deletions(-) diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index dae2d9336cb..a207d9952b0 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -400,7 +400,7 @@ public: assert(OS.tell() - Start == DysymtabLoadCommandSize); } - void WriteNlist32(MachSymbolData &MSD) { + void WriteNlist(MachSymbolData &MSD) { MCSymbolData &Data = *MSD.SymbolData; const MCSymbol &Symbol = Data.getSymbol(); uint8_t Type = 0; @@ -459,7 +459,10 @@ public: // The Mach-O streamer uses the lowest 16-bits of the flags for the 'desc' // value. Write16(Flags); - Write32(Address); + if (Is64Bit) + Write64(Address); + else + Write32(Address); } struct MachRelocationEntry { @@ -874,7 +877,8 @@ public: // The string table is written after symbol table. uint64_t StringTableOffset = - SymbolTableOffset + NumSymTabSymbols * Nlist32Size; + SymbolTableOffset + NumSymTabSymbols * (Is64Bit ? Nlist64Size : + Nlist32Size); WriteSymtabLoadCommand(SymbolTableOffset, NumSymTabSymbols, StringTableOffset, StringTable.size()); @@ -928,11 +932,11 @@ public: // Write the symbol table entries. for (unsigned i = 0, e = LocalSymbolData.size(); i != e; ++i) - WriteNlist32(LocalSymbolData[i]); + WriteNlist(LocalSymbolData[i]); for (unsigned i = 0, e = ExternalSymbolData.size(); i != e; ++i) - WriteNlist32(ExternalSymbolData[i]); + WriteNlist(ExternalSymbolData[i]); for (unsigned i = 0, e = UndefinedSymbolData.size(); i != e; ++i) - WriteNlist32(UndefinedSymbolData[i]); + WriteNlist(UndefinedSymbolData[i]); // Write the string table. OS << StringTable.str(); diff --git a/test/MC/MachO/symbols-1.s b/test/MC/MachO/symbols-1.s index 4c72fb3e7c2..623e5285fe5 100644 --- a/test/MC/MachO/symbols-1.s +++ b/test/MC/MachO/symbols-1.s @@ -1,4 +1,5 @@ -// RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | macho-dump | FileCheck %s +// RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | macho-dump | FileCheck -check-prefix CHECK-X86_32 %s +// RUN: llvm-mc -triple x86_64-apple-darwin10 %s -filetype=obj -o - | macho-dump | FileCheck -check-prefix CHECK-X86_64 %s sym_local_B: .globl sym_globl_def_B @@ -16,146 +17,294 @@ sym_globl_def_C: Lsym_asm_temp: .long 0 -// CHECK: ('cputype', 7) -// CHECK: ('cpusubtype', 3) -// CHECK: ('filetype', 1) -// CHECK: ('num_load_commands', 1) -// CHECK: ('load_commands_size', 228) -// CHECK: ('flag', 0) -// CHECK: ('load_commands', [ -// CHECK: # Load Command 0 -// CHECK: (('command', 1) -// CHECK: ('size', 124) -// CHECK: ('segment_name', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') -// CHECK: ('vm_addr', 0) -// CHECK: ('vm_size', 4) -// CHECK: ('file_offset', 256) -// CHECK: ('file_size', 4) -// CHECK: ('maxprot', 7) -// CHECK: ('initprot', 7) -// CHECK: ('num_sections', 1) -// CHECK: ('flags', 0) -// CHECK: ('sections', [ -// CHECK: # Section 0 -// CHECK: (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') -// CHECK: ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') -// CHECK: ('address', 0) -// CHECK: ('size', 4) -// CHECK: ('offset', 256) -// CHECK: ('alignment', 0) -// CHECK: ('reloc_offset', 0) -// CHECK: ('num_reloc', 0) -// CHECK: ('flags', 0x80000000) -// CHECK: ('reserved1', 0) -// CHECK: ('reserved2', 0) -// CHECK: ), -// CHECK: ]) -// CHECK: ), -// CHECK: # Load Command 1 -// CHECK: (('command', 2) -// CHECK: ('size', 24) -// CHECK: ('symoff', 260) -// CHECK: ('nsyms', 9) -// CHECK: ('stroff', 368) -// CHECK: ('strsize', 140) -// CHECK: ('_string_data', '\x00sym_globl_def_B\x00sym_globl_undef_B\x00sym_globl_def_A\x00sym_globl_undef_A\x00sym_globl_def_C\x00sym_globl_undef_C\x00sym_local_B\x00sym_local_A\x00sym_local_C\x00\x00') -// CHECK: ('_symbols', [ -// CHECK: # Symbol 0 -// CHECK: (('n_strx', 103) -// CHECK: ('n_type', 0xe) -// CHECK: ('n_sect', 1) -// CHECK: ('n_desc', 0) -// CHECK: ('n_value', 0) -// CHECK: ('_string', 'sym_local_B') -// CHECK: ), -// CHECK: # Symbol 1 -// CHECK: (('n_strx', 115) -// CHECK: ('n_type', 0xe) -// CHECK: ('n_sect', 1) -// CHECK: ('n_desc', 0) -// CHECK: ('n_value', 0) -// CHECK: ('_string', 'sym_local_A') -// CHECK: ), -// CHECK: # Symbol 2 -// CHECK: (('n_strx', 127) -// CHECK: ('n_type', 0xe) -// CHECK: ('n_sect', 1) -// CHECK: ('n_desc', 0) -// CHECK: ('n_value', 0) -// CHECK: ('_string', 'sym_local_C') -// CHECK: ), -// CHECK: # Symbol 3 -// CHECK: (('n_strx', 35) -// CHECK: ('n_type', 0xf) -// CHECK: ('n_sect', 1) -// CHECK: ('n_desc', 0) -// CHECK: ('n_value', 0) -// CHECK: ('_string', 'sym_globl_def_A') -// CHECK: ), -// CHECK: # Symbol 4 -// CHECK: (('n_strx', 1) -// CHECK: ('n_type', 0xf) -// CHECK: ('n_sect', 1) -// CHECK: ('n_desc', 0) -// CHECK: ('n_value', 0) -// CHECK: ('_string', 'sym_globl_def_B') -// CHECK: ), -// CHECK: # Symbol 5 -// CHECK: (('n_strx', 69) -// CHECK: ('n_type', 0xf) -// CHECK: ('n_sect', 1) -// CHECK: ('n_desc', 0) -// CHECK: ('n_value', 0) -// CHECK: ('_string', 'sym_globl_def_C') -// CHECK: ), -// CHECK: # Symbol 6 -// CHECK: (('n_strx', 51) -// CHECK: ('n_type', 0x1) -// CHECK: ('n_sect', 0) -// CHECK: ('n_desc', 0) -// CHECK: ('n_value', 0) -// CHECK: ('_string', 'sym_globl_undef_A') -// CHECK: ), -// CHECK: # Symbol 7 -// CHECK: (('n_strx', 17) -// CHECK: ('n_type', 0x1) -// CHECK: ('n_sect', 0) -// CHECK: ('n_desc', 0) -// CHECK: ('n_value', 0) -// CHECK: ('_string', 'sym_globl_undef_B') -// CHECK: ), -// CHECK: # Symbol 8 -// CHECK: (('n_strx', 85) -// CHECK: ('n_type', 0x1) -// CHECK: ('n_sect', 0) -// CHECK: ('n_desc', 0) -// CHECK: ('n_value', 0) -// CHECK: ('_string', 'sym_globl_undef_C') -// CHECK: ), -// CHECK: ]) -// CHECK: ), -// CHECK: # Load Command 2 -// CHECK: (('command', 11) -// CHECK: ('size', 80) -// CHECK: ('ilocalsym', 0) -// CHECK: ('nlocalsym', 3) -// CHECK: ('iextdefsym', 3) -// CHECK: ('nextdefsym', 3) -// CHECK: ('iundefsym', 6) -// CHECK: ('nundefsym', 3) -// CHECK: ('tocoff', 0) -// CHECK: ('ntoc', 0) -// CHECK: ('modtaboff', 0) -// CHECK: ('nmodtab', 0) -// CHECK: ('extrefsymoff', 0) -// CHECK: ('nextrefsyms', 0) -// CHECK: ('indirectsymoff', 0) -// CHECK: ('nindirectsyms', 0) -// CHECK: ('extreloff', 0) -// CHECK: ('nextrel', 0) -// CHECK: ('locreloff', 0) -// CHECK: ('nlocrel', 0) -// CHECK: ('_indirect_symbols', [ -// CHECK: ]) -// CHECK: ), -// CHECK: ]) +// CHECK-X86_32: ('cputype', 7) +// CHECK-X86_32: ('cpusubtype', 3) +// CHECK-X86_32: ('filetype', 1) +// CHECK-X86_32: ('num_load_commands', 1) +// CHECK-X86_32: ('load_commands_size', 228) +// CHECK-X86_32: ('flag', 0) +// CHECK-X86_32: ('load_commands', [ +// CHECK-X86_32: # Load Command 0 +// CHECK-X86_32: (('command', 1) +// CHECK-X86_32: ('size', 124) +// CHECK-X86_32: ('segment_name', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +// CHECK-X86_32: ('vm_addr', 0) +// CHECK-X86_32: ('vm_size', 4) +// CHECK-X86_32: ('file_offset', 256) +// CHECK-X86_32: ('file_size', 4) +// CHECK-X86_32: ('maxprot', 7) +// CHECK-X86_32: ('initprot', 7) +// CHECK-X86_32: ('num_sections', 1) +// CHECK-X86_32: ('flags', 0) +// CHECK-X86_32: ('sections', [ +// CHECK-X86_32: # Section 0 +// CHECK-X86_32: (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +// CHECK-X86_32: ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +// CHECK-X86_32: ('address', 0) +// CHECK-X86_32: ('size', 4) +// CHECK-X86_32: ('offset', 256) +// CHECK-X86_32: ('alignment', 0) +// CHECK-X86_32: ('reloc_offset', 0) +// CHECK-X86_32: ('num_reloc', 0) +// CHECK-X86_32: ('flags', 0x80000000) +// CHECK-X86_32: ('reserved1', 0) +// CHECK-X86_32: ('reserved2', 0) +// CHECK-X86_32: ), +// CHECK-X86_32: ]) +// CHECK-X86_32: ), +// CHECK-X86_32: # Load Command 1 +// CHECK-X86_32: (('command', 2) +// CHECK-X86_32: ('size', 24) +// CHECK-X86_32: ('symoff', 260) +// CHECK-X86_32: ('nsyms', 9) +// CHECK-X86_32: ('stroff', 368) +// CHECK-X86_32: ('strsize', 140) +// CHECK-X86_32: ('_string_data', '\x00sym_globl_def_B\x00sym_globl_undef_B\x00sym_globl_def_A\x00sym_globl_undef_A\x00sym_globl_def_C\x00sym_globl_undef_C\x00sym_local_B\x00sym_local_A\x00sym_local_C\x00\x00') +// CHECK-X86_32: ('_symbols', [ +// CHECK-X86_32: # Symbol 0 +// CHECK-X86_32: (('n_strx', 103) +// CHECK-X86_32: ('n_type', 0xe) +// CHECK-X86_32: ('n_sect', 1) +// CHECK-X86_32: ('n_desc', 0) +// CHECK-X86_32: ('n_value', 0) +// CHECK-X86_32: ('_string', 'sym_local_B') +// CHECK-X86_32: ), +// CHECK-X86_32: # Symbol 1 +// CHECK-X86_32: (('n_strx', 115) +// CHECK-X86_32: ('n_type', 0xe) +// CHECK-X86_32: ('n_sect', 1) +// CHECK-X86_32: ('n_desc', 0) +// CHECK-X86_32: ('n_value', 0) +// CHECK-X86_32: ('_string', 'sym_local_A') +// CHECK-X86_32: ), +// CHECK-X86_32: # Symbol 2 +// CHECK-X86_32: (('n_strx', 127) +// CHECK-X86_32: ('n_type', 0xe) +// CHECK-X86_32: ('n_sect', 1) +// CHECK-X86_32: ('n_desc', 0) +// CHECK-X86_32: ('n_value', 0) +// CHECK-X86_32: ('_string', 'sym_local_C') +// CHECK-X86_32: ), +// CHECK-X86_32: # Symbol 3 +// CHECK-X86_32: (('n_strx', 35) +// CHECK-X86_32: ('n_type', 0xf) +// CHECK-X86_32: ('n_sect', 1) +// CHECK-X86_32: ('n_desc', 0) +// CHECK-X86_32: ('n_value', 0) +// CHECK-X86_32: ('_string', 'sym_globl_def_A') +// CHECK-X86_32: ), +// CHECK-X86_32: # Symbol 4 +// CHECK-X86_32: (('n_strx', 1) +// CHECK-X86_32: ('n_type', 0xf) +// CHECK-X86_32: ('n_sect', 1) +// CHECK-X86_32: ('n_desc', 0) +// CHECK-X86_32: ('n_value', 0) +// CHECK-X86_32: ('_string', 'sym_globl_def_B') +// CHECK-X86_32: ), +// CHECK-X86_32: # Symbol 5 +// CHECK-X86_32: (('n_strx', 69) +// CHECK-X86_32: ('n_type', 0xf) +// CHECK-X86_32: ('n_sect', 1) +// CHECK-X86_32: ('n_desc', 0) +// CHECK-X86_32: ('n_value', 0) +// CHECK-X86_32: ('_string', 'sym_globl_def_C') +// CHECK-X86_32: ), +// CHECK-X86_32: # Symbol 6 +// CHECK-X86_32: (('n_strx', 51) +// CHECK-X86_32: ('n_type', 0x1) +// CHECK-X86_32: ('n_sect', 0) +// CHECK-X86_32: ('n_desc', 0) +// CHECK-X86_32: ('n_value', 0) +// CHECK-X86_32: ('_string', 'sym_globl_undef_A') +// CHECK-X86_32: ), +// CHECK-X86_32: # Symbol 7 +// CHECK-X86_32: (('n_strx', 17) +// CHECK-X86_32: ('n_type', 0x1) +// CHECK-X86_32: ('n_sect', 0) +// CHECK-X86_32: ('n_desc', 0) +// CHECK-X86_32: ('n_value', 0) +// CHECK-X86_32: ('_string', 'sym_globl_undef_B') +// CHECK-X86_32: ), +// CHECK-X86_32: # Symbol 8 +// CHECK-X86_32: (('n_strx', 85) +// CHECK-X86_32: ('n_type', 0x1) +// CHECK-X86_32: ('n_sect', 0) +// CHECK-X86_32: ('n_desc', 0) +// CHECK-X86_32: ('n_value', 0) +// CHECK-X86_32: ('_string', 'sym_globl_undef_C') +// CHECK-X86_32: ), +// CHECK-X86_32: ]) +// CHECK-X86_32: ), +// CHECK-X86_32: # Load Command 2 +// CHECK-X86_32: (('command', 11) +// CHECK-X86_32: ('size', 80) +// CHECK-X86_32: ('ilocalsym', 0) +// CHECK-X86_32: ('nlocalsym', 3) +// CHECK-X86_32: ('iextdefsym', 3) +// CHECK-X86_32: ('nextdefsym', 3) +// CHECK-X86_32: ('iundefsym', 6) +// CHECK-X86_32: ('nundefsym', 3) +// CHECK-X86_32: ('tocoff', 0) +// CHECK-X86_32: ('ntoc', 0) +// CHECK-X86_32: ('modtaboff', 0) +// CHECK-X86_32: ('nmodtab', 0) +// CHECK-X86_32: ('extrefsymoff', 0) +// CHECK-X86_32: ('nextrefsyms', 0) +// CHECK-X86_32: ('indirectsymoff', 0) +// CHECK-X86_32: ('nindirectsyms', 0) +// CHECK-X86_32: ('extreloff', 0) +// CHECK-X86_32: ('nextrel', 0) +// CHECK-X86_32: ('locreloff', 0) +// CHECK-X86_32: ('nlocrel', 0) +// CHECK-X86_32: ('_indirect_symbols', [ +// CHECK-X86_32: ]) +// CHECK-X86_32: ), +// CHECK-X86_32: ]) + +// CHECK-X86_64: ('cputype', 16777223) +// CHECK-X86_64: ('cpusubtype', 3) +// CHECK-X86_64: ('filetype', 1) +// CHECK-X86_64: ('num_load_commands', 1) +// CHECK-X86_64: ('load_commands_size', 256) +// CHECK-X86_64: ('flag', 0) +// CHECK-X86_64: ('reserved', 0) +// CHECK-X86_64: ('load_commands', [ +// CHECK-X86_64: # Load Command 0 +// CHECK-X86_64: (('command', 25) +// CHECK-X86_64: ('size', 152) +// CHECK-X86_64: ('segment_name', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +// CHECK-X86_64: ('vm_addr', 0) +// CHECK-X86_64: ('vm_size', 4) +// CHECK-X86_64: ('file_offset', 288) +// CHECK-X86_64: ('file_size', 4) +// CHECK-X86_64: ('maxprot', 7) +// CHECK-X86_64: ('initprot', 7) +// CHECK-X86_64: ('num_sections', 1) +// CHECK-X86_64: ('flags', 0) +// CHECK-X86_64: ('sections', [ +// CHECK-X86_64: # Section 0 +// CHECK-X86_64: (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +// CHECK-X86_64: ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +// CHECK-X86_64: ('address', 0) +// CHECK-X86_64: ('size', 4) +// CHECK-X86_64: ('offset', 288) +// CHECK-X86_64: ('alignment', 0) +// CHECK-X86_64: ('reloc_offset', 0) +// CHECK-X86_64: ('num_reloc', 0) +// CHECK-X86_64: ('flags', 0x80000000) +// CHECK-X86_64: ('reserved1', 0) +// CHECK-X86_64: ('reserved2', 0) +// CHECK-X86_64: ('reserved3', 0) +// CHECK-X86_64: ), +// CHECK-X86_64: ('_relocations', [ +// CHECK-X86_64: ]) +// CHECK-X86_64: ]) +// CHECK-X86_64: ), +// CHECK-X86_64: # Load Command 1 +// CHECK-X86_64: (('command', 2) +// CHECK-X86_64: ('size', 24) +// CHECK-X86_64: ('symoff', 292) +// CHECK-X86_64: ('nsyms', 9) +// CHECK-X86_64: ('stroff', 436) +// CHECK-X86_64: ('strsize', 140) +// CHECK-X86_64: ('_string_data', '\x00sym_globl_def_B\x00sym_globl_undef_B\x00sym_globl_def_A\x00sym_globl_undef_A\x00sym_globl_def_C\x00sym_globl_undef_C\x00sym_local_B\x00sym_local_A\x00sym_local_C\x00\x00') +// CHECK-X86_64: ('_symbols', [ +// CHECK-X86_64: # Symbol 0 +// CHECK-X86_64: (('n_strx', 103) +// CHECK-X86_64: ('n_type', 0xe) +// CHECK-X86_64: ('n_sect', 1) +// CHECK-X86_64: ('n_desc', 0) +// CHECK-X86_64: ('n_value', 0) +// CHECK-X86_64: ('_string', 'sym_local_B') +// CHECK-X86_64: ), +// CHECK-X86_64: # Symbol 1 +// CHECK-X86_64: (('n_strx', 115) +// CHECK-X86_64: ('n_type', 0xe) +// CHECK-X86_64: ('n_sect', 1) +// CHECK-X86_64: ('n_desc', 0) +// CHECK-X86_64: ('n_value', 0) +// CHECK-X86_64: ('_string', 'sym_local_A') +// CHECK-X86_64: ), +// CHECK-X86_64: # Symbol 2 +// CHECK-X86_64: (('n_strx', 127) +// CHECK-X86_64: ('n_type', 0xe) +// CHECK-X86_64: ('n_sect', 1) +// CHECK-X86_64: ('n_desc', 0) +// CHECK-X86_64: ('n_value', 0) +// CHECK-X86_64: ('_string', 'sym_local_C') +// CHECK-X86_64: ), +// CHECK-X86_64: # Symbol 3 +// CHECK-X86_64: (('n_strx', 35) +// CHECK-X86_64: ('n_type', 0xf) +// CHECK-X86_64: ('n_sect', 1) +// CHECK-X86_64: ('n_desc', 0) +// CHECK-X86_64: ('n_value', 0) +// CHECK-X86_64: ('_string', 'sym_globl_def_A') +// CHECK-X86_64: ), +// CHECK-X86_64: # Symbol 4 +// CHECK-X86_64: (('n_strx', 1) +// CHECK-X86_64: ('n_type', 0xf) +// CHECK-X86_64: ('n_sect', 1) +// CHECK-X86_64: ('n_desc', 0) +// CHECK-X86_64: ('n_value', 0) +// CHECK-X86_64: ('_string', 'sym_globl_def_B') +// CHECK-X86_64: ), +// CHECK-X86_64: # Symbol 5 +// CHECK-X86_64: (('n_strx', 69) +// CHECK-X86_64: ('n_type', 0xf) +// CHECK-X86_64: ('n_sect', 1) +// CHECK-X86_64: ('n_desc', 0) +// CHECK-X86_64: ('n_value', 0) +// CHECK-X86_64: ('_string', 'sym_globl_def_C') +// CHECK-X86_64: ), +// CHECK-X86_64: # Symbol 6 +// CHECK-X86_64: (('n_strx', 51) +// CHECK-X86_64: ('n_type', 0x1) +// CHECK-X86_64: ('n_sect', 0) +// CHECK-X86_64: ('n_desc', 0) +// CHECK-X86_64: ('n_value', 0) +// CHECK-X86_64: ('_string', 'sym_globl_undef_A') +// CHECK-X86_64: ), +// CHECK-X86_64: # Symbol 7 +// CHECK-X86_64: (('n_strx', 17) +// CHECK-X86_64: ('n_type', 0x1) +// CHECK-X86_64: ('n_sect', 0) +// CHECK-X86_64: ('n_desc', 0) +// CHECK-X86_64: ('n_value', 0) +// CHECK-X86_64: ('_string', 'sym_globl_undef_B') +// CHECK-X86_64: ), +// CHECK-X86_64: # Symbol 8 +// CHECK-X86_64: (('n_strx', 85) +// CHECK-X86_64: ('n_type', 0x1) +// CHECK-X86_64: ('n_sect', 0) +// CHECK-X86_64: ('n_desc', 0) +// CHECK-X86_64: ('n_value', 0) +// CHECK-X86_64: ('_string', 'sym_globl_undef_C') +// CHECK-X86_64: ), +// CHECK-X86_64: ]) +// CHECK-X86_64: ), +// CHECK-X86_64: # Load Command 2 +// CHECK-X86_64: (('command', 11) +// CHECK-X86_64: ('size', 80) +// CHECK-X86_64: ('ilocalsym', 0) +// CHECK-X86_64: ('nlocalsym', 3) +// CHECK-X86_64: ('iextdefsym', 3) +// CHECK-X86_64: ('nextdefsym', 3) +// CHECK-X86_64: ('iundefsym', 6) +// CHECK-X86_64: ('nundefsym', 3) +// CHECK-X86_64: ('tocoff', 0) +// CHECK-X86_64: ('ntoc', 0) +// CHECK-X86_64: ('modtaboff', 0) +// CHECK-X86_64: ('nmodtab', 0) +// CHECK-X86_64: ('extrefsymoff', 0) +// CHECK-X86_64: ('nextrefsyms', 0) +// CHECK-X86_64: ('indirectsymoff', 0) +// CHECK-X86_64: ('nindirectsyms', 0) +// CHECK-X86_64: ('extreloff', 0) +// CHECK-X86_64: ('nextrel', 0) +// CHECK-X86_64: ('locreloff', 0) +// CHECK-X86_64: ('nlocrel', 0) +// CHECK-X86_64: ('_indirect_symbols', [ +// CHECK-X86_64: ]) +// CHECK-X86_64: ), +// CHECK-X86_64: ]) diff --git a/test/Scripts/macho-dump b/test/Scripts/macho-dump index c2598f5b00d..72f833975d0 100755 --- a/test/Scripts/macho-dump +++ b/test/Scripts/macho-dump @@ -187,8 +187,12 @@ def dumpNlist32(f, i, opts): print " ('n_sect', %r)" % n_sect n_desc = f.read16() print " ('n_desc', %r)" % n_desc - n_value = f.read32() - print " ('n_value', %r)" % n_value + if f.is64Bit: + n_value = f.read64() + print " ('n_value', %r)" % n_value + else: + n_value = f.read32() + print " ('n_value', %r)" % n_value print " ('_string', %r)" % f.getString(n_strx) print " )," -- 2.34.1