# 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 ...