112 lines
3.3 KiB
YAML
112 lines
3.3 KiB
YAML
|
## Show that references in disassembly are labelled with the correct symbol.
|
||
|
# RUN: yaml2obj %s --docnum=1 -o %t
|
||
|
# RUN: llvm-objdump %t -d | FileCheck %s --check-prefix=EXEC
|
||
|
|
||
|
# EXEC-LABEL: <first>:
|
||
|
# EXEC-NEXT: 4000: e8 00 00 00 00 callq 0x4005 <third>
|
||
|
# EXEC-LABEL: <third>:
|
||
|
# EXEC-NEXT: 4005: e8 12 34 56 78 callq 0x7856741c <data1+0x7856241c>
|
||
|
# EXEC-LABEL: <fourth>:
|
||
|
# EXEC-NEXT: 400a: 8b 05 f0 0f 00 00 movl 4080(%rip), %eax # 5000 <data1>
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS64
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_EXEC
|
||
|
Machine: EM_X86_64
|
||
|
Sections:
|
||
|
- Name: .text1
|
||
|
Type: SHT_PROGBITS
|
||
|
Address: 0x4000
|
||
|
Flags: [SHF_ALLOC, SHF_EXECINSTR]
|
||
|
Content: 'e800000000' # Case 1: Referencing an address with a symbol.
|
||
|
- Name: .text2
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [SHF_ALLOC, SHF_EXECINSTR]
|
||
|
Address: 0x4005
|
||
|
Content: 'e812345678' # Case 2: Referencing an address without a symbol.
|
||
|
- Name: .text3
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [SHF_ALLOC, SHF_EXECINSTR]
|
||
|
Address: 0x400A
|
||
|
Content: '8b05f00f0000' # Case 3: Memory operands
|
||
|
- Name: .data
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [SHF_ALLOC, SHF_WRITE]
|
||
|
Address: 0x5000
|
||
|
Symbols:
|
||
|
- Name: first
|
||
|
Section: .text1
|
||
|
Value: 0x4000
|
||
|
- Name: second
|
||
|
Section: .text1
|
||
|
Value: 0x4005
|
||
|
- Name: third
|
||
|
Section: .text2
|
||
|
Value: 0x4005
|
||
|
- Name: fourth
|
||
|
Section: .text3
|
||
|
Value: 0x400A
|
||
|
- Name: data1
|
||
|
Section: .data
|
||
|
Value: 0x5000
|
||
|
|
||
|
# RUN: yaml2obj %s --docnum=2 -o %t.o
|
||
|
# RUN: llvm-objdump %t.o -d | FileCheck %s --check-prefix=REL
|
||
|
|
||
|
# REL: Disassembly of section .text1:
|
||
|
# REL-EMPTY:
|
||
|
# REL-NEXT: 0000000000000000 <.text1>:
|
||
|
# REL-NEXT: 0: e8 00 00 00 00 callq 0x5 <.text1+0x5>
|
||
|
# REL-EMPTY:
|
||
|
# REL-NEXT: Disassembly of section .text2:
|
||
|
# REL-EMPTY:
|
||
|
# REL-NEXT: 0000000000000000 <.text2>:
|
||
|
# REL-NEXT: 0: e8 00 00 00 00 callq 0x5 <sym2>
|
||
|
# REL-EMPTY:
|
||
|
# REL-NEXT: Disassembly of section .text3:
|
||
|
# REL-EMPTY:
|
||
|
# REL-NEXT: 0000000000000000 <.text3>:
|
||
|
# REL-NEXT: 0: e8 00 00 00 00 callq 0x5 <.text3+0x5>
|
||
|
|
||
|
--- !ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS64
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_REL
|
||
|
Machine: EM_X86_64
|
||
|
Sections:
|
||
|
- Name: .text1
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [SHF_ALLOC, SHF_EXECINSTR]
|
||
|
Content: 'e800000000' # Case 1: Instruction is patched by a relocation.
|
||
|
- Name: .rela.text1
|
||
|
Type: SHT_RELA
|
||
|
Info: .text1
|
||
|
Relocations:
|
||
|
- Offset: 1
|
||
|
Type: R_X86_64_PC32
|
||
|
Symbol: sym3
|
||
|
- Name: .text2
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [SHF_ALLOC, SHF_EXECINSTR]
|
||
|
Content: 'e800000000' # Case 2: Referencing an address with a matching symbol in that section.
|
||
|
- Name: .text3
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [SHF_ALLOC, SHF_EXECINSTR]
|
||
|
Content: 'e800000000' # Case 3: Referencing an address without a matching symbol in that section.
|
||
|
- Name: .other
|
||
|
Type: SHT_PROGBITS
|
||
|
Symbols:
|
||
|
# Shouldn't be picked, despite matching value, as not in right section.
|
||
|
- Name: sym1
|
||
|
Section: .other
|
||
|
Value: 5
|
||
|
# Symbol in correct section, with right value should be picked for disassembly of .text2.
|
||
|
- Name: sym2
|
||
|
Section: .text2
|
||
|
Value: 5
|
||
|
# Symbol referenced by relocation could be picked for disassembly of .text1, but isn't.
|
||
|
- Name: sym3
|