summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/test/wasm/debuginfo-relocs.s23
-rw-r--r--lld/wasm/InputChunks.cpp2
-rw-r--r--lld/wasm/InputFiles.cpp2
-rw-r--r--llvm/lib/MC/MCParser/WasmAsmParser.cpp1
4 files changed, 26 insertions, 2 deletions
diff --git a/lld/test/wasm/debuginfo-relocs.s b/lld/test/wasm/debuginfo-relocs.s
new file mode 100644
index 00000000000..bece55f54ff
--- /dev/null
+++ b/lld/test/wasm/debuginfo-relocs.s
@@ -0,0 +1,23 @@
+# 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
+
+bar:
+ .functype bar () -> ()
+ end_function
+
+ .globl _start
+_start:
+ .functype _start () -> ()
+ call bar
+ end_function
+
+ .section .debug_info,"",@
+ .int32 bar
+
+# Even though `bar` is live in the final binary it doesn't have a table entry
+# since its not address taken in the code. In this case any relocations in the
+# debug sections see a address of zero.
+
+# CHECK: Name: .debug_info
+# CHECK-NEXT: Payload: '00000000'
diff --git a/lld/wasm/InputChunks.cpp b/lld/wasm/InputChunks.cpp
index d37b58a5dee..9bd75df80f5 100644
--- a/lld/wasm/InputChunks.cpp
+++ b/lld/wasm/InputChunks.cpp
@@ -100,7 +100,7 @@ void InputChunk::writeTo(uint8_t *buf) const {
verifyRelocTargets();
#endif
- LLVM_DEBUG(dbgs() << "applying relocations: " << getName()
+ LLVM_DEBUG(dbgs() << "applying relocations: " << toString(this)
<< " count=" << relocations.size() << "\n");
int32_t off = outputOffset - getInputSectionOffset();
diff --git a/lld/wasm/InputFiles.cpp b/lld/wasm/InputFiles.cpp
index 33ae3325c74..6ec4b9dcd01 100644
--- a/lld/wasm/InputFiles.cpp
+++ b/lld/wasm/InputFiles.cpp
@@ -166,7 +166,7 @@ uint32_t ObjFile::calcNewValue(const WasmRelocation &reloc) const {
case R_WASM_TABLE_INDEX_I32:
case R_WASM_TABLE_INDEX_SLEB:
case R_WASM_TABLE_INDEX_REL_SLEB:
- if (config->isPic && !getFunctionSymbol(reloc.Index)->hasTableIndex())
+ if (!getFunctionSymbol(reloc.Index)->hasTableIndex())
return 0;
return getFunctionSymbol(reloc.Index)->getTableIndex();
case R_WASM_MEMORY_ADDR_SLEB:
diff --git a/llvm/lib/MC/MCParser/WasmAsmParser.cpp b/llvm/lib/MC/MCParser/WasmAsmParser.cpp
index 28d4459fecd..0c242aed706 100644
--- a/llvm/lib/MC/MCParser/WasmAsmParser.cpp
+++ b/llvm/lib/MC/MCParser/WasmAsmParser.cpp
@@ -123,6 +123,7 @@ public:
// See use of .init_array in WasmObjectWriter and
// TargetLoweringObjectFileWasm
.StartsWith(".init_array", SectionKind::getData())
+ .StartsWith(".debug_", SectionKind::getMetadata())
.Default(Optional<SectionKind>());
if (!Kind.hasValue())
return Parser->Error(Lexer->getLoc(), "unknown section kind: " + Name);
OpenPOWER on IntegriCloud