[PATCH] COFF: Allow the combined LTO object to define new symbols.
Rui Ueyama
ruiu at google.com
Mon Jun 8 18:31:47 PDT 2015
LGTM
2015/06/08 午後5:23 "Peter Collingbourne" <peter at pcc.me.uk>:
>
> Hi ruiu,
>
> The LLVM code generator can sometimes synthesize symbols, such as SSE
> constants, that are not visible via the LTOModule interface. Allow such
> symbols so long as they have definitions.
>
> http://reviews.llvm.org/D10331
>
> Files:
> COFF/SymbolTable.cpp
> test/COFF/lto-new-symbol.ll
>
> Index: COFF/SymbolTable.cpp
> ===================================================================
> --- COFF/SymbolTable.cpp
> +++ COFF/SymbolTable.cpp
> @@ -276,12 +276,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];
Move this after "if".
> if (!Sym) {
> - llvm::errs() << "LTO: unexpected new symbol: " << Name << '\n';
> - return make_error_code(LLDError::BrokenFile);
> + Sym = new (Alloc) Symbol(Body);
> + if (!isa<Defined>(Body)) {
> + llvm::errs() << "LTO: undefined symbol: " << Name << '\n';
> + return make_error_code(LLDError::BrokenFile);
> + }
> + Body->setBackref(Sym);
> + continue;
> }
> Body->setBackref(Sym);
>
> Index: test/COFF/lto-new-symbol.ll
> ===================================================================
> --- /dev/null
> +++ 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 --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150608/42ad2c3a/attachment.html>
More information about the llvm-commits
mailing list