llvm-project/llvm/test/MC/WebAssembly/debuginfo-relocs.s
Derek Schuff ad1f5457d2 [WebAssembly] Generate R_WASM_FUNCTION_OFFSET relocs in debuginfo sections
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
2021-07-19 14:02:33 -07:00

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