mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 06:10:12 +00:00
[lld][WebAssembly] Allow relocations against non-live global symbols
Just like the in case for function and data symbols this is needed to support relocations in debug info sections which are allowed contains relocations against non-live symbols. The motivating use case is an object file that contains debug info that references `__stack_pointer` (a local symbol) but does not actually contain any uses of `__stack_pointer`. Fixes: https://github.com/emscripten-core/emscripten/issues/14025 Differential Revision: https://reviews.llvm.org/D101399
This commit is contained in:
parent
bf72f6bacc
commit
3e7bc0da57
23
lld/test/wasm/debuginfo-undefined-global.s
Normal file
23
lld/test/wasm/debuginfo-undefined-global.s
Normal file
@ -0,0 +1,23 @@
|
||||
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s
|
||||
# RUN: wasm-ld -o %t.wasm %t.o
|
||||
# RUN: obj2yaml %t.wasm | FileCheck %s
|
||||
|
||||
# Debug sections are allowed to contains references to non-live symbols that
|
||||
# then get GC'd. In this test the .debug_info seciton contains a reference to
|
||||
# foo which is not otherwise used and will not be marked a live in the output.
|
||||
# Verify the tombstone value is written to debug_info section.
|
||||
|
||||
.globl _start
|
||||
_start:
|
||||
.functype _start () -> ()
|
||||
end_function
|
||||
|
||||
.section .debug_info,"",@
|
||||
.int32 foo
|
||||
|
||||
.globaltype foo, i32
|
||||
foo:
|
||||
|
||||
# CHECK: - Type: CUSTOM
|
||||
# CHECK-NEXT: Name: .debug_info
|
||||
# CHECK-NEXT: Payload: FFFFFFFF
|
@ -1,4 +1,4 @@
|
||||
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s
|
||||
mm# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s
|
||||
# RUN: wasm-ld %t.o -o %t.wasm
|
||||
# RUN: obj2yaml %t.wasm | FileCheck %s
|
||||
|
||||
|
@ -212,7 +212,7 @@ uint64_t ObjFile::calcNewValue(const WasmRelocation &reloc, uint64_t tombstone,
|
||||
// so this will not produce a valid range conflicting with ranges of actual
|
||||
// code. In other sections we return reloc.Addend.
|
||||
|
||||
if ((isa<FunctionSymbol>(sym) || isa<DataSymbol>(sym)) && !sym->isLive())
|
||||
if (!isa<SectionSymbol>(sym) && !sym->isLive())
|
||||
return tombstone ? tombstone : reloc.Addend;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user