mirror of
https://github.com/intel/llvm.git
synced 2026-01-25 10:55:58 +08:00
[ELF] Print a better error for an archive containing a non-ELF file.
Hopefully gives a more readable error message for the most obvious mistake. Differential Revision: https://reviews.llvm.org/D59170 llvm-svn: 355888
This commit is contained in:
@@ -1196,20 +1196,22 @@ static ELFKind getELFKind(MemoryBufferRef MB, StringRef ArchiveName) {
|
||||
auto Fatal = [&](StringRef Msg) {
|
||||
StringRef Filename = MB.getBufferIdentifier();
|
||||
if (ArchiveName.empty())
|
||||
fatal(Filename + ": corrupted ELF file: " + Msg);
|
||||
fatal(Filename + ": " + Msg);
|
||||
else
|
||||
fatal(ArchiveName + "(" + Filename + "): corrupted ELF file: " + Msg);
|
||||
fatal(ArchiveName + "(" + Filename + "): " + Msg);
|
||||
};
|
||||
|
||||
if (!MB.getBuffer().startswith(ElfMagic))
|
||||
Fatal("not an ELF file");
|
||||
if (Endian != ELFDATA2LSB && Endian != ELFDATA2MSB)
|
||||
Fatal("invalid data encoding");
|
||||
Fatal("corrupted ELF file: invalid data encoding");
|
||||
if (Size != ELFCLASS32 && Size != ELFCLASS64)
|
||||
Fatal("invalid file class");
|
||||
Fatal("corrupted ELF file: invalid file class");
|
||||
|
||||
size_t BufSize = MB.getBuffer().size();
|
||||
if ((Size == ELFCLASS32 && BufSize < sizeof(Elf32_Ehdr)) ||
|
||||
(Size == ELFCLASS64 && BufSize < sizeof(Elf64_Ehdr)))
|
||||
Fatal("file is too short");
|
||||
Fatal("corrupted ELF file: file is too short");
|
||||
|
||||
if (Size == ELFCLASS32)
|
||||
return (Endian == ELFDATA2LSB) ? ELF32LEKind : ELF32BEKind;
|
||||
|
||||
@@ -1,11 +1,18 @@
|
||||
# REQUIRES: x86
|
||||
# RUN: llvm-mc %s -o %t -filetype=obj -triple x86_64-pc-linux
|
||||
# RUN: rm -rf %t && mkdir -p %t
|
||||
# RUN: llvm-mc %s -o %t/simple.o -filetype=obj -triple x86_64-pc-linux
|
||||
# RUN: echo > %t/empty.o
|
||||
# RUN: llvm-ar cr %t/not-elf.a %t/empty.o
|
||||
|
||||
# RUN: not ld.lld %t %p/Inputs/data-encoding.a -o %t2 2>&1 | \
|
||||
# RUN: not ld.lld %t/simple.o %t/not-elf.a -o %t2 2>&1 | \
|
||||
# RUN: FileCheck --check-prefix=NOT-ELF %s
|
||||
# NOT-ELF: not-elf.a(empty.o): not an ELF file
|
||||
|
||||
# RUN: not ld.lld %t/simple.o %p/Inputs/data-encoding.a -o %t2 2>&1 | \
|
||||
# RUN: FileCheck --check-prefix=INVALID-DATA-ENC %s
|
||||
# INVALID-DATA-ENC: data-encoding.a(test.o): corrupted ELF file: invalid data encoding
|
||||
|
||||
# RUN: not ld.lld %t %p/Inputs/file-class.a -o %t2 2>&1 | \
|
||||
# RUN: not ld.lld %t/simple.o %p/Inputs/file-class.a -o %t2 2>&1 | \
|
||||
# RUN: FileCheck --check-prefix=INVALID-FILE-CLASS %s
|
||||
# INVALID-FILE-CLASS: file-class.a(test.o): corrupted ELF file: invalid file class
|
||||
|
||||
|
||||
Reference in New Issue
Block a user