# Tests RISC-V relocations. We provide a .debug_info section with multiple
# DW_AT_high_pc entries (that's one of the attributes for which relocations are
# resolved by llvm-dwarfdump) and we add a relocation for each of them.
#
# RUN: yaml2obj %s | llvm-dwarfdump - | FileCheck %s
# To add more tests you need to modify the Content of the .debug_abbrev and
# .debug_info sections. To do that create a test.s which matches the assembly
# code below, run the command that follows and copy over the "Content" value of
# the respective sections:
#
# ```
# $ cat test.s
# .section .debug_abbrev,"",@progbits
# .byte 1 # Abbreviation Code
# .byte 0x11 # DW_TAG_compile_unit
# .byte 0 # DW_CHILDREN_no
#
# # Add a DW_AT_high_pc for each relocation we test.
# .rept 14 # (UPDATE HERE)
# .byte 0x12 # DW_AT_high_pc
# .byte 0x01 # DW_FORM_addr
# .endr
#
# .byte 0 # EOM(1)
# .byte 0 # EOM(2)
# .byte 0 # EOM(3)
#
# .section .debug_info,"",@progbits
# .4byte 2+4+1+1+8*14 # Length of Unit (UPDATE HERE)
# .2byte 4 # DWARF version number
# .4byte .debug_abbrev # Offset Into Abbrev. Section
# .byte 8 # Address Size (in bytes)
# .byte 1 # Abbrev 1
# .8byte 0x00000000000042 # Test 1
# .8byte 0x00000000000042 # Test 2
# .8byte 0x00000000000042 # Test 3
# .8byte 0x00000000000042 # Test 4
# .8byte 0x00000000000042 # Test 5
# .8byte 0x00000000000042 # Test 6
# .8byte 0x00000000000042 # Test 7
# .8byte 0x00000000000042 # Test 8
# .8byte 0x00000000004242 # Test 9
# .8byte 0x00000000004242 # Test 10
# .8byte 0x00000042424242 # Test 11
# .8byte 0x00000042424242 # Test 12
# .8byte 0x42424242424242 # Test 13
# .8byte 0x42424242424242 # Test 14
# $ llvm-mc test.s -filetype obj -triple riscv64 -o - | obj2yaml
# ```
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_RISCV
Sections:
- Name: .debug_abbrev
Type: SHT_PROGBITS
Content: 01110012011201120112011201120112011201120112011201120112011201000000
- Name: .debug_info
Type: SHT_PROGBITS
Content: 78000000040000000000080142000000000000004200000000000000420000000000000042000000000000004200000000000000420000000000000042000000000000004200000000000000424200000000000042420000000000004242424200000000424242420000000042424242424242004242424242424200
- Name: .rela.debug_info
Type: SHT_RELA
Flags: [ SHF_INFO_LINK ]
Link: .symtab
EntSize: 0x0000000000000018
Info: .debug_info
Relocations:
# Test 1
# 0x42 with R_RISCV_NONE(0x1) = 0x42
# CHECK: DW_AT_high_pc (0x0000000000000042)
- Offset: 0x000000000000000C # 0xC + 8*0
Symbol: v1
Type: R_RISCV_NONE
# Test 2
# 0x42 with R_RISCV_32(0xFFFFFFFFFFFFFFFF) = 0x00000000FFFFFFFF
# CHECK-NEXT: DW_AT_high_pc (0x00000000ffffffff)
- Offset: 0x0000000000000014 # 0xC + 8*1
Symbol: vFFFFFFFFFFFFFFFF
Type: R_RISCV_32
# Test 3
# 0x42 with R_RISCV_32_PCREL(0x4) = 0x4-0x1C = 0x00000000FFFFFFE8
# CHECK-NEXT: DW_AT_high_pc (0x00000000ffffffe8)
- Offset: 0x000000000000001C # 0xC + 8*2
Symbol: v4
Type: R_RISCV_32_PCREL
# Test 4
# 0x42 with R_RISCV_64(0xFFFFFFFFFFFFFFFF) = 0xFFFFFFFFFFFFFFFF
# CHECK-NEXT: DW_AT_high_pc (0xffffffffffffffff)
- Offset: 0x0000000000000024 # 0xC + 8*3
Symbol: vFFFFFFFFFFFFFFFF
Type: R_RISCV_64
# Test 5
# 0x42 with R_RISCV_SET6(1) = 0x41
# CHECK-NEXT: DW_AT_high_pc (0x0000000000000041)
- Offset: 0x000000000000002C # 0xC + 8*4
Symbol: v1
Type: R_RISCV_SET6
# Test 6
# 0x42 with R_RISCV_SUB6(0x4) = 0x7E
# CHECK-NEXT: DW_AT_high_pc (0x000000000000007e)
- Offset: 0x0000000000000034 # 0xC + 8*5
Symbol: v4
Type: R_RISCV_SUB6
# Test 7
# 0x42 with R_RISCV_ADD8(0x04020103) = 0x45
# CHECK-NEXT: DW_AT_high_pc (0x0000000000000045)
- Offset: 0x000000000000003C # 0xC + 8*6
Symbol: v04020103
Type: R_RISCV_ADD8
# Test 8
# 0x42 with R_RISCV_SUB8(0x04020103) = 0x3F
# CHECK-NEXT: DW_AT_high_pc (0x000000000000003f)
- Offset: 0x0000000000000044 # 0xC + 8*7
Symbol: v04020103
Type: R_RISCV_SUB8
# Test 9
# 0x4242 with R_RISCV_ADD16(0x04020103) = 0x4345
# CHECK-NEXT: DW_AT_high_pc (0x0000000000004345)
- Offset: 0x000000000000004C # 0xC + 8*8
Symbol: v04020103
Type: R_RISCV_ADD16
# Test 10
# 0x4242 with R_RISCV_SUB16(0x04020103) = 0x413F
# CHECK-NEXT: DW_AT_high_pc (0x000000000000413f)
- Offset: 0x0000000000000054 # 0xC + 8*9
Symbol: v04020103
Type: R_RISCV_SUB16
# Test 11
# 0x42424242 with R_RISCV_ADD32(0x04020103) = 0x46444345
# CHECK-NEXT: DW_AT_high_pc (0x0000000046444345)
- Offset: 0x000000000000005C # 0xC + 8*10
Symbol: v04020103
Type: R_RISCV_ADD32
# Test 12
# 0x42424242 with R_RISCV_SUB32(0x04020103) = 0x3E40413F
# CHECK-NEXT: DW_AT_high_pc (0x000000003e40413f)
- Offset: 0x0000000000000064 # 0xC + 8*11
Symbol: v04020103
Type: R_RISCV_SUB32
# Test 13
# 0x0042424242424242 with R_RISCV_ADD64(0x0100000000000000) = 0x0142424242424242
# CHECK-NEXT: DW_AT_high_pc (0x0142424242424242)
- Offset: 0x000000000000006C # 0xC + 8*12
Symbol: v0100000000000000
Type: R_RISCV_ADD64
# Test 14
# 0x0042424242424242 with R_RISCV_SUB64(0x0100000000000000) = 0xFF42424242424242
# CHECK-NEXT: DW_AT_high_pc (0xff42424242424242)
- Offset: 0x0000000000000074 # 0xC + 8*13
Symbol: v0100000000000000
Type: R_RISCV_SUB64
Symbols:
- Name: v1
Type: STT_SECTION
Section: .debug_info
Value: 0x0000000000000001
- Name: v4
Type: STT_SECTION
Section: .debug_info
Value: 0x0000000000000004
- Name: v04020103
Type: STT_SECTION
Section: .debug_info
Value: 0x0000000004020103
- Name: vFFFFFFFFFFFFFFFF
Type: STT_SECTION
Section: .debug_info
Value: 0xFFFFFFFFFFFFFFFF
- Name: v0100000000000000
Type: STT_SECTION
Section: .debug_info
Value: 0x0100000000000000
...