
Debug info sections need R_WASM_FUNCTION_OFFSET_I32 relocs (with FK_Data_4 fixup kinds) to refer to functions (instead of R_WASM_TABLE_INDEX as is used in data sections). Usually this is done in a convoluted way, with unnamed temp data symbols which target the start of the function, in which case WasmObjectWriter::recordRelocation converts it to use the section symbol instead. However in some cases the function can actually be undefined; in this case the dwarf generator uses the function symbol (a named undefined function symbol) instead. In that case the section-symbol transform doesn't work and we need to generate the correct reloc type a different way. In this change WebAssemblyWasmObjectWriter::getRelocType takes the fixup section type into account to choose the correct reloc type. Fixes PR50408 Differential Revision: https://reviews.llvm.org/D103557
44 lines
1.2 KiB
ArmAsm
44 lines
1.2 KiB
ArmAsm
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s
|
|
# RUN: obj2yaml %t.o | FileCheck %s
|
|
|
|
.functype undef () -> ()
|
|
|
|
bar:
|
|
.functype bar () -> ()
|
|
end_function
|
|
|
|
.globl _start
|
|
_start:
|
|
.functype _start () -> ()
|
|
call bar
|
|
end_function
|
|
|
|
.section .debug_int,"",@
|
|
.Ld:
|
|
.int32 1
|
|
.size .Ld, 4
|
|
|
|
.section .debug_info,"",@
|
|
.int32 bar
|
|
.int32 undef
|
|
.int32 .Ld
|
|
|
|
## Test that relocations in metadata sections against both defined and undef
|
|
## function symbols get R_WASM_FUNCTION_OFFSET relocations, and relocs against
|
|
## data symbols get R_WASM_SECTION_OFFSET relocs.
|
|
# CHECK: - Type: CUSTOM
|
|
# CHECK-NEXT: Name: .debug_int
|
|
# CHECK: - Type: CUSTOM
|
|
# CHECK-NEXT: Relocations:
|
|
# CHECK-NEXT: - Type: R_WASM_FUNCTION_OFFSET_I32
|
|
# CHECK-NEXT: Index: 0
|
|
# CHECK-NEXT: Offset: 0x0
|
|
# CHECK-NEXT: - Type: R_WASM_FUNCTION_OFFSET_I32
|
|
# CHECK-NEXT: Index: 3
|
|
# CHECK-NEXT: Offset: 0x4
|
|
# CHECK-NEXT: - Type: R_WASM_SECTION_OFFSET_I32
|
|
# CHECK-NEXT: Index: 2
|
|
# CHECK-NEXT: Offset: 0x8
|
|
# CHECK-NEXT: Name: .debug_info
|
|
|