[PATCH] COFF: Allow the combined LTO object to define new symbols.

Peter Collingbourne peter at pcc.me.uk
Mon Jun 8 19:57:18 PDT 2015


REPOSITORY
  rL LLVM

http://reviews.llvm.org/D10331

Files:
  lld/trunk/COFF/SymbolTable.cpp
  lld/trunk/test/COFF/lto-new-symbol.ll

Index: lld/trunk/COFF/SymbolTable.cpp
===================================================================
--- lld/trunk/COFF/SymbolTable.cpp
+++ lld/trunk/COFF/SymbolTable.cpp
@@ -269,12 +269,18 @@
     if (!Body->isExternal())
       continue;
 
-    // Find an existing Symbol. We should not see any new symbols at this point.
+    // Find an existing Symbol. We should not see any new undefined symbols at
+    // this point.
     StringRef Name = Body->getName();
-    Symbol *Sym = Symtab[Name];
+    Symbol *&Sym = Symtab[Name];
     if (!Sym) {
-      llvm::errs() << "LTO: unexpected new symbol: " << Name << '\n';
-      return make_error_code(LLDError::BrokenFile);
+      if (!isa<Defined>(Body)) {
+        llvm::errs() << "LTO: undefined symbol: " << Name << '\n';
+        return make_error_code(LLDError::BrokenFile);
+      }
+      Sym = new (Alloc) Symbol(Body);
+      Body->setBackref(Sym);
+      continue;
     }
     Body->setBackref(Sym);
 
Index: lld/trunk/test/COFF/lto-new-symbol.ll
===================================================================
--- lld/trunk/test/COFF/lto-new-symbol.ll
+++ lld/trunk/test/COFF/lto-new-symbol.ll
@@ -0,0 +1,16 @@
+; RUN: llvm-as -o %t.obj %s
+; RUN: lld -flavor link2 /out:%t.exe /entry:foo /subsystem:console %t.obj
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define void @foo(<4 x i32>* %p, <4 x float>* %q, i1 %t) nounwind {
+entry:
+  br label %loop
+loop:
+  store <4 x i32><i32 1073741824, i32 1073741824, i32 1073741824, i32 1073741824>, <4 x i32>* %p
+  store <4 x float><float 2.0, float 2.0, float 2.0, float 2.0>, <4 x float>* %q
+  br i1 %t, label %loop, label %ret
+ret:
+  ret void
+}

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D10331.27356.patch
Type: text/x-patch
Size: 1729 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150609/1e1c8960/attachment.bin>


More information about the llvm-commits mailing list