[AIX][XCOFF] emit symbol visibility for xcoff object file.

SUMMARY:

Reviewers:  Jason liu

Differential Revision: https://reviews.llvm.org/D84265
This commit is contained in:
diggerlin 2020-08-21 11:00:56 -04:00
parent 1beb11c61a
commit a081868921
3 changed files with 471 additions and 10 deletions

View file

@ -66,6 +66,11 @@ public:
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; }

View file

@ -68,6 +68,11 @@ struct Symbol {
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 @@ void XCOFFObjectWriter::writeSymbolTableEntryForCsectMemberLabel(
W.write<uint32_t>(CSectionRef.Address + SymbolOffset);
W.write<int16_t>(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<uint16_t>(0);
W.write<uint16_t>(SymbolRef.getVisibilityType());
W.write<uint8_t>(SymbolRef.getStorageClass());
// Always 1 aux entry for now.
W.write<uint8_t>(1);
@ -598,13 +602,12 @@ void XCOFFObjectWriter::writeSymbolTableEntryForControlSection(
// n_scnum
W.write<int16_t>(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<uint16_t>(0);
W.write<uint16_t>(CSectionRef.MCCsect->getVisibilityType());
// n_sclass
W.write<uint8_t>(StorageClass);
// Always 1 aux entry for now.

View file

@ -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 @@ declare hidden i32 @bar_h(i32*)
; 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: ]