diff options
Diffstat (limited to 'test/Object')
65 files changed, 1016 insertions, 124 deletions
diff --git a/test/Object/ARM/macho-data-in-code.test b/test/Object/ARM/macho-data-in-code.test new file mode 100644 index 0000000000000..dca084c2cabad --- /dev/null +++ b/test/Object/ARM/macho-data-in-code.test @@ -0,0 +1,7 @@ +RUN: llvm-objdump -triple thumbv7-apple-iOS -disassemble %p/../Inputs/macho-data-in-code.macho-thumbv7 -macho | FileCheck %s + +CHECK: 12: 80 bd pop {r7, pc} + +CHECK: 14: 38 00 00 00 .long 56 @ KIND_DATA +CHECK: 16: 00 00 movs r0, r0 + diff --git a/test/Object/Inputs/COFF/i386.yaml b/test/Object/Inputs/COFF/i386.yaml index f7631821c1923..1badad8d5915b 100644 --- a/test/Object/Inputs/COFF/i386.yaml +++ b/test/Object/Inputs/COFF/i386.yaml @@ -12,17 +12,17 @@ sections: Relocations: - !Relocation VirtualAddress: 0xe - SymbolTableIndex: 5 + SymbolName: L_.str Type: IMAGE_REL_I386_DIR32 - !Relocation VirtualAddress: 0x13 - SymbolTableIndex: 6 + SymbolName: _puts Type: IMAGE_REL_I386_REL32 - !Relocation VirtualAddress: 0x18 - SymbolTableIndex: 7 + SymbolName: _SomeOtherFunction Type: IMAGE_REL_I386_REL32 - !Section diff --git a/test/Object/Inputs/COFF/x86-64.yaml b/test/Object/Inputs/COFF/x86-64.yaml index 5134071cda414..b775ae9cdfbdb 100644 --- a/test/Object/Inputs/COFF/x86-64.yaml +++ b/test/Object/Inputs/COFF/x86-64.yaml @@ -11,17 +11,17 @@ sections: Relocations: - !Relocation VirtualAddress: 0xf - SymbolTableIndex: 5 + SymbolName: L.str Type: IMAGE_REL_AMD64_REL32 - !Relocation VirtualAddress: 0x14 - SymbolTableIndex: 6 + SymbolName: puts Type: IMAGE_REL_AMD64_REL32 - !Relocation VirtualAddress: 0x19 - SymbolTableIndex: 7 + SymbolName: SomeOtherFunction Type: IMAGE_REL_AMD64_REL32 - !Section diff --git a/test/Object/Inputs/ELF/BE32.yaml b/test/Object/Inputs/ELF/BE32.yaml new file mode 100644 index 0000000000000..2a18d6fca7cb4 --- /dev/null +++ b/test/Object/Inputs/ELF/BE32.yaml @@ -0,0 +1,6 @@ +!ELF +FileHeader: !FileHeader + Class: ELFCLASS32 + Data: ELFDATA2MSB + Type: ET_EXEC + Machine: EM_PPC diff --git a/test/Object/Inputs/ELF/BE64.yaml b/test/Object/Inputs/ELF/BE64.yaml new file mode 100644 index 0000000000000..091793f395293 --- /dev/null +++ b/test/Object/Inputs/ELF/BE64.yaml @@ -0,0 +1,6 @@ +!ELF +FileHeader: !FileHeader + Class: ELFCLASS64 + Data: ELFDATA2MSB + Type: ET_EXEC + Machine: EM_PPC64 diff --git a/test/Object/Inputs/ELF/LE32.yaml b/test/Object/Inputs/ELF/LE32.yaml new file mode 100644 index 0000000000000..021fb0d93c2e8 --- /dev/null +++ b/test/Object/Inputs/ELF/LE32.yaml @@ -0,0 +1,6 @@ +!ELF +FileHeader: !FileHeader + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_386 diff --git a/test/Object/Inputs/ELF/LE64.yaml b/test/Object/Inputs/ELF/LE64.yaml new file mode 100644 index 0000000000000..2fefc0b0c98f3 --- /dev/null +++ b/test/Object/Inputs/ELF/LE64.yaml @@ -0,0 +1,6 @@ +!ELF +FileHeader: !FileHeader + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 diff --git a/test/Object/Inputs/GNU.a b/test/Object/Inputs/GNU.a Binary files differnew file mode 100644 index 0000000000000..4c09881eb39dc --- /dev/null +++ b/test/Object/Inputs/GNU.a diff --git a/test/Object/Inputs/IsNAN.o b/test/Object/Inputs/IsNAN.o Binary files differnew file mode 100644 index 0000000000000..7b3a12a69d747 --- /dev/null +++ b/test/Object/Inputs/IsNAN.o diff --git a/test/Object/Inputs/MacOSX.a b/test/Object/Inputs/MacOSX.a Binary files differnew file mode 100644 index 0000000000000..8ba1e6d30e3df --- /dev/null +++ b/test/Object/Inputs/MacOSX.a diff --git a/test/Object/Inputs/SVR4.a b/test/Object/Inputs/SVR4.a Binary files differnew file mode 100644 index 0000000000000..3947813ac60a7 --- /dev/null +++ b/test/Object/Inputs/SVR4.a diff --git a/test/Object/Inputs/archive-test.a-corrupt-symbol-table b/test/Object/Inputs/archive-test.a-corrupt-symbol-table Binary files differnew file mode 100644 index 0000000000000..34e5ed799d3cc --- /dev/null +++ b/test/Object/Inputs/archive-test.a-corrupt-symbol-table diff --git a/test/Object/Inputs/archive-test.a-empty b/test/Object/Inputs/archive-test.a-empty new file mode 100644 index 0000000000000..8b277f0dd5dcd --- /dev/null +++ b/test/Object/Inputs/archive-test.a-empty @@ -0,0 +1 @@ +!<arch> diff --git a/test/Object/Inputs/archive-test.a-gnu-minimal b/test/Object/Inputs/archive-test.a-gnu-minimal new file mode 100644 index 0000000000000..a243273c484e7 --- /dev/null +++ b/test/Object/Inputs/archive-test.a-gnu-minimal @@ -0,0 +1,2 @@ +!<arch> +test/ 1372964340 1000 1000 100664 0 ` diff --git a/test/Object/Inputs/archive-test.a-gnu-no-symtab b/test/Object/Inputs/archive-test.a-gnu-no-symtab new file mode 100644 index 0000000000000..0a5b237a29100 --- /dev/null +++ b/test/Object/Inputs/archive-test.a-gnu-no-symtab @@ -0,0 +1,5 @@ +!<arch> +// 24 ` +a-very-long-file-name/ + +/0 1372864788 1000 1000 100664 0 ` diff --git a/test/Object/Inputs/coff_archive_short.lib b/test/Object/Inputs/coff_archive_short.lib Binary files differnew file mode 100644 index 0000000000000..41cb1c25d1ef8 --- /dev/null +++ b/test/Object/Inputs/coff_archive_short.lib diff --git a/test/Object/Inputs/corrupt-version.elf-x86_64 b/test/Object/Inputs/corrupt-version.elf-x86_64 Binary files differnew file mode 100644 index 0000000000000..1241a27a7bb63 --- /dev/null +++ b/test/Object/Inputs/corrupt-version.elf-x86_64 diff --git a/test/Object/Inputs/corrupt.elf-x86-64 b/test/Object/Inputs/corrupt.elf-x86-64 Binary files differnew file mode 100644 index 0000000000000..8ae5f1759746b --- /dev/null +++ b/test/Object/Inputs/corrupt.elf-x86-64 diff --git a/test/Object/Inputs/elf-reloc-no-sym.x86_64 b/test/Object/Inputs/elf-reloc-no-sym.x86_64 Binary files differnew file mode 100755 index 0000000000000..a41b4e0d78d99 --- /dev/null +++ b/test/Object/Inputs/elf-reloc-no-sym.x86_64 diff --git a/test/Object/Inputs/evenlen b/test/Object/Inputs/evenlen new file mode 100644 index 0000000000000..59ee8d552e373 --- /dev/null +++ b/test/Object/Inputs/evenlen @@ -0,0 +1 @@ +evenlen diff --git a/test/Object/Inputs/macho-data-in-code.macho-thumbv7 b/test/Object/Inputs/macho-data-in-code.macho-thumbv7 Binary files differnew file mode 100644 index 0000000000000..57649302dd946 --- /dev/null +++ b/test/Object/Inputs/macho-data-in-code.macho-thumbv7 diff --git a/test/Object/Inputs/macho-universal.x86_64.i386 b/test/Object/Inputs/macho-universal.x86_64.i386 Binary files differnew file mode 100755 index 0000000000000..36d5fc29d6819 --- /dev/null +++ b/test/Object/Inputs/macho-universal.x86_64.i386 diff --git a/test/Object/Inputs/oddlen b/test/Object/Inputs/oddlen new file mode 100644 index 0000000000000..8cf5bd181b1bf --- /dev/null +++ b/test/Object/Inputs/oddlen @@ -0,0 +1 @@ +oddlen diff --git a/test/Object/Inputs/program-headers.mips b/test/Object/Inputs/program-headers.mips Binary files differnew file mode 100755 index 0000000000000..54ebfea31f0c6 --- /dev/null +++ b/test/Object/Inputs/program-headers.mips diff --git a/test/Object/Inputs/trivial-executable-test.macho-x86-64 b/test/Object/Inputs/trivial-executable-test.macho-x86-64 Binary files differnew file mode 100755 index 0000000000000..50a6bab64c47a --- /dev/null +++ b/test/Object/Inputs/trivial-executable-test.macho-x86-64 diff --git a/test/Object/Inputs/trivial-object-test2.elf-x86-64 b/test/Object/Inputs/trivial-object-test2.elf-x86-64 Binary files differnew file mode 100644 index 0000000000000..9124518bd92e3 --- /dev/null +++ b/test/Object/Inputs/trivial-object-test2.elf-x86-64 diff --git a/test/Object/Inputs/very_long_bytecode_file_name.bc b/test/Object/Inputs/very_long_bytecode_file_name.bc Binary files differnew file mode 100644 index 0000000000000..f7fce249020a0 --- /dev/null +++ b/test/Object/Inputs/very_long_bytecode_file_name.bc diff --git a/test/Object/Inputs/weak-global-symbol.macho-i386 b/test/Object/Inputs/weak-global-symbol.macho-i386 Binary files differnew file mode 100644 index 0000000000000..a9c8e0cde1563 --- /dev/null +++ b/test/Object/Inputs/weak-global-symbol.macho-i386 diff --git a/test/Object/Inputs/xpg4.a b/test/Object/Inputs/xpg4.a Binary files differnew file mode 100644 index 0000000000000..b2bdb51188fec --- /dev/null +++ b/test/Object/Inputs/xpg4.a diff --git a/test/Object/Mips/lit.local.cfg b/test/Object/Mips/lit.local.cfg index 149931749822b..88262fb1d3232 100644 --- a/test/Object/Mips/lit.local.cfg +++ b/test/Object/Mips/lit.local.cfg @@ -1,5 +1,3 @@ -config.suffixes = ['.test'] - targets = set(config.root.targets_to_build.split()) if not 'Mips' in targets: config.unsupported = True diff --git a/test/Object/X86/lit.local.cfg b/test/Object/X86/lit.local.cfg index 6a29e9250f3c6..ba763cf03ffcc 100644 --- a/test/Object/X86/lit.local.cfg +++ b/test/Object/X86/lit.local.cfg @@ -1,5 +1,3 @@ -config.suffixes = ['.test'] - targets = set(config.root.targets_to_build.split()) if not 'X86' in targets: config.unsupported = True diff --git a/test/Object/X86/objdump-cfg-invalid-opcode.yaml b/test/Object/X86/objdump-cfg-invalid-opcode.yaml new file mode 100644 index 0000000000000..56ab1d274eef7 --- /dev/null +++ b/test/Object/X86/objdump-cfg-invalid-opcode.yaml @@ -0,0 +1,58 @@ +# RUN: yaml2obj -format=elf %s | llvm-objdump -d -yaml-cfg=%t - && FileCheck --check-prefix=CFG < %t %s +# REQUIRES: shell +# +# Generated from: +# main: +# .LBL0_1: +# movq 8(%rsi), %rax +# <invalid opcode: 06> +# nop + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Content: "488B46080690" + +## 0000000000000000 <main>: + +#CFG: Atoms: +#CFG: - StartAddress: 0x0000000000000000 +#CFG: Size: 4 +#CFG: Type: Text + +## 0: 48 8b 46 08 mov 0x8(%rsi),%rax +#CFG: - Inst: MOV64rm +#CFG: Size: 4 +#CFG: Ops: [ RRAX, RRSI, I1, R, I8, R ] + + +#CFG: - StartAddress: 0x0000000000000004 +#CFG: Size: 1 +#CFG: Type: Data + +## 4: 06 (bad) +#CFG: Content: 06 + +#CFG: - StartAddress: 0x0000000000000005 +#CFG: Size: 1 +#CFG: Type: Text + +## 5: 90 nop +#CFG: - Inst: NOOP +#CFG: Size: 1 +#CFG: Ops: [ ] + +Symbols: + Global: + - Name: main + Type: STT_FUNC + Section: .text + Value: 0x0 + Size: 6 diff --git a/test/Object/X86/objdump-cfg-textatomsize.yaml b/test/Object/X86/objdump-cfg-textatomsize.yaml new file mode 100644 index 0000000000000..87cb4e13ec1e4 --- /dev/null +++ b/test/Object/X86/objdump-cfg-textatomsize.yaml @@ -0,0 +1,39 @@ +# RUN: yaml2obj -format=elf %s | llvm-objdump -d -yaml-cfg=%t - && FileCheck --check-prefix=CFG < %t %s +# REQUIRES: shell +# +# Generated from: +# main: +# .LBL0_1: +# jmp .LBL0_1 +# + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Content: "EBFE" + +## 0000000000000000 <main>: + +#CFG: Atoms: +#CFG: - StartAddress: 0x0000000000000000 +#CFG: Size: 2 + +## 0: eb fe jmp $-2 +#CFG: - Inst: JMP_1 +#CFG: Size: 2 +#CFG: Ops: [ I-2 ] + +Symbols: + Global: + - Name: main + Type: STT_FUNC + Section: .text + Value: 0x0 + Size: 2 diff --git a/test/Object/X86/objdump-cfg.yaml b/test/Object/X86/objdump-cfg.yaml new file mode 100644 index 0000000000000..c5bff03c1d0cb --- /dev/null +++ b/test/Object/X86/objdump-cfg.yaml @@ -0,0 +1,86 @@ +# RUN: yaml2obj -format=elf %s | llvm-objdump -d -yaml-cfg=%t - && FileCheck --check-prefix=CFG < %t %s +# REQUIRES: shell +# +# Generated from: +# main: +# movl $48, %eax +# cmpl $3, %edi +# jl .LBB0_2 +# movq 8(%rsi), %rax +# movsbl (%rax), %eax +# .LBB0_2: +# ret +# + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Content: "B83000000083FF037C07488B46080FBE00C3" + +## 0000000000000000 <main>: + +#CFG: Atoms: +#CFG: - StartAddress: 0x0000000000000000 +#CFG: Size: 10 + +## 0: b8 30 00 00 00 mov $0x30,%eax +#CFG: - Inst: MOV32ri +#CFG: Size: 5 +#CFG: Ops: [ REAX, I48 ] + +## 5: 83 ff 03 cmp $0x3,%edi +#CFG: - Inst: CMP32ri8 +#CFG: Size: 3 +#CFG: Ops: [ REDI, I3 ] + +## 8: 7c 07 jl 11 <main+0x11> +#CFG: - Inst: JL_1 +#CFG: Size: 2 +#CFG: Ops: [ I7 ] + +#CFG: - StartAddress: 0x000000000000000A +#CFG: Size: 7 + +## a: 48 8b 46 08 mov 0x8(%rsi),%rax +#CFG: - Inst: MOV64rm +#CFG: Size: 4 +#CFG: Ops: [ RRAX, RRSI, I1, R, I8, R ] + +## e: 0f be 00 movsbl (%rax),%eax +#CFG: - Inst: MOVSX32rm8 +#CFG: Size: 3 +#CFG: Ops: [ REAX, RRAX, I1, R, I0, R ] +#CFG: - StartAddress: 0x0000000000000011 +#CFG: Size: 1 + +## 11: c3 retq +#CFG: - Inst: RET +#CFG: Size: 1 +#CFG: Ops: [ ] + +Symbols: + Global: + - Name: main + Type: STT_FUNC + Section: .text + Value: 0x0 + Size: 18 + +#CFG: Functions: +#CFG: BasicBlocks: +#CFG: - Address: 0x0000000000000000 +#CFG: Preds: [ ] +#CFG: Succs: [ 0x0000000000000011, 0x000000000000000A ] +#CFG: - Address: 0x0000000000000011 +#CFG: Preds: [ 0x0000000000000000, 0x000000000000000A ] +#CFG: Succs: [ ] +#CFG: - Address: 0x000000000000000A +#CFG: Preds: [ 0x0000000000000000 ] +#CFG: Succs: [ 0x0000000000000011 ] diff --git a/test/Object/X86/objdump-disassembly-inline-relocations.test b/test/Object/X86/objdump-disassembly-inline-relocations.test index a5875f6a2f960..2ef1a435d7d47 100644 --- a/test/Object/X86/objdump-disassembly-inline-relocations.test +++ b/test/Object/X86/objdump-disassembly-inline-relocations.test @@ -2,6 +2,10 @@ RUN: llvm-objdump -d -r %p/../Inputs/trivial-object-test.coff-i386 \ RUN: | FileCheck %s -check-prefix COFF-i386 RUN: llvm-objdump -d -r %p/../Inputs/trivial-object-test.coff-x86-64 \ RUN: | FileCheck %s -check-prefix COFF-x86-64 +RUN: llvm-objdump -d -r %p/../Inputs/trivial-object-test.macho-i386 \ +RUN: | FileCheck %s -check-prefix MACHO-i386 +RUN: llvm-objdump -d -r %p/../Inputs/trivial-object-test.macho-x86-64 \ +RUN: | FileCheck %s -check-prefix MACHO-x86-64 COFF-i386: file format COFF-i386 COFF-i386: Disassembly of section .text: @@ -30,3 +34,34 @@ COFF-x86-64: 19: IMAGE_REL_AMD64_REL32 SomeOtherFun COFF-x86-64: 1d: 8b 44 24 24 movl 36(%rsp), %eax COFF-x86-64: 21: 48 83 c4 28 addq $40, %rsp COFF-x86-64: 25: c3 ret + +MACHO-i386: file format Mach-O 32-bit i386 +MACHO-i386: Disassembly of section __TEXT,__text: +MACHO-i386: _main: +MACHO-i386: 0: 83 ec 0c subl $12, %esp +MACHO-i386: 3: c7 44 24 08 00 00 00 00 movl $0, 8(%esp) +MACHO-i386: b: c7 04 24 24 00 00 00 movl $36, (%esp) +MACHO-i386: e: GENERIC_RELOC_VANILLA __cstring +MACHO-i386: 12: e8 1f 00 00 00 calll 31 +MACHO-i386: 13: GENERIC_RELOC_VANILLA __jump_table +MACHO-i386: 17: e8 15 00 00 00 calll 21 +MACHO-i386: 18: GENERIC_RELOC_VANILLA __jump_table +MACHO-i386: 1c: 8b 44 24 08 movl 8(%esp), %eax +MACHO-i386: 20: 83 c4 0c addl $12, %esp +MACHO-i386: 23: c3 ret + +MACHO-x86-64: file format Mach-O 64-bit x86-64 +MACHO-x86-64: Disassembly of section __TEXT,__text: +MACHO-x86-64: _main: +MACHO-x86-64: 0: 48 83 ec 08 subq $8, %rsp +MACHO-x86-64: 4: c7 44 24 04 00 00 00 00 movl $0, 4(%rsp) +MACHO-x86-64: c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi +MACHO-x86-64: f: X86_64_RELOC_SIGNED L_.str +MACHO-x86-64: 13: e8 00 00 00 00 callq 0 +MACHO-x86-64: 14: X86_64_RELOC_BRANCH _puts +MACHO-x86-64: 18: 30 c0 xorb %al, %al +MACHO-x86-64: 1a: e8 00 00 00 00 callq 0 +MACHO-x86-64: 1b: X86_64_RELOC_BRANCH _SomeOtherFunction +MACHO-x86-64: 1f: 8b 44 24 04 movl 4(%rsp), %eax +MACHO-x86-64: 23: 48 83 c4 08 addq $8, %rsp +MACHO-x86-64: 27: c3 ret diff --git a/test/Object/X86/objdump-disassembly-symbolic.test b/test/Object/X86/objdump-disassembly-symbolic.test new file mode 100644 index 0000000000000..858653e95ebc0 --- /dev/null +++ b/test/Object/X86/objdump-disassembly-symbolic.test @@ -0,0 +1,48 @@ +RUN: llvm-objdump -d -symbolize %p/../Inputs/trivial-object-test.elf-x86-64 \ +RUN: | FileCheck %s -check-prefix ELF-x86-64 +RUN: llvm-objdump -d -symbolize %p/../Inputs/trivial-object-test.macho-x86-64 \ +RUN: | FileCheck %s -check-prefix MACHO-x86-64 + +# Generate this using: +# ld trivial-object-test.macho-x86-64 -undefined dynamic_lookup +RUN: llvm-objdump -d -symbolize %p/../Inputs/trivial-executable-test.macho-x86-64 \ +RUN: | FileCheck %s -check-prefix MACHO-STUBS-x86-64 + +ELF-x86-64: file format ELF64-x86-64 +ELF-x86-64: Disassembly of section .text: +ELF-x86-64: main: +ELF-x86-64: 0: 48 83 ec 08 subq $8, %rsp +ELF-x86-64: 4: c7 44 24 04 00 00 00 00 movl $0, 4(%rsp) +ELF-x86-64: c: bf 00 00 00 00 movl $.rodata.str1.1, %edi +ELF-x86-64: 11: e8 00 00 00 00 callq puts-4 +ELF-x86-64: 16: 30 c0 xorb %al, %al +ELF-x86-64: 18: e8 00 00 00 00 callq SomeOtherFunction-4 +ELF-x86-64: 1d: 8b 44 24 04 movl 4(%rsp), %eax +ELF-x86-64: 21: 48 83 c4 08 addq $8, %rsp +ELF-x86-64: 25: c3 ret + +MACHO-x86-64: file format Mach-O 64-bit x86-64 +MACHO-x86-64: Disassembly of section __TEXT,__text: +MACHO-x86-64: _main: +MACHO-x86-64: 0: 48 83 ec 08 subq $8, %rsp +MACHO-x86-64: 4: c7 44 24 04 00 00 00 00 movl $0, 4(%rsp) +MACHO-x86-64: c: 48 8d 3d 00 00 00 00 leaq L_.str(%rip), %rdi ## literal pool for: Hello World! +MACHO-x86-64: 13: e8 00 00 00 00 callq _puts +MACHO-x86-64: 18: 30 c0 xorb %al, %al +MACHO-x86-64: 1a: e8 00 00 00 00 callq _SomeOtherFunction +MACHO-x86-64: 1f: 8b 44 24 04 movl 4(%rsp), %eax +MACHO-x86-64: 23: 48 83 c4 08 addq $8, %rsp +MACHO-x86-64: 27: c3 ret + +MACHO-STUBS-x86-64: file format Mach-O 64-bit x86-64 +MACHO-STUBS-x86-64: Disassembly of section __TEXT,__text: +MACHO-STUBS-x86-64: _main: +MACHO-STUBS-x86-64: 1f90: 48 83 ec 08 subq $8, %rsp +MACHO-STUBS-x86-64: 1f94: c7 44 24 04 00 00 00 00 movl $0, 4(%rsp) +MACHO-STUBS-x86-64: 1f9c: 48 8d 3d 45 00 00 00 leaq 69(%rip), %rdi ## literal pool for: Hello World! +MACHO-STUBS-x86-64: 1fa3: e8 16 00 00 00 callq puts +MACHO-STUBS-x86-64: 1fa8: 30 c0 xorb %al, %al +MACHO-STUBS-x86-64: 1faa: e8 09 00 00 00 callq SomeOtherFunction +MACHO-STUBS-x86-64: 1faf: 8b 44 24 04 movl 4(%rsp), %eax +MACHO-STUBS-x86-64: 1fb3: 48 83 c4 08 addq $8, %rsp +MACHO-STUBS-x86-64: 1fb7: c3 ret diff --git a/test/Object/ar-create.test b/test/Object/ar-create.test new file mode 100644 index 0000000000000..95d994e06a48c --- /dev/null +++ b/test/Object/ar-create.test @@ -0,0 +1,17 @@ +Test which operations create an archive and which don't. + +RUN: touch %t +RUN: rm -f %t.foo.a +RUN: not llvm-ar p %t.foo.a %t 2>&1 | FileCheck %s +RUN: not llvm-ar d %t.foo.a %t 2>&1 | FileCheck %s +RUN: not llvm-ar m %t.foo.a %t 2>&1 | FileCheck %s +RUN: not llvm-ar t %t.foo.a %t 2>&1 | FileCheck %s +RUN: not llvm-ar x %t.foo.a %t 2>&1 | FileCheck %s + +RUN: llvm-ar q %t.foo.a %t 2>&1 | FileCheck --check-prefix=CREATE %s +RUN: rm -f %t.foo.a +RUN: llvm-ar r %t.foo.a %t 2>&1 | FileCheck --check-prefix=CREATE %s +RUN: rm -f %t.foo.a + +CHECK: llvm-ar{{(.exe|.EXE)?}}: error loading '{{[^']+}}.foo.a': +CREATE: creating {{.*}}.foo.a diff --git a/test/Object/archive-delete.test b/test/Object/archive-delete.test new file mode 100644 index 0000000000000..552b0e709f614 --- /dev/null +++ b/test/Object/archive-delete.test @@ -0,0 +1,30 @@ +Test the 'd' operation in llvm-ar + +REQUIRES: shell + +RUN: cd %T + +RUN: rm -f %t.a +RUN: cp %p/Inputs/GNU.a %t.a +RUN: llvm-ar d %t.a very_long_bytecode_file_name.bc +RUN: llvm-ar t %t.a | FileCheck %s + +RUN: rm -f %t.a +RUN: cp %p/Inputs/MacOSX.a %t.a +RUN: llvm-ar d %t.a very_long_bytecode_file_name.bc +RUN: llvm-ar t %t.a | FileCheck %s + +RUN: rm -f %t.a +RUN: cp %p/Inputs/SVR4.a %t.a +RUN: llvm-ar d %t.a very_long_bytecode_file_name.bc +RUN: llvm-ar t %t.a | FileCheck %s + +RUN: rm -f %t.a +RUN: cp %p/Inputs/xpg4.a %t.a +RUN: llvm-ar d %t.a very_long_bytecode_file_name.bc +RUN: llvm-ar t %t.a | FileCheck %s + + +CHECK: evenlen +CHECK-NEXT: oddlen +CHECK-NEXT: IsNAN.o diff --git a/test/Object/archive-error-tmp.txt b/test/Object/archive-error-tmp.txt new file mode 100644 index 0000000000000..061898655b6c2 --- /dev/null +++ b/test/Object/archive-error-tmp.txt @@ -0,0 +1,9 @@ +REQUIRES: shell + +Test that no temporary file is left behind on error. + +RUN: rm -rf %t +RUN: mkdir %t +RUN: not llvm-ar rc %t/foo.a . +RUN: rmdir %t + diff --git a/test/Object/archive-extract-dir.test b/test/Object/archive-extract-dir.test new file mode 100644 index 0000000000000..c718f90275b65 --- /dev/null +++ b/test/Object/archive-extract-dir.test @@ -0,0 +1,13 @@ +REQUIRES: shell + +RUN: mkdir -p %t +RUN: cd %t +RUN: rm -rf foo +RUN: echo foo > foo +RUN: rm -f test.a +RUN: llvm-ar rc test.a foo +RUN: rm foo +RUN: mkdir foo +RUN: not llvm-ar x test.a foo 2>&1 | FileCheck %s + +CHECK: foo: Is a directory diff --git a/test/Object/archive-format.test b/test/Object/archive-format.test new file mode 100644 index 0000000000000..20ac1a0d78fb8 --- /dev/null +++ b/test/Object/archive-format.test @@ -0,0 +1,22 @@ +Test the exact archive format. In particular, test which file names use the +string table or not. + +REQUIRES: shell + +RUN: mkdir -p %t +RUN: cd %t + +RUN: echo bar > 0123456789abcde +RUN: echo zed > 0123456789abcdef + +RUN: rm -f test.a +RUN: llvm-ar rc test.a 0123456789abcde 0123456789abcdef +RUN: cat test.a | FileCheck -strict-whitespace %s + +CHECK: !<arch> +CHECK-NEXT: // 18 ` +CHECK-NEXT: 0123456789abcdef/ +CHECK-NEXT: 0123456789abcde/{{................................}}4 ` +CHECK-NEXT: bar +CHECK-NEXT: /0 {{................................}}4 ` +CHECK-NEXT: zed diff --git a/test/Object/archive-move.test b/test/Object/archive-move.test new file mode 100644 index 0000000000000..0378e9111a965 --- /dev/null +++ b/test/Object/archive-move.test @@ -0,0 +1,50 @@ +Test the 'm' operation in llvm-ar + +REQUIRES: shell + +RUN: cd %T + +RUN: rm -f %t.a +RUN: cp %p/Inputs/GNU.a %t.a +RUN: llvm-ar m %t.a very_long_bytecode_file_name.bc +RUN: llvm-ar t %t.a | FileCheck %s + +RUN: rm -f %t.a +RUN: cp %p/Inputs/MacOSX.a %t.a +RUN: llvm-ar m %t.a very_long_bytecode_file_name.bc +RUN: llvm-ar t %t.a | FileCheck %s + +RUN: rm -f %t.a +RUN: cp %p/Inputs/SVR4.a %t.a +RUN: llvm-ar m %t.a very_long_bytecode_file_name.bc +RUN: llvm-ar t %t.a | FileCheck %s + +RUN: rm -f %t.a +RUN: cp %p/Inputs/xpg4.a %t.a +RUN: llvm-ar m %t.a very_long_bytecode_file_name.bc +RUN: llvm-ar t %t.a | FileCheck %s + +CHECK: evenlen +CHECK-NEXT: oddlen +CHECK-NEXT: IsNAN.o +CHECK-NEXT: very_long_bytecode_file_name.bc + +RUN: rm -f %t.a +RUN: cp %p/Inputs/GNU.a %t.a +RUN: llvm-ar mb evenlen %t.a very_long_bytecode_file_name.bc +RUN: llvm-ar t %t.a | FileCheck --check-prefix=BEFORE %s + +BEFORE: very_long_bytecode_file_name.bc +BEFORE-NEXT: evenlen +BEFORE-NEXT: oddlen +BEFORE-NEXT: IsNAN.o + +RUN: rm -f %t.a +RUN: cp %p/Inputs/GNU.a %t.a +RUN: llvm-ar ma evenlen %t.a very_long_bytecode_file_name.bc +RUN: llvm-ar t %t.a | FileCheck --check-prefix=AFTER %s + +AFTER: evenlen +AFTER-NEXT: very_long_bytecode_file_name.bc +AFTER-NEXT: oddlen +AFTER-NEXT: IsNAN.o diff --git a/test/Object/archive-replace-pos.test b/test/Object/archive-replace-pos.test new file mode 100644 index 0000000000000..0acead69a1e24 --- /dev/null +++ b/test/Object/archive-replace-pos.test @@ -0,0 +1,30 @@ +Test adding a member to a particular position + +RUN: touch %t.foo +RUN: touch %t.bar +RUN: rm -f %t.a +RUN: llvm-ar rc %t.a %t.foo %t.bar +RUN: touch %t.zed +RUN: llvm-ar rca %t.foo %t.a %t.zed +RUN: llvm-ar t %t.a | FileCheck %s + +CHECK: .foo +CHECK-NEXT: .zed +CHECK-NEXT: .bar + +RUN: rm -f %t.a +RUN: llvm-ar rc %t.a %t.zed %t.foo %t.bar +RUN: llvm-ar t %t.a | FileCheck --check-prefix=CHECK2 %s + +CHECK2: .zed +CHECK2-NEXT: .foo +CHECK2-NEXT: .bar + +RUN: llvm-ar rca %t.foo %t.a %t.zed +RUN: llvm-ar t %t.a | FileCheck --check-prefix=CHECK3 %s +CHECK3: .foo +CHECK3-NEXT: .zed +CHECK3-NEXT: .bar + +RUN: llvm-ar rc %t.a %t.zed +RUN: llvm-ar t %t.a | FileCheck --check-prefix=CHECK3 %s diff --git a/test/Object/archive-symtab.test b/test/Object/archive-symtab.test new file mode 100644 index 0000000000000..6379504318a6c --- /dev/null +++ b/test/Object/archive-symtab.test @@ -0,0 +1,59 @@ +RUN: rm -f %t.a +RUN: llvm-ar rcs %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64 +RUN: llvm-nm -s %t.a | FileCheck %s + +CHECK: Archive map +CHECK-NEXT: main in trivial-object-test.elf-x86-64 +CHECK-NEXT: foo in trivial-object-test2.elf-x86-64 +CHECK-NEXT: main in trivial-object-test2.elf-x86-64 +CHECK-NOT: bar + +CHECK: trivial-object-test.elf-x86-64: +CHECK-NEXT: U SomeOtherFunction +CHECK-NEXT: 00000000 T main +CHECK-NEXT: U puts +CHECK-NEXT: trivial-object-test2.elf-x86-64: +CHECK-NEXT: 00000000 t bar +CHECK-NEXT: 00000006 T foo +CHECK-NEXT: 00000016 T main + +RUN: rm -f %t.a +RUN: llvm-ar rcS %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64 +RUN: llvm-nm -s %t.a | FileCheck %s --check-prefix=NOMAP + +NOMAP-NOT: Archive map + +RUN: llvm-ar s %t.a +RUN: llvm-nm -s %t.a | FileCheck %s + +check that the archive does have a corrupt symbol table. +RUN: rm -f %t.a +RUN: cp %p/Inputs/archive-test.a-corrupt-symbol-table %t.a +RUN: llvm-nm -s %t.a | FileCheck %s --check-prefix=CORRUPT + +CORRUPT: Archive map +CORRUPT-NEXT: mbin in trivial-object-test.elf-x86-64 +CORRUPT-NEXT: foo in trivial-object-test2.elf-x86-64 +CORRUPT-NEXT: main in trivial-object-test2.elf-x86-64 + +CORRUPT: trivial-object-test.elf-x86-64: +CORRUPT-NEXT: U SomeOtherFunction +CORRUPT-NEXT: 00000000 T main +CORRUPT-NEXT: U puts +CORRUPT-NEXT: trivial-object-test2.elf-x86-64: +CORRUPT-NEXT: 00000000 t bar +CORRUPT-NEXT: 00000006 T foo +CORRUPT-NEXT: 00000016 T main + +check that the we *don't* update the symbol table. +RUN: llvm-ar s %t.a +RUN: llvm-nm -s %t.a | FileCheck %s --check-prefix=CORRUPT + +repeate the test with llvm-ranlib + +RUN: rm -f %t.a +RUN: llvm-ar rcS %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64 +RUN: llvm-nm -s %t.a | FileCheck %s --check-prefix=NOMAP + +RUN: llvm-ranlib %t.a +RUN: llvm-nm -s %t.a | FileCheck %s diff --git a/test/Object/archive-toc.test b/test/Object/archive-toc.test new file mode 100644 index 0000000000000..0a5e72b61dce4 --- /dev/null +++ b/test/Object/archive-toc.test @@ -0,0 +1,28 @@ +Test reading an archive created by gnu ar +RUN: env TZ=GMT llvm-ar tv %p/Inputs/GNU.a | FileCheck %s --check-prefix=GNU -strict-whitespace + +GNU: rw-r--r-- 500/500 8 Nov 19 02:57 2004 evenlen +GNU-NEXT: rw-r--r-- 500/500 7 Nov 19 02:57 2004 oddlen +GNU-NEXT: rwxr-xr-x 500/500 1465 Nov 19 03:01 2004 very_long_bytecode_file_name.bc +GNU-NEXT: rw-r--r-- 500/500 2280 Nov 19 03:04 2004 IsNAN.o + + +Test reading an archive createdy by Mac OS X ar +RUN: env TZ=GMT llvm-ar tv %p/Inputs/MacOSX.a | FileCheck %s --check-prefix=OSX -strict-whitespace + +OSX-NOT: __.SYMDEF +OSX: rw-r--r-- 501/501 8 Nov 19 02:57 2004 evenlen +OSX-NEXT: rw-r--r-- 501/501 8 Nov 19 02:57 2004 oddlen +OSX-NEXT: rw-r--r-- 502/502 1465 Feb 4 06:59 2010 very_long_bytecode_file_name.bc +OSX-NEXT: rw-r--r-- 501/501 2280 Nov 19 04:32 2004 IsNAN.o + +Test reading an archive created on Solaris by /usr/ccs/bin/ar +RUN: env TZ=GMT llvm-ar tv %p/Inputs/SVR4.a | FileCheck %s -strict-whitespace + +Test reading an archive created on Solaris by /usr/xpg4/bin/ar +RUN: env TZ=GMT llvm-ar tv %p/Inputs/xpg4.a | FileCheck %s -strict-whitespace + +CHECK: rw-r--r-- 1002/102 8 Nov 19 03:24 2004 evenlen +CHECK-NEXT: rw-r--r-- 1002/102 7 Nov 19 03:24 2004 oddlen +CHECK-NEXT: rwxr-xr-x 1002/102 1465 Nov 19 03:24 2004 very_long_bytecode_file_name.bc +CHECK-NEXT: rw-r--r-- 1002/102 2280 Nov 19 03:24 2004 IsNAN.o diff --git a/test/Object/archive-update.test b/test/Object/archive-update.test new file mode 100644 index 0000000000000..20286d2669ad8 --- /dev/null +++ b/test/Object/archive-update.test @@ -0,0 +1,37 @@ +Test the 'u' option of llvm-ar + +REQUIRES: shell + +RUN: cd %T +RUN: rm -f %t.a + +Create a file named evenlen that is newer than the evenlen on the source dir. +RUN: mkdir -p %t.older +RUN: echo older > %t.older/evenlen + +Either the shell supports the 'touch' command with a flag to manually set the +mtime or we sleep for over a second so that the mtime is definitely observable. +RUN: touch -m -t 200001010000 %t.older/evenlen || sleep 1.1 + +RUN: mkdir -p %t.newer +RUN: echo newer > %t.newer/evenlen +RUN: touch %t.newer/evenlen + +Create an achive with the newest file +RUN: llvm-ar r %t.a %t.newer/evenlen +RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s + +Check that without the 'u' option the member is replaced with an older file. +RUN: llvm-ar r %t.a %t.older/evenlen +RUN: llvm-ar p %t.a | FileCheck --check-prefix=OLDER %s + +Check that with the 'u' option the member is replaced with a newer file. +RUN: llvm-ar ru %t.a %t.newer/evenlen +RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s + +Check that with the 'u' option the member is not replaced with an older file. +RUN: llvm-ar ru %t.a %t.older/evenlen +RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s + +NEWER: newer +OLDER: older diff --git a/test/Object/check_binary_output.ll b/test/Object/check_binary_output.ll new file mode 100644 index 0000000000000..567f18e65ba57 --- /dev/null +++ b/test/Object/check_binary_output.ll @@ -0,0 +1,4 @@ +; This is not an assembly file, this is just to run the test. +; The test verifies that llvm-ar produces a binary output. + +;RUN: llvm-ar p %p/Inputs/GNU.a very_long_bytecode_file_name.bc | cmp -s %p/Inputs/very_long_bytecode_file_name.bc - diff --git a/test/Object/coff-archive-short.test b/test/Object/coff-archive-short.test new file mode 100644 index 0000000000000..fa531b3b63145 --- /dev/null +++ b/test/Object/coff-archive-short.test @@ -0,0 +1,26 @@ +# +# Check if the index is appearing properly in the output file +# +# coff_archive_short.lib does not have member whose name is longer +# than 15 characters, thus, unlike coff_archive.lib, it has no string +# table as the third member. +# +RUN: llvm-nm --numeric-sort -s %p/Inputs/coff_archive_short.lib | FileCheck -check-prefix=CHECKIDX %s + +CHECKIDX: Archive map +CHECKIDX: _shortfn1 in short1.obj +CHECKIDX: _shortfn2 in short2.obj +CHECKIDX: short1.obj: +CHECKIDX: 00000000 N .debug$S +CHECKIDX: 00000000 i .drectve +CHECKIDX: 00000000 t .text +CHECKIDX: 00000000 T _shortfn1 +CHECKIDX: 00000001 a @feat.00 +CHECKIDX: 00aa9d1b a @comp.id +CHECKIDX: short2.obj: +CHECKIDX: 00000000 N .debug$S +CHECKIDX: 00000000 i .drectve +CHECKIDX: 00000000 t .text +CHECKIDX: 00000000 T _shortfn2 +CHECKIDX: 00000001 a @feat.00 +CHECKIDX: 00aa9d1b a @comp.id diff --git a/test/Object/corrupt.test b/test/Object/corrupt.test new file mode 100644 index 0000000000000..ef72a0979b52b --- /dev/null +++ b/test/Object/corrupt.test @@ -0,0 +1,24 @@ +// Section name offset overflows section name string table. +RUN: not llvm-readobj %p/Inputs/corrupt.elf-x86-64 -sections \ +RUN: 2>&1 | FileCheck --check-prefix=SECNAME %s + +// Section data offset past end of file. +RUN: not llvm-readobj %p/Inputs/corrupt.elf-x86-64 -sections -section-data \ +RUN: 2>&1 | FileCheck --check-prefix=SECDATA %s + +// Symbol name offset overflows string table. +RUN: not llvm-readobj %p/Inputs/corrupt.elf-x86-64 -symbols \ +RUN: 2>&1 | FileCheck --check-prefix=SYMNAME %s + +// Version index in .gnu.version overflows the version map. +RUN: not llvm-readobj %p/Inputs/corrupt-version.elf-x86_64 -dt \ +RUN: 2>&1 | FileCheck --check-prefix=VER %s + +SECNAME: Error reading file: Invalid data was encountered while parsing the file. + +SECDATA: Error reading file: Invalid data was encountered while parsing the file. +SECDATA: Error reading file: Invalid data was encountered while parsing the file. + +SYMNAME: Error reading file: Invalid data was encountered while parsing the file. + +VER: Error reading file: Invalid data was encountered while parsing the file. diff --git a/test/Object/directory.ll b/test/Object/directory.ll new file mode 100644 index 0000000000000..48eefcb6ecb8d --- /dev/null +++ b/test/Object/directory.ll @@ -0,0 +1,13 @@ +;RUN: rm -f %T/test.a +;RUN: not llvm-ar r %T/test.a . 2>&1 | FileCheck %s +;CHECK: .: Is a directory + +;RUN: rm -f %T/test.a +;RUN: touch %T/a-very-long-file-name +;RUN: llvm-ar r %T/test.a %s %T/a-very-long-file-name +;RUN: llvm-ar r %T/test.a %T/a-very-long-file-name +;RUN: llvm-ar t %T/test.a | FileCheck -check-prefix=MEMBERS %s +;MEMBERS-NOT: / +;MEMBERS: directory.ll +;MEMBERS: a-very-long-file-name +;MEMBERS-NOT: a-very-long-file-name diff --git a/test/Object/elf-reloc-no-sym.test b/test/Object/elf-reloc-no-sym.test new file mode 100644 index 0000000000000..eabde0cc7348b --- /dev/null +++ b/test/Object/elf-reloc-no-sym.test @@ -0,0 +1,7 @@ +RUN: llvm-readobj -r %p/Inputs/elf-reloc-no-sym.x86_64 | FileCheck %s + +CHECK: Relocations [ +CHECK-NEXT: Section (1) .rela.plt { +CHECK-NEXT: 0x4011D8 R_X86_64_IRELATIVE - 0x400120 +CHECK-NEXT: } +CHECK-NEXT: ] diff --git a/test/Object/extract.ll b/test/Object/extract.ll new file mode 100644 index 0000000000000..4e519aea75050 --- /dev/null +++ b/test/Object/extract.ll @@ -0,0 +1,46 @@ +; This isn't really an assembly file, its just here to run the test. + +; This test just makes sure that llvm-ar can extract bytecode members +; from various style archives. + +; REQUIRES: shell + +; RUN: cd %T + +; RUN: rm -f very_long_bytecode_file_name.bc +; RUN: llvm-ar p %p/Inputs/GNU.a very_long_bytecode_file_name.bc | \ +; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc - +; RUN: llvm-ar x %p/Inputs/GNU.a very_long_bytecode_file_name.bc +; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc \ +; RUN: very_long_bytecode_file_name.bc + +; RUN: rm -f very_long_bytecode_file_name.bc +; RUN: llvm-ar p %p/Inputs/MacOSX.a very_long_bytecode_file_name.bc | \ +; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc - +; RUN: llvm-ar x %p/Inputs/MacOSX.a very_long_bytecode_file_name.bc +; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc \ +; RUN: very_long_bytecode_file_name.bc + +; RUN: rm -f very_long_bytecode_file_name.bc +; RUN: llvm-ar p %p/Inputs/SVR4.a very_long_bytecode_file_name.bc | \ +; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc - +; RUN: llvm-ar x %p/Inputs/SVR4.a very_long_bytecode_file_name.bc +; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc \ +; RUN: very_long_bytecode_file_name.bc + +; RUN: rm -f very_long_bytecode_file_name.bc +; RUN: llvm-ar p %p/Inputs/xpg4.a very_long_bytecode_file_name.bc |\ +; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc - +; RUN: llvm-ar x %p/Inputs/xpg4.a very_long_bytecode_file_name.bc +; RUN: cmp -s %p/Inputs/very_long_bytecode_file_name.bc \ +; RUN: very_long_bytecode_file_name.bc + + +; Test that the 'o' option is working by extracting a file, putting it in o +; new archive and checking that date. +; RUN: rm -f very_long_bytecode_file_name.bc +; RUN: llvm-ar xo %p/Inputs/GNU.a very_long_bytecode_file_name.bc +; RUN: llvm-ar rc %t.a very_long_bytecode_file_name.bc +; RUN: env TZ=GMT llvm-ar tv %t.a | FileCheck %s + +CHECK: 1465 Nov 19 03:01 2004 very_long_bytecode_file_name.bc diff --git a/test/Object/lit.local.cfg b/test/Object/lit.local.cfg index b2439b2d1b799..d74d039d684b0 100644 --- a/test/Object/lit.local.cfg +++ b/test/Object/lit.local.cfg @@ -1 +1 @@ -config.suffixes = ['.test', '.ll'] +config.suffixes = ['.test', '.ll', '.yaml'] diff --git a/test/Object/nm-archive.test b/test/Object/nm-archive.test index 2d96b73a27147..0d43cc701550f 100644 --- a/test/Object/nm-archive.test +++ b/test/Object/nm-archive.test @@ -1,9 +1,5 @@ RUN: llvm-nm %p/Inputs/archive-test.a-coff-i386 \ RUN: | FileCheck %s -check-prefix COFF -RUN: llvm-as %p/Inputs/trivial.ll -o=%t1 -RUN: llvm-ar rcs %t2 %t1 -RUN: llvm-nm %t2 | FileCheck %s -check-prefix BITCODE - COFF: trivial-object-test.coff-i386: COFF-NEXT: 00000000 d .data @@ -13,6 +9,27 @@ COFF-NEXT: U _SomeOtherFunction COFF-NEXT: 00000000 T _main COFF-NEXT: U _puts + +RUN: llvm-as %p/Inputs/trivial.ll -o=%t1 +RUN: rm -f %t2 +RUN: llvm-ar rcs %t2 %t1 +RUN: llvm-nm %t2 | FileCheck %s -check-prefix BITCODE + BITCODE: U SomeOtherFunction BITCODE-NEXT: T main BITCODE-NEXT: U puts + + +Test we don't error with an archive with no symtab. +RUN: llvm-nm %p/Inputs/archive-test.a-gnu-no-symtab + + +Or in an archive with no symtab or string table. +RUN: llvm-nm %p/Inputs/archive-test.a-gnu-minimal + + +And don't crash when asked to print a non existing symtab. +RUN: llvm-nm -s %p/Inputs/archive-test.a-gnu-minimal + +Don't reject an empty archive. +RUN: llvm-nm %p/Inputs/archive-test.a-empty diff --git a/test/Object/nm-error.test b/test/Object/nm-error.test new file mode 100644 index 0000000000000..146b88713f87c --- /dev/null +++ b/test/Object/nm-error.test @@ -0,0 +1,17 @@ +Test that llvm-nm returns an error because of the unknown file type, but +keeps processing subsequent files. + +Note: We use a temporary file since the tests don't run with pipefail. + +RUN: touch %t +RUN: not llvm-nm %p/Inputs/trivial-object-test.elf-i386 %t \ +RUN: %p/Inputs/trivial-object-test.elf-i386 > %t.log +RUN: FileCheck %s < %t.log + +CHECK: U SomeOtherFunction +CHECK: 00000000 T main +CHECK: U puts + +CHECK: U SomeOtherFunction +CHECK: 00000000 T main +CHECK: U puts diff --git a/test/Object/nm-trivial-object.test b/test/Object/nm-trivial-object.test index 5c3cc315e543a..748d6f20d5108 100644 --- a/test/Object/nm-trivial-object.test +++ b/test/Object/nm-trivial-object.test @@ -18,16 +18,17 @@ COFF: U {{_?}}SomeOtherFunction COFF: 00000000 T {{_?}}main COFF: U {{_?}}puts +ELF-NOT: U ELF: U SomeOtherFunction ELF: 00000000 T main ELF: U puts macho: 00000000 U _SomeOtherFunction -macho: 00000000 s _main +macho: 00000000 T _main macho: 00000000 U _puts macho64: 00000028 s L_.str -macho64: 00000000 u _SomeOtherFunction -macho64: 00000000 s _main -macho64: 00000000 u _puts +macho64: 00000000 U _SomeOtherFunction +macho64: 00000000 T _main +macho64: 00000000 U _puts diff --git a/test/Object/nm-universal-binary.test b/test/Object/nm-universal-binary.test new file mode 100644 index 0000000000000..8febfdfab39c1 --- /dev/null +++ b/test/Object/nm-universal-binary.test @@ -0,0 +1,6 @@ +RUN: llvm-nm %p/Inputs/macho-universal.x86_64.i386 | FileCheck %s + +CHECK: macho-universal.x86_64.i386:x86_64 +CHECK: main +CHECK: macho-universal.x86_64.i386:i386 +CHECK: main diff --git a/test/Object/nm-weak-global-macho.test b/test/Object/nm-weak-global-macho.test new file mode 100644 index 0000000000000..ede26090f9513 --- /dev/null +++ b/test/Object/nm-weak-global-macho.test @@ -0,0 +1,3 @@ +RUN: llvm-nm %p/Inputs/weak-global-symbol.macho-i386 | FileCheck %s + +CHECK: 00000000 S _a diff --git a/test/Object/obj2yaml.test b/test/Object/obj2yaml.test index 0d96fd2bfd8e4..49541336c6826 100644 --- a/test/Object/obj2yaml.test +++ b/test/Object/obj2yaml.test @@ -2,169 +2,152 @@ RUN: obj2yaml %p/Inputs/trivial-object-test.coff-i386 | FileCheck %s --check-pre RUN: obj2yaml %p/Inputs/trivial-object-test.coff-x86-64 | FileCheck %s --check-prefix COFF-X86-64 -COFF-I386: header: !Header -COFF-I386-NEXT: Machine: IMAGE_FILE_MACHINE_I386 # (0x14c) +COFF-I386: header: +COFF-I386-NEXT: Machine: IMAGE_FILE_MACHINE_I386 COFF-I386: sections: -COFF-I386-NEXT: - !Section -COFF-I386-NEXT: Name: .text -COFF-I386-NEXT: Characteristics: [IMAGE_SCN_CNT_CODE, IMAGE_SCN_ALIGN_16BYTES, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ, ] # 0x60500020 -COFF-I386-NEXT: SectionData: !hex "83EC0CC744240800000000C7042400000000E800000000E8000000008B44240883C40CC3" # |....D$.......$...............D$.....| +COFF-I386-NEXT: - Name: .text +COFF-I386-NEXT: Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] +COFF-I386-NEXT: Alignment: 16 +COFF-I386-NEXT: SectionData: 83EC0CC744240800000000C7042400000000E800000000E8000000008B44240883C40CC3 COFF-I386: Relocations: -COFF-I386-NEXT: - !Relocation -COFF-I386-NEXT: VirtualAddress: 0xe -COFF-I386-NEXT: SymbolTableIndex: 5 +COFF-I386-NEXT: - VirtualAddress: 14 +COFF-I386-NEXT: SymbolName: L_.str COFF-I386-NEXT: Type: IMAGE_REL_I386_DIR32 -COFF-I386: - !Relocation -COFF-I386-NEXT: VirtualAddress: 0x13 -COFF-I386-NEXT: SymbolTableIndex: 6 +COFF-I386: - VirtualAddress: 19 +COFF-I386-NEXT: SymbolName: _puts COFF-I386-NEXT: Type: IMAGE_REL_I386_REL32 -COFF-I386: - !Relocation -COFF-I386-NEXT: VirtualAddress: 0x18 -COFF-I386-NEXT: SymbolTableIndex: 7 +COFF-I386: - VirtualAddress: 24 +COFF-I386-NEXT: SymbolName: _SomeOtherFunction COFF-I386-NEXT: Type: IMAGE_REL_I386_REL32 -COFF-I386: - !Section -COFF-I386-NEXT: Name: .data -COFF-I386-NEXT: Characteristics: [IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_ALIGN_1BYTES, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE, ] # 0xc0100040 -COFF-I386-NEXT: SectionData: !hex "48656C6C6F20576F726C642100" # |Hello World!.| +COFF-I386: - Name: .data +COFF-I386-NEXT: Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ] +COFF-I386-NEXT: Alignment: 1 +COFF-I386-NEXT: SectionData: 48656C6C6F20576F726C642100 COFF-I386: symbols: -COFF-I386-NEXT: - !Symbol -COFF-I386-NEXT: Name: .text +COFF-I386-NEXT: - Name: .text COFF-I386-NEXT: Value: 0 COFF-I386-NEXT: SectionNumber: 1 -COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3) +COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC COFF-I386-NEXT: NumberOfAuxSymbols: 1 -COFF-I386-NEXT: AuxillaryData: !hex "240000000300000000000000010000000000" # |$.................| +COFF-I386-NEXT: AuxiliaryData: 240000000300000000000000010000000000 -COFF-I386: - !Symbol -COFF-I386-NEXT: Name: .data +COFF-I386: - Name: .data COFF-I386-NEXT: Value: 0 COFF-I386-NEXT: SectionNumber: 2 -COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3) +COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC COFF-I386-NEXT: NumberOfAuxSymbols: 1 -COFF-I386-NEXT: AuxillaryData: !hex "0D0000000000000000000000020000000000" # |..................| +COFF-I386-NEXT: AuxiliaryData: 0D0000000000000000000000020000000000 -COFF-I386: - !Symbol -COFF-I386-NEXT: Name: _main +COFF-I386: - Name: _main COFF-I386-NEXT: Value: 0 COFF-I386-NEXT: SectionNumber: 1 -COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_FUNCTION # (2) -COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2) +COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_FUNCTION +COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL -COFF-I386: - !Symbol -COFF-I386-NEXT: Name: L_.str +COFF-I386: - Name: L_.str COFF-I386-NEXT: Value: 0 COFF-I386-NEXT: SectionNumber: 2 -COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3) +COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC -COFF-I386: - !Symbol -COFF-I386-NEXT: Name: _puts +COFF-I386: - Name: _puts COFF-I386-NEXT: Value: 0 COFF-I386-NEXT: SectionNumber: 0 -COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2) +COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL -COFF-I386: - !Symbol -COFF-I386-NEXT: Name: _SomeOtherFunction +COFF-I386: - Name: _SomeOtherFunction COFF-I386-NEXT: Value: 0 COFF-I386-NEXT: SectionNumber: 0 -COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2) +COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL -COFF-X86-64: header: !Header -COFF-X86-64-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64 # (0x8664) +COFF-X86-64: header: +COFF-X86-64-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64 COFF-X86-64: sections: -COFF-X86-64-NEXT: - !Section -COFF-X86-64-NEXT: Name: .text -COFF-X86-64-NEXT: Characteristics: [IMAGE_SCN_CNT_CODE, IMAGE_SCN_ALIGN_16BYTES, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ, ] # 0x60500020 -COFF-X86-64-NEXT: SectionData: !hex "4883EC28C744242400000000488D0D00000000E800000000E8000000008B4424244883C428C3" # |H..(.D$$....H.................D$$H..(.| +COFF-X86-64-NEXT: - Name: .text +COFF-X86-64-NEXT: Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] +COFF-X86-64-NEXT: Alignment: 16 +COFF-X86-64-NEXT: SectionData: 4883EC28C744242400000000488D0D00000000E800000000E8000000008B4424244883C428C3 COFF-X86-64: Relocations: -COFF-X86-64-NEXT: - !Relocation -COFF-X86-64-NEXT: VirtualAddress: 0xf -COFF-X86-64-NEXT: SymbolTableIndex: 5 +COFF-X86-64-NEXT: - VirtualAddress: 15 +COFF-X86-64-NEXT: SymbolName: L.str COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32 -COFF-X86-64: - !Relocation -COFF-X86-64-NEXT: VirtualAddress: 0x14 -COFF-X86-64-NEXT: SymbolTableIndex: 6 +COFF-X86-64: - VirtualAddress: 20 +COFF-X86-64-NEXT: SymbolName: puts COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32 -COFF-X86-64: - !Relocation -COFF-X86-64-NEXT: VirtualAddress: 0x19 -COFF-X86-64-NEXT: SymbolTableIndex: 7 +COFF-X86-64: - VirtualAddress: 25 +COFF-X86-64-NEXT: SymbolName: SomeOtherFunction COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32 -COFF-X86-64: - !Section -COFF-X86-64-NEXT: Name: .data -COFF-X86-64-NEXT: Characteristics: [IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_ALIGN_1BYTES, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE, ] # 0xc0100040 -COFF-X86-64-NEXT: SectionData: !hex "48656C6C6F20576F726C642100" # |Hello World!.| +COFF-X86-64: - Name: .data +COFF-X86-64-NEXT: Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ] +COFF-X86-64-NEXT: Alignment: 1 +COFF-X86-64-NEXT: SectionData: 48656C6C6F20576F726C642100 COFF-X86-64: symbols: -COFF-X86-64-NEXT: - !Symbol -COFF-X86-64-NEXT: Name: .text +COFF-X86-64-NEXT: - Name: .text COFF-X86-64-NEXT: Value: 0 COFF-X86-64-NEXT: SectionNumber: 1 -COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3) +COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC COFF-X86-64-NEXT: NumberOfAuxSymbols: 1 -COFF-X86-64-NEXT: AuxillaryData: !hex "260000000300000000000000010000000000" # |&.................| +COFF-X86-64-NEXT: AuxiliaryData: 260000000300000000000000010000000000 -COFF-X86-64: - !Symbol -COFF-X86-64-NEXT: Name: .data +COFF-X86-64: - Name: .data COFF-X86-64-NEXT: Value: 0 COFF-X86-64-NEXT: SectionNumber: 2 -COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3) +COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC COFF-X86-64-NEXT: NumberOfAuxSymbols: 1 -COFF-X86-64-NEXT: AuxillaryData: !hex "0D0000000000000000000000020000000000" # |..................| +COFF-X86-64-NEXT: AuxiliaryData: 0D0000000000000000000000020000000000 -COFF-X86-64: - !Symbol -COFF-X86-64-NEXT: Name: main +COFF-X86-64: - Name: main COFF-X86-64-NEXT: Value: 0 COFF-X86-64-NEXT: SectionNumber: 1 -COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2) +COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL -COFF-X86-64: - !Symbol -COFF-X86-64-NEXT: Name: L.str +COFF-X86-64: - Name: L.str COFF-X86-64-NEXT: Value: 0 COFF-X86-64-NEXT: SectionNumber: 2 -COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3) +COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC -COFF-X86-64: - !Symbol -COFF-X86-64-NEXT: Name: puts +COFF-X86-64: - Name: puts COFF-X86-64-NEXT: Value: 0 COFF-X86-64-NEXT: SectionNumber: 0 -COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2) +COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL -COFF-X86-64: - !Symbol -COFF-X86-64-NEXT: Name: SomeOtherFunction +COFF-X86-64: - Name: SomeOtherFunction COFF-X86-64-NEXT: Value: 0 COFF-X86-64-NEXT: SectionNumber: 0 -COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0) -COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0) -COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2) +COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL +COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL +COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL +COFF-X86-64-NOT: NumberOfAuxSymbols diff --git a/test/Object/relocation-executable.test b/test/Object/relocation-executable.test index 98f5b4ee2fd62..1236035d9f683 100644 --- a/test/Object/relocation-executable.test +++ b/test/Object/relocation-executable.test @@ -2,17 +2,25 @@ RUN: llvm-readobj -r -expand-relocs %p/Inputs/hello-world.elf-x86-64 \ RUN: | FileCheck %s // CHECK: Relocations [ -// CHECK: Section (11) .plt { +// CHECK-NEXT: Section (8) .rela.dyn { +// CHECK-NEXT: Relocation { +// CHECK-NEXT: Offset: 0x4018D8 +// CHECK-NEXT: Type: R_X86_64_GLOB_DAT (6) +// CHECK-NEXT: Symbol: __gmon_start__ +// CHECK-NEXT: Addend: 0x0 +// CHECK-NEXT: } +// CHECK-NEXT: } +// CHECK-NEXT: Section (9) .rela.plt { // CHECK-NEXT: Relocation { // CHECK-NEXT: Offset: 0x4018F8 // CHECK-NEXT: Type: R_X86_64_JUMP_SLOT (7) // CHECK-NEXT: Symbol: __libc_start_main -// CHECK-NEXT: Info: 0x0 +// CHECK-NEXT: Addend: 0x0 // CHECK-NEXT: } // CHECK-NEXT: Relocation { // CHECK-NEXT: Offset: 0x401900 // CHECK-NEXT: Type: R_X86_64_JUMP_SLOT (7) // CHECK-NEXT: Symbol: puts -// CHECK-NEXT: Info: 0x0 +// CHECK-NEXT: Addend: 0x0 // CHECK-NEXT: } // CHECK-NEXT: } diff --git a/test/Object/yaml2obj-elf-bits-endian.test b/test/Object/yaml2obj-elf-bits-endian.test new file mode 100644 index 0000000000000..4be9a4465b813 --- /dev/null +++ b/test/Object/yaml2obj-elf-bits-endian.test @@ -0,0 +1,16 @@ +RUN: yaml2obj -format=elf %p/Inputs/ELF/LE64.yaml | llvm-readobj -file-headers - | FileCheck %s --check-prefix LE64 +RUN: yaml2obj -format=elf %p/Inputs/ELF/BE64.yaml | llvm-readobj -file-headers - | FileCheck %s --check-prefix BE64 +RUN: yaml2obj -format=elf %p/Inputs/ELF/LE32.yaml | llvm-readobj -file-headers - | FileCheck %s --check-prefix LE32 +RUN: yaml2obj -format=elf %p/Inputs/ELF/BE32.yaml | llvm-readobj -file-headers - | FileCheck %s --check-prefix BE32 + +LE64: Class: 64-bit (0x2) +LE64-NEXT: DataEncoding: LittleEndian (0x1) + +BE64: Class: 64-bit (0x2) +BE64-NEXT: DataEncoding: BigEndian (0x2) + +LE32: Class: 32-bit (0x1) +LE32-NEXT: DataEncoding: LittleEndian (0x1) + +BE32: Class: 32-bit (0x1) +BE32-NEXT: DataEncoding: BigEndian (0x2) diff --git a/test/Object/yaml2obj-elf-file-headers.yaml b/test/Object/yaml2obj-elf-file-headers.yaml new file mode 100644 index 0000000000000..285170170a20c --- /dev/null +++ b/test/Object/yaml2obj-elf-file-headers.yaml @@ -0,0 +1,11 @@ +# RUN: yaml2obj -format=elf %s | llvm-readobj -file-headers - | FileCheck %s +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + OSABI: ELFOSABI_GNU + Type: ET_REL + Machine: EM_X86_64 + +# CHECK: OS/ABI: GNU/Linux +# CHECK: Type: Relocatable diff --git a/test/Object/yaml2obj-elf-section-basic.yaml b/test/Object/yaml2obj-elf-section-basic.yaml new file mode 100644 index 0000000000000..34be11d3658cc --- /dev/null +++ b/test/Object/yaml2obj-elf-section-basic.yaml @@ -0,0 +1,35 @@ +# RUN: yaml2obj -format=elf %s | llvm-readobj -sections -section-data - | FileCheck %s +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0xCAFEBABE + Link: .text # Doesn't make sense for SHT_PROGBITS, but good enough for test. + Content: EBFE + AddressAlign: 2 + +# CHECK: Section { +# CHECK: Index: 0 +# CHECK: Type: SHT_NULL (0x0) +# +# CHECK: Section { +# CHECK: Name: .text +# CHECK: Type: SHT_PROGBITS (0x1) +# CHECK-NEXT: Flags [ (0x6) +# CHECK-NEXT: SHF_ALLOC (0x2) +# CHECK-NEXT: SHF_EXECINSTR (0x4) +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0xCAFEBABE +# CHECK: Size: 2 +# Check that Link != 0. +# CHECK: Link: {{[1-9][0-9]*}} +# CHECK: AddressAlignment: 2 +# CHECK: SectionData ( +# CHECK-NEXT: 0000: EBFE +# CHECK-NEXT: ) diff --git a/test/Object/yaml2obj-elf-symbol-LocalGlobalWeak.yaml b/test/Object/yaml2obj-elf-symbol-LocalGlobalWeak.yaml new file mode 100644 index 0000000000000..3c4e830c0df64 --- /dev/null +++ b/test/Object/yaml2obj-elf-symbol-LocalGlobalWeak.yaml @@ -0,0 +1,37 @@ +# RUN: yaml2obj -format=elf %s | llvm-readobj -symbols - | FileCheck %s +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .data + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_WRITE ] + Content: "DEADBEEF" +Symbols: + Local: + - Name: local_symbol + Type: STT_OBJECT + Section: .data + Global: + - Name: global_symbol + Type: STT_OBJECT + Section: .data + Weak: + - Name: weak_symbol + Type: STT_OBJECT + Section: .data + +# CHECK: Symbol { +# CHECK: Name: (0) +# CHECK: Symbol { +# CHECK: Name: local_symbol +# CHECK: Binding: Local +# CHECK: Symbol { +# CHECK: Name: global_symbol +# CHECK: Binding: Global +# CHECK: Symbol { +# CHECK: Name: weak_symbol +# CHECK: Binding: Weak diff --git a/test/Object/yaml2obj-elf-symbol-basic.yaml b/test/Object/yaml2obj-elf-symbol-basic.yaml new file mode 100644 index 0000000000000..3fb9b17655fd8 --- /dev/null +++ b/test/Object/yaml2obj-elf-symbol-basic.yaml @@ -0,0 +1,40 @@ +# RUN: yaml2obj -format=elf %s | llvm-readobj -symbols - | FileCheck %s +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Content: "90EBFE" # x86 machine code + # NOP ; To make main's `Value` non-zero (for testing). + # main: + # JMP -2 ; (infloop) + # This YAML file is a valid relocatable object that, + # when linked and run on x86_64, will go into an + # infloop. +Symbols: + Global: + - Name: main + Type: STT_FUNC + Section: .text + Value: 0x1 + Size: 2 + - Name: undefined_symbol + +# CHECK: Symbols [ +# CHECK-NEXT: Symbol { +# CHECK-NEXT: Name: (0) +# CHECK: Symbol { +# CHECK-NEXT: Name: main +# CHECK-NEXT: Value: 0x1 +# CHECK-NEXT: Size: 2 +# CHECK: Binding: Global +# CHECK-NEXT: Type: Function +# CHECK: Section: .text +# CHECK: Symbol { +# CHECK: Name: undefined_symbol +# CHECK: Section: (0x0) |