[ELF] Error on archive with missing index

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.

Differential Revision: https://reviews.llvm.org/D63781

llvm-svn: 364998
This commit is contained in:
Sam Clegg 2019-07-03 02:29:02 +00:00
parent ba5a72ff8d
commit 99745896ce
3 changed files with 17 additions and 2 deletions

View File

@ -223,8 +223,10 @@ void LinkerDriver::addFile(StringRef Path, bool WithLOption) {
// 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))

View File

@ -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

View File

@ -26,7 +26,7 @@ define i32 @main() {
; 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