blob: f58ed778586ae9b0be1d12a2f94381dc9650ab6d [file] [log] [blame]
Jim Stichnothde4ca712014-06-29 08:13:48 -07001; Test of global initializers.
2
Jan Voungfe14fb82014-10-13 15:56:32 -07003; Test -ias=0 to test the lea "hack" until we are fully confident in -ias=1
4; RUN: %p2i -i %s --args --verbose none -ias=0 | FileCheck %s
5
6; Test -ias=1 and try to cross reference instructions w/ the symbol table.
Karl Schimpf2a5324a2014-09-25 09:37:49 -07007; RUN: %p2i -i %s --args --verbose none \
Jim Stichnothbca2f652014-11-01 10:13:54 -07008; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \
Jan Voungfe14fb82014-10-13 15:56:32 -07009; RUN: | llvm-objdump -d -r --symbolize -x86-asm-syntax=intel - \
10; RUN: | FileCheck --check-prefix=IAS %s
11; RUN: %p2i -i %s --args --verbose none \
Jim Stichnothbca2f652014-11-01 10:13:54 -070012; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \
Jan Voungfe14fb82014-10-13 15:56:32 -070013; RUN: | llvm-objdump -d -t --symbolize -x86-asm-syntax=intel - \
14; RUN: | FileCheck --check-prefix=SYMTAB %s
15
Jim Stichnothde4ca712014-06-29 08:13:48 -070016@PrimitiveInit = internal global [4 x i8] c"\1B\00\00\00", align 4
Jim Stichnoth2a063e22014-10-08 11:24:51 -070017; CHECK: .type PrimitiveInit,@object
18; CHECK-NEXT: .section .data,"aw",@progbits
Jim Stichnothde4ca712014-06-29 08:13:48 -070019; CHECK-NEXT: .align 4
20; CHECK-NEXT: PrimitiveInit:
21; CHECK-NEXT: .byte
22; CHECK: .size PrimitiveInit, 4
23
24@PrimitiveInitConst = internal constant [4 x i8] c"\0D\00\00\00", align 4
Jim Stichnoth2a063e22014-10-08 11:24:51 -070025; CHECK: .type PrimitiveInitConst,@object
26; CHECK-NEXT: .section .rodata,"a",@progbits
Jim Stichnothde4ca712014-06-29 08:13:48 -070027; CHECK-NEXT: .align 4
28; CHECK-NEXT: PrimitiveInitConst:
29; CHECK-NEXT: .byte
30; CHECK: .size PrimitiveInitConst, 4
31
32@ArrayInit = internal global [20 x i8] c"\0A\00\00\00\14\00\00\00\1E\00\00\00(\00\00\002\00\00\00", align 4
Jim Stichnoth2a063e22014-10-08 11:24:51 -070033; CHECK: .type ArrayInit,@object
34; CHECK-NEXT: .section .data,"aw",@progbits
Jim Stichnothde4ca712014-06-29 08:13:48 -070035; CHECK-NEXT: .align 4
36; CHECK-NEXT: ArrayInit:
37; CHECK-NEXT: .byte
38; CHECK: .size ArrayInit, 20
39
40@ArrayInitPartial = internal global [40 x i8] c"<\00\00\00F\00\00\00P\00\00\00Z\00\00\00d\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00", align 4
Jim Stichnoth2a063e22014-10-08 11:24:51 -070041; CHECK: .type ArrayInitPartial,@object
42; CHECK-NEXT: .section .data,"aw",@progbits
Jim Stichnothde4ca712014-06-29 08:13:48 -070043; CHECK-NEXT: .align 4
44; CHECK-NEXT: ArrayInitPartial:
45; CHECK-NEXT: .byte
46; CHECK: .size ArrayInitPartial, 40
47
48@PrimitiveInitStatic = internal global [4 x i8] zeroinitializer, align 4
Jim Stichnoth2a063e22014-10-08 11:24:51 -070049; CHECK: .type PrimitiveInitStatic,@object
Jim Stichnothde4ca712014-06-29 08:13:48 -070050; CHECK-NEXT: .local PrimitiveInitStatic
Jim Stichnoth2a063e22014-10-08 11:24:51 -070051; CHECK-NEXT: .comm PrimitiveInitStatic,4,4
Jim Stichnothde4ca712014-06-29 08:13:48 -070052
53@PrimitiveUninit = internal global [4 x i8] zeroinitializer, align 4
Jim Stichnoth2a063e22014-10-08 11:24:51 -070054; CHECK: .type PrimitiveUninit,@object
Jim Stichnothde4ca712014-06-29 08:13:48 -070055; CHECK-NEXT: .local PrimitiveUninit
Jim Stichnoth2a063e22014-10-08 11:24:51 -070056; CHECK-NEXT: .comm PrimitiveUninit,4,4
Jim Stichnothde4ca712014-06-29 08:13:48 -070057
58@ArrayUninit = internal global [20 x i8] zeroinitializer, align 4
Jim Stichnoth2a063e22014-10-08 11:24:51 -070059; CHECK: .type ArrayUninit,@object
Jim Stichnothde4ca712014-06-29 08:13:48 -070060; CHECK-NEXT: .local ArrayUninit
Jim Stichnoth2a063e22014-10-08 11:24:51 -070061; CHECK-NEXT: .comm ArrayUninit,20,4
Jim Stichnothde4ca712014-06-29 08:13:48 -070062
63@ArrayUninitConstDouble = internal constant [200 x i8] zeroinitializer, align 8
Jim Stichnoth2a063e22014-10-08 11:24:51 -070064; CHECK: .type ArrayUninitConstDouble,@object
65; CHECK-NEXT: .section .rodata,"a",@progbits
Jim Stichnothde4ca712014-06-29 08:13:48 -070066; CHECK-NEXT: .align 8
67; CHECK-NEXT: ArrayUninitConstDouble:
68; CHECK-NEXT: .zero 200
69; CHECK-NEXT: .size ArrayUninitConstDouble, 200
70
71@ArrayUninitConstInt = internal constant [20 x i8] zeroinitializer, align 4
Jim Stichnoth2a063e22014-10-08 11:24:51 -070072; CHECK: .type ArrayUninitConstInt,@object
Jim Stichnothde4ca712014-06-29 08:13:48 -070073; CHECK: .section .rodata,"a",@progbits
Jim Stichnothde4ca712014-06-29 08:13:48 -070074; CHECK-NEXT: .align 4
75; CHECK-NEXT: ArrayUninitConstInt:
76; CHECK-NEXT: .zero 20
77; CHECK-NEXT: .size ArrayUninitConstInt, 20
78
79@__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
80@__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
81@__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
82@__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
83
84define internal i32 @main(i32 %argc, i32 %argv) {
85entry:
86 %expanded1 = ptrtoint [4 x i8]* @PrimitiveInit to i32
87 call void @use(i32 %expanded1)
88 %expanded3 = ptrtoint [4 x i8]* @PrimitiveInitConst to i32
89 call void @use(i32 %expanded3)
90 %expanded5 = ptrtoint [4 x i8]* @PrimitiveInitStatic to i32
91 call void @use(i32 %expanded5)
92 %expanded7 = ptrtoint [4 x i8]* @PrimitiveUninit to i32
93 call void @use(i32 %expanded7)
94 %expanded9 = ptrtoint [20 x i8]* @ArrayInit to i32
95 call void @use(i32 %expanded9)
96 %expanded11 = ptrtoint [40 x i8]* @ArrayInitPartial to i32
97 call void @use(i32 %expanded11)
98 %expanded13 = ptrtoint [20 x i8]* @ArrayUninit to i32
99 call void @use(i32 %expanded13)
100 ret i32 0
101}
Jim Stichnoth523ef722014-09-04 11:32:20 -0700102; CHECK-LABEL: main
Jim Stichnothbca2f652014-11-01 10:13:54 -0700103; CHECK: movl $PrimitiveInit,
104; CHECK: movl $PrimitiveInitConst,
105; CHECK: movl $PrimitiveInitStatic,
106; CHECK: movl $PrimitiveUninit,
107; CHECK: movl $ArrayInit,
108; CHECK: movl $ArrayInitPartial,
109; CHECK: movl $ArrayUninit,
Jim Stichnothde4ca712014-06-29 08:13:48 -0700110
Jan Voungfe14fb82014-10-13 15:56:32 -0700111; llvm-objdump does not indicate what symbol the mov/relocation applies to
112; so we grep for "mov {{.*}}, OFFSET", along with "OFFSET {{.*}} symbol" in
113; the symbol table as a sanity check. NOTE: The symbol table sorting has no
114; relation to the code's references.
115; IAS-LABEL: main
116; SYMTAB-LABEL: SYMBOL TABLE
117
118; SYMTAB-DAG: 00000000 {{.*}} .data {{.*}} PrimitiveInit
119; IAS: mov {{.*}}, 0
120; IAS-NEXT: R_386_32
121; IAS: call
122
123; SYMTAB-DAG: 00000000 {{.*}} .rodata {{.*}} PrimitiveInitConst
124; IAS: mov {{.*}}, 0
125; IAS-NEXT: R_386_32
126; IAS: call
127
128; SYMTAB-DAG: 00000000 {{.*}} .bss {{.*}} PrimitiveInitStatic
129; IAS: mov {{.*}}, 0
130; IAS-NEXT: R_386_32
131; IAS: call
132
133; SYMTAB-DAG: 00000004 {{.*}} .bss {{.*}} PrimitiveUninit
134; IAS: mov {{.*}}, 4
135; IAS-NEXT: R_386_32
136; IAS: call
137
138; SYMTAB-DAG: 00000004{{.*}}.data{{.*}}ArrayInit
139; IAS: mov {{.*}}, 4
140; IAS-NEXT: R_386_32
141; IAS: call
142
143; SYMTAB-DAG: 00000018 {{.*}} .data {{.*}} ArrayInitPartial
144; IAS: mov {{.*}}, 24
145; IAS-NEXT: R_386_32
146; IAS: call
147
148; SYMTAB-DAG: 00000008 {{.*}} .bss {{.*}} ArrayUninit
149; IAS: mov {{.*}}, 8
150; IAS-NEXT: R_386_32
151; IAS: call
152
153
Jim Stichnothde4ca712014-06-29 08:13:48 -0700154declare void @use(i32)
155
156define internal i32 @nacl_tp_tdb_offset(i32 %__0) {
157entry:
158 ret i32 0
159}
160
161define internal i32 @nacl_tp_tls_offset(i32 %size) {
162entry:
163 %result = sub i32 0, %size
164 ret i32 %result
165}