Skip to content

Commit 90454a6

Browse files
author
Chen Zheng
authored
[PowerPC][AIX] support explicit sections for -ffunction-sections (#85351)
Fix crashes in https://godbolt.org/z/6voEa1o6Y
1 parent 4e165dd commit 90454a6

File tree

2 files changed

+145
-3
lines changed

2 files changed

+145
-3
lines changed

llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2845,9 +2845,9 @@ void PPCAIXAsmPrinter::emitFunctionDescriptor() {
28452845
}
28462846

28472847
void PPCAIXAsmPrinter::emitFunctionEntryLabel() {
2848-
// It's not necessary to emit the label when we have individual
2849-
// function in its own csect.
2850-
if (!TM.getFunctionSections())
2848+
// For functions without user defined section, it's not necessary to emit the
2849+
// label when we have individual function in its own csect.
2850+
if (!TM.getFunctionSections() || MF->getFunction().hasSection())
28512851
PPCAsmPrinter::emitFunctionEntryLabel();
28522852

28532853
// Emit aliasing label for function entry point label.
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \
2+
; RUN: -xcoff-traceback-table=false -filetype=obj -function-sections -o %t.o < %s
3+
; RUN: llvm-readobj -s %t.o | FileCheck %s
4+
5+
define dso_local signext i32 @foo1() section "sect" {
6+
entry:
7+
ret i32 1
8+
}
9+
10+
define dso_local signext i32 @foo2() section "sect2" {
11+
entry:
12+
ret i32 2
13+
}
14+
15+
define dso_local signext i32 @foo3() section "sect2" {
16+
entry:
17+
ret i32 3
18+
}
19+
20+
define dso_local signext i32 @foo4() {
21+
entry:
22+
ret i32 4
23+
}
24+
25+
; CHECK: Symbol {{[{][[:space:]] *}}Index: [[#INDX:]]{{[[:space:]] *}}Name: sect
26+
; CHECK-NEXT: Value (RelocatableAddress): 0x0
27+
; CHECK-NEXT: Section: .text
28+
; CHECK-NEXT: Type: 0x0
29+
; CHECK-NEXT: StorageClass: C_HIDEXT (0x6B)
30+
; CHECK-NEXT: NumberOfAuxEntries: 1
31+
; CHECK-NEXT: CSECT Auxiliary Entry {
32+
; CHECK-NEXT: Index: [[#INDX+1]]
33+
; CHECK-NEXT: SectionLen: 8
34+
; CHECK-NEXT: ParameterHashIndex: 0x0
35+
; CHECK-NEXT: TypeChkSectNum: 0x0
36+
; CHECK-NEXT: SymbolAlignmentLog2: 5
37+
; CHECK-NEXT: SymbolType: XTY_SD (0x1)
38+
; CHECK-NEXT: StorageMappingClass: XMC_PR (0x0)
39+
; CHECK-NEXT: StabInfoIndex: 0x0
40+
; CHECK-NEXT: StabSectNum: 0x0
41+
; CHECK-NEXT: }
42+
; CHECK-NEXT: }
43+
; CHECK-NEXT: Symbol {
44+
; CHECK-NEXT: Index: [[#INDX+2]]
45+
; CHECK-NEXT: Name: .foo1
46+
; CHECK-NEXT: Value (RelocatableAddress): 0x0
47+
; CHECK-NEXT: Section: .text
48+
; CHECK-NEXT: Type: 0x0
49+
; CHECK-NEXT: StorageClass: C_EXT (0x2)
50+
; CHECK-NEXT: NumberOfAuxEntries: 1
51+
; CHECK-NEXT: CSECT Auxiliary Entry {
52+
; CHECK-NEXT: Index: [[#INDX+3]]
53+
; CHECK-NEXT: ContainingCsectSymbolIndex: [[#INDX]]
54+
; CHECK-NEXT: ParameterHashIndex: 0x0
55+
; CHECK-NEXT: TypeChkSectNum: 0x0
56+
; CHECK-NEXT: SymbolAlignmentLog2: 0
57+
; CHECK-NEXT: SymbolType: XTY_LD (0x2)
58+
; CHECK-NEXT: StorageMappingClass: XMC_PR (0x0)
59+
; CHECK-NEXT: StabInfoIndex: 0x0
60+
; CHECK-NEXT: StabSectNum: 0x0
61+
; CHECK-NEXT: }
62+
; CHECK-NEXT: }
63+
; CHECK-NEXT: Symbol {
64+
; CHECK-NEXT: Index: [[#INDX+4]]
65+
; CHECK-NEXT: Name: sect2
66+
; CHECK-NEXT: Value (RelocatableAddress): 0x20
67+
; CHECK-NEXT: Section: .text
68+
; CHECK-NEXT: Type: 0x0
69+
; CHECK-NEXT: StorageClass: C_HIDEXT (0x6B)
70+
; CHECK-NEXT: NumberOfAuxEntries: 1
71+
; CHECK-NEXT: CSECT Auxiliary Entry {
72+
; CHECK-NEXT: Index: [[#INDX+5]]
73+
; CHECK-NEXT: SectionLen: 24
74+
; CHECK-NEXT: ParameterHashIndex: 0x0
75+
; CHECK-NEXT: TypeChkSectNum: 0x0
76+
; CHECK-NEXT: SymbolAlignmentLog2: 5
77+
; CHECK-NEXT: SymbolType: XTY_SD (0x1)
78+
; CHECK-NEXT: StorageMappingClass: XMC_PR (0x0)
79+
; CHECK-NEXT: StabInfoIndex: 0x0
80+
; CHECK-NEXT: StabSectNum: 0x0
81+
; CHECK-NEXT: }
82+
; CHECK-NEXT: }
83+
; CHECK-NEXT: Symbol {
84+
; CHECK-NEXT: Index: [[#INDX+6]]
85+
; CHECK-NEXT: Name: .foo2
86+
; CHECK-NEXT: Value (RelocatableAddress): 0x20
87+
; CHECK-NEXT: Section: .text
88+
; CHECK-NEXT: Type: 0x0
89+
; CHECK-NEXT: StorageClass: C_EXT (0x2)
90+
; CHECK-NEXT: NumberOfAuxEntries: 1
91+
; CHECK-NEXT: CSECT Auxiliary Entry {
92+
; CHECK-NEXT: Index: [[#INDX+7]]
93+
; CHECK-NEXT: ContainingCsectSymbolIndex: [[#INDX+4]]
94+
; CHECK-NEXT: ParameterHashIndex: 0x0
95+
; CHECK-NEXT: TypeChkSectNum: 0x0
96+
; CHECK-NEXT: SymbolAlignmentLog2: 0
97+
; CHECK-NEXT: SymbolType: XTY_LD (0x2)
98+
; CHECK-NEXT: StorageMappingClass: XMC_PR (0x0)
99+
; CHECK-NEXT: StabInfoIndex: 0x0
100+
; CHECK-NEXT: StabSectNum: 0x0
101+
; CHECK-NEXT: }
102+
; CHECK-NEXT: }
103+
; CHECK-NEXT: Symbol {
104+
; CHECK-NEXT: Index: [[#INDX+8]]
105+
; CHECK-NEXT: Name: .foo3
106+
; CHECK-NEXT: Value (RelocatableAddress): 0x30
107+
; CHECK-NEXT: Section: .text
108+
; CHECK-NEXT: Type: 0x0
109+
; CHECK-NEXT: StorageClass: C_EXT (0x2)
110+
; CHECK-NEXT: NumberOfAuxEntries: 1
111+
; CHECK-NEXT: CSECT Auxiliary Entry {
112+
; CHECK-NEXT: Index: [[#INDX+9]]
113+
; CHECK-NEXT: ContainingCsectSymbolIndex: [[#INDX+4]]
114+
; CHECK-NEXT: ParameterHashIndex: 0x0
115+
; CHECK-NEXT: TypeChkSectNum: 0x0
116+
; CHECK-NEXT: SymbolAlignmentLog2: 0
117+
; CHECK-NEXT: SymbolType: XTY_LD (0x2)
118+
; CHECK-NEXT: StorageMappingClass: XMC_PR (0x0)
119+
; CHECK-NEXT: StabInfoIndex: 0x0
120+
; CHECK-NEXT: StabSectNum: 0x0
121+
; CHECK-NEXT: }
122+
; CHECK-NEXT: }
123+
; CHECK-NEXT: Symbol {
124+
; CHECK-NEXT: Index: [[#INDX+10]]
125+
; CHECK-NEXT: Name: .foo4
126+
; CHECK-NEXT: Value (RelocatableAddress): 0x40
127+
; CHECK-NEXT: Section: .text
128+
; CHECK-NEXT: Type: 0x0
129+
; CHECK-NEXT: StorageClass: C_EXT (0x2)
130+
; CHECK-NEXT: NumberOfAuxEntries: 1
131+
; CHECK-NEXT: CSECT Auxiliary Entry {
132+
; CHECK-NEXT: Index: 16
133+
; CHECK-NEXT: SectionLen: 8
134+
; CHECK-NEXT: ParameterHashIndex: 0x0
135+
; CHECK-NEXT: TypeChkSectNum: 0x0
136+
; CHECK-NEXT: SymbolAlignmentLog2: 5
137+
; CHECK-NEXT: SymbolType: XTY_SD (0x1)
138+
; CHECK-NEXT: StorageMappingClass: XMC_PR (0x0)
139+
; CHECK-NEXT: StabInfoIndex: 0x0
140+
; CHECK-NEXT: StabSectNum: 0x0
141+
; CHECK-NEXT: }
142+
; CHECK-NEXT: }

0 commit comments

Comments
 (0)