| Index: tests_lit/llvm2ice_tests/elf_nodata.ll
|
| diff --git a/tests_lit/llvm2ice_tests/elf_nodata.ll b/tests_lit/llvm2ice_tests/elf_nodata.ll
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8170676f0588f76bdf1251f74db075e2ed764a53
|
| --- /dev/null
|
| +++ b/tests_lit/llvm2ice_tests/elf_nodata.ll
|
| @@ -0,0 +1,127 @@
|
| +; Tests that we generate an ELF container correctly when there
|
| +; is no data section.
|
| +
|
| +; For the integrated ELF writer, we can't pipe the output because we need
|
| +; to seek backward and patch up the file headers. So, use a temporary file.
|
| +; RUN: %p2i -i %s --args -O2 --verbose none -elf-writer -o %t \
|
| +; RUN: && llvm-readobj -file-headers -sections -section-data \
|
| +; RUN: -relocations -symbols %t | FileCheck %s
|
| +
|
| +; RUN: %p2i -i %s --args -O2 --verbose none \
|
| +; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj -o - \
|
| +; RUN: | llvm-readobj -file-headers -sections -section-data \
|
| +; RUN: -relocations -symbols - | FileCheck %s
|
| +
|
| +declare void @llvm.memcpy.p0i8.p0i8.i32(i8*, i8*, i32, i32, i1)
|
| +
|
| +define internal i32 @foo(i32 %x, i32 %len) {
|
| + %y = add i32 %x, %x
|
| + %dst = inttoptr i32 %y to i8*
|
| + %src = inttoptr i32 %x to i8*
|
| + call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %src,
|
| + i32 %len, i32 1, i1 false)
|
| +
|
| + ret i32 %y
|
| +}
|
| +
|
| +; Test defining a non-internal function.
|
| +define void @_start(i32 %x) {
|
| + %ignored = call i32 @foo(i32 %x, i32 4)
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: Section {
|
| +; CHECK: Index: {{[1-9][0-9]*}}
|
| +; CHECK: Name: .text
|
| +; CHECK: Type: SHT_PROGBITS
|
| +; CHECK: Flags [ (0x6)
|
| +; CHECK: SHF_ALLOC
|
| +; CHECK: SHF_EXECINSTR
|
| +; CHECK: ]
|
| +; CHECK: Address: 0x0
|
| +; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}}
|
| +; CHECK: Size: {{[1-9][0-9]*}}
|
| +; CHECK: Link: 0
|
| +; CHECK: Info: 0
|
| +; CHECK: AddressAlignment: 32
|
| +; CHECK: EntrySize: 0
|
| +; CHECK: SectionData (
|
| +; CHECK: )
|
| +; CHECK: }
|
| +; CHECK: Section {
|
| +; CHECK: Index: {{[1-9][0-9]*}}
|
| +; CHECK: Name: .rel.text
|
| +; CHECK: Type: SHT_REL
|
| +; CHECK: Flags [ (0x0)
|
| +; CHECK: ]
|
| +; CHECK: Address: 0x0
|
| +; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}}
|
| +; CHECK: Size: {{[1-9][0-9]*}}
|
| +; CHECK: Link: [[SYMTAB_INDEX:[1-9][0-9]*]]
|
| +; CHECK: Info: {{[1-9][0-9]*}}
|
| +; CHECK: AddressAlignment: 4
|
| +; CHECK: EntrySize: 8
|
| +; CHECK: SectionData (
|
| +; CHECK: )
|
| +; CHECK: }
|
| +; CHECK: Section {
|
| +; CHECK: Index: [[SYMTAB_INDEX]]
|
| +; CHECK-NEXT: Name: .symtab
|
| +; CHECK: Type: SHT_SYMTAB
|
| +; CHECK: Flags [ (0x0)
|
| +; CHECK: ]
|
| +; CHECK: Address: 0x0
|
| +; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}}
|
| +; CHECK: Size: {{[1-9][0-9]*}}
|
| +; CHECK: Link: {{[1-9][0-9]*}}
|
| +; CHECK: Info: {{[1-9][0-9]*}}
|
| +; CHECK: AddressAlignment: 4
|
| +; CHECK: EntrySize: 16
|
| +; CHECK: }
|
| +
|
| +
|
| +; CHECK: Relocations [
|
| +; CHECK: Section ({{[0-9]+}}) .rel.text {
|
| +; CHECK: 0x21 R_386_PC32 memcpy 0x0
|
| +; CHECK: }
|
| +; CHECK: ]
|
| +
|
| +
|
| +; CHECK: Symbols [
|
| +; CHECK-NEXT: Symbol {
|
| +; CHECK-NEXT: Name: (0)
|
| +; CHECK-NEXT: Value: 0x0
|
| +; CHECK-NEXT: Size: 0
|
| +; CHECK-NEXT: Binding: Local
|
| +; CHECK-NEXT: Type: None
|
| +; CHECK-NEXT: Other: 0
|
| +; CHECK-NEXT: Section: Undefined (0x0)
|
| +; CHECK-NEXT: }
|
| +; CHECK: Symbol {
|
| +; CHECK: Name: foo
|
| +; CHECK-NEXT: Value: 0x0
|
| +; CHECK-NEXT: Size: 0
|
| +; CHECK-NEXT: Binding: Local
|
| +; CHECK-NEXT: Type: None
|
| +; CHECK-NEXT: Other: 0
|
| +; CHECK-NEXT: Section: .text
|
| +; CHECK-NEXT: }
|
| +; CHECK: Symbol {
|
| +; CHECK: Name: _start
|
| +; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}}
|
| +; CHECK-NEXT: Size: 0
|
| +; CHECK-NEXT: Binding: Global
|
| +; CHECK-NEXT: Type: Function
|
| +; CHECK-NEXT: Other: 0
|
| +; CHECK-NEXT: Section: .text
|
| +; CHECK-NEXT: }
|
| +; CHECK: Symbol {
|
| +; CHECK: Name: memcpy
|
| +; CHECK-NEXT: Value: 0x0
|
| +; CHECK-NEXT: Size: 0
|
| +; CHECK-NEXT: Binding: Global
|
| +; CHECK-NEXT: Type: None
|
| +; CHECK-NEXT: Other: 0
|
| +; CHECK-NEXT: Section: Undefined
|
| +; CHECK-NEXT: }
|
| +; CHECK: ]
|
|
|