[llvm] f98567b - [AIX][TLS] Add support for TLS variables to XCOFF object writer
Victor Huang via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 6 08:46:52 PDT 2021
Author: Victor Huang
Date: 2021-04-06T10:46:07-05:00
New Revision: f98567b3fecb2d0efe390f7c3f309333287d9398
URL: https://github.com/llvm/llvm-project/commit/f98567b3fecb2d0efe390f7c3f309333287d9398
DIFF: https://github.com/llvm/llvm-project/commit/f98567b3fecb2d0efe390f7c3f309333287d9398.diff
LOG: [AIX][TLS] Add support for TLS variables to XCOFF object writer
This patch adds support for TLS variables to the XCOFF object writer:
- Add TData and TBSS sections
- Add CsectGroups for the mapping classes XCOFF::XMC_TL and XCOFF::XMC_UL
- Add XMC_UL in the enum entry of CsectStorageMapping class to print the string
while reading the symbol properties for TLS variables
- Fix the starting address of TData and TBSS sections
Reviewed by: hubert.reinterpretcast, DiggerLin
Differential Revision: https://reviews.llvm.org/D98946
Added:
llvm/test/CodeGen/PowerPC/aix-tls-xcoff-variables.ll
Modified:
llvm/lib/MC/XCOFFObjectWriter.cpp
llvm/tools/llvm-readobj/XCOFFDumper.cpp
Removed:
################################################################################
diff --git a/llvm/lib/MC/XCOFFObjectWriter.cpp b/llvm/lib/MC/XCOFFObjectWriter.cpp
index 15e5a437ced8..f41f47a718cb 100644
--- a/llvm/lib/MC/XCOFFObjectWriter.cpp
+++ b/llvm/lib/MC/XCOFFObjectWriter.cpp
@@ -178,15 +178,19 @@ class XCOFFObjectWriter : public MCObjectWriter {
CsectGroup FuncDSCsects;
CsectGroup TOCCsects;
CsectGroup BSSCsects;
+ CsectGroup TDataCsects;
+ CsectGroup TBSSCsects;
// The Predefined sections.
Section Text;
Section Data;
Section BSS;
+ Section TData;
+ Section TBSS;
// All the XCOFF sections, in the order they will appear in the section header
// table.
- std::array<Section *const, 3> Sections{{&Text, &Data, &BSS}};
+ std::array<Section *const, 5> Sections{{&Text, &Data, &BSS, &TData, &TBSS}};
CsectGroup &getCsectGroup(const MCSectionXCOFF *MCSec);
@@ -250,7 +254,11 @@ XCOFFObjectWriter::XCOFFObjectWriter(
Data(".data", XCOFF::STYP_DATA, /* IsVirtual */ false,
CsectGroups{&DataCsects, &FuncDSCsects, &TOCCsects}),
BSS(".bss", XCOFF::STYP_BSS, /* IsVirtual */ true,
- CsectGroups{&BSSCsects}) {}
+ CsectGroups{&BSSCsects}),
+ TData(".tdata", XCOFF::STYP_TDATA, /* IsVirtual */ false,
+ CsectGroups{&TDataCsects}),
+ TBSS(".tbss", XCOFF::STYP_TBSS, /* IsVirtual */ true,
+ CsectGroups{&TBSSCsects}) {}
void XCOFFObjectWriter::reset() {
// Clear the mappings we created.
@@ -297,6 +305,16 @@ CsectGroup &XCOFFObjectWriter::getCsectGroup(const MCSectionXCOFF *MCSec) {
"Mapping invalid csect. CSECT with bss storage class must be "
"common type.");
return BSSCsects;
+ case XCOFF::XMC_TL:
+ assert(XCOFF::XTY_SD == MCSec->getCSectType() &&
+ "Mapping invalid csect. CSECT with tdata storage class must be "
+ "an initialized csect.");
+ return TDataCsects;
+ case XCOFF::XMC_UL:
+ assert(XCOFF::XTY_CM == MCSec->getCSectType() &&
+ "Mapping invalid csect. CSECT with tbss storage class must be "
+ "an uninitialized csect.");
+ return TBSSCsects;
case XCOFF::XMC_TC0:
assert(XCOFF::XTY_SD == MCSec->getCSectType() &&
"Only an initialized csect can contain TOC-base.");
@@ -493,9 +511,11 @@ void XCOFFObjectWriter::writeSections(const MCAssembler &Asm,
// There could be a gap (without corresponding zero padding) between
// sections.
- assert(CurrentAddressLocation <= Section->Address &&
+ assert(((CurrentAddressLocation <= Section->Address) ||
+ (Section->Flags == XCOFF::STYP_TDATA) ||
+ (Section->Flags == XCOFF::STYP_TBSS)) &&
"CurrentAddressLocation should be less than or equal to section "
- "address.");
+ "address if the section is not TData or TBSS.");
CurrentAddressLocation = Section->Address;
@@ -828,6 +848,7 @@ void XCOFFObjectWriter::assignAddressesAndIndices(const MCAsmLayout &Layout) {
uint32_t Address = 0;
// Section indices are 1-based in XCOFF.
int32_t SectionIndex = 1;
+ bool HasTDataSection = false;
for (auto *Section : Sections) {
const bool IsEmpty =
@@ -842,6 +863,16 @@ void XCOFFObjectWriter::assignAddressesAndIndices(const MCAsmLayout &Layout) {
SectionCount++;
bool SectionAddressSet = false;
+ // Reset the starting address to 0 for TData section.
+ if (Section->Flags == XCOFF::STYP_TDATA) {
+ Address = 0;
+ HasTDataSection = true;
+ }
+ // Reset the starting address to 0 for TBSS section if the object file does
+ // not contain TData Section.
+ if ((Section->Flags == XCOFF::STYP_TBSS) && !HasTDataSection)
+ Address = 0;
+
for (auto *Group : Section->Groups) {
if (Group->empty())
continue;
diff --git a/llvm/test/CodeGen/PowerPC/aix-tls-xcoff-variables.ll b/llvm/test/CodeGen/PowerPC/aix-tls-xcoff-variables.ll
new file mode 100644
index 000000000000..28cc3c0668a6
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/aix-tls-xcoff-variables.ll
@@ -0,0 +1,646 @@
+; This file tests the codegen of tls variables in AIX XCOFF object files
+
+; RUN: llc -mtriple powerpc-ibm-aix-xcoff -filetype=obj -o %t.o < %s
+; RUN: llvm-readobj --section-headers %t.o | FileCheck --check-prefix=SECTION %s
+; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefixes=SYMS,SYMS-DATASECT %s
+; RUN: llvm-objdump -D --symbol-description %t.o | FileCheck --check-prefixes=OBJDUMP-DATASECT %s
+
+; RUN: llc -mtriple powerpc-ibm-aix-xcoff -data-sections=false -filetype=obj -o %t.o < %s
+; RUN: llvm-readobj --section-headers %t.o | FileCheck --check-prefix=SECTION %s
+; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefixes=SYMS,SYMS-NODATASECT %s
+; RUN: llvm-objdump -D --symbol-description %t.o | FileCheck --check-prefixes=OBJDUMP-NODATASECT %s
+
+; RUN: not --crash llc -mtriple powerpc64-ibm-aix-xcoff -filetype=obj < %s 2>&1 | FileCheck --check-prefix=XCOFF64 %s
+; XCOFF64: LLVM ERROR: 64-bit XCOFF object files are not supported yet.
+
+; SECTION: File: {{.*}}aix-tls-xcoff-variables.ll.tmp.o
+; SECTION-NEXT: Format: aixcoff-rs6000
+; SECTION-NEXT: Arch: powerpc
+; SECTION-NEXT: AddressSize: 32bit
+; SECTION-NEXT: Sections [
+; SECTION-NEXT: Section {
+; SECTION-NEXT: Index: 1
+; SECTION-NEXT: Name: .text
+; SECTION-NEXT: PhysicalAddress: 0x0
+; SECTION-NEXT: VirtualAddress: 0x0
+; SECTION-NEXT: Size: 0x4
+; SECTION-NEXT: RawDataOffset: 0x8C
+; SECTION-NEXT: RelocationPointer: 0x0
+; SECTION-NEXT: LineNumberPointer: 0x0
+; SECTION-NEXT: NumberOfRelocations: 0
+; SECTION-NEXT: NumberOfLineNumbers: 0
+; SECTION-NEXT: Type: STYP_TEXT (0x20)
+; SECTION-NEXT: }
+; SECTION-NEXT: Section {
+; SECTION-NEXT: Index: 2
+; SECTION-NEXT: Name: .tdata
+; SECTION-NEXT: PhysicalAddress: 0x0
+; SECTION-NEXT: VirtualAddress: 0x0
+; SECTION-NEXT: Size: 0x30
+; SECTION-NEXT: RawDataOffset: 0x90
+; SECTION-NEXT: RelocationPointer: 0x0
+; SECTION-NEXT: LineNumberPointer: 0x0
+; SECTION-NEXT: NumberOfRelocations: 0
+; SECTION-NEXT: NumberOfLineNumbers: 0
+; SECTION-NEXT: Type: STYP_TDATA (0x400)
+; SECTION-NEXT: }
+; SECTION-NEXT: Section {
+; SECTION-NEXT: Index: 3
+; SECTION-NEXT: Name: .tbss
+; SECTION-NEXT: PhysicalAddress: 0x30
+; SECTION-NEXT: VirtualAddress: 0x30
+; SECTION-NEXT: Size: 0x18
+; SECTION-NEXT: RawDataOffset: 0x0
+; SECTION-NEXT: RelocationPointer: 0x0
+; SECTION-NEXT: LineNumberPointer: 0x0
+; SECTION-NEXT: NumberOfRelocations: 0
+; SECTION-NEXT: NumberOfLineNumbers: 0
+; SECTION-NEXT: Type: STYP_TBSS (0x800)
+; SECTION-NEXT: }
+; SECTION-NEXT: ]
+
+
+; SYMS: File: {{.*}}aix-tls-xcoff-variables.ll.tmp.o
+; SYMS-NEXT: Format: aixcoff-rs6000
+; SYMS-NEXT: Arch: powerpc
+; SYMS-NEXT: AddressSize: 32bit
+; SYMS-NEXT: Symbols [
+; SYMS-NEXT: Symbol {
+; SYMS-NEXT: Index: 0
+; SYMS-NEXT: Name: .file
+; SYMS-NEXT: Value (SymbolTableIndex): 0x0
+; SYMS-NEXT: Section: N_DEBUG
+; SYMS-NEXT: Source Language ID: TB_C (0x0)
+; SYMS-NEXT: CPU Version ID: 0x0
+; SYMS-NEXT: StorageClass: C_FILE (0x67)
+; SYMS-NEXT: NumberOfAuxEntries: 0
+; SYMS-NEXT: }
+; SYMS-NEXT: Symbol {
+; SYMS-NEXT: Index: [[#INDX:]]
+; SYMS-NEXT: Name: tls_global_int_external_uninitialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x0
+; SYMS-NEXT: Section: N_UNDEF
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_EXT (0x2)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-NEXT: Index: [[#INDX+1]]
+; SYMS-NEXT: SectionLen: 0
+; SYMS-NEXT: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-NEXT: SymbolAlignmentLog2: 0
+; SYMS-NEXT: SymbolType: XTY_ER (0x0)
+; SYMS-NEXT: StorageMappingClass: XMC_UL (0x15)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+; SYMS-NEXT: Symbol {
+; SYMS-NEXT: Index: [[#INDX+2]]
+; SYMS-NEXT: Name: tls_global_double_external_uninitialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x0
+; SYMS-NEXT: Section: N_UNDEF
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_EXT (0x2)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-NEXT: Index: [[#INDX+3]]
+; SYMS-NEXT: SectionLen: 0
+; SYMS-NEXT: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-NEXT: SymbolAlignmentLog2: 0
+; SYMS-NEXT: SymbolType: XTY_ER (0x0)
+; SYMS-NEXT: StorageMappingClass: XMC_UL (0x15)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS-NEXT: Symbol {
+; SYMS-NEXT: Index: [[#INDX+4]]
+; SYMS-NEXT: Name: .text
+; SYMS-NEXT: Value (RelocatableAddress): 0x0
+; SYMS-NEXT: Section: .text
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_HIDEXT (0x6B)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-NEXT: Index: [[#INDX+5]]
+; SYMS-NEXT: SectionLen: 0
+; SYMS-NEXT: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-NEXT: SymbolAlignmentLog2: 2
+; SYMS-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NEXT: StorageMappingClass: XMC_PR (0x0)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS-NODATASECT: Symbol {
+; SYMS-NODATASECT-NEXT: Index: [[#INDX+6]]
+; SYMS-NODATASECT-NEXT: Name: .rodata
+; SYMS-NODATASECT-NEXT: Value (RelocatableAddress): 0x0
+; SYMS-NODATASECT-NEXT: Section: .text
+; SYMS-NODATASECT-NEXT: Type: 0x0
+; SYMS-NODATASECT-NEXT: StorageClass: C_HIDEXT (0x6B)
+; SYMS-NODATASECT-NEXT: NumberOfAuxEntries: 1
+; SYMS-NODATASECT-NEXT: CSECT Auxiliary Entry {
+; SYMS-NODATASECT-NEXT: Index: [[#INDX+7]]
+; SYMS-NODATASECT-NEXT: SectionLen: 4
+; SYMS-NODATASECT-NEXT: ParameterHashIndex: 0x0
+; SYMS-NODATASECT-NEXT: TypeChkSectNum: 0x0
+; SYMS-NODATASECT-NEXT: SymbolAlignmentLog2: 2
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT-NEXT: StorageMappingClass: XMC_RO (0x1)
+; SYMS-NODATASECT-NEXT: StabInfoIndex: 0x0
+; SYMS-NODATASECT-NEXT: StabSectNum: 0x0
+; SYMS-NODATASECT-NEXT: }
+; SYMS-NODATASECT-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+6]]
+; SYMS-NODATASECT: Index: [[#INDX+8]]
+; SYMS-NEXT: Name: const_ivar
+; SYMS-NEXT: Value (RelocatableAddress): 0x0
+; SYMS-NEXT: Section: .text
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_EXT (0x2)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+7]]
+; SYMS-DATASECT-NEXT: SectionLen: 4
+; SYMS-NODATASECT: Index: [[#INDX+9]]
+; SYMS-NODATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+6]]
+; SYMS: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-DATASECT: SymbolAlignmentLog2: 2
+; SYMS-DATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT: SymbolAlignmentLog2: 0
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_LD (0x2)
+; SYMS: StorageMappingClass: XMC_RO (0x1)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS-NODATASECT: Symbol {
+; SYMS-NODATASECT-NEXT: Index: [[#INDX+10]]
+; SYMS-NODATASECT-NEXT: Name: .tdata
+; SYMS-NODATASECT-NEXT: Value (RelocatableAddress): 0x0
+; SYMS-NODATASECT-NEXT: Section: .tdata
+; SYMS-NODATASECT-NEXT: Type: 0x0
+; SYMS-NODATASECT-NEXT: StorageClass: C_HIDEXT (0x6B)
+; SYMS-NODATASECT-NEXT: NumberOfAuxEntries: 1
+; SYMS-NODATASECT-NEXT: CSECT Auxiliary Entry {
+; SYMS-NODATASECT-NEXT: Index: [[#INDX+11]]
+; SYMS-NODATASECT-NEXT: SectionLen: 48
+; SYMS-NODATASECT-NEXT: ParameterHashIndex: 0x0
+; SYMS-NODATASECT-NEXT: TypeChkSectNum: 0x0
+; SYMS-NODATASECT-NEXT: SymbolAlignmentLog2: 3
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT-NEXT: StorageMappingClass: XMC_TL (0x14)
+; SYMS-NODATASECT-NEXT: StabInfoIndex: 0x0
+; SYMS-NODATASECT-NEXT: StabSectNum: 0x0
+; SYMS-NODATASECT-NEXT: }
+; SYMS-NODATASECT-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+8]]
+; SYMS-NODATASECT: Index: [[#INDX+12]]
+; SYMS: Name: tls_global_int_external_val_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x0
+; SYMS-NEXT: Section: .tdata
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_EXT (0x2)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+9]]
+; SYMS-DATASECT-NEXT: SectionLen: 4
+; SYMS-NODATASECT: Index: [[#INDX+13]]
+; SYMS-NODATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+10]]
+; SYMS: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-DATASECT: SymbolAlignmentLog2: 2
+; SYMS-DATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT: SymbolAlignmentLog2: 0
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_LD (0x2)
+; SYMS: StorageMappingClass: XMC_TL (0x14)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+10]]
+; SYMS-NODATASECT: Index: [[#INDX+14]]
+; SYMS: Name: tls_global_alias_int_external_val_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x0
+; SYMS-NEXT: Section: .tdata
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_EXT (0x2)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+11]]
+; SYMS-DATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+8]]
+; SYMS-NODATASECT: Index: [[#INDX+15]]
+; SYMS-NODATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+10]]
+; SYMS: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-NEXT: SymbolAlignmentLog2: 0
+; SYMS-NEXT: SymbolType: XTY_LD (0x2)
+; SYMS-NEXT: StorageMappingClass: XMC_TL (0x14)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+12]]
+; SYMS-NODATASECT: Index: [[#INDX+16]]
+; SYMS: Name: tls_global_int_external_zero_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x4
+; SYMS-NEXT: Section: .tdata
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_EXT (0x2)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+13]]
+; SYMS-DATASECT-NEXT: SectionLen: 4
+; SYMS-NODATASECT: Index: [[#INDX+17]]
+; SYMS-NODATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+10]]
+; SYMS: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-DATASECT: SymbolAlignmentLog2: 2
+; SYMS-DATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT: SymbolAlignmentLog2: 0
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_LD (0x2)
+; SYMS: StorageMappingClass: XMC_TL (0x14)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+14]]
+; SYMS-NODATASECT: Index: [[#INDX+18]]
+; SYMS: Name: tls_global_int_local_val_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x8
+; SYMS-NEXT: Section: .tdata
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_HIDEXT (0x6B)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+15]]
+; SYMS-DATASECT-NEXT: SectionLen: 4
+; SYMS-NODATASECT: Index: [[#INDX+19]]
+; SYMS-NODATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+10]]
+; SYMS: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-DATASECT: SymbolAlignmentLog2: 2
+; SYMS-DATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT: SymbolAlignmentLog2: 0
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_LD (0x2)
+; SYMS: StorageMappingClass: XMC_TL (0x14)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+16]]
+; SYMS-NODATASECT: Index: [[#INDX+20]]
+; SYMS: Name: tls_global_int_weak_zero_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0xC
+; SYMS-NEXT: Section: .tdata
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_WEAKEXT (0x6F)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+17]]
+; SYMS-DATASECT-NEXT: SectionLen: 4
+; SYMS-NODATASECT: Index: [[#INDX+21]]
+; SYMS-NODATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+10]]
+; SYMS: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-DATASECT: SymbolAlignmentLog2: 2
+; SYMS-DATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT: SymbolAlignmentLog2: 0
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_LD (0x2)
+; SYMS: StorageMappingClass: XMC_TL (0x14)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+18]]
+; SYMS-NODATASECT: Index: [[#INDX+22]]
+; SYMS: Name: tls_global_int_weak_val_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x10
+; SYMS-NEXT: Section: .tdata
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_WEAKEXT (0x6F)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+19]]
+; SYMS-DATASECT-NEXT: SectionLen: 4
+; SYMS-NODATASECT: Index: [[#INDX+23]]
+; SYMS-NODATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+10]]
+; SYMS: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-DATASECT: SymbolAlignmentLog2: 2
+; SYMS-DATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT: SymbolAlignmentLog2: 0
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_LD (0x2)
+; SYMS: StorageMappingClass: XMC_TL (0x14)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+20]]
+; SYMS-NODATASECT: Index: [[#INDX+24]]
+; SYMS: Name: tls_global_long_long_internal_val_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x18
+; SYMS-NEXT: Section: .tdata
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_HIDEXT (0x6B)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+21]]
+; SYMS-DATASECT-NEXT: SectionLen: 8
+; SYMS-NODATASECT: Index: [[#INDX+25]]
+; SYMS-NODATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+10]]
+; SYMS: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-DATASECT: SymbolAlignmentLog2: 3
+; SYMS-DATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT: SymbolAlignmentLog2: 0
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_LD (0x2)
+; SYMS: StorageMappingClass: XMC_TL (0x14)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+22]]
+; SYMS-NODATASECT: Index: [[#INDX+26]]
+; SYMS: Name: tls_global_long_long_weak_val_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x20
+; SYMS-NEXT: Section: .tdata
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_WEAKEXT (0x6F)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+23]]
+; SYMS-DATASECT-NEXT: SectionLen: 8
+; SYMS-NODATASECT: Index: [[#INDX+27]]
+; SYMS-NODATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+10]]
+; SYMS: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-DATASECT: SymbolAlignmentLog2: 3
+; SYMS-DATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT: SymbolAlignmentLog2: 0
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_LD (0x2)
+; SYMS: StorageMappingClass: XMC_TL (0x14)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+24]]
+; SYMS-NODATASECT: Index: [[#INDX+28]]
+; SYMS: Name: tls_global_long_long_weak_zero_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x28
+; SYMS-NEXT: Section: .tdata
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_WEAKEXT (0x6F)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+25]]
+; SYMS-DATASECT-NEXT: SectionLen: 8
+; SYMS-NODATASECT: Index: [[#INDX+29]]
+; SYMS-NODATASECT-NEXT: ContainingCsectSymbolIndex: [[#INDX+10]]
+; SYMS: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-DATASECT: SymbolAlignmentLog2: 3
+; SYMS-DATASECT-NEXT: SymbolType: XTY_SD (0x1)
+; SYMS-NODATASECT: SymbolAlignmentLog2: 0
+; SYMS-NODATASECT-NEXT: SymbolType: XTY_LD (0x2)
+; SYMS: StorageMappingClass: XMC_TL (0x14)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+26]]
+; SYMS-NODATASECT: Index: [[#INDX+30]]
+; SYMS: Name: tls_global_int_local_zero_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x30
+; SYMS-NEXT: Section: .tbss
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_HIDEXT (0x6B)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+27]]
+; SYMS-NODATASECT: Index: [[#INDX+31]]
+; SYMS: SectionLen: 4
+; SYMS-NEXT: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-NEXT: SymbolAlignmentLog2: 2
+; SYMS-NEXT: SymbolType: XTY_CM (0x3)
+; SYMS-NEXT: StorageMappingClass: XMC_UL (0x15)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+28]]
+; SYMS-NODATASECT: Index: [[#INDX+32]]
+; SYMS: Name: tls_global_int_common_zero_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x34
+; SYMS-NEXT: Section: .tbss
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_EXT (0x2)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+29]]
+; SYMS-NODATASECT: Index: [[#INDX+33]]
+; SYMS: SectionLen: 4
+; SYMS-NEXT: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-NEXT: SymbolAlignmentLog2: 2
+; SYMS-NEXT: SymbolType: XTY_CM (0x3)
+; SYMS-NEXT: StorageMappingClass: XMC_UL (0x15)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+30]]
+; SYMS-NODATASECT: Index: [[#INDX+34]]
+; SYMS: Name: tls_global_double_common_zero_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x38
+; SYMS-NEXT: Section: .tbss
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_EXT (0x2)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+31]]
+; SYMS-NODATASECT: Index: [[#INDX+35]]
+; SYMS: SectionLen: 8
+; SYMS-NEXT: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-NEXT: SymbolAlignmentLog2: 3
+; SYMS-NEXT: SymbolType: XTY_CM (0x3)
+; SYMS-NEXT: StorageMappingClass: XMC_UL (0x15)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+; SYMS: Symbol {
+; SYMS-DATASECT: Index: [[#INDX+32]]
+; SYMS-NODATASECT: Index: [[#INDX+36]]
+; SYMS: Name: tls_global_long_long_internal_zero_initialized
+; SYMS-NEXT: Value (RelocatableAddress): 0x40
+; SYMS-NEXT: Section: .tbss
+; SYMS-NEXT: Type: 0x0
+; SYMS-NEXT: StorageClass: C_HIDEXT (0x6B)
+; SYMS-NEXT: NumberOfAuxEntries: 1
+; SYMS-NEXT: CSECT Auxiliary Entry {
+; SYMS-DATASECT: Index: [[#INDX+33]]
+; SYMS-NODATASECT: Index: [[#INDX+37]]
+; SYMS: SectionLen: 8
+; SYMS-NEXT: ParameterHashIndex: 0x0
+; SYMS-NEXT: TypeChkSectNum: 0x0
+; SYMS-NEXT: SymbolAlignmentLog2: 3
+; SYMS-NEXT: SymbolType: XTY_CM (0x3)
+; SYMS-NEXT: StorageMappingClass: XMC_UL (0x15)
+; SYMS-NEXT: StabInfoIndex: 0x0
+; SYMS-NEXT: StabSectNum: 0x0
+; SYMS-NEXT: }
+; SYMS-NEXT: }
+
+
+; OBJDUMP-DATASECT: Disassembly of section .text:
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000000 (idx: 7) const_ivar[RO]:
+; OBJDUMP-DATASECT-NEXT: 0: 00 00 00 06 <unknown>
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: Disassembly of section .tdata:
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000000 (idx: 11) tls_global_alias_int_external_val_initialized:
+; OBJDUMP-DATASECT-NEXT: 0: 00 00 00 01 <unknown>
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000004 (idx: 13) tls_global_int_external_zero_initialized[TL]:
+; OBJDUMP-DATASECT-NEXT: 4: 00 00 00 00 <unknown>
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000008 (idx: 15) tls_global_int_local_val_initialized[TL]:
+; OBJDUMP-DATASECT-NEXT: 8: 00 00 00 02 <unknown>
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 0000000c (idx: 17) tls_global_int_weak_zero_initialized[TL]:
+; OBJDUMP-DATASECT-NEXT: c: 00 00 00 00 <unknown>
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000010 (idx: 19) tls_global_int_weak_val_initialized[TL]:
+; OBJDUMP-DATASECT-NEXT: 10: 00 00 00 01 <unknown>
+; OBJDUMP-DATASECT-NEXT: 14: 00 00 00 00 <unknown>
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000018 (idx: 21) tls_global_long_long_internal_val_initialized[TL]:
+; OBJDUMP-DATASECT-NEXT: 18: 00 00 00 00 <unknown>
+; OBJDUMP-DATASECT-NEXT: 1c: 00 00 00 01 <unknown>
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000020 (idx: 23) tls_global_long_long_weak_val_initialized[TL]:
+; OBJDUMP-DATASECT-NEXT: 20: 00 00 00 00 <unknown>
+; OBJDUMP-DATASECT-NEXT: 24: 00 00 00 01 <unknown>
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000028 (idx: 25) tls_global_long_long_weak_zero_initialized[TL]:
+; OBJDUMP-DATASECT-NEXT: ...
+; OBJDUMP-DATASECT-EMPTY:
+
+; OBJDUMP-DATASECT-NEXT: Disassembly of section .tbss:
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000030 (idx: 27) tls_global_int_local_zero_initialized[UL]:
+; OBJDUMP-DATASECT-NEXT: ...
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000034 (idx: 29) tls_global_int_common_zero_initialized[UL]:
+; OBJDUMP-DATASECT-NEXT: ...
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000038 (idx: 31) tls_global_double_common_zero_initialized[UL]
+; OBJDUMP-DATASECT-NEXT: ...
+; OBJDUMP-DATASECT-EMPTY:
+; OBJDUMP-DATASECT-NEXT: 00000040 (idx: 33) tls_global_long_long_internal_zero_initialized[UL]:
+; OBJDUMP-DATASECT-NEXT: ...
+
+; OBJDUMP-NODATASECT: Disassembly of section .text:
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000000 (idx: 9) const_ivar:
+; OBJDUMP-NODATASECT-NEXT: 0: 00 00 00 06 <unknown>
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: Disassembly of section .tdata:
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT: 00000000 (idx: 13) tls_global_int_external_val_initialized:
+; OBJDUMP-NODATASECT-NEXT: 0: 00 00 00 01 <unknown>
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000004 (idx: 17) tls_global_int_external_zero_initialized:
+; OBJDUMP-NODATASECT-NEXT: 4: 00 00 00 00 <unknown>
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000008 (idx: 19) tls_global_int_local_val_initialized:
+; OBJDUMP-NODATASECT-NEXT: 8: 00 00 00 02 <unknown>
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 0000000c (idx: 21) tls_global_int_weak_zero_initialized:
+; OBJDUMP-NODATASECT-NEXT: c: 00 00 00 00 <unknown>
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000010 (idx: 23) tls_global_int_weak_val_initialized:
+; OBJDUMP-NODATASECT-NEXT: 10: 00 00 00 01 <unknown>
+; OBJDUMP-NODATASECT-NEXT: 14: 00 00 00 00 <unknown>
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000018 (idx: 25) tls_global_long_long_internal_val_initialized:
+; OBJDUMP-NODATASECT-NEXT: 18: 00 00 00 00 <unknown>
+; OBJDUMP-NODATASECT-NEXT: 1c: 00 00 00 01 <unknown>
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000020 (idx: 27) tls_global_long_long_weak_val_initialized:
+; OBJDUMP-NODATASECT-NEXT: 20: 00 00 00 00 <unknown>
+; OBJDUMP-NODATASECT-NEXT: 24: 00 00 00 01 <unknown>
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000028 (idx: 29) tls_global_long_long_weak_zero_initialized:
+; OBJDUMP-NODATASECT-NEXT: ...
+; OBJDUMP-NODATASECT-EMPTY:
+
+; OBJDUMP-NODATASECT-NEXT: Disassembly of section .tbss:
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000030 (idx: 31) tls_global_int_local_zero_initialized[UL]:
+; OBJDUMP-NODATASECT-NEXT: ...
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000034 (idx: 33) tls_global_int_common_zero_initialized[UL]:
+; OBJDUMP-NODATASECT-NEXT: ...
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000038 (idx: 35) tls_global_double_common_zero_initialized[UL]:
+; OBJDUMP-NODATASECT-NEXT: ...
+; OBJDUMP-NODATASECT-EMPTY:
+; OBJDUMP-NODATASECT-NEXT: 00000040 (idx: 37) tls_global_long_long_internal_zero_initialized[UL]:
+; OBJDUMP-NODATASECT-NEXT: ...
+
+ at tls_global_int_external_val_initialized = thread_local global i32 1, align 4
+ at tls_global_int_external_zero_initialized = thread_local global i32 0, align 4
+ at tls_global_int_local_val_initialized = internal thread_local global i32 2, align 4
+ at tls_global_int_local_zero_initialized = internal thread_local global i32 0, align 4
+ at tls_global_int_weak_zero_initialized = weak thread_local global i32 0, align 4
+ at tls_global_int_common_zero_initialized = common thread_local global i32 0, align 4
+ at tls_global_int_weak_val_initialized = weak thread_local global i32 1, align 4
+ at tls_global_int_external_uninitialized = external thread_local global i32, align 4
+ at tls_global_double_common_zero_initialized = common thread_local global double 0.000000e+00, align 8
+ at tls_global_double_external_uninitialized = external thread_local global i64, align 8
+ at tls_global_long_long_internal_val_initialized = internal thread_local global i64 1, align 8
+ at tls_global_long_long_internal_zero_initialized = internal thread_local global i64 0, align 8
+ at tls_global_long_long_weak_val_initialized = weak thread_local global i64 1, align 8
+ at tls_global_long_long_weak_zero_initialized = weak thread_local global i64 0, align 8
+ at tls_global_alias_int_external_val_initialized = thread_local alias i32, i32* @tls_global_int_external_val_initialized
+ at const_ivar = constant i32 6, align 4
diff --git a/llvm/tools/llvm-readobj/XCOFFDumper.cpp b/llvm/tools/llvm-readobj/XCOFFDumper.cpp
index 8f0f18cedceb..5c4bfbd30956 100644
--- a/llvm/tools/llvm-readobj/XCOFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/XCOFFDumper.cpp
@@ -182,13 +182,12 @@ static const EnumEntry<XCOFF::StorageMappingClass> CsectStorageMappingClass[] =
{
#define ECase(X) \
{ #X, XCOFF::X }
- ECase(XMC_PR), ECase(XMC_RO), ECase(XMC_DB),
- ECase(XMC_GL), ECase(XMC_XO), ECase(XMC_SV),
- ECase(XMC_SV64), ECase(XMC_SV3264), ECase(XMC_TI),
- ECase(XMC_TB), ECase(XMC_RW), ECase(XMC_TC0),
- ECase(XMC_TC), ECase(XMC_TD), ECase(XMC_DS),
- ECase(XMC_UA), ECase(XMC_BS), ECase(XMC_UC),
- ECase(XMC_TL), ECase(XMC_TE)
+ ECase(XMC_PR), ECase(XMC_RO), ECase(XMC_DB), ECase(XMC_GL),
+ ECase(XMC_XO), ECase(XMC_SV), ECase(XMC_SV64), ECase(XMC_SV3264),
+ ECase(XMC_TI), ECase(XMC_TB), ECase(XMC_RW), ECase(XMC_TC0),
+ ECase(XMC_TC), ECase(XMC_TD), ECase(XMC_DS), ECase(XMC_UA),
+ ECase(XMC_BS), ECase(XMC_UC), ECase(XMC_TL), ECase(XMC_UL),
+ ECase(XMC_TE)
#undef ECase
};
More information about the llvm-commits
mailing list