forked from OSchip/llvm-project
Fix pr17056.
This makes llvm-nm ignore members that are not sufficiently aligned for lib/Object to handle. These archives are invalid. GNU AR is able to handle this, but in general just warns about broken archive members. We should probably start warning too, but for now just make sure llvm-nm exits with an 0. llvm-svn: 211036
This commit is contained in:
parent
8f2efc3a91
commit
95cf2f25fe
|
@ -36,7 +36,7 @@ ErrorOr<ObjectFile *> ObjectFile::createELFObjectFile(MemoryBuffer *Obj,
|
|||
R.reset(new ELFObjectFile<ELFType<support::little, 2, false> >(
|
||||
Obj, EC, BufferOwned));
|
||||
else
|
||||
llvm_unreachable("Invalid alignment for ELF file!");
|
||||
return object_error::parse_failed;
|
||||
else if (Ident.first == ELF::ELFCLASS32 && Ident.second == ELF::ELFDATA2MSB)
|
||||
#if !LLVM_IS_UNALIGNED_ACCESS_FAST
|
||||
if (MaxAlignment >= 4)
|
||||
|
@ -48,7 +48,7 @@ ErrorOr<ObjectFile *> ObjectFile::createELFObjectFile(MemoryBuffer *Obj,
|
|||
R.reset(new ELFObjectFile<ELFType<support::big, 2, false> >(Obj, EC,
|
||||
BufferOwned));
|
||||
else
|
||||
llvm_unreachable("Invalid alignment for ELF file!");
|
||||
return object_error::parse_failed;
|
||||
else if (Ident.first == ELF::ELFCLASS64 && Ident.second == ELF::ELFDATA2MSB)
|
||||
#if !LLVM_IS_UNALIGNED_ACCESS_FAST
|
||||
if (MaxAlignment >= 8)
|
||||
|
@ -60,7 +60,7 @@ ErrorOr<ObjectFile *> ObjectFile::createELFObjectFile(MemoryBuffer *Obj,
|
|||
R.reset(new ELFObjectFile<ELFType<support::big, 2, true> >(Obj, EC,
|
||||
BufferOwned));
|
||||
else
|
||||
llvm_unreachable("Invalid alignment for ELF file!");
|
||||
return object_error::parse_failed;
|
||||
else if (Ident.first == ELF::ELFCLASS64 && Ident.second == ELF::ELFDATA2LSB) {
|
||||
#if !LLVM_IS_UNALIGNED_ACCESS_FAST
|
||||
if (MaxAlignment >= 8)
|
||||
|
@ -72,10 +72,10 @@ ErrorOr<ObjectFile *> ObjectFile::createELFObjectFile(MemoryBuffer *Obj,
|
|||
R.reset(new ELFObjectFile<ELFType<support::little, 2, true> >(
|
||||
Obj, EC, BufferOwned));
|
||||
else
|
||||
llvm_unreachable("Invalid alignment for ELF file!");
|
||||
return object_error::parse_failed;
|
||||
}
|
||||
else
|
||||
report_fatal_error("Buffer is not an ELF object file!");
|
||||
llvm_unreachable("Buffer is not an ELF object file!");
|
||||
|
||||
if (EC)
|
||||
return EC;
|
||||
|
|
Binary file not shown.
|
@ -33,3 +33,9 @@ RUN: llvm-nm -s %p/Inputs/archive-test.a-gnu-minimal
|
|||
|
||||
Don't reject an empty archive.
|
||||
RUN: llvm-nm %p/Inputs/archive-test.a-empty
|
||||
|
||||
This archive has an unaligned member and a unknown format member.
|
||||
GNU AR is able to parse the unaligned member and warns about the member with
|
||||
the unknown format. We should probably simply warn on both. For now just check
|
||||
that we don't produce an error.
|
||||
RUN: llvm-nm %p/Inputs/corrupt-archive.a
|
||||
|
|
Loading…
Reference in New Issue