[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