[lld] 497c110 - [lld][ELF][COFF] Fix archived bitcode files naming

via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 4 02:01:12 PST 2020


Author: evgeny
Date: 2020-03-04T12:46:31+03:00
New Revision: 497c110e873447c32c4fec82eb7a34d072cf941e

URL: https://github.com/llvm/llvm-project/commit/497c110e873447c32c4fec82eb7a34d072cf941e
DIFF: https://github.com/llvm/llvm-project/commit/497c110e873447c32c4fec82eb7a34d072cf941e.diff

LOG: [lld][ELF][COFF] Fix archived bitcode files naming

Differential revision: https://reviews.llvm.org/D75422

Added: 
    

Modified: 
    lld/COFF/InputFiles.cpp
    lld/ELF/InputFiles.cpp
    lld/test/COFF/thinlto.ll
    lld/test/ELF/lto/thinlto.ll

Removed: 
    


################################################################################
diff  --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index f322e6a9db2d..8cf2a037af54 100644
--- a/lld/COFF/InputFiles.cpp
+++ b/lld/COFF/InputFiles.cpp
@@ -905,8 +905,9 @@ BitcodeFile::BitcodeFile(MemoryBufferRef mb, StringRef archiveName,
   // filename unique.
   MemoryBufferRef mbref(
       mb.getBuffer(),
-      saver.save(archiveName + path +
-                 (archiveName.empty() ? "" : utostr(offsetInArchive))));
+      saver.save(archiveName.empty() ? path
+                                     : archiveName + sys::path::filename(path) +
+                                           utostr(offsetInArchive)));
 
   obj = check(lto::InputFile::create(mbref));
 }

diff  --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index c37436e43738..bd33fca23eec 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -1418,10 +1418,11 @@ BitcodeFile::BitcodeFile(MemoryBufferRef mb, StringRef archiveName,
   // into consideration at LTO time (which very likely causes undefined
   // symbols later in the link stage). So we append file offset to make
   // filename unique.
-  StringRef name = archiveName.empty()
-                       ? saver.save(path)
-                       : saver.save(archiveName + "(" + path + " at " +
-                                    utostr(offsetInArchive) + ")");
+  StringRef name =
+      archiveName.empty()
+          ? saver.save(path)
+          : saver.save(archiveName + "(" + path::filename(path) + " at " +
+                       utostr(offsetInArchive) + ")");
   MemoryBufferRef mbref(mb.getBuffer(), name);
 
   obj = CHECK(lto::InputFile::create(mbref), this);

diff  --git a/lld/test/COFF/thinlto.ll b/lld/test/COFF/thinlto.ll
index f24f362cdf1c..0594984bae44 100644
--- a/lld/test/COFF/thinlto.ll
+++ b/lld/test/COFF/thinlto.ll
@@ -6,6 +6,12 @@
 ; RUN: lld-link /lldsavetemps /out:%T/thinlto/main.exe /entry:main /subsystem:console %T/thinlto/main.obj %T/thinlto/foo.obj
 ; RUN: llvm-nm %T/thinlto/main.exe1.lto.obj | FileCheck %s
 
+; This command will store full path to foo.obj in the archive %t.lib
+; Check that /lldsavetemps is still usable in such case.
+; RUN: lld-link /lib %T/thinlto/foo.obj /out:%t.lib
+; RUN: lld-link /lldsavetemps /out:%t.exe /entry:main /subsystem:console %T/thinlto/main.obj %t.lib
+; RUN: ls '%t.libfoo.obj230.0.preopt.bc'
+
 ; CHECK-NOT: U foo
 
 target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"

diff  --git a/lld/test/ELF/lto/thinlto.ll b/lld/test/ELF/lto/thinlto.ll
index 63761151ba54..7efdf68c0e2d 100644
--- a/lld/test/ELF/lto/thinlto.ll
+++ b/lld/test/ELF/lto/thinlto.ll
@@ -21,6 +21,14 @@
 ; RUN: llvm-nm %t31.lto.o | FileCheck %s --check-prefix=NM1
 ; RUN: llvm-nm %t32.lto.o | FileCheck %s --check-prefix=NM2
 
+; Check that -save-temps is usable with thin archives
+; RUN: rm -fr %t.dir
+; RUN: mkdir -p %t.dir
+; RUN: cp %t2.o %t.dir/t.o
+; RUN: llvm-ar rcsT %t.dir/t.a %t.dir/t.o
+; RUN: ld.lld -save-temps %t1.o %t.dir/t.a -o - > /dev/null
+; RUN: ls '%t.dir/t.a(t.o at 0).0.preopt.bc'
+
 ; NM1: T f
 ; NM2: T g
 


        


More information about the llvm-commits mailing list