From 95cf2f25feb6c9354961497e1987afea49a07ed3 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Mon, 16 Jun 2014 16:41:00 +0000 Subject: 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 --- llvm/lib/Object/ELFObjectFile.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'llvm/lib') diff --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp index a11a9e016df..356288ffc51 100644 --- a/llvm/lib/Object/ELFObjectFile.cpp +++ b/llvm/lib/Object/ELFObjectFile.cpp @@ -36,7 +36,7 @@ ErrorOr ObjectFile::createELFObjectFile(MemoryBuffer *Obj, R.reset(new ELFObjectFile >( 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::createELFObjectFile(MemoryBuffer *Obj, R.reset(new ELFObjectFile >(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::createELFObjectFile(MemoryBuffer *Obj, R.reset(new ELFObjectFile >(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::createELFObjectFile(MemoryBuffer *Obj, R.reset(new ELFObjectFile >( 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; -- cgit v1.2.3