[llvm] r325367 - [WebAssembly] MC: Make explicit our current lack of support for relocations against unnamed temporary symbols.

Sam Clegg via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 16 10:06:05 PST 2018


Author: sbc
Date: Fri Feb 16 10:06:05 2018
New Revision: 325367

URL: http://llvm.org/viewvc/llvm-project?rev=325367&view=rev
Log:
[WebAssembly] MC: Make explicit our current lack of support for relocations against unnamed temporary symbols.

Add an explicit check before looking up symbol in SymbolIndices.
This was previously silently succeeding and returning zero for such
unnamed temporaries.

Differential Revision: https://reviews.llvm.org/D43365

Added:
    llvm/trunk/test/MC/WebAssembly/blockaddress.ll
Modified:
    llvm/trunk/lib/MC/WasmObjectWriter.cpp
    llvm/trunk/lib/Target/WebAssembly/known_gcc_test_failures.txt

Modified: llvm/trunk/lib/MC/WasmObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WasmObjectWriter.cpp?rev=325367&r1=325366&r2=325367&view=diff
==============================================================================
--- llvm/trunk/lib/MC/WasmObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/WasmObjectWriter.cpp Fri Feb 16 10:06:05 2018
@@ -355,6 +355,10 @@ void WasmObjectWriter::recordRelocation(
   if (FixupSection.getSectionName().startswith(".init_array"))
     return;
 
+  // TODO(sbc): Add support for debug sections.
+  if (FixupSection.getKind().isMetadata())
+    return;
+
   if (const MCSymbolRefExpr *RefB = Target.getSymB()) {
     assert(RefB->getKind() == MCSymbolRefExpr::VK_None &&
            "Should not have constructed this");
@@ -423,12 +427,20 @@ void WasmObjectWriter::recordRelocation(
   WasmRelocationEntry Rec(FixupOffset, SymA, C, Type, &FixupSection);
   DEBUG(dbgs() << "WasmReloc: " << Rec << "\n");
 
+  // Relocation other than R_WEBASSEMBLY_TYPE_INDEX_LEB are currently required
+  // to be against a named symbol.
+  // TODO(sbc): Add support for relocations against unnamed temporaries such
+  // as those generated by llvm's `blockaddress`.
+  // See: test/MC/WebAssembly/blockaddress.ll
+  if (SymA->getName().empty() && Type != wasm::R_WEBASSEMBLY_TYPE_INDEX_LEB)
+    report_fatal_error("relocations against un-named temporaries are not yet "
+                       "supported by wasm");
+
   if (FixupSection.isWasmData())
     DataRelocations.push_back(Rec);
   else if (FixupSection.getKind().isText())
     CodeRelocations.push_back(Rec);
-  else if (!FixupSection.getKind().isMetadata())
-    // TODO(sbc): Add support for debug sections.
+  else
     llvm_unreachable("unexpected section type");
 }
 
@@ -496,6 +508,9 @@ WasmObjectWriter::getProvisionalValue(co
     if (!Sym->isDefined())
       return 0;
 
+    if (!SymbolIndices.count(Sym))
+      report_fatal_error("symbol not found in function/global index space: " +
+                         Sym->getName());
     uint32_t GlobalIndex = SymbolIndices[Sym];
     const WasmGlobal& Global = Globals[GlobalIndex - NumGlobalImports];
     uint64_t Address = Global.InitialValue + RelEntry.Addend;

Modified: llvm/trunk/lib/Target/WebAssembly/known_gcc_test_failures.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/known_gcc_test_failures.txt?rev=325367&r1=325366&r2=325367&view=diff
==============================================================================
--- llvm/trunk/lib/Target/WebAssembly/known_gcc_test_failures.txt (original)
+++ llvm/trunk/lib/Target/WebAssembly/known_gcc_test_failures.txt Fri Feb 16 10:06:05 2018
@@ -11,7 +11,8 @@
 # to wasm object files (.o).
 
 # Computed gotos are not supported (Cannot select BlockAddress/BRIND)
-20071220-1.c wasm-o,O0
+20071220-1.c wasm-o
+20071220-2.c wasm-o
 20040302-1.c
 20041214-1.c O0
 20071210-1.c
@@ -97,9 +98,6 @@ devirt-14.C  # bad main signature
 devirt-21.C  # bad main signature
 devirt-23.C  # bad main signature
 
-# Untriaged: Assertion failure in WasmObjectWriter::applyRelocations
-20071220-2.c wasm-o,O0
-
 # Untriaged C++ failures
 spec5.C
 addr1.C

Added: llvm/trunk/test/MC/WebAssembly/blockaddress.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/WebAssembly/blockaddress.ll?rev=325367&view=auto
==============================================================================
--- llvm/trunk/test/MC/WebAssembly/blockaddress.ll (added)
+++ llvm/trunk/test/MC/WebAssembly/blockaddress.ll Fri Feb 16 10:06:05 2018
@@ -0,0 +1,15 @@
+; TODO(sbc): Make this test pass by adding support for unnamed tempoaries
+; in wasm relocations.
+; RUN: not llc -filetype=obj %s
+
+target triple = "wasm32-unknown-unknown-wasm"
+
+ at foo = internal global i8* blockaddress(@bar, %addr), align 4
+
+define hidden i32 @bar() #0 {
+entry:
+  br label %addr
+
+addr:
+  ret i32 0
+}




More information about the llvm-commits mailing list