diff --git a/llvm/lib/MC/XCOFFObjectWriter.cpp b/llvm/lib/MC/XCOFFObjectWriter.cpp --- a/llvm/lib/MC/XCOFFObjectWriter.cpp +++ b/llvm/lib/MC/XCOFFObjectWriter.cpp @@ -200,6 +200,7 @@ uint64_t SymbolTableOffset = 0; uint16_t SectionCount = 0; uint64_t RelocationEntryOffset = 0; + StringRef SourceFileName = ".file"; support::endian::Writer W; std::unique_ptr TargetObjectWriter; @@ -256,7 +257,7 @@ uint64_t writeObject(MCAssembler &, const MCAsmLayout &) override; bool is64Bit() const { return TargetObjectWriter->is64Bit(); } - static bool nameShouldBeInStringTable(const StringRef &); + bool nameShouldBeInStringTable(const StringRef &); void writeSymbolName(const StringRef &); void writeSymbolEntryForCsectMemberLabel(const Symbol &SymbolRef, @@ -274,18 +275,18 @@ void writeSectionForControlSectionEntry(const MCAssembler &Asm, const MCAsmLayout &Layout, const CsectSectionEntry &CsectEntry, - uint32_t &CurrentAddressLocation); + uint64_t &CurrentAddressLocation); void writeSectionForDwarfSectionEntry(const MCAssembler &Asm, const MCAsmLayout &Layout, const DwarfSectionEntry &DwarfEntry, - uint32_t &CurrentAddressLocation); + uint64_t &CurrentAddressLocation); void writeSymbolTable(const MCAsmLayout &Layout); - void writeSymbolAuxDwarfEntry(uint32_t LengthOfSectionPortion, - uint32_t NumberOfRelocEnt = 0); - void writeSymbolAuxCsectEntry(uint32_t SectionOrLength, + void writeSymbolAuxDwarfEntry(uint64_t LengthOfSectionPortion, + uint64_t NumberOfRelocEnt = 0); + void writeSymbolAuxCsectEntry(uint64_t SectionOrLength, uint8_t SymbolAlignmentAndType, uint8_t StorageMappingClass); - void writeSymbolEntry(StringRef SymbolName, uint32_t Value, + void writeSymbolEntry(StringRef SymbolName, uint64_t Value, int16_t SectionNumber, uint16_t SymbolType, uint8_t StorageClass, uint8_t NumberOfAuxEntries = 1); void writeRelocations(); @@ -493,6 +494,10 @@ Strings.add(XSym->getSymbolTableName()); } + // The first symbol entry is for the source file's name. + if (nameShouldBeInStringTable(SourceFileName)) + Strings.add(SourceFileName); + Strings.finalize(); assignAddressesAndIndices(Layout); } @@ -612,8 +617,7 @@ void XCOFFObjectWriter::writeSections(const MCAssembler &Asm, const MCAsmLayout &Layout) { - assert(!is64Bit() && "Writing 64-bit sections is not yet supported."); - uint32_t CurrentAddressLocation = 0; + uint64_t CurrentAddressLocation = 0; for (const auto *Section : Sections) writeSectionForControlSectionEntry(Asm, Layout, *Section, CurrentAddressLocation); @@ -635,21 +639,17 @@ writeFileHeader(); writeSectionHeaderTable(); - - if (!is64Bit()) { - writeSections(Asm, Layout); - writeRelocations(); - - writeSymbolTable(Layout); - // Write the string table. - Strings.write(W.OS); - } + writeSections(Asm, Layout); + writeRelocations(); + writeSymbolTable(Layout); + // Write the string table. + Strings.write(W.OS); return W.OS.tell() - StartOffset; } bool XCOFFObjectWriter::nameShouldBeInStringTable(const StringRef &SymbolName) { - return SymbolName.size() > XCOFF::NameSize; + return SymbolName.size() > XCOFF::NameSize || is64Bit(); } void XCOFFObjectWriter::writeSymbolName(const StringRef &SymbolName) { @@ -665,13 +665,18 @@ } } -void XCOFFObjectWriter::writeSymbolEntry(StringRef SymbolName, uint32_t Value, +void XCOFFObjectWriter::writeSymbolEntry(StringRef SymbolName, uint64_t Value, int16_t SectionNumber, uint16_t SymbolType, uint8_t StorageClass, uint8_t NumberOfAuxEntries) { - writeSymbolName(SymbolName); - W.write(Value); + if (is64Bit()) { + W.write(Value); + W.write(Strings.getOffset(SymbolName)); + } else { + writeSymbolName(SymbolName); + W.write(Value); + } W.write(SectionNumber); // Basic/Derived type. See the description of the n_type field for symbol // table entries for a detailed description. Since we don't yet support @@ -686,24 +691,36 @@ W.write(NumberOfAuxEntries); } -void XCOFFObjectWriter::writeSymbolAuxCsectEntry(uint32_t SectionOrLength, +void XCOFFObjectWriter::writeSymbolAuxCsectEntry(uint64_t SectionOrLength, uint8_t SymbolAlignmentAndType, uint8_t StorageMappingClass) { - W.write(SectionOrLength); + W.write(is64Bit() ? Lo_32(SectionOrLength) : SectionOrLength); W.write(0); // ParameterHashIndex W.write(0); // TypeChkSectNum W.write(SymbolAlignmentAndType); W.write(StorageMappingClass); - W.write(0); // StabInfoIndex - W.write(0); // StabSectNum + if (is64Bit()) { + W.write(Hi_32(SectionOrLength)); + W.OS.write_zeros(1); // Reserved + W.write(XCOFF::AUX_CSECT); + } else { + W.write(0); // StabInfoIndex + W.write(0); // StabSectNum + } } void XCOFFObjectWriter::writeSymbolAuxDwarfEntry( - uint32_t LengthOfSectionPortion, uint32_t NumberOfRelocEnt) { - W.write(LengthOfSectionPortion); - W.OS.write_zeros(4); // Reserved - W.write(NumberOfRelocEnt); - W.OS.write_zeros(6); // Reserved + uint64_t LengthOfSectionPortion, uint64_t NumberOfRelocEnt) { + writeWord(LengthOfSectionPortion); + if (!is64Bit()) + W.OS.write_zeros(4); // Reserved + writeWord(NumberOfRelocEnt); + if (is64Bit()) { + W.OS.write_zeros(1); // Reserved + W.write(XCOFF::AUX_SECT); + } else { + W.OS.write_zeros(6); // Reserved + } } void XCOFFObjectWriter::writeSymbolEntryForCsectMemberLabel( @@ -749,7 +766,7 @@ W.write(0); // AuxHeaderSize. No optional header for an object // file that is not to be loaded. W.write(0); // Flags - W.write(0); // SymbolTableEntryCount. Not supported yet. + W.write(SymbolTableEntryCount); } else { W.write(SymbolTableEntryCount); W.write(0); // AuxHeaderSize. No optional header for an object @@ -780,7 +797,7 @@ writeWord(0); // FileOffsetToLineNumberInfo. Not supported yet. if (is64Bit()) { - W.write(0); // NumberOfRelocations. Not yet supported in 64-bit. + W.write(Sec->RelocationCount); W.write(0); // NumberOfLineNumbers. Not supported yet. W.write(Sec->Flags); W.OS.write_zeros(4); @@ -801,13 +818,12 @@ void XCOFFObjectWriter::writeRelocation(XCOFFRelocation Reloc, const XCOFFSection &Section) { - assert(!is64Bit() && "Writing 64-bit relocation is not yet supported."); if (Section.MCSec->isCsect()) - W.write(Section.Address + Reloc.FixupOffsetInCsect); + writeWord(Section.Address + Reloc.FixupOffsetInCsect); else { // DWARF sections' address is set to 0. assert(Section.MCSec->isDwarfSect() && "unsupport section type!"); - W.write(Reloc.FixupOffsetInCsect); + writeWord(Reloc.FixupOffsetInCsect); } W.write(Reloc.SymbolTableIndex); W.write(Reloc.SignAndSize); @@ -837,14 +853,13 @@ } void XCOFFObjectWriter::writeSymbolTable(const MCAsmLayout &Layout) { - assert(!is64Bit() && "Writing 64-bit symbol table is not yet supported."); // Write symbol 0 as C_FILE. - // FIXME: support 64-bit C_FILE symbol. // The n_name of a C_FILE symbol is the source file's name when no auxiliary // entries are present. The source file's name is alternatively provided by an // auxiliary entry, in which case the n_name of the C_FILE symbol is `.file`. // FIXME: add the real source file's name. - writeSymbolEntry(".file", /*Value=*/0, XCOFF::ReservedSectionNum::N_DEBUG, + writeSymbolEntry(SourceFileName, /*Value=*/0, + XCOFF::ReservedSectionNum::N_DEBUG, /*SymbolType=*/0, XCOFF::C_FILE, /*NumberOfAuxEntries=*/0); @@ -892,8 +907,10 @@ for (auto &Csect : *Group) { const size_t CsectRelocCount = Csect.Relocations.size(); - if (CsectRelocCount >= XCOFF::RelocOverflow || - Section->RelocationCount >= XCOFF::RelocOverflow - CsectRelocCount) + // An XCOFF64 file may not contain an overflow section header. + if (!is64Bit() && (CsectRelocCount >= XCOFF::RelocOverflow || + Section->RelocationCount >= + XCOFF::RelocOverflow - CsectRelocCount)) report_fatal_error( "relocation entries overflowed; overflow section is " "not implemented yet"); @@ -916,8 +933,10 @@ return false; Sec->FileOffsetToRelocations = RawPointer; - const uint32_t RelocationSizeInSec = - Sec->RelocationCount * XCOFF::RelocationSerializationSize32; + const uint64_t RelocationSizeInSec = + Sec->RelocationCount * (is64Bit() + ? XCOFF::RelocationSerializationSize64 + : XCOFF::RelocationSerializationSize32); RawPointer += RelocationSizeInSec; if (RawPointer > MaxRawDataSize) report_fatal_error("Relocation data overflowed this object file."); @@ -954,7 +973,7 @@ // The address corrresponds to the address of sections and symbols in the // object file. We place the shared address 0 immediately after the // section header table. - uint32_t Address = 0; + uint64_t Address = 0; // Section indices are 1-based in XCOFF. int32_t SectionIndex = 1; bool HasTDataSection = false; @@ -1091,7 +1110,7 @@ void XCOFFObjectWriter::writeSectionForControlSectionEntry( const MCAssembler &Asm, const MCAsmLayout &Layout, - const CsectSectionEntry &CsectEntry, uint32_t &CurrentAddressLocation) { + const CsectSectionEntry &CsectEntry, uint64_t &CurrentAddressLocation) { // Nothing to write for this Section. if (CsectEntry.Index == SectionEntry::UninitializedIndex) return; @@ -1129,7 +1148,7 @@ // The size of the tail padding in a section is the end virtual address of // the current section minus the the end virtual address of the last csect // in that section. - if (uint32_t PaddingSize = + if (uint64_t PaddingSize = CsectEntry.Address + CsectEntry.Size - CurrentAddressLocation) { W.OS.write_zeros(PaddingSize); CurrentAddressLocation += PaddingSize; @@ -1138,7 +1157,7 @@ void XCOFFObjectWriter::writeSectionForDwarfSectionEntry( const MCAssembler &Asm, const MCAsmLayout &Layout, - const DwarfSectionEntry &DwarfEntry, uint32_t &CurrentAddressLocation) { + const DwarfSectionEntry &DwarfEntry, uint64_t &CurrentAddressLocation) { // There could be a gap (without corresponding zero padding) between // sections. For example DWARF section alignment is bigger than // DefaultSectionAlign. @@ -1146,7 +1165,7 @@ "CurrentAddressLocation should be less than or equal to section " "address."); - if (uint32_t PaddingSize = DwarfEntry.Address - CurrentAddressLocation) + if (uint64_t PaddingSize = DwarfEntry.Address - CurrentAddressLocation) W.OS.write_zeros(PaddingSize); if (DwarfEntry.Size) diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp --- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp +++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp @@ -71,6 +71,19 @@ return {XCOFF::RelocationType::R_TOCL, SignAndSizeForHalf16}; } } break; + case PPC::fixup_ppc_half16ds: + case PPC::fixup_ppc_half16dq: { + if (IsPCRel) + report_fatal_error("Invalid PC-relative relocation."); + switch (Modifier) { + default: + llvm_unreachable("Unsupported Modifier"); + case MCSymbolRefExpr::VK_None: + return {XCOFF::RelocationType::R_TOC, 15}; + case MCSymbolRefExpr::VK_PPC_L: + return {XCOFF::RelocationType::R_TOCL, 15}; + } + } break; case PPC::fixup_ppc_br24: // Branches are 4 byte aligned, so the 24 bits we encode in // the instruction actually represents a 26 bit offset. @@ -78,15 +91,19 @@ case PPC::fixup_ppc_br24abs: return {XCOFF::RelocationType::R_RBA, EncodedSignednessIndicator | 25}; case FK_Data_4: + case FK_Data_8: + const uint8_t SignAndSizeForFKData = + EncodedSignednessIndicator | + ((unsigned)Fixup.getKind() == FK_Data_4 ? 31 : 63); switch (Modifier) { default: report_fatal_error("Unsupported modifier"); case MCSymbolRefExpr::VK_PPC_AIX_TLSGD: - return {XCOFF::RelocationType::R_TLS, EncodedSignednessIndicator | 31}; + return {XCOFF::RelocationType::R_TLS, SignAndSizeForFKData}; case MCSymbolRefExpr::VK_PPC_AIX_TLSGDM: - return {XCOFF::RelocationType::R_TLSM, EncodedSignednessIndicator | 31}; + return {XCOFF::RelocationType::R_TLSM, SignAndSizeForFKData}; case MCSymbolRefExpr::VK_None: - return {XCOFF::RelocationType::R_POS, EncodedSignednessIndicator | 31}; + return {XCOFF::RelocationType::R_POS, SignAndSizeForFKData}; } } } diff --git a/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage.ll b/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage.ll --- a/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage.ll +++ b/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage.ll @@ -1,36 +1,35 @@ ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ -; RUN: -mattr=-altivec < %s | \ -; RUN: FileCheck %s +; RUN: -mattr=-altivec < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ -; RUN: -mattr=-altivec < %s | \ -; RUN: FileCheck %s +; RUN: -mattr=-altivec < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ ; RUN: -mattr=-altivec -filetype=obj -o %t.o < %s -; RUN: llvm-readobj --symbols %t.o | \ -; RUN: FileCheck --check-prefix=XCOFF32 %s +; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefixes=XCOFF,XCOFF32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ +; RUN: -mattr=-altivec -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefixes=XCOFF,XCOFF64 %s @_ZN3Foo1aE = available_externally constant i32 -1 ; CHECK: .extern _ZN3Foo1aE[UA] -; XCOFF32: Index: [[#Index:]]{{.*}}{{[[:space:]] *}}Name: _ZN3Foo1aE -; XCOFF32-NEXT: Value (RelocatableAddress): 0x0 -; XCOFF32-NEXT: Section: N_UNDEF -; XCOFF32-NEXT: Type: 0x0 -; XCOFF32-NEXT: StorageClass: C_EXT (0x2) -; XCOFF32-NEXT: NumberOfAuxEntries: 1 -; XCOFF32-NEXT: CSECT Auxiliary Entry { -; XCOFF32-NEXT: Index: [[#Index+1]] -; XCOFF32-NEXT: SectionLen: 0 -; XCOFF32-NEXT: ParameterHashIndex: 0x0 -; XCOFF32-NEXT: TypeChkSectNum: 0x0 -; XCOFF32-NEXT: SymbolAlignmentLog2: 0 -; XCOFF32-NEXT: SymbolType: XTY_ER (0x0) -; XCOFF32-NEXT: StorageMappingClass: XMC_UA (0x4) -; XCOFF32-NEXT: StabInfoIndex: 0x0 -; XCOFF32-NEXT: StabSectNum: 0x0 -; XCOFF32-NEXT: } +; XCOFF: Index: [[#Index:]]{{.*}}{{[[:space:]] *}}Name: _ZN3Foo1aE +; XCOFF-NEXT: Value (RelocatableAddress): 0x0 +; XCOFF-NEXT: Section: N_UNDEF +; XCOFF-NEXT: Type: 0x0 +; XCOFF-NEXT: StorageClass: C_EXT (0x2) +; XCOFF-NEXT: NumberOfAuxEntries: 1 +; XCOFF-NEXT: CSECT Auxiliary Entry { +; XCOFF-NEXT: Index: [[#Index+1]] +; XCOFF-NEXT: SectionLen: 0 +; XCOFF-NEXT: ParameterHashIndex: 0x0 +; XCOFF-NEXT: TypeChkSectNum: 0x0 +; XCOFF-NEXT: SymbolAlignmentLog2: 0 +; XCOFF-NEXT: SymbolType: XTY_ER (0x0) +; XCOFF-NEXT: StorageMappingClass: XMC_UA (0x4) +; XCOFF32: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF64: Auxiliary Type: AUX_CSECT (0xFB) diff --git a/llvm/test/CodeGen/PowerPC/aix-dwarf.ll b/llvm/test/CodeGen/PowerPC/aix-dwarf.ll --- a/llvm/test/CodeGen/PowerPC/aix-dwarf.ll +++ b/llvm/test/CodeGen/PowerPC/aix-dwarf.ll @@ -1,9 +1,12 @@ ; RUN: llc -mtriple powerpc-ibm-aix-xcoff -filetype=obj -o %t.o < %s -; RUN: llvm-readobj --section-headers %t.o | FileCheck %s --check-prefix=SEC -; RUN: llc -mtriple powerpc-ibm-aix-xcoff -filetype=obj -o %t.o < %s +; RUN: llvm-readobj --section-headers %t.o | FileCheck %s --check-prefixes=SEC,SEC32 ; RUN: llvm-objdump -r %t.o | FileCheck %s --check-prefix=RELO +; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --section-headers %t64.o | FileCheck %s --check-prefixes=SEC,SEC64 +; RUN: llvm-objdump -r %t64.o | FileCheck %s --check-prefix=RELO64 + ; This file is copied from test/DebugInfo/XCOFF/empty.ll. ; In this test, we focus on XCOFF related formats, like section headers, ; relocation entries. @@ -37,15 +40,15 @@ !11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) !12 = !DILocation(line: 3, column: 3, scope: !8) -; SEC: AddressSize: 32bit -; SEC-NEXT: Sections [ +; SEC: Sections [ ; SEC-NEXT: Section { ; SEC-NEXT: Index: 1 ; SEC-NEXT: Name: .text ; SEC-NEXT: PhysicalAddress: 0x0 ; SEC-NEXT: VirtualAddress: 0x0 ; SEC-NEXT: Size: 0x28 -; SEC-NEXT: RawDataOffset: 0xDC +; SEC32-NEXT: RawDataOffset: 0xDC +; SEC64-NEXT: RawDataOffset: 0x180 ; SEC-NEXT: RelocationPointer: 0x0 ; SEC-NEXT: LineNumberPointer: 0x0 ; SEC-NEXT: NumberOfRelocations: 0 @@ -57,9 +60,12 @@ ; SEC-NEXT: Name: .data ; SEC-NEXT: PhysicalAddress: 0x28 ; SEC-NEXT: VirtualAddress: 0x28 -; SEC-NEXT: Size: 0xC -; SEC-NEXT: RawDataOffset: 0x104 -; SEC-NEXT: RelocationPointer: 0x1D8 +; SEC32-NEXT: Size: 0xC +; SEC32-NEXT: RawDataOffset: 0x104 +; SEC32-NEXT: RelocationPointer: 0x1D8 +; SEC64-NEXT: Size: 0x18 +; SEC64-NEXT: RawDataOffset: 0x1A8 +; SEC64-NEXT: RelocationPointer: 0x2B0 ; SEC-NEXT: LineNumberPointer: 0x0 ; SEC-NEXT: NumberOfRelocations: 2 ; SEC-NEXT: NumberOfLineNumbers: 0 @@ -71,7 +77,8 @@ ; SEC-NEXT: PhysicalAddress: 0x0 ; SEC-NEXT: VirtualAddress: 0x0 ; SEC-NEXT: Size: 0x36 -; SEC-NEXT: RawDataOffset: 0x110 +; SEC32-NEXT: RawDataOffset: 0x110 +; SEC64-NEXT: RawDataOffset: 0x1C0 ; SEC-NEXT: RelocationPointer: 0x0 ; SEC-NEXT: LineNumberPointer: 0x0 ; SEC-NEXT: NumberOfRelocations: 0 @@ -83,9 +90,12 @@ ; SEC-NEXT: Name: .dwinfo ; SEC-NEXT: PhysicalAddress: 0x0 ; SEC-NEXT: VirtualAddress: 0x0 -; SEC-NEXT: Size: 0x57 -; SEC-NEXT: RawDataOffset: 0x148 -; SEC-NEXT: RelocationPointer: 0x1EC +; SEC32-NEXT: Size: 0x57 +; SEC32-NEXT: RawDataOffset: 0x148 +; SEC32-NEXT: RelocationPointer: 0x1EC +; SEC64-NEXT: Size: 0x6F +; SEC64-NEXT: RawDataOffset: 0x1F8 +; SEC64-NEXT: RelocationPointer: 0x2CC ; SEC-NEXT: LineNumberPointer: 0x0 ; SEC-NEXT: NumberOfRelocations: 4 ; SEC-NEXT: NumberOfLineNumbers: 0 @@ -96,9 +106,12 @@ ; SEC-NEXT: Name: .dwline ; SEC-NEXT: PhysicalAddress: 0x0 ; SEC-NEXT: VirtualAddress: 0x0 -; SEC-NEXT: Size: 0x36 -; SEC-NEXT: RawDataOffset: 0x1A0 -; SEC-NEXT: RelocationPointer: 0x214 +; SEC32-NEXT: Size: 0x36 +; SEC32-NEXT: RawDataOffset: 0x1A0 +; SEC32-NEXT: RelocationPointer: 0x214 +; SEC64-NEXT: Size: 0x46 +; SEC64-NEXT: RawDataOffset: 0x268 +; SEC64-NEXT: RelocationPointer: 0x304 ; SEC-NEXT: LineNumberPointer: 0x0 ; SEC-NEXT: NumberOfRelocations: 1 ; SEC-NEXT: NumberOfLineNumbers: 0 @@ -115,3 +128,13 @@ ; RELO: RELOCATION RECORDS FOR [.dwline]: ; RELO-NEXT: OFFSET TYPE VALUE ; RELO-NEXT: 00000000 R_POS .text + +; RELO64: RELOCATION RECORDS FOR [.dwinfo]: +; RELO64-NEXT: OFFSET TYPE VALUE +; RELO64-NEXT: 000000000000000e R_POS .dwabrev +; RELO64-NEXT: 000000000000000b R_POS .dwline +; RELO64-NEXT: 0000000000000041 R_POS .text +; RELO64-NEXT: 000000000000004e R_POS .text +; RELO64: RELOCATION RECORDS FOR [.dwline]: +; RELO64-NEXT: OFFSET TYPE VALUE +; RELO64-NEXT: 000000000000000c R_POS .text diff --git a/llvm/test/CodeGen/PowerPC/aix-extern-weak.ll b/llvm/test/CodeGen/PowerPC/aix-extern-weak.ll --- a/llvm/test/CodeGen/PowerPC/aix-extern-weak.ll +++ b/llvm/test/CodeGen/PowerPC/aix-extern-weak.ll @@ -1,14 +1,20 @@ ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ -; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | FileCheck --check-prefixes=COMMON,BIT32 %s +; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \ +; RUN: FileCheck --check-prefixes=COMMON,BIT32 %s ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ -; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | FileCheck --check-prefixes=COMMON,BIT64 %s +; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \ +; RUN: FileCheck --check-prefixes=COMMON,BIT64 %s ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ -; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false -filetype=obj -o %t.o < %s -; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefix=CHECKSYM %s +; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false \ +; RUN: -filetype=obj -o %t.o < %s +; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ +; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false \ +; RUN: -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM64 %s @foo_ext_weak_p = global void (...)* bitcast (void ()* @foo_ext_weak_ref to void (...)*) @b_w = extern_weak global i32 @@ -84,8 +90,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -104,8 +111,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -124,8 +132,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_UA (0x4) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -144,8 +153,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -164,8 +174,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -184,8 +195,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 4 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -204,8 +216,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -218,14 +231,17 @@ ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+15]] -; CHECKSYM-NEXT: SectionLen: 4 +; CHECKSYM32-NEXT: SectionLen: 4 +; CHECKSYM64-NEXT: SectionLen: 8 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -244,34 +260,40 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+18]] ; CHECKSYM-NEXT: Name: main -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x54 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x54 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x58 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+19]] -; CHECKSYM-NEXT: SectionLen: 12 +; CHECKSYM32-NEXT: SectionLen: 12 +; CHECKSYM64-NEXT: SectionLen: 24 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+20]] ; CHECKSYM-NEXT: Name: TOC -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x60 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x60 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x70 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) @@ -284,48 +306,57 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_TC0 (0xF) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+22]] ; CHECKSYM-NEXT: Name: foo_ext_weak_p -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x60 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x60 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x70 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+23]] -; CHECKSYM-NEXT: SectionLen: 4 +; CHECKSYM32-NEXT: SectionLen: 4 +; CHECKSYM64-NEXT: SectionLen: 8 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+24]] ; CHECKSYM-NEXT: Name: b_w -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x64 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x64 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x78 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+25]] -; CHECKSYM-NEXT: SectionLen: 4 +; CHECKSYM32-NEXT: SectionLen: 4 +; CHECKSYM64-NEXT: SectionLen: 8 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: ] diff --git a/llvm/test/CodeGen/PowerPC/aix-extern.ll b/llvm/test/CodeGen/PowerPC/aix-extern.ll --- a/llvm/test/CodeGen/PowerPC/aix-extern.ll +++ b/llvm/test/CodeGen/PowerPC/aix-extern.ll @@ -1,14 +1,20 @@ ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ -; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | FileCheck --check-prefixes=COMMON,BIT32 %s +; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \ +; RUN: FileCheck --check-prefixes=COMMON,BIT32 %s ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ -; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | FileCheck --check-prefixes=COMMON,BIT64 %s +; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \ +; RUN: FileCheck --check-prefixes=COMMON,BIT64 %s ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ -; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false -filetype=obj -o %t.o < %s -; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefix=CHECKSYM %s +; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false \ +; RUN: -filetype=obj -o %t.o < %s +; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ +; RUN: -mattr=-altivec -data-sections=false -xcoff-traceback-table=false \ +; RUN: -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM64 %s @bar_p = global i32 (...)* @bar_ref, align 4 @b_e = external global i32, align 4 @@ -107,8 +113,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -127,8 +134,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -147,8 +155,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -167,8 +176,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_UA (0x4) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -187,8 +197,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -207,8 +218,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 4 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -227,8 +239,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -247,8 +260,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -261,14 +275,17 @@ ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+17]] -; CHECKSYM-NEXT: SectionLen: 4 +; CHECKSYM32-NEXT: SectionLen: 4 +; CHECKSYM64-NEXT: SectionLen: 8 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -287,54 +304,64 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+20]] ; CHECKSYM-NEXT: Name: foo -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x74 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x74 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x78 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+21]] -; CHECKSYM-NEXT: SectionLen: 12 +; CHECKSYM32-NEXT: SectionLen: 12 +; CHECKSYM64-NEXT: SectionLen: 24 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+22]] ; CHECKSYM-NEXT: Name: main -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x80 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x80 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x90 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+23]] -; CHECKSYM-NEXT: SectionLen: 12 +; CHECKSYM32-NEXT: SectionLen: 12 +; CHECKSYM64-NEXT: SectionLen: 24 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+24]] ; CHECKSYM-NEXT: Name: TOC -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x8C +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x8C +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0xA8 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) @@ -347,48 +374,57 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_TC0 (0xF) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+26]] ; CHECKSYM-NEXT: Name: b_e -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x8C +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x8C +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0xA8 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+27]] -; CHECKSYM-NEXT: SectionLen: 4 +; CHECKSYM32-NEXT: SectionLen: 4 +; CHECKSYM64-NEXT: SectionLen: 8 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+28]] ; CHECKSYM-NEXT: Name: bar_p -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x90 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x90 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0xB0 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+29]] -; CHECKSYM-NEXT: SectionLen: 4 +; CHECKSYM32-NEXT: SectionLen: 4 +; CHECKSYM64-NEXT: SectionLen: 8 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: ] diff --git a/llvm/test/CodeGen/PowerPC/aix-func-align.ll b/llvm/test/CodeGen/PowerPC/aix-func-align.ll --- a/llvm/test/CodeGen/PowerPC/aix-func-align.ll +++ b/llvm/test/CodeGen/PowerPC/aix-func-align.ll @@ -7,9 +7,11 @@ ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \ ; RUN: -xcoff-traceback-table=false -filetype=obj -o %t.o < %s -; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYMS %s +; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefixes=SYMS,SYMS32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \ +; RUN: -xcoff-traceback-table=false -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --syms %t64.o | FileCheck --check-prefixes=SYMS,SYMS64 %s define i32 @foo() align 32 { entry: @@ -41,7 +43,8 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 6 ; SYMS-NEXT: SymbolType: XTY_SD (0x1) ; SYMS-NEXT: StorageMappingClass: XMC_PR (0x0) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } diff --git a/llvm/test/CodeGen/PowerPC/aix-internal.ll b/llvm/test/CodeGen/PowerPC/aix-internal.ll --- a/llvm/test/CodeGen/PowerPC/aix-internal.ll +++ b/llvm/test/CodeGen/PowerPC/aix-internal.ll @@ -1,36 +1,38 @@ ; RUN: llc -mtriple powerpc-ibm-aix -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec \ -; RUN: -filetype=obj -o %t.o < %s +; RUN: -filetype=obj -o %t.o < %s ; RUN: llvm-readobj --syms %t.o | FileCheck %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -mtriple powerpc64-ibm-aix -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec \ +; RUN: -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --syms %t64.o | FileCheck %s define internal i32 @foo() { ret i32 1 } -; CHECK: Symbol { -; CHECK: Name: .foo -; CHECK-NEXT: Value (RelocatableAddress): -; CHECK-NEXT: Section: .text -; CHECK-NEXT: Type: 0x0 -; CHECK-NEXT: StorageClass: C_HIDEXT (0x6B) +; CHECK: Symbol { +; CHECK: Name: .foo +; CHECK-NEXT: Value (RelocatableAddress): +; CHECK-NEXT: Section: .text +; CHECK-NEXT: Type: 0x0 +; CHECK-NEXT: StorageClass: C_HIDEXT (0x6B) -; CHECK: Symbol { -; CHECK-NEXT: Index: [[#INDX:]] -; CHECK-NEXT: Name: foo -; CHECK-NEXT: Value (RelocatableAddress): -; CHECK-NEXT: Section: .data -; CHECK-NEXT: Type: 0x0 -; CHECK-NEXT: StorageClass: C_HIDEXT (0x6B) -; CHECK-NEXT: NumberOfAuxEntries: 1 -; CHECK-NEXT: CSECT Auxiliary Entry { -; CHECK-NEXT: Index: [[#INDX+1]] -; CHECK-NEXT: SectionLen: 12 -; CHECK-NEXT: ParameterHashIndex: -; CHECK-NEXT: TypeChkSectNum: -; CHECK-NEXT: SymbolAlignmentLog2: -; CHECK-NEXT: SymbolType: XTY_SD (0x1) -; CHECK-NEXT: StorageMappingClass: XMC_DS (0xA) +; CHECK: Symbol { +; CHECK-NEXT: Index: [[#INDX:]] +; CHECK-NEXT: Name: foo +; CHECK-NEXT: Value (RelocatableAddress): +; CHECK-NEXT: Section: .data +; CHECK-NEXT: Type: 0x0 +; CHECK-NEXT: StorageClass: C_HIDEXT (0x6B) +; CHECK-NEXT: NumberOfAuxEntries: 1 +; CHECK-NEXT: CSECT Auxiliary Entry { +; CHECK-NEXT: Index: [[#INDX+1]] +; CHECK-NEXT: SectionLen: +; CHECK-NEXT: ParameterHashIndex: +; CHECK-NEXT: TypeChkSectNum: +; CHECK-NEXT: SymbolAlignmentLog2: +; CHECK-NEXT: SymbolType: XTY_SD (0x1) +; CHECK-NEXT: StorageMappingClass: XMC_DS (0xA) ; Make sure no label is emitted. ; CHECK-NOT: Name: foo diff --git a/llvm/test/CodeGen/PowerPC/aix-llvm-intrinsic.ll b/llvm/test/CodeGen/PowerPC/aix-llvm-intrinsic.ll --- a/llvm/test/CodeGen/PowerPC/aix-llvm-intrinsic.ll +++ b/llvm/test/CodeGen/PowerPC/aix-llvm-intrinsic.ll @@ -6,10 +6,13 @@ ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ ; RUN: -mattr=-altivec -filetype=obj -o %t.o < %s -; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefix=CHECKSYM %s -; RUN: llvm-objdump -r -d --symbol-description %t.o | FileCheck --check-prefix=CHECKRELOC %s +; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM32 %s +; RUN: llvm-objdump -r -d --symbol-description %t.o | FileCheck --check-prefixes=CHECKRELOC,CHECKRELOC32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ +; RUN: -mattr=-altivec -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM64 %s +; RUN: llvm-objdump -r -d --symbol-description %t64.o | FileCheck --check-prefixes=CHECKRELOC,CHECKRELOC64 %s %struct.S = type { i32, i32 } @@ -60,18 +63,25 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } -; CHECKRELOC: 00000000 (idx: 7) .bar: +; CHECKRELOC32: 00000000 (idx: 7) .bar: +; CHECKRELOC64: 0000000000000000 (idx: 7) .bar: ; CHECKRELOC-NEXT: 0: 7c 08 02 a6 mflr 0 -; CHECKRELOC-NEXT: 4: 90 01 00 08 stw 0, 8(1) -; CHECKRELOC-NEXT: 8: 94 21 ff c0 stwu 1, -64(1) -; CHECKRELOC-NEXT: c: 80 62 00 00 lwz 3, 0(2) -; CHECKRELOC-NEXT: 0000000e: R_TOC (idx: 13) s[TC] +; CHECKRELOC32-NEXT: 4: 90 01 00 08 stw 0, 8(1) +; CHECKRELOC32-NEXT: 8: 94 21 ff c0 stwu 1, -64(1) +; CHECKRELOC32-NEXT: c: 80 62 00 00 lwz 3, 0(2) +; CHECKRELOC64-NEXT: 4: f8 01 00 10 std 0, 16(1) +; CHECKRELOC64-NEXT: 8: f8 21 ff 91 stdu 1, -112(1) +; CHECKRELOC64-NEXT: c: e8 62 00 00 ld 3, 0(2) +; CHECKRELOC32-NEXT: 0000000e: R_TOC (idx: 13) s[TC] +; CHECKRELOC64-NEXT: 000000000000000e: R_TOC (idx: 13) s[TC] ; CHECKRELOC-NEXT: 10: 80 83 00 04 lwz 4, 4(3) ; CHECKRELOC-NEXT: 14: 7c 85 23 78 mr 5, 4 ; CHECKRELOC-NEXT: 18: 4b ff ff e9 bl 0x0 -; CHECKRELOC-NEXT: 00000018: R_RBR (idx: 1) .memset[PR] +; CHECKRELOC32-NEXT: 00000018: R_RBR (idx: 1) .memset[PR] +; CHECKRELOC64-NEXT: 0000000000000018: R_RBR (idx: 1) .memset[PR] diff --git a/llvm/test/CodeGen/PowerPC/aix-return55.ll b/llvm/test/CodeGen/PowerPC/aix-return55.ll --- a/llvm/test/CodeGen/PowerPC/aix-return55.ll +++ b/llvm/test/CodeGen/PowerPC/aix-return55.ll @@ -2,10 +2,14 @@ ; RUN: -verify-machineinstrs -data-sections=false -xcoff-traceback-table=false < %s | FileCheck %s ; RUN: llc -mcpu=pwr4 -mattr=-altivec -mtriple=powerpc-ibm-aix-xcoff \ ; RUN: -verify-machineinstrs -data-sections=false -xcoff-traceback-table=false -filetype=obj -o %t.o < %s -; RUN: llvm-objdump -D %t.o | FileCheck --check-prefix=CHECKOBJ %s -; RUN: llvm-readobj -S %t.o | FileCheck --check-prefix=CHECKSECT %s +; RUN: llvm-objdump -D %t.o | FileCheck --check-prefixes=CHECKOBJ,CHECKOBJ32 %s +; RUN: llvm-readobj -S %t.o | FileCheck --check-prefixes=CHECKSECT,CHECKSECT32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -mcpu=pwr4 -mattr=-altivec -mtriple=powerpc64-ibm-aix-xcoff \ +; RUN: -verify-machineinstrs -data-sections=false -xcoff-traceback-table=false \ +; RUN: -filetype=obj -o %t64.o < %s +; RUN: llvm-objdump -D %t64.o | FileCheck --check-prefixes=CHECKOBJ,CHECKOBJ64 %s +; RUN: llvm-readobj -S %t64.o | FileCheck --check-prefixes=CHECKSECT,CHECKSECT64 %s @a = global i64 320255973571806, align 8 @d = global double 5.000000e+00, align 8 @@ -19,24 +23,31 @@ ; CHECK: blr } -;CHECKOBJ: 00000000 <.foo>: +;CHECKOBJ32: 00000000 <.foo>: +;CHECKOBJ64: 0000000000000000 <.foo>: ;CHECKOBJ-NEXT: 0: 38 60 00 37 li 3, 55 ;CHECKOBJ-NEXT: 4: 4e 80 00 20 blr{{[[:space:]] *}} -;CHECKOBJ-NEXT: 00000008 <.rodata.str1.1>: +;CHECKOBJ32-NEXT: 00000008 <.rodata.str1.1>: +;CHECKOBJ64-NEXT: 0000000000000008 <.rodata.str1.1>: ;CHECKOBJ-NEXT: 8: 68 65 6c 6c xori 5, 3, 27756 ;CHECKOBJ-NEXT: c: 6f 77 6f 72 xoris 23, 27, 28530 ;CHECKOBJ-NEXT: 10: 0a 00 00 00 tdlti 0, 0{{[[:space:]] *}} -;CHECKOBJ-NEXT: Disassembly of section .data:{{[[:space:]] *}} -;CHECKOBJ-NEXT: 00000018 : +;CHECKOBJ-NEXT: Disassembly of section .data:{{[[:space:]] *}} +;CHECKOBJ32-NEXT: 00000018 : +;CHECKOBJ64-NEXT: 0000000000000018 : ;CHECKOBJ-NEXT: 18: 00 01 23 45 ;CHECKOBJ-NEXT: 1c: 67 8a bc de oris 10, 28, 48350{{[[:space:]] *}} -;CHECKOBJ-NEXT: 00000020 : +;CHECKOBJ32-NEXT: 00000020 : +;CHECKOBJ64-NEXT: 0000000000000020 : ;CHECKOBJ-NEXT: 20: 40 14 00 00 bdnzf 20, 0x20 ;CHECKOBJ-NEXT: 24: 00 00 00 00 {{[[:space:]] *}} -;CHECKOBJ-NEXT: 00000028 : -;CHECKOBJ-NEXT: 28: 00 00 00 00 -;CHECKOBJ-NEXT: 2c: 00 00 00 34 -;CHECKOBJ-NEXT: 30: 00 00 00 00 +;CHECKOBJ32-NEXT: 00000028 : +;CHECKOBJ32-NEXT: 28: 00 00 00 00 +;CHECKOBJ32-NEXT: 2c: 00 00 00 34 +;CHECKOBJ32-NEXT: 30: 00 00 00 00 +;CHECKOBJ64-NEXT: 0000000000000028 : +;CHECKOBJ64-NEXT: ... +;CHECKOBJ64-NEXT: 34: 00 00 00 40 ;CHECKSECT: Sections [ ;CHECKSECT-NEXT: Section { @@ -45,7 +56,8 @@ ;CHECKSECT-NEXT: PhysicalAddress: 0x0 ;CHECKSECT-NEXT: VirtualAddress: 0x0 ;CHECKSECT-NEXT: Size: 0x14 -;CHECKSECT-NEXT: RawDataOffset: 0x64 +;CHECKSECT32-NEXT: RawDataOffset: 0x64 +;CHECKSECT64-NEXT: RawDataOffset: 0xA8 ;CHECKSECT-NEXT: RelocationPointer: 0x0 ;CHECKSECT-NEXT: LineNumberPointer: 0x0 ;CHECKSECT-NEXT: NumberOfRelocations: 0 @@ -57,9 +69,12 @@ ;CHECKSECT-NEXT: Name: .data ;CHECKSECT-NEXT: PhysicalAddress: 0x18 ;CHECKSECT-NEXT: VirtualAddress: 0x18 -;CHECKSECT-NEXT: Size: 0x1C -;CHECKSECT-NEXT: RawDataOffset: 0x78 -;CHECKSECT-NEXT: RelocationPointer: 0x94 +;CHECKSECT32-NEXT: Size: 0x1C +;CHECKSECT32-NEXT: RawDataOffset: 0x78 +;CHECKSECT32-NEXT: RelocationPointer: 0x94 +;CHECKSECT64-NEXT: Size: 0x28 +;CHECKSECT64-NEXT: RawDataOffset: 0xBC +;CHECKSECT64-NEXT: RelocationPointer: 0xE4 ;CHECKSECT-NEXT: LineNumberPointer: 0x0 ;CHECKSECT-NEXT: NumberOfRelocations: 2 ;CHECKSECT-NEXT: NumberOfLineNumbers: 0 diff --git a/llvm/test/CodeGen/PowerPC/aix-weak.ll b/llvm/test/CodeGen/PowerPC/aix-weak.ll --- a/llvm/test/CodeGen/PowerPC/aix-weak.ll +++ b/llvm/test/CodeGen/PowerPC/aix-weak.ll @@ -6,9 +6,11 @@ ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -xcoff-traceback-table=false -mcpu=pwr4 \ ; RUN: -mattr=-altivec -data-sections=false -filetype=obj -o %t.o < %s -; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefix=CHECKSYM %s +; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -xcoff-traceback-table=false -mcpu=pwr4 \ +; RUN: -mattr=-altivec -data-sections=false -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM64 %s @foo_weak_p = global void (...)* bitcast (void ()* @foo_ref_weak to void (...)*), align 4 @b = weak global i32 0, align 4 @@ -123,8 +125,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 4 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -143,8 +146,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -163,8 +167,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -183,8 +188,9 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -197,14 +203,17 @@ ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+9]] -; CHECKSYM-NEXT: SectionLen: 8 +; CHECKSYM32-NEXT: SectionLen: 8 +; CHECKSYM64-NEXT: SectionLen: 12 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { @@ -223,14 +232,16 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+12]] ; CHECKSYM-NEXT: Name: b -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x8C +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x8C +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x90 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_WEAKEXT (0x6F) @@ -243,74 +254,88 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+14]] ; CHECKSYM-NEXT: Name: foo_weak -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x90 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x90 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x98 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_WEAKEXT (0x6F) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+15]] -; CHECKSYM-NEXT: SectionLen: 12 +; CHECKSYM32-NEXT: SectionLen: 12 +; CHECKSYM64-NEXT: SectionLen: 24 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+16]] ; CHECKSYM-NEXT: Name: foo_ref_weak -; CHECKSYM-NEXT: Value (RelocatableAddress): 0x9C +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x9C +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0xB0 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_WEAKEXT (0x6F) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+17]] -; CHECKSYM-NEXT: SectionLen: 12 +; CHECKSYM32-NEXT: SectionLen: 12 +; CHECKSYM64-NEXT: SectionLen: 24 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+18]] ; CHECKSYM-NEXT: Name: main -; CHECKSYM-NEXT: Value (RelocatableAddress): 0xA8 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0xA8 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0xC8 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+19]] -; CHECKSYM-NEXT: SectionLen: 12 +; CHECKSYM32-NEXT: SectionLen: 12 +; CHECKSYM64-NEXT: SectionLen: 24 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+20]] ; CHECKSYM-NEXT: Name: TOC -; CHECKSYM-NEXT: Value (RelocatableAddress): 0xB4 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0xB4 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0xE0 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) @@ -323,48 +348,57 @@ ; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_TC0 (0xF) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+22]] ; CHECKSYM-NEXT: Name: foo_weak_p -; CHECKSYM-NEXT: Value (RelocatableAddress): 0xB4 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0xB4 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0xE0 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+23]] -; CHECKSYM-NEXT: SectionLen: 4 +; CHECKSYM32-NEXT: SectionLen: 4 +; CHECKSYM64-NEXT: SectionLen: 8 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#Index+24]] ; CHECKSYM-NEXT: Name: b -; CHECKSYM-NEXT: Value (RelocatableAddress): 0xB8 +; CHECKSYM32-NEXT: Value (RelocatableAddress): 0xB8 +; CHECKSYM64-NEXT: Value (RelocatableAddress): 0xE8 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#Index+25]] -; CHECKSYM-NEXT: SectionLen: 4 +; CHECKSYM32-NEXT: SectionLen: 4 +; CHECKSYM64-NEXT: SectionLen: 8 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 -; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM32-NEXT: SymbolAlignmentLog2: 2 +; CHECKSYM64-NEXT: SymbolAlignmentLog2: 3 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; CHECKSYM-NEXT: StabInfoIndex: 0x0 -; CHECKSYM-NEXT: StabSectNum: 0x0 +; CHECKSYM32-NEXT: StabInfoIndex: 0x0 +; CHECKSYM32-NEXT: StabSectNum: 0x0 +; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: ] diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-data-only-notoc.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-data-only-notoc.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-data-only-notoc.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-data-only-notoc.ll @@ -4,7 +4,8 @@ ; RUN: llc -mtriple powerpc-ibm-aix-xcoff -filetype=obj -o %t.o < %s ; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYMS %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --syms %t64.o | FileCheck --check-prefix=SYMS %s @a = external global i32, align 4 @b = external global i64, align 8 diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-data.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-data.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-data.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-data.ll @@ -7,12 +7,12 @@ ; RUN: llc -mtriple powerpc-ibm-aix-xcoff -data-sections=false -filetype=obj -o %t.o < %s ; RUN: llvm-readobj --section-headers --file-header %t.o | \ ; RUN: FileCheck --check-prefix=OBJ %s -; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYMS %s +; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefixes=SYMS,SYMS32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. ; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -data-sections=false -filetype=obj -o %t64.o < %s ; RUN: llvm-readobj --section-headers --file-header %t64.o | \ ; RUN: FileCheck --check-prefix=OBJ64 %s +; RUN: llvm-readobj --syms %t64.o | FileCheck --check-prefixes=SYMS,SYMS64 %s @ivar = local_unnamed_addr global i32 35, align 4 @llvar = local_unnamed_addr global i64 36, align 8 @@ -205,10 +205,6 @@ ; OBJ-NEXT: } ; OBJ: ] -; SYMS: File: {{.*}}aix-xcoff-data.ll.tmp.o -; SYMS-NEXT: Format: aixcoff-rs6000 -; SYMS-NEXT: Arch: powerpc -; SYMS-NEXT: AddressSize: 32bit ; SYMS: Symbols [ ; SYMS-NEXT: Symbol { ; SYMS-NEXT: Index: 0 @@ -236,8 +232,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 2 ; SYMS-NEXT: SymbolType: XTY_SD (0x1) ; SYMS-NEXT: StorageMappingClass: XMC_PR (0x0) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -257,8 +254,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 5 ; SYMS-NEXT: SymbolType: XTY_SD (0x1) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -278,8 +276,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -299,8 +298,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -320,8 +320,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -341,8 +342,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -362,8 +364,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -383,8 +386,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -404,8 +408,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -425,8 +430,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -446,8 +452,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -467,8 +474,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -488,8 +496,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -509,8 +518,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -530,8 +540,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -551,8 +562,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 2 ; SYMS-NEXT: SymbolType: XTY_CM (0x3) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -572,8 +584,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 3 ; SYMS-NEXT: SymbolType: XTY_CM (0x3) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -593,8 +606,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 1 ; SYMS-NEXT: SymbolType: XTY_CM (0x3) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -614,8 +628,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 3 ; SYMS-NEXT: SymbolType: XTY_CM (0x3) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -635,8 +650,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 2 ; SYMS-NEXT: SymbolType: XTY_CM (0x3) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -656,8 +672,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 5 ; SYMS-NEXT: SymbolType: XTY_CM (0x3) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -677,8 +694,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_CM (0x3) ; SYMS-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } ; SYMS: ] @@ -691,7 +709,7 @@ ; OBJ64-NEXT: NumberOfSections: 3 ; OBJ64-NEXT: TimeStamp: None (0x0) ; OBJ64-NEXT: SymbolTableOffset: 0x170 -; OBJ64-NEXT: SymbolTableEntries: 0 +; OBJ64-NEXT: SymbolTableEntries: 45 ; OBJ64-NEXT: OptionalHeaderSize: 0x0 ; OBJ64-NEXT: Flags: 0x0 ; OBJ64-NEXT: } diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-externL.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-externL.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-externL.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-externL.ll @@ -5,10 +5,11 @@ ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ ; RUN: -mattr=-altivec -filetype=obj -o %t.o < %s -; RUN: llvm-readobj --symbols %t.o | \ -; RUN: FileCheck --check-prefix=XCOFF32 %s +; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefixes=XCOFF,XCOFF32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ +; RUN: -mattr=-altivec -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefixes=XCOFF,XCOFF64 %s @La = external global i32, align 4 @@ -21,41 +22,43 @@ ret void } -; XCOFF32: Index: [[#IND:]]{{.*}}{{[[:space:]] *}}Name: .Lb -; XCOFF32-NEXT: Value (RelocatableAddress): 0x0 -; XCOFF32-NEXT: Section: N_UNDEF -; XCOFF32-NEXT: Type: 0x0 -; XCOFF32-NEXT: StorageClass: C_EXT (0x2) -; XCOFF32-NEXT: NumberOfAuxEntries: 1 -; XCOFF32-NEXT: CSECT Auxiliary Entry { -; XCOFF32-NEXT: Index: [[#IND+1]] -; XCOFF32-NEXT: SectionLen: 0 -; XCOFF32-NEXT: ParameterHashIndex: 0x0 -; XCOFF32-NEXT: TypeChkSectNum: 0x0 -; XCOFF32-NEXT: SymbolAlignmentLog2: 0 -; XCOFF32-NEXT: SymbolType: XTY_ER (0x0) -; XCOFF32-NEXT: StorageMappingClass: XMC_PR (0x0) -; XCOFF32-NEXT: StabInfoIndex: 0x0 -; XCOFF32-NEXT: StabSectNum: 0x0 -; XCOFF32-NEXT: } -; XCOFF32-NEXT: } -; XCOFF32-NEXT: Symbol { -; XCOFF32-NEXT: Index: [[#IND+2]] -; XCOFF32-NEXT: Name: La -; XCOFF32-NEXT: Value (RelocatableAddress): 0x0 -; XCOFF32-NEXT: Section: N_UNDEF -; XCOFF32-NEXT: Type: 0x0 -; XCOFF32-NEXT: StorageClass: C_EXT (0x2) -; XCOFF32-NEXT: NumberOfAuxEntries: 1 -; XCOFF32-NEXT: CSECT Auxiliary Entry { -; XCOFF32-NEXT: Index: [[#IND+3]] -; XCOFF32-NEXT: SectionLen: 0 -; XCOFF32-NEXT: ParameterHashIndex: 0x0 -; XCOFF32-NEXT: TypeChkSectNum: 0x0 -; XCOFF32-NEXT: SymbolAlignmentLog2: 0 -; XCOFF32-NEXT: SymbolType: XTY_ER (0x0) -; XCOFF32-NEXT: StorageMappingClass: XMC_UA (0x4) -; XCOFF32-NEXT: StabInfoIndex: 0x0 -; XCOFF32-NEXT: StabSectNum: 0x0 -; XCOFF32-NEXT: } -; XCOFF32-NEXT: } +; XCOFF: Index: [[#IND:]]{{.*}}{{[[:space:]] *}}Name: .Lb +; XCOFF-NEXT: Value (RelocatableAddress): 0x0 +; XCOFF-NEXT: Section: N_UNDEF +; XCOFF-NEXT: Type: 0x0 +; XCOFF-NEXT: StorageClass: C_EXT (0x2) +; XCOFF-NEXT: NumberOfAuxEntries: 1 +; XCOFF-NEXT: CSECT Auxiliary Entry { +; XCOFF-NEXT: Index: [[#IND+1]] +; XCOFF-NEXT: SectionLen: 0 +; XCOFF-NEXT: ParameterHashIndex: 0x0 +; XCOFF-NEXT: TypeChkSectNum: 0x0 +; XCOFF-NEXT: SymbolAlignmentLog2: 0 +; XCOFF-NEXT: SymbolType: XTY_ER (0x0) +; XCOFF-NEXT: StorageMappingClass: XMC_PR (0x0) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) +; XCOFF-NEXT: } +; XCOFF-NEXT: } +; XCOFF-NEXT: Symbol { +; XCOFF-NEXT: Index: [[#IND+2]] +; XCOFF-NEXT: Name: La +; XCOFF-NEXT: Value (RelocatableAddress): 0x0 +; XCOFF-NEXT: Section: N_UNDEF +; XCOFF-NEXT: Type: 0x0 +; XCOFF-NEXT: StorageClass: C_EXT (0x2) +; XCOFF-NEXT: NumberOfAuxEntries: 1 +; XCOFF-NEXT: CSECT Auxiliary Entry { +; XCOFF-NEXT: Index: [[#IND+3]] +; XCOFF-NEXT: SectionLen: 0 +; XCOFF-NEXT: ParameterHashIndex: 0x0 +; XCOFF-NEXT: TypeChkSectNum: 0x0 +; XCOFF-NEXT: SymbolAlignmentLog2: 0 +; XCOFF-NEXT: SymbolType: XTY_ER (0x0) +; XCOFF-NEXT: StorageMappingClass: XMC_UA (0x4) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) +; XCOFF-NEXT: } +; XCOFF-NEXT: } diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-huge-relocs.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-huge-relocs.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-huge-relocs.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-huge-relocs.ll @@ -20,7 +20,10 @@ ; RUN: -mcpu=pwr4 -mattr=-altivec -filetype=obj -o %t.o %t.ll ; RUN: llvm-readobj --section-headers %t.o | FileCheck --check-prefix=XCOFF32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +;; An XCOFF64 file may not contain an overflow section header. +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff \ +; RUN: -mcpu=pwr4 -mattr=-altivec -filetype=obj -o %t64.o %t.overflow.ll +; RUN: llvm-readobj --section-headers %t64.o | FileCheck --check-prefix=XCOFF64 %s @c = external global i8, align 1 @arr = global [SIZE x i8*] [MACRO], align 8 @@ -41,3 +44,16 @@ ; XCOFF32-NEXT: } ; XCOFF32-NOT: Name: .ovrflo ; XCOFF32-NOT: Type: STYP_OVRFLO + +; XCOFF64: Section { +; XCOFF64: Name: .data +; XCOFF64-NEXT: PhysicalAddress: 0x0 +; XCOFF64-NEXT: VirtualAddress: 0x0 +; XCOFF64-NEXT: Size: 0x7FFF8 +; XCOFF64-NEXT: RawDataOffset: 0xA8 +; XCOFF64-NEXT: RelocationPointer: 0x800A0 +; XCOFF64-NEXT: LineNumberPointer: 0x0 +; XCOFF64-NEXT: NumberOfRelocations: 65535 +; XCOFF64-NEXT: NumberOfLineNumbers: 0 +; XCOFF64-NEXT: Type: STYP_DATA (0x40) +; XCOFF64-NEXT: } diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-lcomm.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-lcomm.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-lcomm.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-lcomm.ll @@ -3,10 +3,13 @@ ; RUN: llc -mtriple powerpc-ibm-aix-xcoff -filetype=obj -o %t.o < %s ; RUN: llvm-readobj --section-headers --file-header %t.o | \ -; RUN: FileCheck --check-prefix=OBJ %s -; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYMS %s +; RUN: FileCheck --check-prefixes=OBJ,OBJ32 %s +; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefixes=SYMS,SYMS32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --section-headers --file-header %t64.o | \ +; RUN: FileCheck --check-prefixes=OBJ,OBJ64 %s +; RUN: llvm-readobj --syms %t64.o | FileCheck --check-prefixes=SYMS,SYMS64 %s @a = internal global i32 0, align 4 @b = internal global i64 0, align 8 @@ -16,39 +19,36 @@ ; CHECK-NEXT: .lcomm b,8,b[BS],3 ; CHECK-NEXT: .lcomm c,2,c[BS],1 -; OBJ: File: {{.*}}aix-xcoff-lcomm.ll.tmp.o -; OBJ-NEXT: Format: aixcoff-rs6000 -; OBJ-NEXT: Arch: powerpc -; OBJ-NEXT: AddressSize: 32bit -; OBJ-NEXT: FileHeader { -; OBJ-NEXT: Magic: 0x1DF -; OBJ-NEXT: NumberOfSections: 2 -; OBJ-NEXT: TimeStamp: -; OBJ-NEXT: SymbolTableOffset: 0x64 -; OBJ-NEXT: SymbolTableEntries: 9 -; OBJ-NEXT: OptionalHeaderSize: 0x0 -; OBJ-NEXT: Flags: 0x0 -; OBJ-NEXT: } -; OBJ-NEXT: Sections [ -; OBJ: Section {{[{][[:space:]] *}}Index: 2 -; OBJ-NEXT: Name: .bss -; OBJ-NEXT: PhysicalAddress: 0x0 -; OBJ-NEXT: VirtualAddress: 0x0 -; OBJ-NEXT: Size: 0x14 -; OBJ-NEXT: RawDataOffset: 0x0 -; OBJ-NEXT: RelocationPointer: 0x0 -; OBJ-NEXT: LineNumberPointer: 0x0 -; OBJ-NEXT: NumberOfRelocations: 0 -; OBJ-NEXT: NumberOfLineNumbers: 0 -; OBJ-NEXT: Type: STYP_BSS (0x80) +; OBJ: Arch: powerpc +; OBJ32-NEXT: AddressSize: 32bit +; OBJ64-NEXT: AddressSize: 64bit +; OBJ-NEXT: FileHeader { +; OBJ32-NEXT: Magic: 0x1DF +; OBJ64-NEXT: Magic: 0x1F7 +; OBJ-NEXT: NumberOfSections: 2 +; OBJ-NEXT: TimeStamp: +; OBJ32-NEXT: SymbolTableOffset: 0x64 +; OBJ64-NEXT: SymbolTableOffset: 0xA8 +; OBJ-NEXT: SymbolTableEntries: 9 +; OBJ-NEXT: OptionalHeaderSize: 0x0 +; OBJ-NEXT: Flags: 0x0 ; OBJ-NEXT: } -; OBJ-NEXT: ] +; OBJ-NEXT: Sections [ +; OBJ: Section {{[{][[:space:]] *}}Index: 2 +; OBJ-NEXT: Name: .bss +; OBJ-NEXT: PhysicalAddress: 0x0 +; OBJ-NEXT: VirtualAddress: 0x0 +; OBJ-NEXT: Size: 0x14 +; OBJ-NEXT: RawDataOffset: 0x0 +; OBJ-NEXT: RelocationPointer: 0x0 +; OBJ-NEXT: LineNumberPointer: 0x0 +; OBJ-NEXT: NumberOfRelocations: 0 +; OBJ-NEXT: NumberOfLineNumbers: 0 +; OBJ-NEXT: Type: STYP_BSS (0x80) +; OBJ-NEXT: } +; OBJ-NEXT: ] -; SYMS: File: {{.*}}aix-xcoff-lcomm.ll.tmp.o -; SYMS-NEXT: Format: aixcoff-rs6000 -; SYMS-NEXT: Arch: powerpc -; SYMS-NEXT: AddressSize: 32bit -; SYMS-NEXT: Symbols [ +; SYMS: Symbols [ ; SYMS: Symbol {{[{][[:space:]] *}}Index: [[#Index:]]{{[[:space:]] *}}Name: a ; SYMS-NEXT: Value (RelocatableAddress): 0x0 ; SYMS-NEXT: Section: .bss @@ -63,8 +63,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 2 ; SYMS-NEXT: SymbolType: XTY_CM (0x3) ; SYMS-NEXT: StorageMappingClass: XMC_BS (0x9) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } ; SYMS-NEXT: Symbol { @@ -83,8 +84,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 3 ; SYMS-NEXT: SymbolType: XTY_CM (0x3) ; SYMS-NEXT: StorageMappingClass: XMC_BS (0x9) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } ; SYMS-NEXT: Symbol { @@ -103,8 +105,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 1 ; SYMS-NEXT: SymbolType: XTY_CM (0x3) ; SYMS-NEXT: StorageMappingClass: XMC_BS (0x9) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } ; SYMS-NEXT: ] diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-lower-comm.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-lower-comm.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-lower-comm.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-lower-comm.ll @@ -3,10 +3,13 @@ ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc64-ibm-aix-xcoff -data-sections=false < %s | \ ; RUN: FileCheck --check-prefixes=CHECK,ASM64 %s -; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc-ibm-aix-xcoff -data-sections=false -filetype=obj -o %t.o < %s -; RUN: llvm-readobj -r --expand-relocs --syms %t.o | FileCheck --check-prefixes=RELOC,SYM %s +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc-ibm-aix-xcoff -data-sections=false \ +; RUN: -filetype=obj -o %t.o < %s +; RUN: llvm-readobj -r --expand-relocs --syms %t.o | FileCheck --check-prefixes=RELOC,SYM,RELOC32,SYM32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc64-ibm-aix-xcoff -data-sections=false \ +; RUN: -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj -r --expand-relocs --syms %t64.o | FileCheck --check-prefixes=RELOC,SYM,RELOC64,SYM64 %s @common = common global i32 0, align 4 @pointer = global i32* @common, align 4 @@ -30,7 +33,8 @@ ; RELOC-NEXT: Symbol: common ([[#COM_INDX:]]) ; RELOC-NEXT: IsSigned: No ; RELOC-NEXT: FixupBitValue: 0 -; RELOC-NEXT: Length: 32 +; RELOC32-NEXT: Length: 32 +; RELOC64-NEXT: Length: 64 ; RELOC-NEXT: Type: R_POS (0x0) ; RELOC-NEXT: } ; RELOC-NEXT: } @@ -44,14 +48,17 @@ ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#INDX+1]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -70,14 +77,16 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_LD (0x2) ; SYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#COM_INDX]] ; SYM-NEXT: Name: common -; SYM-NEXT: Value (RelocatableAddress): 0x4 +; SYM32-NEXT: Value (RelocatableAddress): 0x4 +; SYM64-NEXT: Value (RelocatableAddress): 0x8 ; SYM-NEXT: Section: .bss ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_EXT (0x2) @@ -90,7 +99,8 @@ ; SYM-NEXT: SymbolAlignmentLog2: 2 ; SYM-NEXT: SymbolType: XTY_CM (0x3) ; SYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-reloc-large.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-reloc-large.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-reloc-large.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-reloc-large.ll @@ -3,6 +3,11 @@ ; RUN: llvm-readobj --relocs --expand-relocs %t.o | FileCheck --check-prefixes=RELOC %s ; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck --check-prefix=DIS %s +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \ +; RUN: -filetype=obj -code-model=large -o %t64.o < %s +; RUN: llvm-readobj --relocs --expand-relocs %t64.o | FileCheck --check-prefixes=RELOC64 %s +; RUN: llvm-objdump -D -r --symbol-description %t64.o | FileCheck --check-prefix=DIS64 %s + @a = global i32 2, align 4 @b = global i32 10, align 4 @c = global i32 11, align 4 @@ -88,3 +93,76 @@ ; DIS-NEXT: 24: 80 a5 00 00 lwz 5, 0(5) ; DIS-NEXT: 28: 7c 63 2a 14 add 3, 3, 5 ; DIS-NEXT: 2c: 4e 80 00 20 blr + +; RELOC64: Section (index: {{[0-9]+}}) .text { +; RELOC64-NEXT: Relocation { +; RELOC64-NEXT: Virtual Address: 0x2 +; RELOC64-NEXT: Symbol: a ([[#INDX:]]) +; RELOC64-NEXT: IsSigned: No +; RELOC64-NEXT: FixupBitValue: 0 +; RELOC64-NEXT: Length: 16 +; RELOC64-NEXT: Type: R_TOCU (0x30) +; RELOC64-NEXT: } +; RELOC64-NEXT: Relocation { +; RELOC64-NEXT: Virtual Address: 0x6 +; RELOC64-NEXT: Symbol: b ([[#INDX+2]]) +; RELOC64-NEXT: IsSigned: No +; RELOC64-NEXT: FixupBitValue: 0 +; RELOC64-NEXT: Length: 16 +; RELOC64-NEXT: Type: R_TOCU (0x30) +; RELOC64-NEXT: } +; RELOC64-NEXT: Relocation { +; RELOC64-NEXT: Virtual Address: 0xA +; RELOC64-NEXT: Symbol: c ([[#INDX+4]]) +; RELOC64-NEXT: IsSigned: No +; RELOC64-NEXT: FixupBitValue: 0 +; RELOC64-NEXT: Length: 16 +; RELOC64-NEXT: Type: R_TOCU (0x30) +; RELOC64-NEXT: } +; RELOC64-NEXT: Relocation { +; RELOC64-NEXT: Virtual Address: 0xE +; RELOC64-NEXT: Symbol: a ([[#INDX]]) +; RELOC64-NEXT: IsSigned: No +; RELOC64-NEXT: FixupBitValue: 0 +; RELOC64-NEXT: Length: 16 +; RELOC64-NEXT: Type: R_TOCL (0x31) +; RELOC64-NEXT: } +; RELOC64-NEXT: Relocation { +; RELOC64-NEXT: Virtual Address: 0x12 +; RELOC64-NEXT: Symbol: b ([[#INDX+2]]) +; RELOC64-NEXT: IsSigned: No +; RELOC64-NEXT: FixupBitValue: 0 +; RELOC64-NEXT: Length: 16 +; RELOC64-NEXT: Type: R_TOCL (0x31) +; RELOC64-NEXT: } +; RELOC64-NEXT: Relocation { +; RELOC64-NEXT: Virtual Address: 0x16 +; RELOC64-NEXT: Symbol: c ([[#INDX+4]]) +; RELOC64-NEXT: IsSigned: No +; RELOC64-NEXT: FixupBitValue: 0 +; RELOC64-NEXT: Length: 16 +; RELOC64-NEXT: Type: R_TOCL (0x31) +; RELOC64-NEXT: } +; RELOC64-NEXT: } + +; DIS64: Disassembly of section .text: +; DIS64-EMPTY: +; DIS64-NEXT: 0000000000000000 (idx: 3) .foo: +; DIS64-NEXT: 0: 3c 62 00 00 addis 3, 2, 0 +; DIS64-NEXT: 0000000000000002: R_TOCU (idx: [[#INDX:]]) a[TE] +; DIS64-NEXT: 4: 3c 82 00 00 addis 4, 2, 0 +; DIS64-NEXT: 0000000000000006: R_TOCU (idx: [[#INDX+2]]) b[TE] +; DIS64-NEXT: 8: 3c a2 00 00 addis 5, 2, 0 +; DIS64-NEXT: 000000000000000a: R_TOCU (idx: [[#INDX+4]]) c[TE] +; DIS64-NEXT: c: e8 63 00 00 ld 3, 0(3) +; DIS64-NEXT: 000000000000000e: R_TOCL (idx: [[#INDX]]) a[TE] +; DIS64-NEXT: 10: e8 84 00 08 ld 4, 8(4) +; DIS64-NEXT: 0000000000000012: R_TOCL (idx: [[#INDX+2]]) b[TE] +; DIS64-NEXT: 14: e8 a5 00 10 ld 5, 16(5) +; DIS64-NEXT: 0000000000000016: R_TOCL (idx: [[#INDX+4]]) c[TE] +; DIS64-NEXT: 18: 80 63 00 00 lwz 3, 0(3) +; DIS64-NEXT: 1c: 80 84 00 00 lwz 4, 0(4) +; DIS64-NEXT: 20: 80 a5 00 00 lwz 5, 0(5) +; DIS64-NEXT: 24: 7c 63 22 14 add 3, 3, 4 +; DIS64-NEXT: 28: 7c 63 2a 14 add 3, 3, 5 +; DIS64-NEXT: 2c: 4e 80 00 20 blr diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-reloc.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-reloc.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-reloc.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-reloc.ll @@ -1,13 +1,18 @@ ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc-ibm-aix-xcoff -mattr=-altivec \ ; RUN: -xcoff-traceback-table=false -data-sections=false -filetype=obj -o %t.o < %s -; RUN: llvm-readobj --section-headers --file-header %t.o | \ -; RUN: FileCheck --check-prefix=OBJ %s -; RUN: llvm-readobj --relocs --expand-relocs %t.o | FileCheck --check-prefix=RELOC %s -; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYM %s +; RUN: llvm-readobj --section-headers --file-header %t.o | FileCheck --check-prefixes=OBJ,OBJ32 %s +; RUN: llvm-readobj --relocs --expand-relocs %t.o | FileCheck --check-prefixes=RELOC,RELOC32 %s +; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefixes=SYM,SYM32 %s ; RUN: llvm-objdump -D %t.o | FileCheck --check-prefix=DIS %s ; RUN: llvm-objdump -r %t.o | FileCheck --check-prefix=DIS_REL %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc64-ibm-aix-xcoff -mattr=-altivec \ +; RUN: -xcoff-traceback-table=false -data-sections=false -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --section-headers --file-header %t64.o | FileCheck --check-prefixes=OBJ,OBJ64 %s +; RUN: llvm-readobj --relocs --expand-relocs %t64.o | FileCheck --check-prefixes=RELOC,RELOC64 %s +; RUN: llvm-readobj --syms %t64.o | FileCheck --check-prefixes=SYM,SYM64 %s +; RUN: llvm-objdump -D %t64.o | FileCheck --check-prefix=DIS64 %s +; RUN: llvm-objdump -r %t64.o | FileCheck --check-prefix=DIS_REL64 %s @globalA = global i32 1, align 4 @globalB = global i32 2, align 4 @@ -26,19 +31,17 @@ declare i32 @bar(i32) -; OBJ: File: {{.*}}aix-xcoff-reloc.ll.tmp.o -; OBJ-NEXT: Format: aixcoff-rs6000 -; OBJ-NEXT: Arch: powerpc -; OBJ-NEXT: AddressSize: 32bit -; OBJ-NEXT: FileHeader { -; OBJ-NEXT: Magic: 0x1DF -; OBJ-NEXT: NumberOfSections: 2 -; OBJ-NEXT: TimeStamp: None (0x0) -; OBJ-NEXT: SymbolTableOffset: 0x13C -; OBJ-NEXT: SymbolTableEntries: 27 -; OBJ-NEXT: OptionalHeaderSize: 0x0 -; OBJ-NEXT: Flags: 0x0 -; OBJ-NEXT: } +; OBJ: FileHeader { +; OBJ32-NEXT: Magic: 0x1DF +; OBJ64-NEXT: Magic: 0x1F7 +; OBJ-NEXT: NumberOfSections: 2 +; OBJ-NEXT: TimeStamp: None (0x0) +; OBJ32-NEXT: SymbolTableOffset: 0x13C +; OBJ64-NEXT: SymbolTableOffset: 0x1B8 +; OBJ-NEXT: SymbolTableEntries: 27 +; OBJ-NEXT: OptionalHeaderSize: 0x0 +; OBJ-NEXT: Flags: 0x0 +; OBJ-NEXT: } ; OBJ-NEXT: Sections [ ; OBJ-NEXT: Section { ; OBJ-NEXT: Index: 1 @@ -46,8 +49,10 @@ ; OBJ-NEXT: PhysicalAddress: 0x0 ; OBJ-NEXT: VirtualAddress: 0x0 ; OBJ-NEXT: Size: 0x40 -; OBJ-NEXT: RawDataOffset: 0x64 -; OBJ-NEXT: RelocationPointer: 0xEC +; OBJ32-NEXT: RawDataOffset: 0x64 +; OBJ32-NEXT: RelocationPointer: 0xEC +; OBJ64-NEXT: RawDataOffset: 0xA8 +; OBJ64-NEXT: RelocationPointer: 0x148 ; OBJ-NEXT: LineNumberPointer: 0x0 ; OBJ-NEXT: NumberOfRelocations: 3 ; OBJ-NEXT: NumberOfLineNumbers: 0 @@ -58,9 +63,12 @@ ; OBJ-NEXT: Name: .data ; OBJ-NEXT: PhysicalAddress: 0x40 ; OBJ-NEXT: VirtualAddress: 0x40 -; OBJ-NEXT: Size: 0x48 -; OBJ-NEXT: RawDataOffset: 0xA4 -; OBJ-NEXT: RelocationPointer: 0x10A +; OBJ32-NEXT: Size: 0x48 +; OBJ32-NEXT: RawDataOffset: 0xA4 +; OBJ32-NEXT: RelocationPointer: 0x10A +; OBJ64-NEXT: Size: 0x60 +; OBJ64-NEXT: RawDataOffset: 0xE8 +; OBJ64-NEXT: RelocationPointer: 0x172 ; OBJ-NEXT: LineNumberPointer: 0x0 ; OBJ-NEXT: NumberOfRelocations: 5 ; OBJ-NEXT: NumberOfLineNumbers: 0 @@ -68,80 +76,84 @@ ; OBJ-NEXT: } ; OBJ-NEXT: ] - -; RELOC: File: {{.*}}aix-xcoff-reloc.ll.tmp.o -; RELOC-NEXT: Format: aixcoff-rs6000 -; RELOC-NEXT: Arch: powerpc -; RELOC-NEXT: AddressSize: 32bit -; RELOC-NEXT: Relocations [ +; RELOC: Relocations [ ; RELOC-NEXT: Section (index: 1) .text { -; RELOC-NEXT: Relocation { -; RELOC-NEXT: Virtual Address: 0x10 -; RELOC-NEXT: Symbol: .bar (1) -; RELOC-NEXT: IsSigned: Yes -; RELOC-NEXT: FixupBitValue: 0 -; RELOC-NEXT: Length: 26 -; RELOC-NEXT: Type: R_RBR (0x1A) -; RELOC-NEXT: } -; RELOC-NEXT: Relocation { -; RELOC-NEXT: Virtual Address: 0x1A -; RELOC-NEXT: Symbol: globalA (23) -; RELOC-NEXT: IsSigned: No -; RELOC-NEXT: FixupBitValue: 0 -; RELOC-NEXT: Length: 16 -; RELOC-NEXT: Type: R_TOC (0x3) +; RELOC-NEXT: Relocation { +; RELOC-NEXT: Virtual Address: 0x10 +; RELOC-NEXT: Symbol: .bar (1) +; RELOC-NEXT: IsSigned: Yes +; RELOC-NEXT: FixupBitValue: 0 +; RELOC-NEXT: Length: 26 +; RELOC-NEXT: Type: R_RBR (0x1A) +; RELOC-NEXT: } +; RELOC-NEXT: Relocation { +; RELOC-NEXT: Virtual Address: 0x1A +; RELOC-NEXT: Symbol: globalA (23) +; RELOC-NEXT: IsSigned: No +; RELOC-NEXT: FixupBitValue: 0 +; RELOC-NEXT: Length: 16 +; RELOC-NEXT: Type: R_TOC (0x3) +; RELOC-NEXT: } +; RELOC-NEXT: Relocation { +; RELOC-NEXT: Virtual Address: 0x1E +; RELOC-NEXT: Symbol: globalB (25) +; RELOC-NEXT: IsSigned: No +; RELOC-NEXT: FixupBitValue: 0 +; RELOC-NEXT: Length: 16 +; RELOC-NEXT: Type: R_TOC (0x3) +; RELOC-NEXT: } ; RELOC-NEXT: } -; RELOC-NEXT: Relocation { -; RELOC-NEXT: Virtual Address: 0x1E -; RELOC-NEXT: Symbol: globalB (25) -; RELOC-NEXT: IsSigned: No -; RELOC-NEXT: FixupBitValue: 0 -; RELOC-NEXT: Length: 16 -; RELOC-NEXT: Type: R_TOC (0x3) +; RELOC-NEXT: Section (index: 2) .data { +; RELOC-NEXT: Relocation { +; RELOC-NEXT: Virtual Address: 0x70 +; RELOC-NEXT: Symbol: arr (15) +; RELOC-NEXT: IsSigned: No +; RELOC-NEXT: FixupBitValue: 0 +; RELOC32-NEXT: Length: 32 +; RELOC64-NEXT: Length: 64 +; RELOC-NEXT: Type: R_POS (0x0) +; RELOC-NEXT: } +; RELOC-NEXT: Relocation { +; RELOC32-NEXT: Virtual Address: 0x74 +; RELOC64-NEXT: Virtual Address: 0x78 +; RELOC-NEXT: Symbol: .foo (7) +; RELOC-NEXT: IsSigned: No +; RELOC-NEXT: FixupBitValue: 0 +; RELOC32-NEXT: Length: 32 +; RELOC64-NEXT: Length: 64 +; RELOC-NEXT: Type: R_POS (0x0) +; RELOC-NEXT: } +; RELOC-NEXT: Relocation { +; RELOC32-NEXT: Virtual Address: 0x78 +; RELOC64-NEXT: Virtual Address: 0x80 +; RELOC-NEXT: Symbol: TOC (21) +; RELOC-NEXT: IsSigned: No +; RELOC-NEXT: FixupBitValue: 0 +; RELOC32-NEXT: Length: 32 +; RELOC64-NEXT: Length: 64 +; RELOC-NEXT: Type: R_POS (0x0) +; RELOC-NEXT: } +; RELOC-NEXT: Relocation { +; RELOC32-NEXT: Virtual Address: 0x80 +; RELOC64-NEXT: Virtual Address: 0x90 +; RELOC-NEXT: Symbol: globalA (11) +; RELOC-NEXT: IsSigned: No +; RELOC-NEXT: FixupBitValue: 0 +; RELOC32-NEXT: Length: 32 +; RELOC64-NEXT: Length: 64 +; RELOC-NEXT: Type: R_POS (0x0) +; RELOC-NEXT: } +; RELOC-NEXT: Relocation { +; RELOC32-NEXT: Virtual Address: 0x84 +; RELOC64-NEXT: Virtual Address: 0x98 +; RELOC-NEXT: Symbol: globalB (13) +; RELOC-NEXT: IsSigned: No +; RELOC-NEXT: FixupBitValue: 0 +; RELOC32-NEXT: Length: 32 +; RELOC64-NEXT: Length: 64 +; RELOC-NEXT: Type: R_POS (0x0) +; RELOC-NEXT: } ; RELOC-NEXT: } -; RELOC-NEXT: } -; RELOC-NEXT: Section (index: 2) .data { -; RELOC-NEXT: Relocation { -; RELOC-NEXT: Virtual Address: 0x70 -; RELOC-NEXT: Symbol: arr (15) -; RELOC-NEXT: IsSigned: No -; RELOC-NEXT: FixupBitValue: 0 -; RELOC-NEXT: Length: 32 -; RELOC-NEXT: Type: R_POS (0x0) -; RELOC-NEXT: } -; RELOC-NEXT: Relocation { -; RELOC-NEXT: Virtual Address: 0x74 -; RELOC-NEXT: Symbol: .foo (7) -; RELOC-NEXT: IsSigned: No -; RELOC-NEXT: FixupBitValue: 0 -; RELOC-NEXT: Length: 32 -; RELOC-NEXT: Type: R_POS (0x0) -; RELOC-NEXT: } -; RELOC-NEXT: Relocation { -; RELOC-NEXT: Virtual Address: 0x78 -; RELOC-NEXT: Symbol: TOC (21) -; RELOC-NEXT: IsSigned: No -; RELOC-NEXT: FixupBitValue: 0 -; RELOC-NEXT: Length: 32 -; RELOC-NEXT: Type: R_POS (0x0) -; RELOC-NEXT: } -; RELOC-NEXT: Relocation { -; RELOC-NEXT: Virtual Address: 0x80 -; RELOC-NEXT: Symbol: globalA (11) -; RELOC-NEXT: IsSigned: No -; RELOC-NEXT: FixupBitValue: 0 -; RELOC-NEXT: Length: 32 -; RELOC-NEXT: Type: R_POS (0x0) -; RELOC-NEXT: } -; RELOC-NEXT: Relocation { -; RELOC-NEXT: Virtual Address: 0x84 -; RELOC-NEXT: Symbol: globalB (13) -; RELOC-NEXT: IsSigned: No -; RELOC-NEXT: FixupBitValue: 0 -; RELOC-NEXT: Length: 32 -; RELOC-NEXT: Type: R_POS (0x0) -; RELOC-NEXT: } -; RELOC-NEXT: } ; RELOC-NEXT: ] ; SYM: Symbols [ @@ -171,8 +183,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_ER (0x0) ; SYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -191,8 +204,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_ER (0x0) ; SYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -211,8 +225,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 4 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -231,8 +246,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_LD (0x2) ; SYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -245,14 +261,17 @@ ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#INDX+9]] -; SYM-NEXT: SectionLen: 52 +; SYM32-NEXT: SectionLen: 52 +; SYM64-NEXT: SectionLen: 56 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -271,8 +290,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_LD (0x2) ; SYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -291,8 +311,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_LD (0x2) ; SYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -311,8 +332,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_LD (0x2) ; SYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -331,34 +353,40 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_LD (0x2) ; SYM-NEXT: StorageMappingClass: XMC_RW (0x5) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#INDX+18]] ; SYM-NEXT: Name: foo -; SYM-NEXT: Value (RelocatableAddress): 0x74 +; SYM32-NEXT: Value (RelocatableAddress): 0x74 +; SYM64-NEXT: Value (RelocatableAddress): 0x78 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_EXT (0x2) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#INDX+19]] -; SYM-NEXT: SectionLen: 12 +; SYM32-NEXT: SectionLen: 12 +; SYM64-NEXT: SectionLen: 24 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#INDX+20]] ; SYM-NEXT: Name: TOC -; SYM-NEXT: Value (RelocatableAddress): 0x80 +; SYM32-NEXT: Value (RelocatableAddress): 0x80 +; SYM64-NEXT: Value (RelocatableAddress): 0x90 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) @@ -371,48 +399,57 @@ ; SYM-NEXT: SymbolAlignmentLog2: 2 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC0 (0xF) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#INDX+22]] ; SYM-NEXT: Name: globalA -; SYM-NEXT: Value (RelocatableAddress): 0x80 +; SYM32-NEXT: Value (RelocatableAddress): 0x80 +; SYM64-NEXT: Value (RelocatableAddress): 0x90 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#INDX+23]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#INDX+24]] ; SYM-NEXT: Name: globalB -; SYM-NEXT: Value (RelocatableAddress): 0x84 +; SYM32-NEXT: Value (RelocatableAddress): 0x84 +; SYM64-NEXT: Value (RelocatableAddress): 0x98 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#INDX+25]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: ] @@ -470,3 +507,58 @@ ; DIS_REL-NEXT: 00000038 R_POS TOC ; DIS_REL-NEXT: 00000040 R_POS globalA ; DIS_REL-NEXT: 00000044 R_POS globalB + +; DIS64: Disassembly of section .text: +; DIS64: 0000000000000000 <.foo>: +; DIS64-NEXT: 0: 7c 08 02 a6 mflr 0 +; DIS64-NEXT: 4: f8 01 00 10 std 0, 16(1) +; DIS64-NEXT: 8: f8 21 ff 91 stdu 1, -112(1) +; DIS64-NEXT: c: 38 60 00 01 li 3, 1 +; DIS64-NEXT: 10: 4b ff ff f1 bl 0x0 <.foo> +; DIS64-NEXT: 14: 60 00 00 00 nop +; DIS64-NEXT: 18: e8 82 00 00 ld 4, 0(2) +; DIS64-NEXT: 1c: e8 a2 00 08 ld 5, 8(2) +; DIS64-NEXT: 20: 80 84 00 00 lwz 4, 0(4) +; DIS64-NEXT: 24: 80 a5 00 00 lwz 5, 0(5) +; DIS64-NEXT: 28: 7c 63 22 14 add 3, 3, 4 +; DIS64-NEXT: 2c: 7c 63 2a 14 add 3, 3, 5 +; DIS64-NEXT: 30: 38 21 00 70 addi 1, 1, 112 +; DIS64-NEXT: 34: e8 01 00 10 ld 0, 16(1) +; DIS64-NEXT: 38: 7c 08 03 a6 mtlr 0 +; DIS64-NEXT: 3c: 4e 80 00 20 blr + +; DIS64: Disassembly of section .data: +; DIS64: 0000000000000040 : +; DIS64-NEXT: 40: 00 00 00 01 +; DIS64: 0000000000000044 : +; DIS64-NEXT: 44: 00 00 00 02 +; DIS64: 0000000000000048 : +; DIS64-NEXT: 48: 00 00 00 03 +; DIS64-NEXT: ... +; DIS64: 0000000000000070

: +; DIS64-NEXT: 70: 00 00 00 00 +; DIS64-NEXT: 74: 00 00 00 58 +; DIS64: 0000000000000078 : +; DIS64-NEXT: ... +; DIS64-NEXT: 84: 00 00 00 90 +; DIS64-NEXT: ... +; DIS64: 0000000000000090 : +; DIS64-NEXT: 90: 00 00 00 00 +; DIS64-NEXT: 94: 00 00 00 40 +; DIS64: 0000000000000098 : +; DIS64-NEXT: 98: 00 00 00 00 +; DIS64-NEXT: 9c: 00 00 00 44 + +; DIS_REL64: RELOCATION RECORDS FOR [.text]: +; DIS_REL64-NEXT: OFFSET TYPE VALUE +; DIS_REL64-NEXT: 0000000000000010 R_RBR .bar +; DIS_REL64-NEXT: 000000000000001a R_TOC globalA +; DIS_REL64-NEXT: 000000000000001e R_TOC globalB + +; DIS_REL64: RELOCATION RECORDS FOR [.data]: +; DIS_REL64-NEXT: OFFSET TYPE VALUE +; DIS_REL64-NEXT: 0000000000000030 R_POS arr +; DIS_REL64-NEXT: 0000000000000038 R_POS .foo +; DIS_REL64-NEXT: 0000000000000040 R_POS TOC +; DIS_REL64-NEXT: 0000000000000050 R_POS globalA +; DIS_REL64-NEXT: 0000000000000058 R_POS globalB diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-rodata.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-rodata.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-rodata.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-rodata.ll @@ -3,13 +3,18 @@ ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple powerpc64-ibm-aix-xcoff -data-sections=false < %s | \ ; RUN: FileCheck --check-prefixes=CHECK,CHECK64 %s -; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple powerpc-ibm-aix-xcoff -data-sections=false -filetype=obj -o %t.o < %s +; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple powerpc-ibm-aix-xcoff -data-sections=false \ +; RUN: -filetype=obj -o %t.o < %s ; RUN: llvm-readobj --section-headers --file-header %t.o | \ -; RUN: FileCheck --check-prefix=OBJ %s -; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYMS %s +; RUN: FileCheck --check-prefixes=OBJ,OBJ32 %s +; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefixes=SYMS,SYMS32 %s ; RUN: llvm-objdump -D %t.o | FileCheck --check-prefix=DIS %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple powerpc64-ibm-aix-xcoff -data-sections=false \ +; RUN: -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --section-headers --file-header %t64.o | \ +; RUN: FileCheck --check-prefixes=OBJ,OBJ64 %s +; RUN: llvm-readobj --syms %t64.o | FileCheck --check-prefixes=SYMS,SYMS64 %s @const_ivar = constant i32 35, align 4 @const_llvar = constant i64 36, align 8 @@ -70,16 +75,13 @@ ; CHECK32-NEXT: .vbyte 4, 0 ; CHECK64-NEXT: .vbyte 8, 0x4010000000000000 - -; OBJ: File: {{.*}}aix-xcoff-rodata.ll.tmp.o -; OBJ-NEXT: Format: aixcoff-rs6000 -; OBJ-NEXT: Arch: powerpc -; OBJ-NEXT: AddressSize: 32bit -; OBJ-NEXT: FileHeader { -; OBJ-NEXT: Magic: 0x1DF +; OBJ: FileHeader { +; OBJ32-NEXT: Magic: 0x1DF +; OBJ64-NEXT: Magic: 0x1F7 ; OBJ-NEXT: NumberOfSections: 1 ; OBJ-NEXT: TimeStamp: None (0x0) -; OBJ-NEXT: SymbolTableOffset: 0x8C +; OBJ32-NEXT: SymbolTableOffset: 0x8C +; OBJ64-NEXT: SymbolTableOffset: 0xB0 ; OBJ-NEXT: SymbolTableEntries: 21 ; OBJ-NEXT: OptionalHeaderSize: 0x0 ; OBJ-NEXT: Flags: 0x0 @@ -91,8 +93,10 @@ ; OBJ-NEXT: Name: .text ; OBJ-NEXT: PhysicalAddress: 0x0 ; OBJ-NEXT: VirtualAddress: 0x0 -; OBJ-NEXT: Size: 0x50 -; OBJ-NEXT: RawDataOffset: 0x3C +; OBJ32-NEXT: Size: 0x50 +; OBJ32-NEXT: RawDataOffset: 0x3C +; OBJ64-NEXT: Size: 0x50 +; OBJ64-NEXT: RawDataOffset: 0x60 ; OBJ-NEXT: RelocationPointer: 0x0 ; OBJ-NEXT: LineNumberPointer: 0x0 ; OBJ-NEXT: NumberOfRelocations: 0 @@ -101,11 +105,6 @@ ; OBJ-NEXT: } ; OBJ-NEXT: ] - -; SYMS: File: {{.*}}aix-xcoff-rodata.ll.tmp.o -; SYMS-NEXT: Format: aixcoff-rs6000 -; SYMS-NEXT: Arch: powerpc -; SYMS-NEXT: AddressSize: 32bit ; SYMS: Symbols [ ; SYMS: Symbol {{[{][[:space:]] *}}Index: [[#INDX:]]{{[[:space:]] *}}Name: .rodata ; SYMS-NEXT: Value (RelocatableAddress): 0x0 @@ -121,8 +120,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 5 ; SYMS-NEXT: SymbolType: XTY_SD (0x1) ; SYMS-NEXT: StorageMappingClass: XMC_RO (0x1) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -142,8 +142,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RO (0x1) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -163,8 +164,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RO (0x1) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -184,8 +186,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RO (0x1) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -205,8 +208,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RO (0x1) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -226,8 +230,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RO (0x1) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -247,8 +252,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RO (0x1) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -268,8 +274,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RO (0x1) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } @@ -289,8 +296,9 @@ ; SYMS-NEXT: SymbolAlignmentLog2: 0 ; SYMS-NEXT: SymbolType: XTY_LD (0x2) ; SYMS-NEXT: StorageMappingClass: XMC_RO (0x1) -; SYMS-NEXT: StabInfoIndex: 0x0 -; SYMS-NEXT: StabSectNum: 0x0 +; SYMS32-NEXT: StabInfoIndex: 0x0 +; SYMS32-NEXT: StabSectNum: 0x0 +; SYMS64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYMS-NEXT: } ; SYMS-NEXT: } ; SYMS: ] diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-toc.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-toc.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-toc.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-toc.ll @@ -1,15 +1,17 @@ ; This file tests TOC entry generation and undefined symbol generation. -; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \ -; RUN: -xcoff-traceback-table=false < %s | FileCheck --check-prefixes CHECK,CHECK32 %s -; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \ -; RUN: -xcoff-traceback-table=false < %s 2>&1 | FileCheck --check-prefixes CHECK,CHECK64 %s +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \ +; RUN: -xcoff-traceback-table=false < %s | FileCheck --check-prefixes CHECK,CHECK32 %s +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \ +; RUN: -xcoff-traceback-table=false < %s 2>&1 | FileCheck --check-prefixes CHECK,CHECK64 %s ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \ ; RUN: --xcoff-traceback-table=false -filetype=obj -o %t.o < %s -; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYM %s +; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefixes=SYM,SYM32 %s -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \ +; RUN: --xcoff-traceback-table=false -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --syms %t64.o | FileCheck --check-prefixes=SYM,SYM64 %s @a = external global i32, align 4 @b = external global i64, align 8 @@ -77,7 +79,6 @@ ; Test undefined symbol generation. -; SYM: File: {{.*}}aix-xcoff-toc.ll.tmp.o ; SYM: Symbol {{[{][[:space:]] *}}Index: [[#UNDEF_INDX:]]{{[[:space:]] *}}Name: a ; SYM-NEXT: Value (RelocatableAddress): 0x0 ; SYM-NEXT: Section: N_UNDEF @@ -92,8 +93,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_ER (0x0) ; SYM-NEXT: StorageMappingClass: XMC_UA (0x4) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -112,8 +114,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_ER (0x0) ; SYM-NEXT: StorageMappingClass: XMC_UA (0x4) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -132,8 +135,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_ER (0x0) ; SYM-NEXT: StorageMappingClass: XMC_UA (0x4) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -152,8 +156,9 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_ER (0x0) ; SYM-NEXT: StorageMappingClass: XMC_PR (0x0) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { @@ -172,15 +177,17 @@ ; SYM-NEXT: SymbolAlignmentLog2: 0 ; SYM-NEXT: SymbolType: XTY_ER (0x0) ; SYM-NEXT: StorageMappingClass: XMC_DS (0xA) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; Test TOC entry symbol generation. ; SYM: Symbol {{[{][[:space:]] *}}Index: [[#TOC_INDX:]]{{[[:space:]] *}}Name: TOC -; SYM-NEXT: Value (RelocatableAddress): 0xA8 +; SYM32-NEXT: Value (RelocatableAddress): 0xA8 +; SYM64-NEXT: Value (RelocatableAddress): 0xC0 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) @@ -193,167 +200,200 @@ ; SYM-NEXT: SymbolAlignmentLog2: 2 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC0 (0xF) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#TOC_INDX+2]] ; SYM-NEXT: Name: a -; SYM-NEXT: Value (RelocatableAddress): 0xA8 +; SYM32-NEXT: Value (RelocatableAddress): 0xA8 +; SYM64-NEXT: Value (RelocatableAddress): 0xC0 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#TOC_INDX+3]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#TOC_INDX+4]] ; SYM-NEXT: Name: b -; SYM-NEXT: Value (RelocatableAddress): 0xAC +; SYM32-NEXT: Value (RelocatableAddress): 0xAC +; SYM64-NEXT: Value (RelocatableAddress): 0xC8 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#TOC_INDX+5]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#TOC_INDX+6]] ; SYM-NEXT: Name: c -; SYM-NEXT: Value (RelocatableAddress): 0xB0 +; SYM32-NEXT: Value (RelocatableAddress): 0xB0 +; SYM64-NEXT: Value (RelocatableAddress): 0xD0 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#TOC_INDX+7]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#TOC_INDX+8]] ; SYM-NEXT: Name: globa -; SYM-NEXT: Value (RelocatableAddress): 0xB4 +; SYM32-NEXT: Value (RelocatableAddress): 0xB4 +; SYM64-NEXT: Value (RelocatableAddress): 0xD8 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#TOC_INDX+9]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#TOC_INDX+10]] ; SYM-NEXT: Name: ptr -; SYM-NEXT: Value (RelocatableAddress): 0xB8 +; SYM32-NEXT: Value (RelocatableAddress): 0xB8 +; SYM64-NEXT: Value (RelocatableAddress): 0xE0 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#TOC_INDX+11]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#TOC_INDX+12]] ; SYM-NEXT: Name: bar -; SYM-NEXT: Value (RelocatableAddress): 0xBC +; SYM32-NEXT: Value (RelocatableAddress): 0xBC +; SYM64-NEXT: Value (RelocatableAddress): 0xE8 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#TOC_INDX+13]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#TOC_INDX+14]] ; SYM-NEXT: Name: foo -; SYM-NEXT: Value (RelocatableAddress): 0xC0 +; SYM32-NEXT: Value (RelocatableAddress): 0xC0 +; SYM64-NEXT: Value (RelocatableAddress): 0xF0 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#TOC_INDX+15]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } ; SYM-NEXT: Symbol { ; SYM-NEXT: Index: [[#TOC_INDX+16]] ; SYM-NEXT: Name: foobar -; SYM-NEXT: Value (RelocatableAddress): 0xC4 +; SYM32-NEXT: Value (RelocatableAddress): 0xC4 +; SYM64-NEXT: Value (RelocatableAddress): 0xF8 ; SYM-NEXT: Section: .data ; SYM-NEXT: Type: 0x0 ; SYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; SYM-NEXT: NumberOfAuxEntries: 1 ; SYM-NEXT: CSECT Auxiliary Entry { ; SYM-NEXT: Index: [[#TOC_INDX+17]] -; SYM-NEXT: SectionLen: 4 +; SYM32-NEXT: SectionLen: 4 +; SYM64-NEXT: SectionLen: 8 ; SYM-NEXT: ParameterHashIndex: 0x0 ; SYM-NEXT: TypeChkSectNum: 0x0 -; SYM-NEXT: SymbolAlignmentLog2: 2 +; SYM32-NEXT: SymbolAlignmentLog2: 2 +; SYM64-NEXT: SymbolAlignmentLog2: 3 ; SYM-NEXT: SymbolType: XTY_SD (0x1) ; SYM-NEXT: StorageMappingClass: XMC_TC (0x3) -; SYM-NEXT: StabInfoIndex: 0x0 -; SYM-NEXT: StabSectNum: 0x0 +; SYM32-NEXT: StabInfoIndex: 0x0 +; SYM32-NEXT: StabSectNum: 0x0 +; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB) ; SYM-NEXT: } ; SYM-NEXT: } diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-visibility.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-visibility.ll --- a/llvm/test/CodeGen/PowerPC/aix-xcoff-visibility.ll +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-visibility.ll @@ -5,15 +5,13 @@ ; RUN: not --crash llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff \ ; RUN: -filetype=obj -o %t.o < %s 2>&1 | \ -; RUN: FileCheck --check-prefix=XCOFF32 %s -; XCOFF32: LLVM ERROR: Emitting non-zero visibilities is not supported yet. +; RUN: FileCheck --check-prefix=XCOFF %s ; RUN: not --crash llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff \ ; RUN: -filetype=obj -o %t.o 2>&1 < %s 2>&1 | \ -; RUN: FileCheck --check-prefix=XCOFF64 %s -; FIXME: This should check for the visibility error, but we actually fail before -; that due to unimplemented relocations. -; XCOFF64: LLVM ERROR: Unimplemented fixup kind. +; RUN: FileCheck --check-prefix=XCOFF %s + +; XCOFF: LLVM ERROR: Emitting non-zero visibilities is not supported yet. @b = global i32 0, align 4 @b_h = hidden global i32 0, align 4 diff --git a/llvm/test/CodeGen/PowerPC/basic-toc-data-def.ll b/llvm/test/CodeGen/PowerPC/basic-toc-data-def.ll --- a/llvm/test/CodeGen/PowerPC/basic-toc-data-def.ll +++ b/llvm/test/CodeGen/PowerPC/basic-toc-data-def.ll @@ -3,6 +3,11 @@ ; RUN: -verify-machineinstrs < %s 2>&1 | \ ; RUN: FileCheck %s --check-prefix=OBJ +; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s +; RUN: not --crash llc -filetype=obj -mtriple powerpc64-ibm-aix-xcoff \ +; RUN: -verify-machineinstrs < %s 2>&1 | \ +; RUN: FileCheck %s --check-prefix=OBJ + @i = global i32 55, align 4 #0 attributes #0 = { "toc-data" } diff --git a/llvm/test/CodeGen/PowerPC/basic-toc-data-extern.ll b/llvm/test/CodeGen/PowerPC/basic-toc-data-extern.ll --- a/llvm/test/CodeGen/PowerPC/basic-toc-data-extern.ll +++ b/llvm/test/CodeGen/PowerPC/basic-toc-data-extern.ll @@ -1,9 +1,12 @@ ; RUN: llc -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s ; RUN: not --crash llc -filetype=obj -mtriple powerpc-ibm-aix-xcoff \ ; RUN: -verify-machineinstrs < %s 2>&1 | \ -; RUN: FileCheck %s --check-prefix=OBJ32 +; RUN: FileCheck %s --check-prefix=OBJ -;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64. +; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s +; RUN: not --crash llc -filetype=obj -mtriple powerpc64-ibm-aix-xcoff \ +; RUN: -verify-machineinstrs < %s 2>&1 | \ +; RUN: FileCheck %s --check-prefix=OBJ @i = external global i32, align 4 #0 @@ -17,6 +20,6 @@ ; CHECK: .toc ; CHECK-NEXT: .extern i[TD] -; OBJ32: LLVM ERROR: toc-data not yet supported when writing object files. +; OBJ: LLVM ERROR: toc-data not yet supported when writing object files. attributes #0 = { "toc-data" } diff --git a/llvm/test/MC/PowerPC/ppc64-abs-reloc.s b/llvm/test/MC/PowerPC/ppc64-abs-reloc.s --- a/llvm/test/MC/PowerPC/ppc64-abs-reloc.s +++ b/llvm/test/MC/PowerPC/ppc64-abs-reloc.s @@ -1,6 +1,9 @@ # RUN: llvm-mc -triple powerpc64le-unknown-linux-gnu %s -filetype=obj -o - | \ # RUN: llvm-objdump -D -r - | FileCheck %s - .text + +# RUN: llvm-mc -triple powerpc64-ibm-aix-xcoff %s -filetype=obj -o - | \ +# RUN: llvm-objdump -D -r - | FileCheck %s + test: # @test add 5, 3, 4 extsw 3, 5