diff --git a/llvm/include/llvm/MC/MCSectionXCOFF.h b/llvm/include/llvm/MC/MCSectionXCOFF.h --- a/llvm/include/llvm/MC/MCSectionXCOFF.h +++ b/llvm/include/llvm/MC/MCSectionXCOFF.h @@ -64,6 +64,9 @@ XCOFF::StorageMappingClass getMappingClass() const { return MappingClass; } XCOFF::StorageClass getStorageClass() const { return QualName->getStorageClass(); } + XCOFF::VisibilityType getVisibilityType() const { + return QualName->getVisibilityType(); + } XCOFF::SymbolType getCSectType() const { return Type; } MCSymbolXCOFF *getQualNameSymbol() const { return QualName; } 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 @@ -68,6 +68,11 @@ XCOFF::StorageClass getStorageClass() const { return MCSym->getStorageClass(); } + + XCOFF::VisibilityType getVisibilityType() const { + return MCSym->getVisibilityType(); + } + StringRef getSymbolTableName() const { return MCSym->getSymbolTableName(); } Symbol(const MCSymbolXCOFF *MCSym) : MCSym(MCSym), SymbolTableIndex(-1) {} }; @@ -561,13 +566,12 @@ W.write(CSectionRef.Address + SymbolOffset); W.write(SectionIndex); // 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 - // visibility, and all other bits are either optionally set or reserved, this - // is always zero. - // TODO FIXME How to assert a symbol's visibilty is default? + // table entries for a detailed description. Since we support visibility, and + // all other bits are either optionally set or reserved, we only set bits 0-3 + // for symbol's visibility and leave other bits to zero. // TODO Set the function indicator (bit 10, 0x0020) for functions // when debugging is enabled. - W.write(0); + W.write(SymbolRef.getVisibilityType()); W.write(SymbolRef.getStorageClass()); // Always 1 aux entry for now. W.write(1); @@ -598,13 +602,12 @@ // n_scnum W.write(SectionIndex); // 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 - // visibility, and all other bits are either optionally set or reserved, this - // is always zero. - // TODO FIXME How to assert a symbol's visibilty is default? + // table entries for a detailed description. Since we support visibility, and + // all other bits are either optionally set or reserved, we only set bits 0-3 + // for symbol's visibility and leave other bits to zero. // TODO Set the function indicator (bit 10, 0x0020) for functions // when debugging is enabled. - W.write(0); + W.write(CSectionRef.MCCsect->getVisibilityType()); // n_sclass W.write(StorageClass); // Always 1 aux entry for now. 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 @@ -3,6 +3,16 @@ ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 -mattr=-altivec < %s |\ ; RUN: 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: not --crash llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff \ +; RUN: -mcpu=pwr4 -mattr=-altivec -filetype=obj -o %t.o 2>&1 < %s | \ +; RUN: FileCheck --check-prefix=XCOFF64 %s +; XCOFF64: LLVM ERROR: 64-bit XCOFF object files are not supported yet. + @b = global i32 0, align 4 @b_h = hidden global i32 0, align 4 @@ -56,3 +66,446 @@ ; CHECK: .weak zoo_weak_extern_h[DS],hidden ; CHECK: .extern .bar_h[PR],hidden ; CHECK: .extern bar_h[DS],hidden + +; XCOFF32: Symbols [ +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index:]] +; XCOFF32-NEXT: Name: .bar_h +; XCOFF32-NEXT: Value (RelocatableAddress): 0x0 +; XCOFF32-NEXT: Section: N_UNDEF +; XCOFF32-NEXT: Type: 0x2000 +; 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_PR (0x0) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+2]] +; XCOFF32-NEXT: Name: zoo_weak_extern_h +; XCOFF32-NEXT: Value (RelocatableAddress): 0x0 +; XCOFF32-NEXT: Section: N_UNDEF +; XCOFF32-NEXT: Type: 0x2000 +; XCOFF32-NEXT: StorageClass: C_WEAKEXT (0x6F) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+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_DS (0xA) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+4]] +; XCOFF32-NEXT: Name: .zoo_weak_extern_h +; XCOFF32-NEXT: Value (RelocatableAddress): 0x0 +; XCOFF32-NEXT: Section: N_UNDEF +; XCOFF32-NEXT: Type: 0x2000 +; XCOFF32-NEXT: StorageClass: C_WEAKEXT (0x6F) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+5]] +; 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: [[#Index+6]] +; XCOFF32-NEXT: Name: bar_h +; XCOFF32-NEXT: Value (RelocatableAddress): 0x0 +; XCOFF32-NEXT: Section: N_UNDEF +; XCOFF32-NEXT: Type: 0x2000 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+7]] +; 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_DS (0xA) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+8]] +; XCOFF32-NEXT: Name: .text +; XCOFF32-NEXT: Value (RelocatableAddress): 0x0 +; XCOFF32-NEXT: Section: .text +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_HIDEXT (0x6B) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+9]] +; XCOFF32-NEXT: SectionLen: 152 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 4 +; XCOFF32-NEXT: SymbolType: XTY_SD (0x1) +; XCOFF32-NEXT: StorageMappingClass: XMC_PR (0x0) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+10]] +; XCOFF32-NEXT: Name: .foo +; XCOFF32-NEXT: Value (RelocatableAddress): 0x0 +; XCOFF32-NEXT: Section: .text +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+11]] +; XCOFF32-NEXT: ContainingCsectSymbolIndex: 8 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 0 +; XCOFF32-NEXT: SymbolType: XTY_LD (0x2) +; XCOFF32-NEXT: StorageMappingClass: XMC_PR (0x0) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+12]] +; XCOFF32-NEXT: Name: .foo_h +; XCOFF32-NEXT: Value (RelocatableAddress): 0x10 +; XCOFF32-NEXT: Section: .text +; XCOFF32-NEXT: Type: 0x2000 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+13]] +; XCOFF32-NEXT: ContainingCsectSymbolIndex: 8 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 0 +; XCOFF32-NEXT: SymbolType: XTY_LD (0x2) +; XCOFF32-NEXT: StorageMappingClass: XMC_PR (0x0) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+14]] +; XCOFF32-NEXT: Name: .foo_protected +; XCOFF32-NEXT: Value (RelocatableAddress): 0x20 +; XCOFF32-NEXT: Section: .text +; XCOFF32-NEXT: Type: 0x3000 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+15]] +; XCOFF32-NEXT: ContainingCsectSymbolIndex: 8 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 0 +; XCOFF32-NEXT: SymbolType: XTY_LD (0x2) +; XCOFF32-NEXT: StorageMappingClass: XMC_PR (0x0) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+16]] +; XCOFF32-NEXT: Name: .foo_weak_h +; XCOFF32-NEXT: Value (RelocatableAddress): 0x30 +; XCOFF32-NEXT: Section: .text +; XCOFF32-NEXT: Type: 0x2000 +; XCOFF32-NEXT: StorageClass: C_WEAKEXT (0x6F) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+17]] +; XCOFF32-NEXT: ContainingCsectSymbolIndex: 8 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 0 +; XCOFF32-NEXT: SymbolType: XTY_LD (0x2) +; XCOFF32-NEXT: StorageMappingClass: XMC_PR (0x0) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+18]] +; XCOFF32-NEXT: Name: .main +; XCOFF32-NEXT: Value (RelocatableAddress): 0x40 +; XCOFF32-NEXT: Section: .text +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+19]] +; XCOFF32-NEXT: ContainingCsectSymbolIndex: 8 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 0 +; XCOFF32-NEXT: SymbolType: XTY_LD (0x2) +; XCOFF32-NEXT: StorageMappingClass: XMC_PR (0x0) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+20]] +; XCOFF32-NEXT: Name: .data +; XCOFF32-NEXT: Value (RelocatableAddress): 0x98 +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_HIDEXT (0x6B) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+21]] +; XCOFF32-NEXT: SectionLen: 12 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 2 +; XCOFF32-NEXT: SymbolType: XTY_SD (0x1) +; XCOFF32-NEXT: StorageMappingClass: XMC_RW (0x5) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+22]] +; XCOFF32-NEXT: Name: b +; XCOFF32-NEXT: Value (RelocatableAddress): 0x98 +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+23]] +; XCOFF32-NEXT: ContainingCsectSymbolIndex: 20 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 0 +; XCOFF32-NEXT: SymbolType: XTY_LD (0x2) +; XCOFF32-NEXT: StorageMappingClass: XMC_RW (0x5) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+24]] +; XCOFF32-NEXT: Name: b_h +; XCOFF32-NEXT: Value (RelocatableAddress): 0x9C +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x2000 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+25]] +; XCOFF32-NEXT: ContainingCsectSymbolIndex: 20 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 0 +; XCOFF32-NEXT: SymbolType: XTY_LD (0x2) +; XCOFF32-NEXT: StorageMappingClass: XMC_RW (0x5) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+26]] +; XCOFF32-NEXT: Name: foo_p +; XCOFF32-NEXT: Value (RelocatableAddress): 0xA0 +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+27]] +; XCOFF32-NEXT: ContainingCsectSymbolIndex: 20 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 0 +; XCOFF32-NEXT: SymbolType: XTY_LD (0x2) +; XCOFF32-NEXT: StorageMappingClass: XMC_RW (0x5) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+28]] +; XCOFF32-NEXT: Name: foo +; XCOFF32-NEXT: Value (RelocatableAddress): 0xA4 +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+29]] +; XCOFF32-NEXT: SectionLen: 12 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 2 +; XCOFF32-NEXT: SymbolType: XTY_SD (0x1) +; XCOFF32-NEXT: StorageMappingClass: XMC_DS (0xA) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+30]] +; XCOFF32-NEXT: Name: foo_h +; XCOFF32-NEXT: Value (RelocatableAddress): 0xB0 +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x2000 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+31]] +; XCOFF32-NEXT: SectionLen: 12 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 2 +; XCOFF32-NEXT: SymbolType: XTY_SD (0x1) +; XCOFF32-NEXT: StorageMappingClass: XMC_DS (0xA) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+32]] +; XCOFF32-NEXT: Name: foo_protected +; XCOFF32-NEXT: Value (RelocatableAddress): 0xBC +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x3000 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+33]] +; XCOFF32-NEXT: SectionLen: 12 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 2 +; XCOFF32-NEXT: SymbolType: XTY_SD (0x1) +; XCOFF32-NEXT: StorageMappingClass: XMC_DS (0xA) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+34]] +; XCOFF32-NEXT: Name: foo_weak_h +; XCOFF32-NEXT: Value (RelocatableAddress): 0xC8 +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x2000 +; XCOFF32-NEXT: StorageClass: C_WEAKEXT (0x6F) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+35]] +; XCOFF32-NEXT: SectionLen: 12 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 2 +; XCOFF32-NEXT: SymbolType: XTY_SD (0x1) +; XCOFF32-NEXT: StorageMappingClass: XMC_DS (0xA) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+36]] +; XCOFF32-NEXT: Name: main +; XCOFF32-NEXT: Value (RelocatableAddress): 0xD4 +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_EXT (0x2) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+37]] +; XCOFF32-NEXT: SectionLen: 12 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 2 +; XCOFF32-NEXT: SymbolType: XTY_SD (0x1) +; XCOFF32-NEXT: StorageMappingClass: XMC_DS (0xA) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+38]] +; XCOFF32-NEXT: Name: TOC +; XCOFF32-NEXT: Value (RelocatableAddress): 0xE0 +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_HIDEXT (0x6B) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+39]] +; XCOFF32-NEXT: SectionLen: 0 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 2 +; XCOFF32-NEXT: SymbolType: XTY_SD (0x1) +; XCOFF32-NEXT: StorageMappingClass: XMC_TC0 (0xF) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+40]] +; XCOFF32-NEXT: Name: b_h +; XCOFF32-NEXT: Value (RelocatableAddress): 0xE0 +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_HIDEXT (0x6B) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+41]] +; XCOFF32-NEXT: SectionLen: 4 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 2 +; XCOFF32-NEXT: SymbolType: XTY_SD (0x1) +; XCOFF32-NEXT: StorageMappingClass: XMC_TC (0x3) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: Symbol { +; XCOFF32-NEXT: Index: [[#Index+42]] +; XCOFF32-NEXT: Name: foo_p +; XCOFF32-NEXT: Value (RelocatableAddress): 0xE4 +; XCOFF32-NEXT: Section: .data +; XCOFF32-NEXT: Type: 0x0 +; XCOFF32-NEXT: StorageClass: C_HIDEXT (0x6B) +; XCOFF32-NEXT: NumberOfAuxEntries: 1 +; XCOFF32-NEXT: CSECT Auxiliary Entry { +; XCOFF32-NEXT: Index: [[#Index+43]] +; XCOFF32-NEXT: SectionLen: 4 +; XCOFF32-NEXT: ParameterHashIndex: 0x0 +; XCOFF32-NEXT: TypeChkSectNum: 0x0 +; XCOFF32-NEXT: SymbolAlignmentLog2: 2 +; XCOFF32-NEXT: SymbolType: XTY_SD (0x1) +; XCOFF32-NEXT: StorageMappingClass: XMC_TC (0x3) +; XCOFF32-NEXT: StabInfoIndex: 0x0 +; XCOFF32-NEXT: StabSectNum: 0x0 +; XCOFF32-NEXT: } +; XCOFF32-NEXT: } +; XCOFF32-NEXT: ]