[llvm] r330959 - [WebAssembly] objdump: Don't assume all relocations have symbols

Sam Clegg via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 26 10:05:04 PDT 2018


Author: sbc
Date: Thu Apr 26 10:05:04 2018
New Revision: 330959

URL: http://llvm.org/viewvc/llvm-project?rev=330959&view=rev
Log:
[WebAssembly] objdump: Don't assume all relocations have symbols

Subscribers: jfb, dschuff, jgravelle-google, aheejin, sunfish, llvm-commits

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

Modified:
    llvm/trunk/test/tools/llvm-objdump/WebAssembly/relocations.test
    llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp

Modified: llvm/trunk/test/tools/llvm-objdump/WebAssembly/relocations.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/WebAssembly/relocations.test?rev=330959&r1=330958&r2=330959&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/WebAssembly/relocations.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/WebAssembly/relocations.test Thu Apr 26 10:05:04 2018
@@ -1,8 +1,16 @@
 ; RUN: llc -mtriple=wasm32-unknown-unknown-wasm -filetype=obj %s -o - | llvm-objdump -r - | FileCheck %s
 
- at foo1 = hidden global i32 1, align 4
- at foo2 = hidden global i32 1, align 4
- at bar = hidden global i32* @foo2, align 4
+ at foo = external global i32, align 4
+ at bar = global i32* @foo, align 4
+
+define void @make_call(void ()* nocapture %func) {
+entry:
+  call void %func()
+  ret void
+}
+
+; CHECK:      RELOCATION RECORDS FOR [CODE]:
+; CHECK-NEXT: 00000006 R_WEBASSEMBLY_TYPE_INDEX_LEB 1+0
 
 ; CHECK:      RELOCATION RECORDS FOR [DATA]:
-; CHECK-NEXT: 00000018 R_WEBASSEMBLY_MEMORY_ADDR_I32 foo2+0
+; CHECK-NEXT: 00000006 R_WEBASSEMBLY_MEMORY_ADDR_I32 foo+0

Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=330959&r1=330958&r2=330959&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp (original)
+++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp Thu Apr 26 10:05:04 2018
@@ -920,10 +920,14 @@ static std::error_code getRelocationValu
   symbol_iterator SI = RelRef.getSymbol();
   std::string fmtbuf;
   raw_string_ostream fmt(fmtbuf);
-  Expected<StringRef> SymNameOrErr = SI->getName();
-  if (!SymNameOrErr) {
+  if (SI == Obj->symbol_end()) {
+    // Not all wasm relocations have symbols associated with them.
+    // In particular R_WEBASSEMBLY_TYPE_INDEX_LEB.
     fmt << Rel.Index;
   } else {
+    Expected<StringRef> SymNameOrErr = SI->getName();
+    if (!SymNameOrErr)
+      return errorToErrorCode(SymNameOrErr.takeError());
     StringRef SymName = *SymNameOrErr;
     Result.append(SymName.begin(), SymName.end());
   }




More information about the llvm-commits mailing list