[lld] r360295 - [lld-link] initialize targets and asmparsers before invoking lib

Prathamesh Kulkarni via llvm-commits llvm-commits at lists.llvm.org
Fri May 10 04:33:17 PDT 2019


Hi,
It seems this commit broke the test  lld::lib-module-asm.ll on armv8
and aarch64.
armv8 log: http://lab.llvm.org:8011/builders/clang-cmake-armv8-lld/builds/1351/steps/ninja%20check%202/logs/FAIL%3A%20lld%3A%3Alib-module-asm.ll

armv8 build info:
http://lab.llvm.org:8011/builders/clang-cmake-armv8-lld/builds/1351
aarch64 build info:
http://lab.llvm.org:8011/builders/clang-cmake-aarch64-lld/builds/6540

Thanks,
Prathamesh

On Thu, 9 May 2019 at 03:38, Bob Haarman via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> Author: inglorion
> Date: Wed May  8 15:11:02 2019
> New Revision: 360295
>
> URL: http://llvm.org/viewvc/llvm-project?rev=360295&view=rev
> Log:
> [lld-link] initialize targets and asmparsers before invoking lib
>
> Summary:
> When using lld-link to build static libraries containing object files
> with module assembly, the program would crash with "Assertion `T &&
> T->hasMCAsmParser()' failed". This change causes the code in lld-link
> that initialized Targets, TargetInfos, and AsmParsers (which already
> existed) to be run before entering the lib building path (which needs
> it). This avoids the error (and is what llvm-lib and llvm-ar do, too).
>
> Fixes PR41803.
>
> Reviewers: ruiu, rnk, hans
>
> Reviewed By: ruiu
>
> Subscribers: llvm-commits
>
> Tags: #llvm
>
> Differential Revision: https://reviews.llvm.org/D61699
>
> Added:
>     lld/trunk/test/COFF/lib-module-asm.ll
> Modified:
>     lld/trunk/COFF/Driver.cpp
>
> Modified: lld/trunk/COFF/Driver.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=360295&r1=360294&r2=360295&view=diff
> ==============================================================================
> --- lld/trunk/COFF/Driver.cpp (original)
> +++ lld/trunk/COFF/Driver.cpp Wed May  8 15:11:02 2019
> @@ -975,6 +975,13 @@ void LinkerDriver::maybeExportMinGWSymbo
>  }
>
>  void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
> +  // Needed for LTO.
> +  InitializeAllTargetInfos();
> +  InitializeAllTargets();
> +  InitializeAllTargetMCs();
> +  InitializeAllAsmParsers();
> +  InitializeAllAsmPrinters();
> +
>    // If the first command line argument is "/lib", link.exe acts like lib.exe.
>    // We call our own implementation of lib.exe that understands bitcode files.
>    if (ArgsArr.size() > 1 && StringRef(ArgsArr[1]).equals_lower("/lib")) {
> @@ -983,13 +990,6 @@ void LinkerDriver::link(ArrayRef<const c
>      return;
>    }
>
> -  // Needed for LTO.
> -  InitializeAllTargetInfos();
> -  InitializeAllTargets();
> -  InitializeAllTargetMCs();
> -  InitializeAllAsmParsers();
> -  InitializeAllAsmPrinters();
> -
>    // Parse command line options.
>    ArgParser Parser;
>    opt::InputArgList Args = Parser.parseLINK(ArgsArr);
>
> Added: lld/trunk/test/COFF/lib-module-asm.ll
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/lib-module-asm.ll?rev=360295&view=auto
> ==============================================================================
> --- lld/trunk/test/COFF/lib-module-asm.ll (added)
> +++ lld/trunk/test/COFF/lib-module-asm.ll Wed May  8 15:11:02 2019
> @@ -0,0 +1,21 @@
> +; PR41803: llvm-link /lib on object with module asm crashes
> +; RUN: rm -f %t.lib
> +; RUN: llvm-as -o %t.obj %s
> +; RUN: lld-link /lib /out:%t.lib %t.obj
> +; RUN: llvm-nm -M %t.lib | FileCheck %s
> +
> +target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
> +target triple = "i386-pc-windows-msvc19.11.0"
> +
> +module asm ".global global_asm_sym"
> +module asm "global_asm_sym:"
> +module asm "local_asm_sym:"
> +module asm ".long undef_asm_sym"
> +
> +; CHECK: Archive map
> +; CHECK-NEXT: global_asm_sym in {{.*}}lib-module-asm.ll.tmp.obj
> +
> +; CHECK: lib-module-asm.ll.tmp.obj:{{$}}
> +; CHECK-NEXT:         T global_asm_sym
> +; CHECK-NEXT:         t local_asm_sym
> +; CHECK-NEXT:         U undef_asm_sym
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list