Skip to content

Commit f23461a

Browse files
author
Zaara Syeda
committed
Address review comments
1 parent 1a6d00b commit f23461a

File tree

13 files changed

+161
-108
lines changed

13 files changed

+161
-108
lines changed

clang/docs/UsersManual.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4057,6 +4057,10 @@ If the TOC data transformation is applied to a variable whose definition
40574057
is imported, the linker will generate fixup code for reading or writing to the
40584058
variable.
40594059

4060+
When multiple toc-data options are used, the last option used has the affect.
4061+
For example: -mno-tocdata=g5,g1 -mtocdata=g1,g2 -mno-tocdata=g2 -mtocdata=g3,g4
4062+
results in -mtocdata=g1,g3,g4
4063+
40604064
Any internal linkage variables specified to any TOC data options will be ignored.
40614065

40624066
**Options:**

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ static void checkAliasForTocData(llvm::GlobalVariable *GVar,
630630
DiagnosticsEngine &Diags,
631631
SourceLocation Location) {
632632
if (GVar->hasAttribute("toc-data")) {
633-
auto GVId = GVar->getGlobalIdentifier();
633+
auto GVId = GVar->getName();
634634
// Is this a global variable specified by the user as local?
635635
if ((llvm::binary_search(CodeGenOpts.TocDataVarsUserSpecified, GVId))) {
636636
Diags.Report(Location, diag::warn_toc_unsupported_type)

clang/lib/CodeGen/Targets/PPC.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ void AIXTargetCodeGenInfo::setTargetAttributes(
275275
return;
276276

277277
auto *GVar = dyn_cast<llvm::GlobalVariable>(GV);
278-
auto GVId = M.getMangledName(dyn_cast<NamedDecl>(D));
278+
auto GVId = GV->getName();
279279

280280
// Is this a global variable specified by the user as toc-data?
281281
bool UserSpecifiedTOC =
@@ -287,10 +287,10 @@ void AIXTargetCodeGenInfo::setTargetAttributes(
287287
!llvm::binary_search(M.getCodeGenOpts().NoTocDataVars, GVId))) {
288288
const unsigned long PointerSize =
289289
GV->getParent()->getDataLayout().getPointerSizeInBits() / 8;
290-
ASTContext &Context = D->getASTContext();
291290
auto *VarD = dyn_cast<VarDecl>(D);
292291
assert(VarD && "Invalid declaration of global variable.");
293292

293+
ASTContext &Context = D->getASTContext();
294294
unsigned Alignment = Context.toBits(Context.getDeclAlign(D)) / 8;
295295
const auto *Ty = VarD->getType().getTypePtr();
296296
const RecordDecl *RDecl =
@@ -318,7 +318,7 @@ void AIXTargetCodeGenInfo::setTargetAttributes(
318318
} else if (D->hasAttr<SectionAttr>()) {
319319
reportUnsupportedWarning(EmitDiagnostic, "of a section attribute");
320320
} else if ((GV->hasExternalLinkage() || M.getCodeGenOpts().AllTocData) &&
321-
!GV->hasInternalLinkage()) {
321+
!GV->hasLocalLinkage()) {
322322
GVar->addAttribute("toc-data");
323323
}
324324
}

clang/lib/Driver/ToolChains/AIX.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ static void addTocDataOptions(const llvm::opt::ArgList &Args,
507507

508508
const char *TocDataListOption =
509509
TOCDataGloballyinEffect ? "-mno-tocdata=" : "-mtocdata=";
510-
if (const bool HasExplicitValues = !ExplicitlySpecifiedGlobals.empty())
510+
if (!ExplicitlySpecifiedGlobals.empty())
511511
CC1Args.push_back(Args.MakeArgString(llvm::Twine(
512512
buildExceptionList(ExplicitlySpecifiedGlobals, TocDataListOption))));
513513
}
Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
// RUN: %clang_cc1 %s -triple powerpc-ibm-aix-xcoff -S -mtocdata=f,g,h,i,j,k,l,m,n,o,p -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=CHECK32 --match-full-lines
2-
// RUN: %clang_cc1 %s -triple powerpc-ibm-aix-xcoff -S -mtocdata -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=CHECK32 --match-full-lines
1+
// RUN: %clang_cc1 %s -triple powerpc-ibm-aix-xcoff -S -mtocdata=f,g,h,i,j,k,l,m,n,o,p -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=COMMON,CHECK32 --match-full-lines
2+
// RUN: %clang_cc1 %s -triple powerpc-ibm-aix-xcoff -S -mtocdata -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=COMMON,CHECK32 --match-full-lines
33

4-
// RUN: %clang_cc1 %s -triple powerpc64-ibm-aix-xcoff -S -mtocdata=f,g,h,i,j,k,l,m,n,o,p -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=CHECK64 --match-full-lines
5-
// RUN: %clang_cc1 %s -triple powerpc64-ibm-aix-xcoff -S -mtocdata -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=CHECK64 --match-full-lines
4+
// RUN: %clang_cc1 %s -triple powerpc64-ibm-aix-xcoff -S -mtocdata=f,g,h,i,j,k,l,m,n,o,p -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=COMMON,CHECK64 --match-full-lines
5+
// RUN: %clang_cc1 %s -triple powerpc64-ibm-aix-xcoff -S -mtocdata -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=COMMON,CHECK64 --match-full-lines
66

77
extern int f;
88
long long g = 5;
@@ -33,29 +33,18 @@ struct SomeStruct* getAddress(void) {
3333
}
3434

3535
// CHECK32: @g = global i64 5, align 8
36-
// CHECK32: {{.*}} = private unnamed_addr constant [2 x i8] c"h\00", align 1
37-
// CHECK32: @h = global {{...*}} #0
38-
// CHECK32: @j = global i32 0, align 128
39-
// CHECK32: @k = global float 1.000000e+02, align 4 #0
40-
// CHECK32: @l = global double 2.500000e+00, align 8
41-
// CHECK32: @m = global i32 10, section "foo", align 4
42-
// CHECK32: @f = external global i32, align 4 #0
43-
// CHECK32: @o = external global %struct.SomeStruct, align 1
44-
// CHECK32: @i = global ptr null, align 4 #0
45-
// CHECK32: @n = thread_local global i32 0, align 4
46-
// CHECK32: @p = external global [0 x i32], align 4
47-
// CHECK32: attributes #0 = { "toc-data" }
48-
4936
// CHECK64: @g = global i64 5, align 8 #0
50-
// CHECK64: {{.*}} = private unnamed_addr constant [2 x i8] c"h\00", align 1
51-
// CHECK64: @h = global {{...*}} #0
52-
// CHECK64: @j = global i32 0, align 128
53-
// CHECK64: @k = global float 1.000000e+02, align 4 #0
37+
// COMMON: {{.*}} = private unnamed_addr constant [2 x i8] c"h\00", align 1
38+
// COMMON: @h = global {{...*}} #0
39+
// COMMON: @j = global i32 0, align 128
40+
// COMMON: @k = global float 1.000000e+02, align 4 #0
41+
// CHECK32: @l = global double 2.500000e+00, align 8
5442
// CHECK64: @l = global double 2.500000e+00, align 8 #0
55-
// CHECK64: @m = global i32 10, section "foo", align 4
56-
// CHECK64: @f = external global i32, align 4 #0
57-
// CHECK64: @o = external global %struct.SomeStruct, align 1
43+
// COMMON: @m = global i32 10, section "foo", align 4
44+
// COMMON: @f = external global i32, align 4 #0
45+
// COMMON: @o = external global %struct.SomeStruct, align 1
46+
// CHECK32: @i = global ptr null, align 4 #0
5847
// CHECK64: @i = global ptr null, align 8 #0
59-
// CHECK64: @n = thread_local global i32 0, align 4
60-
// CHECK64: @p = external global [0 x i32], align 4
61-
// CHECK64: attributes #0 = { "toc-data" }
48+
// COMMON: @n = thread_local global i32 0, align 4
49+
// COMMON: @p = external global [0 x i32], align 4
50+
// COMMON: attributes #0 = { "toc-data" }

clang/test/CodeGen/PowerPC/toc-data-attribute.cpp

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
// RUN: %clang_cc1 %s -triple powerpc-ibm-aix-xcoff -S -mtocdata -emit-llvm -o - 2>&1 | FileCheck %s
2-
// RUN: %clang_cc1 %s -triple powerpc-ibm-aix-xcoff -S -mtocdata=n,_ZN11MyNamespace10myVariableE,_ZL1s,_ZZ4testvE7counter -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=CHECKIGNORE
3-
// RUN: %clang_cc1 %s -triple powerpc64-ibm-aix-xcoff -S -mtocdata -emit-llvm -o - 2>&1 | FileCheck %s
4-
// RUN: %clang_cc1 %s -triple powerpc64-ibm-aix-xcoff -S -mtocdata=n,_ZN11MyNamespace10myVariableE,_ZL1s,_ZZ4testvE7counter -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=CHECKIGNORE
1+
// RUN: %clang_cc1 %s -triple powerpc-ibm-aix-xcoff -S -mtocdata -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=COMMON,ALLTOC
2+
// RUN: %clang_cc1 %s -triple powerpc-ibm-aix-xcoff -S -mtocdata=n,_ZN11MyNamespace10myVariableE,_ZL1s,_ZZ4testvE7counter -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=COMMON,TOCLIST
3+
// RUN: %clang_cc1 %s -triple powerpc64-ibm-aix-xcoff -S -mtocdata -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=COMMON,ALLTOC
4+
// RUN: %clang_cc1 %s -triple powerpc64-ibm-aix-xcoff -S -mtocdata=n,_ZN11MyNamespace10myVariableE,_ZL1s,_ZZ4testvE7counter -emit-llvm -o - 2>&1 | FileCheck %s -check-prefixes=COMMON,TOCLIST
55

66
extern int n;
77
static int s = 100;
@@ -31,13 +31,9 @@ int c(int x) {
3131
return s;
3232
}
3333

34-
// CHECK: @n = external global i32, align 4 #0
35-
// CHECK: @_ZN11MyNamespace10myVariableE = global i32 10, align 4 #0
36-
// CHECK-NOT: @_ZL1s = internal global i32 100, align 4 #0
37-
// CHECK: @_ZZ4testvE7counter = linkonce_odr global i32 0, align 4 #0
38-
// CHECK: attributes #0 = { "toc-data" }
39-
// CHECKIGNORE: @n = external global i32, align 4 #0
40-
// CHECKIGNORE: @_ZN11MyNamespace10myVariableE = global i32 10, align 4 #0
41-
// CHECKIGNORE-NOT: @_ZL1s = internal global i32 100, align 4 #0
42-
// CHECKIGNORE-NOT: @_ZZ4testvE7counter = linkonce_odr global i32 0, align 4 #0
43-
// CHECKIGNORE: attributes #0 = { "toc-data" }
34+
// COMMON: @n = external global i32, align 4 #0
35+
// COMMON: @_ZN11MyNamespace10myVariableE = global i32 10, align 4 #0
36+
// COMMON-NOT: @_ZL1s = internal global i32 100, align 4 #0
37+
// ALLTOC: @_ZZ4testvE7counter = linkonce_odr global i32 0, align 4 #0
38+
// TOCLIST-NOT: @_ZZ4testvE7counter = linkonce_odr global i32 0, align 4 #0
39+
// COMMON: attributes #0 = { "toc-data" }

clang/test/CodeGen/PowerPC/toc-data-structs-arrays.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,5 @@ int func_a() {
6161
// CHECK64: @b = global [2 x i16] zeroinitializer, align 2 #0
6262
// CHECK64: @c = global [3 x i16] zeroinitializer, align 2 #0
6363
// CHECK64: @d = global [4 x i16] zeroinitializer, align 2 #0
64+
// CHECK64: @e = global [5 x i16] zeroinitializer, align 2
6465
// CHECK64: attributes #0 = { "toc-data" }

clang/test/CodeGen/toc-data.c

Lines changed: 0 additions & 31 deletions
This file was deleted.

llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2520,7 +2520,9 @@ void PPCAIXAsmPrinter::emitGlobalVariable(const GlobalVariable *GV) {
25202520
// If the Global Variable has the toc-data attribute, it needs to be emitted
25212521
// when we emit the .toc section.
25222522
if (GV->hasAttribute("toc-data")) {
2523-
TOCDataGlobalVars.push_back(GV);
2523+
unsigned PointerSize = GV->getParent()->getDataLayout().getPointerSize();
2524+
if (Subtarget->tocDataChecks(PointerSize, GV))
2525+
TOCDataGlobalVars.push_back(GV);
25242526
return;
25252527
}
25262528

llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,8 @@ SDNode *PPCDAGToDAGISel::getGlobalBaseReg() {
510510
}
511511

512512
// Check if a SDValue has the toc-data attribute.
513-
static bool hasTocDataAttr(SDValue Val, unsigned PointerSize) {
513+
static bool hasTocDataAttr(SDValue Val, unsigned PointerSize,
514+
const PPCSubtarget *Subtarget) {
514515
GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(Val);
515516
if (!GA)
516517
return false;
@@ -522,33 +523,7 @@ static bool hasTocDataAttr(SDValue Val, unsigned PointerSize) {
522523
if (!GV->hasAttribute("toc-data"))
523524
return false;
524525

525-
// TODO: These asserts should be updated as more support for the toc data
526-
// transformation is added (struct support, etc.).
527-
528-
assert(
529-
PointerSize >= GV->getAlign().valueOrOne().value() &&
530-
"GlobalVariables with an alignment requirement stricter than TOC entry "
531-
"size not supported by the toc data transformation.");
532-
533-
Type *GVType = GV->getValueType();
534-
535-
assert(GVType->isSized() && "A GlobalVariable's size must be known to be "
536-
"supported by the toc data transformation.");
537-
538-
if (GV->getParent()->getDataLayout().getTypeSizeInBits(GVType) >
539-
PointerSize * 8)
540-
report_fatal_error(
541-
"A GlobalVariable with size larger than a TOC entry is not currently "
542-
"supported by the toc data transformation.");
543-
544-
if (GV->hasLocalLinkage() || GV->hasPrivateLinkage())
545-
report_fatal_error("A GlobalVariable with private or local linkage is not "
546-
"currently supported by the toc data transformation.");
547-
548-
assert(!GV->hasCommonLinkage() &&
549-
"Tentative definitions cannot have the mapping class XMC_TD.");
550-
551-
return true;
526+
return Subtarget->tocDataChecks(PointerSize, GV);
552527
}
553528

554529
/// isInt32Immediate - This method tests to see if the node is a 32-bit constant
@@ -6114,7 +6089,7 @@ void PPCDAGToDAGISel::Select(SDNode *N) {
61146089
assert(isAIXABI && "ELF ABI already handled");
61156090

61166091
if (hasTocDataAttr(N->getOperand(0),
6117-
CurDAG->getDataLayout().getPointerSize())) {
6092+
CurDAG->getDataLayout().getPointerSize(), Subtarget)) {
61186093
replaceWith(PPC::ADDItoc, N, MVT::i32);
61196094
return;
61206095
}
@@ -6127,7 +6102,7 @@ void PPCDAGToDAGISel::Select(SDNode *N) {
61276102
assert(isAIXABI && "ELF ABI handled in common SelectCode");
61286103

61296104
if (hasTocDataAttr(N->getOperand(0),
6130-
CurDAG->getDataLayout().getPointerSize())) {
6105+
CurDAG->getDataLayout().getPointerSize(), Subtarget)) {
61316106
replaceWith(PPC::ADDItoc8, N, MVT::i64);
61326107
return;
61336108
}

llvm/lib/Target/PowerPC/PPCSubtarget.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,30 @@ class PPCSubtarget : public PPCGenSubtargetInfo {
245245
/// True if the GV will be accessed via an indirect symbol.
246246
bool isGVIndirectSymbol(const GlobalValue *GV) const;
247247

248+
bool tocDataChecks(unsigned PointerSize, const GlobalVariable *GV) const {
249+
// TODO: These asserts should be updated as more support for the toc data
250+
// transformation is added (struct support, etc.).
251+
assert(
252+
PointerSize >= GV->getAlign().valueOrOne().value() &&
253+
"GlobalVariables with an alignment requirement stricter than TOC entry "
254+
"size not supported by the toc data transformation.");
255+
256+
Type *GVType = GV->getValueType();
257+
assert(GVType->isSized() && "A GlobalVariable's size must be known to be "
258+
"supported by the toc data transformation.");
259+
if (GV->getParent()->getDataLayout().getTypeSizeInBits(GVType) >
260+
PointerSize * 8)
261+
report_fatal_error(
262+
"A GlobalVariable with size larger than a TOC entry is not currently "
263+
"supported by the toc data transformation.");
264+
if (GV->hasLocalLinkage() || GV->hasPrivateLinkage())
265+
report_fatal_error(
266+
"A GlobalVariable with private or local linkage is not "
267+
"currently supported by the toc data transformation.");
268+
assert(!GV->hasCommonLinkage() &&
269+
"Tentative definitions cannot have the mapping class XMC_TD.");
270+
return true;
271+
}
248272
/// True if the ABI is descriptor based.
249273
bool usesFunctionDescriptors() const {
250274
// Both 32-bit and 64-bit AIX are descriptor based. For ELF only the 64-bit
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
; RUN: not --crash llc -mtriple powerpc-ibm-aix-xcoff < %s 2>&1 | FileCheck %s --check-prefix CHECK-ERROR
2+
; RUN: not --crash llc -mtriple powerpc64-ibm-aix-xcoff < %s 2>&1 | FileCheck %s --check-prefix CHECK-ERROR
3+
4+
@a = global [5 x i16] zeroinitializer, align 2 #0
5+
6+
attributes #0 = { "toc-data" }
7+
8+
; CHECK-ERROR: LLVM ERROR: A GlobalVariable with size larger than a TOC entry is not currently supported by the toc data transformation.

llvm/test/CodeGen/PowerPC/toc-data-struct-array.ll

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
; RUN: llc -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s --check-prefix CHECK
22
; RUN: llc -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s --check-prefix CHECK
33

4+
; RUN: llc -filetype=obj -mtriple powerpc-ibm-aix-xcoff < %s -o %t32.o
5+
; RUN: llvm-readobj %t32.o --syms | FileCheck %s --check-prefix=OBJ32
6+
; RUN: llc -filetype=obj -mtriple powerpc64-ibm-aix-xcoff < %s -o %t64.o
7+
; RUN: llvm-readobj %t64.o --syms | FileCheck %s --check-prefix=OBJ64
8+
49
%struct.small_struct = type { i16 }
510

611
@a = global %struct.small_struct zeroinitializer, align 2 #0
@@ -27,3 +32,83 @@ attributes #1 = { noinline }
2732
; CHECK-NEXT: .globl b[TD] # @b
2833
; CHECK-NEXT: .align 1
2934
; CHECK-NEXT: .space 4
35+
36+
; OBJ32: Symbol {
37+
; OBJ32: Index: 9
38+
; OBJ32-NEXT: Name: a
39+
; OBJ32-NEXT: Value (RelocatableAddress): 0x3C
40+
; OBJ32-NEXT: Section: .data
41+
; OBJ32-NEXT: Type: 0x0
42+
; OBJ32-NEXT: StorageClass: C_EXT (0x2)
43+
; OBJ32-NEXT: NumberOfAuxEntries: 1
44+
; OBJ32-NEXT: CSECT Auxiliary Entry {
45+
; OBJ32-NEXT: Index: 10
46+
; OBJ32-NEXT: SectionLen: 2
47+
; OBJ32-NEXT: ParameterHashIndex: 0x0
48+
; OBJ32-NEXT: TypeChkSectNum: 0x0
49+
; OBJ32-NEXT: SymbolAlignmentLog2: 2
50+
; OBJ32-NEXT: SymbolType: XTY_SD (0x1)
51+
; OBJ32-NEXT: StorageMappingClass: XMC_TD (0x10)
52+
; OBJ32-NEXT: StabInfoIndex: 0x0
53+
; OBJ32-NEXT: StabSectNum: 0x0
54+
; OBJ32-NEXT: }
55+
; OBJ32-NEXT: }
56+
; OBJ32-NEXT: Symbol {
57+
; OBJ32-NEXT: Index: 11
58+
; OBJ32-NEXT: Name: b
59+
; OBJ32-NEXT: Value (RelocatableAddress): 0x40
60+
; OBJ32-NEXT: Section: .data
61+
; OBJ32-NEXT: Type: 0x0
62+
; OBJ32-NEXT: StorageClass: C_EXT (0x2)
63+
; OBJ32-NEXT: NumberOfAuxEntries: 1
64+
; OBJ32-NEXT: CSECT Auxiliary Entry {
65+
; OBJ32-NEXT: Index: 12
66+
; OBJ32-NEXT: SectionLen: 4
67+
; OBJ32-NEXT: ParameterHashIndex: 0x0
68+
; OBJ32-NEXT: TypeChkSectNum: 0x0
69+
; OBJ32-NEXT: SymbolAlignmentLog2: 2
70+
; OBJ32-NEXT: SymbolType: XTY_SD (0x1)
71+
; OBJ32-NEXT: StorageMappingClass: XMC_TD (0x10)
72+
; OBJ32-NEXT: StabInfoIndex: 0x0
73+
; OBJ32-NEXT: StabSectNum: 0x0
74+
; OBJ32-NEXT: }
75+
; OBJ32-NEXT: }
76+
77+
; OBJ64: Symbol {
78+
; OBJ64: Index: 9
79+
; OBJ64-NEXT: Name: a
80+
; OBJ64-NEXT: Value (RelocatableAddress): 0x48
81+
; OBJ64-NEXT: Section: .data
82+
; OBJ64-NEXT: Type: 0x0
83+
; OBJ64-NEXT: StorageClass: C_EXT (0x2)
84+
; OBJ64-NEXT: NumberOfAuxEntries: 1
85+
; OBJ64-NEXT: CSECT Auxiliary Entry {
86+
; OBJ64-NEXT: Index: 10
87+
; OBJ64-NEXT: SectionLen: 2
88+
; OBJ64-NEXT: ParameterHashIndex: 0x0
89+
; OBJ64-NEXT: TypeChkSectNum: 0x0
90+
; OBJ64-NEXT: SymbolAlignmentLog2: 2
91+
; OBJ64-NEXT: SymbolType: XTY_SD (0x1)
92+
; OBJ64-NEXT: StorageMappingClass: XMC_TD (0x10)
93+
; OBJ64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
94+
; OBJ64-NEXT: }
95+
; OBJ64-NEXT: }
96+
; OBJ64-NEXT: Symbol {
97+
; OBJ64-NEXT: Index: 11
98+
; OBJ64-NEXT: Name: b
99+
; OBJ64-NEXT: Value (RelocatableAddress): 0x4C
100+
; OBJ64-NEXT: Section: .data
101+
; OBJ64-NEXT: Type: 0x0
102+
; OBJ64-NEXT: StorageClass: C_EXT (0x2)
103+
; OBJ64-NEXT: NumberOfAuxEntries: 1
104+
; OBJ64-NEXT: CSECT Auxiliary Entry {
105+
; OBJ64-NEXT: Index: 12
106+
; OBJ64-NEXT: SectionLen: 4
107+
; OBJ64-NEXT: ParameterHashIndex: 0x0
108+
; OBJ64-NEXT: TypeChkSectNum: 0x0
109+
; OBJ64-NEXT: SymbolAlignmentLog2: 2
110+
; OBJ64-NEXT: SymbolType: XTY_SD (0x1)
111+
; OBJ64-NEXT: StorageMappingClass: XMC_TD (0x10)
112+
; OBJ64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
113+
; OBJ64-NEXT: }
114+
; OBJ64-NEXT: }

0 commit comments

Comments
 (0)