blob: 5ec425d391fc3607456d97ec0edb8b5c3ebc8330 [file] [log] [blame]
Jan Voung77973cc2015-02-03 12:48:38 -08001; Tests that we generate an ELF container correctly when there
2; is no data section.
3
Jim Stichnoth729dbd02015-02-25 14:48:43 -08004; RUN: %p2i -i %s --filetype=obj --args -O2 -o %t \
Jan Voung77973cc2015-02-03 12:48:38 -08005; RUN: && llvm-readobj -file-headers -sections -section-data \
6; RUN: -relocations -symbols %t | FileCheck %s
7
Jim Stichnoth729dbd02015-02-25 14:48:43 -08008; RUN: %if --need=allow_dump --command %p2i -i %s --args -O2 \
9; RUN: | %if --need=allow_dump --command \
Jim Stichnotha67fc442015-03-03 16:13:11 -080010; RUN: llvm-mc -triple=i686-nacl -filetype=obj -o - \
Jim Stichnoth729dbd02015-02-25 14:48:43 -080011; RUN: | %if --need=allow_dump --command \
12; RUN: llvm-readobj -file-headers -sections -section-data \
13; RUN: -relocations -symbols - \
14; RUN: | %if --need=allow_dump --command FileCheck %s
Jan Voung77973cc2015-02-03 12:48:38 -080015
16declare void @llvm.memcpy.p0i8.p0i8.i32(i8*, i8*, i32, i32, i1)
17
18define internal i32 @foo(i32 %x, i32 %len) {
19 %y = add i32 %x, %x
20 %dst = inttoptr i32 %y to i8*
21 %src = inttoptr i32 %x to i8*
22 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %src,
23 i32 %len, i32 1, i1 false)
24
25 ret i32 %y
26}
27
28; Test defining a non-internal function.
29define void @_start(i32 %x) {
30 %ignored = call i32 @foo(i32 %x, i32 4)
31 ret void
32}
33
34; CHECK: Section {
35; CHECK: Index: {{[1-9][0-9]*}}
36; CHECK: Name: .text
37; CHECK: Type: SHT_PROGBITS
38; CHECK: Flags [ (0x6)
39; CHECK: SHF_ALLOC
40; CHECK: SHF_EXECINSTR
41; CHECK: ]
42; CHECK: Address: 0x0
43; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}}
44; CHECK: Size: {{[1-9][0-9]*}}
45; CHECK: Link: 0
46; CHECK: Info: 0
47; CHECK: AddressAlignment: 32
48; CHECK: EntrySize: 0
49; CHECK: SectionData (
50; CHECK: )
51; CHECK: }
52; CHECK: Section {
53; CHECK: Index: {{[1-9][0-9]*}}
54; CHECK: Name: .rel.text
55; CHECK: Type: SHT_REL
56; CHECK: Flags [ (0x0)
57; CHECK: ]
58; CHECK: Address: 0x0
59; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}}
60; CHECK: Size: {{[1-9][0-9]*}}
61; CHECK: Link: [[SYMTAB_INDEX:[1-9][0-9]*]]
62; CHECK: Info: {{[1-9][0-9]*}}
63; CHECK: AddressAlignment: 4
64; CHECK: EntrySize: 8
65; CHECK: SectionData (
66; CHECK: )
67; CHECK: }
68; CHECK: Section {
69; CHECK: Index: [[SYMTAB_INDEX]]
70; CHECK-NEXT: Name: .symtab
71; CHECK: Type: SHT_SYMTAB
72; CHECK: Flags [ (0x0)
73; CHECK: ]
74; CHECK: Address: 0x0
75; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}}
76; CHECK: Size: {{[1-9][0-9]*}}
77; CHECK: Link: {{[1-9][0-9]*}}
78; CHECK: Info: {{[1-9][0-9]*}}
79; CHECK: AddressAlignment: 4
80; CHECK: EntrySize: 16
81; CHECK: }
82
83
84; CHECK: Relocations [
85; CHECK: Section ({{[0-9]+}}) .rel.text {
86; CHECK: 0x21 R_386_PC32 memcpy 0x0
87; CHECK: }
88; CHECK: ]
89
90
91; CHECK: Symbols [
92; CHECK-NEXT: Symbol {
93; CHECK-NEXT: Name: (0)
94; CHECK-NEXT: Value: 0x0
95; CHECK-NEXT: Size: 0
96; CHECK-NEXT: Binding: Local
97; CHECK-NEXT: Type: None
98; CHECK-NEXT: Other: 0
99; CHECK-NEXT: Section: Undefined (0x0)
100; CHECK-NEXT: }
101; CHECK: Symbol {
102; CHECK: Name: foo
103; CHECK-NEXT: Value: 0x0
104; CHECK-NEXT: Size: 0
105; CHECK-NEXT: Binding: Local
106; CHECK-NEXT: Type: None
107; CHECK-NEXT: Other: 0
108; CHECK-NEXT: Section: .text
109; CHECK-NEXT: }
110; CHECK: Symbol {
111; CHECK: Name: _start
112; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}}
113; CHECK-NEXT: Size: 0
114; CHECK-NEXT: Binding: Global
115; CHECK-NEXT: Type: Function
116; CHECK-NEXT: Other: 0
117; CHECK-NEXT: Section: .text
118; CHECK-NEXT: }
119; CHECK: Symbol {
120; CHECK: Name: memcpy
121; CHECK-NEXT: Value: 0x0
122; CHECK-NEXT: Size: 0
123; CHECK-NEXT: Binding: Global
124; CHECK-NEXT: Type: None
125; CHECK-NEXT: Other: 0
126; CHECK-NEXT: Section: Undefined
127; CHECK-NEXT: }
128; CHECK: ]