[PATCH] D63781: [ELF] Error on archive with missing index

Sam Clegg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 25 11:42:39 PDT 2019


sbc100 created this revision.
Herald added subscribers: llvm-commits, arphaman, dexonsmith, steven_wu, MaskRay, sunfish, aheejin, arichardson, emaste.
Herald added a reviewer: espindola.
Herald added a project: LLVM.
sbc100 added a reviewer: ruiu.

This matches the wasm lld and GNU ld behavior.

The ELF linker has special handling for bitcode archives but if that
doesn't kick in we probably want to error out rather than silently
ignore the library.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D63781

Files:
  lld/ELF/Driver.cpp
  lld/test/ELF/archive-no-index.s
  lld/test/ELF/lto/archive-no-index.ll


Index: lld/test/ELF/lto/archive-no-index.ll
===================================================================
--- lld/test/ELF/lto/archive-no-index.ll
+++ lld/test/ELF/lto/archive-no-index.ll
@@ -26,7 +26,7 @@
 ; RUN: rm -f %t3.a
 ; RUN: llvm-ar crS %t3.a %t3.o
 ; RUN: not ld.lld -o /dev/null -emain %t1.o %t3.a 2>&1 | FileCheck -check-prefix=ERR1 %s
-; ERR1: error: undefined symbol: f
+; ERR1: error: {{.*}}.a: archive has no index; run ranlib to add one
 
 ; RUN: rm -f %t4.a
 ; RUN: llvm-ar cr %t4.a
Index: lld/test/ELF/archive-no-index.s
===================================================================
--- /dev/null
+++ lld/test/ELF/archive-no-index.s
@@ -0,0 +1,13 @@
+# REQUIRES: x86
+# Tests error on archive file without a symbol table
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux -o %t.o %s
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux -o %t.archive.o %S/Inputs/archive.s
+# RUN: rm -f %t.a
+# RUN: llvm-ar crS %t.a %t.archive.o
+
+# RUN: not ld.lld -o out.wasm %t.o %t.a 2>&1 | FileCheck %s
+
+.globl _start
+_start:
+
+# CHECK: error: {{.*}}.a: archive has no index; run ranlib to add one
Index: lld/ELF/Driver.cpp
===================================================================
--- lld/ELF/Driver.cpp
+++ lld/ELF/Driver.cpp
@@ -223,8 +223,10 @@
       // default action without the LTO hack described above.
       for (const std::pair<MemoryBufferRef, uint64_t> &P :
            getArchiveMembers(MBRef))
-        if (identify_magic(P.first.getBuffer()) != file_magic::bitcode)
+        if (identify_magic(P.first.getBuffer()) != file_magic::bitcode) {
+          error(Path + ": archive has no index; run ranlib to add one");
           return;
+        }
 
       for (const std::pair<MemoryBufferRef, uint64_t> &P :
            getArchiveMembers(MBRef))


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D63781.206492.patch
Type: text/x-patch
Size: 1800 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190625/3c2b8faa/attachment-0001.bin>


More information about the llvm-commits mailing list