Skip to content

Commit 5810c44

Browse files
committed
Add another test case, and remove -o - in the run line
Also fixes the alignment for data.
1 parent 7803d02 commit 5810c44

File tree

4 files changed

+163
-6
lines changed

4 files changed

+163
-6
lines changed

llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "llvm/BinaryFormat/COFF.h"
2020
#include "llvm/BinaryFormat/Dwarf.h"
2121
#include "llvm/BinaryFormat/ELF.h"
22+
#include "llvm/BinaryFormat/GOFF.h"
2223
#include "llvm/BinaryFormat/MachO.h"
2324
#include "llvm/BinaryFormat/Wasm.h"
2425
#include "llvm/CodeGen/BasicBlockSectionUtils.h"
@@ -2821,21 +2822,22 @@ MCSection *TargetLoweringObjectFileGOFF::SelectSectionForGlobal(
28212822
GOFF::ESDBindingScope SDBindingScope =
28222823
PRBindingScope == GOFF::ESD_BSC_Section ? GOFF::ESD_BSC_Section
28232824
: GOFF::ESD_BSC_Unspecified;
2825+
GOFF::ESDAlignment Align =
2826+
GO->getAlign() ? static_cast<GOFF::ESDAlignment>(Log2(*GO->getAlign()))
2827+
: GOFF::ESD_ALIGN_Doubleword;
28242828
MCSectionGOFF *SD = getContext().getGOFFSection(
28252829
SectionKind::getMetadata(), Symbol->getName(),
28262830
GOFF::SDAttr{GOFF::ESD_TA_Unspecified, SDBindingScope});
28272831
MCSectionGOFF *ED = getContext().getGOFFSection(
28282832
SectionKind::getMetadata(), GOFF::CLASS_WSA,
28292833
GOFF::EDAttr{false, GOFF::ESD_EXE_DATA, GOFF::RMODE, GOFF::ESD_NS_Parts,
28302834
GOFF::ESD_TS_ByteOriented, GOFF::ESD_BA_Merge,
2831-
GOFF::ESD_LB_Deferred, GOFF::ESD_RQ_0,
2832-
static_cast<GOFF::ESDAlignment>(GO->getAlignment())},
2835+
GOFF::ESD_LB_Deferred, GOFF::ESD_RQ_0, Align},
28332836
SD);
28342837
return getContext().getGOFFSection(
28352838
Kind, Symbol->getName(),
28362839
GOFF::PRAttr{false, false, GOFF::ESD_EXE_DATA, GOFF::LINKAGE,
2837-
PRBindingScope,
2838-
static_cast<GOFF::ESDAlignment>(GO->getAlignment()), 0},
2840+
PRBindingScope, Align, 0},
28392841
ED);
28402842
}
28412843
return TextSection;

llvm/test/CodeGen/SystemZ/zos-section-1.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: llc <%s --mtriple s390x-ibm-zos --filetype=obj -o - | \
1+
; RUN: llc <%s --mtriple s390x-ibm-zos --filetype=obj | \
22
; RUN: od -Ax -tx1 -v | FileCheck --ignore-case %s
33

44
source_filename = "test.ll"
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
; RUN: llc <%s --mtriple s390x-ibm-zos --filetype=obj | \
2+
; RUN: od -Ax -tx1 -v | FileCheck --ignore-case %s
3+
4+
source_filename = "test.ll"
5+
6+
@data = hidden global i32 42, align 4
7+
@bss = hidden global i64 0, align 8
8+
9+
; Header record:
10+
; 03 is prefix byte
11+
; f. is header type
12+
; .0 is flag
13+
; 00 is version
14+
; The 1 at offset 0x33 is the architecture level.
15+
; CHECK: 000000 03 f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00
16+
; CHECK-NEXT: 000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
17+
; CHECK-NEXT: 000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
18+
; CHECK-NEXT: 000030 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00
19+
; CHECK-NEXT: 000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20+
21+
; ESD record, type SD.
22+
; 03 is prefix byte
23+
; 0. is header type
24+
; .0 is flag
25+
; 00 is version
26+
; 00 is type = SD
27+
; The 01 at offset 0x57 is the id of the symbol.
28+
; The 60 at offset 0x89 is the tasking behavior.
29+
; The 01 at offset 0x91 is the binding scope.
30+
; The name begins at offset 0x97, and is test#C.
31+
; CHECK-NEXT: 0000050 03 00 00 00 [[ROOTSD:00 00 00 01]] 00 00 00 00 00 00 00 00
32+
; CHECK-NEXT: 0000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
33+
; CHECK-NEXT: 0000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
34+
; CHECK-NEXT: 0000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60
35+
; CHECK-NEXT: 0000090 00 01 00 00 00 00 00 06 a3 85 a2 a3 7b c3 00 00
36+
37+
; ESD record, type ED.
38+
; The name is C_CODE64.
39+
; The regular expression matches the low byte of the length.
40+
; CHECK-NEXT: 00000a0 03 00 00 01 [[C_CODE64:00 00 00 02]] [[ROOTSD]] 00 00 00 00
41+
; CHECK-NEXT: 00000b0 00 00 00 00 00 00 00 00 00 00 00 {{..}} 00 00 00 00
42+
; CHECK-NEXT: 00000c0 00 00 00 00 00 00 00 00 01 80 00 00 00 00 00 00
43+
; CHECK-NEXT: 00000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 0a
44+
; CHECK-NEXT: 00000e0 00 00 03 00 00 00 00 08 c3 6d c3 d6 c4 c5 f6 f4
45+
46+
; ESD record, type ED.
47+
; The name is C_@@QPPA2.
48+
; This record has a continuation, therefore the falg at offset 0xf1 is set.
49+
; CHECK-NEXT: 00000f0 03 01 00 01 [[C_QPPA2:00 00 00 03]] [[ROOTSD]] 00 00 00 00
50+
; CHECK-NEXT: 0000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
51+
; CHECK-NEXT: 0000110 00 00 00 00 00 00 00 00 03 80 00 00 00 00 00 00
52+
; CHECK-NEXT: 0000120 00 00 00 00 00 00 00 00 00 00 00 00 00 04 01 09
53+
; CHECK-NEXT: 0000130 00 00 03 00 00 00 00 09 c3 6d 7c 7c d8 d7 d7 c1
54+
;
55+
; Continuation:
56+
; CHECK-NEXT: 0000140 03 02 00 f2 00 00 00 00 00 00 00 00 00 00 00 00
57+
; CHECK-NEXT: 0000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
58+
; CHECK-NEXT: 0000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
59+
; CHECK-NEXT: 0000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60+
; CHECK-NEXT: 0000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
61+
62+
; ESD record, type PR.
63+
; The name is .&ppa2.
64+
; CHECK-NEXT: 0000190 03 00 00 03 [[PPA2:00 00 00 04]] [[C_QPPA2]] 00 00 00 00
65+
; CHECK-NEXT: 00001a0 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00
66+
; CHECK-NEXT: 00001b0 00 00 00 00 00 00 00 00 03 20 00 00 00 00 00 00
67+
; CHECK-NEXT: 00001c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
68+
; CHECK-NEXT: 00001d0 00 01 03 00 00 00 00 06 4b 50 97 97 81 f2 00 00
69+
70+
; ESD record, type SD.
71+
; The name is data.
72+
; CHECK-NEXT: 00001e0 03 00 00 00 [[DATA:00 00 00 05]] 00 00 00 00 00 00 00 00
73+
; CHECK-NEXT: 00001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
74+
; CHECK-NEXT: 0000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
75+
; CHECK-NEXT: 0000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
76+
; CHECK-NEXT: 0000220 00 00 00 00 00 00 00 04 84 81 a3 81 00 00 00 00
77+
78+
; ESD record, type ED.
79+
; The name is C_WSA64.
80+
; CHECK-NEXT: 0000230 03 00 00 01 [[DATA_WSA:00 00 00 06]] [[DATA]] 00 00 00 00
81+
; CHECK-NEXT: 0000240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
82+
; CHECK-NEXT: 0000250 00 00 00 00 00 00 00 00 03 80 00 00 00 00 00 00
83+
; CHECK-NEXT: 0000260 00 00 00 00 00 00 00 00 00 00 00 00 00 04 01 01
84+
; CHECK-NEXT: 0000270 00 40 02 00 00 00 00 07 c3 6d e6 e2 c1 f6 f4 00
85+
86+
; ESD record, type PR.
87+
; The name is data.
88+
; CHECK-NEXT: 0000280 03 00 00 03 [[DATA_PR:00 00 00 07]] [[DATA_WSA]] 00 00 00 00
89+
; CHECK-NEXT: 0000290 00 00 00 00 00 00 00 00 [[DATA_LEN:00 00 00 04]] 00 00 00 00
90+
; CHECK-NEXT: 00002a0 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00
91+
; CHECK-NEXT: 00002b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
92+
; CHECK-NEXT: 00002c0 00 03 22 00 00 00 00 04 84 81 a3 81 00 00 00 00
93+
94+
; ESD record, type SD.
95+
; The name is bss.
96+
; CHECK-NEXT: 00002d0 03 00 00 00 [[BSS:00 00 00 08]] 00 00 00 00 00 00 00 00
97+
; CHECK-NEXT: 00002e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
98+
; CHECK-NEXT: 00002f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
99+
; CHECK-NEXT: 0000300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
100+
; CHECK-NEXT: 0000310 00 00 00 00 00 00 00 03 82 a2 a2 00 00 00 00 00
101+
102+
; ESD record, type ED.
103+
; The name is C_WSA64.
104+
; CHECK-NEXT: 0000320 03 00 00 01 [[BSS_WSA:00 00 00 09]] [[BSS]] 00 00 00 00
105+
; CHECK-NEXT: 0000330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
106+
; CHECK-NEXT: 0000340 00 00 00 00 00 00 00 00 03 80 00 00 00 00 00 00
107+
; CHECK-NEXT: 0000350 00 00 00 00 00 00 00 00 00 00 00 00 00 04 01 01
108+
; CHECK-NEXT: 0000360 00 40 03 00 00 00 00 07 c3 6d e6 e2 c1 f6 f4 00
109+
110+
; ESD record, type PR.
111+
; The name is bss.
112+
; CHECK-NEXT: 0000370 03 00 00 03 [[BSS_PR:00 00 00 0a]] [[BSS_WSA]] 00 00 00 00
113+
; CHECK-NEXT: 0000380 00 00 00 00 00 00 00 00 [[BSS_LEN:00 00 00 08]] 00 00 00 00
114+
; CHECK-NEXT: 0000390 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00
115+
; CHECK-NEXT: 00003a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
116+
; CHECK-NEXT: 00003b0 00 03 23 00 00 00 00 03 82 a2 a2 00 00 00 00 00
117+
118+
; ESD record, type ED.
119+
; The name is C_WSA64.
120+
; CHECK-NEXT: 00003c0 03 00 00 01 [[C_WSA64:00 00 00 0b]] [[ROOTSD]] 00 00 00 00
121+
; CHECK-NEXT: 00003d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
122+
; CHECK-NEXT: 00003e0 00 00 00 00 00 00 00 00 03 81 00 00 00 00 00 00
123+
; CHECK-NEXT: 00003f0 00 00 00 00 00 00 00 00 00 00 00 00 00 04 01 01
124+
; CHECK-NEXT: 0000400 00 40 04 00 00 00 00 07 c3 6d e6 e2 c1 f6 f4 00
125+
126+
; ESD record, type PR.
127+
; The name is test#S.
128+
; CHECK-NEXT: 0000410 03 00 00 03 [[TESTS:00 00 00 0c]] [[C_WSA64]] 00 00 00 00
129+
; CHECK-NEXT: 0000420 00 00 00 00 00 00 00 00 00 00 00 {{..}} 00 00 00 00
130+
; CHECK-NEXT: 0000430 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00
131+
; CHECK-NEXT: 0000440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
132+
; CHECK-NEXT: 0000450 00 01 24 00 00 00 00 06 a3 85 a2 a3 7b e2 00 00
133+
134+
; ESD record, type ED.
135+
; The name is B_IDRL.
136+
; CHECK-NEXT: 0000460 03 00 00 01 [[BIDRL:00 00 00 0d]] [[ROOTSD]] 00 00 00 00
137+
; CHECK-NEXT: 0000470 00 00 00 00 00 00 00 00 00 00 00 {{..}} 00 00 00 00
138+
; CHECK-NEXT: 0000480 00 00 00 00 00 00 00 00 01 80 00 00 00 00 00 00
139+
; CHECK-NEXT: 0000490 00 00 00 00 00 00 00 00 00 00 00 00 00 04 10 08
140+
; CHECK-NEXT: 00004a0 00 80 03 00 00 00 00 06 c2 6d c9 c4 d9 d3 00 00
141+
142+
; ESD record, type LD.
143+
; The name is test#C.
144+
; CHECK-NEXT: 00004b0 03 00 00 02 [[TESTC:00 00 00 0e]] [[C_CODE64]] 00 00 00 00
145+
; CHECK-NEXT: 00004c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
146+
; CHECK-NEXT: 00004d0 00 00 00 00 00 00 00 00 01 00 00 00 [[TESTS]]
147+
; CHECK-NEXT: 00004e0 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 02
148+
; CHECK-NEXT: 00004f0 00 01 20 00 00 00 00 06 a3 85 a2 a3 7b c3 00 00
149+
150+
; End record.
151+
; CHECK-NEXT: 0000500 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00
152+
; CHECK-NEXT: 0000510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
153+
; CHECK-NEXT: 0000520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
154+
; CHECK-NEXT: 0000530 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
155+
; CHECK-NEXT: 0000540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

llvm/test/CodeGen/SystemZ/zos-simple-test.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ define signext i32 @main() {
99
; CHECK: C_CODE64 CATTR ALIGN(3),EXECUTABLE,READONLY,RMODE(64)
1010
; CHECK: main:
1111
; CHECK: stdin#C CSECT
12-
; CHECK: C_WSA64 CATTR ALIGN(4),DEFLOAD,NOTEXECUTABLE,RMODE(64),PART(a)
12+
; CHECK: C_WSA64 CATTR ALIGN(2),DEFLOAD,NOTEXECUTABLE,RMODE(64),PART(a)
1313
; CHECK: a XATTR LINKAGE(XPLINK),REFERENCE(DATA),SCOPE(EXPORT)
1414
; CHECK: a:
1515
entry:

0 commit comments

Comments
 (0)