Object/COFF: Fix off-by-one error for object having lots of relocations

llvm-objdump printed out an error message for this off-by-one error,
but because it always exits with 0 whether or not it found an error,
the test (llvm-objdump/coff-many-relocs.test) succeeded.
I made llvm-objdump exit with EXIT_FAILURE when an error is found.

llvm-svn: 222852
This commit is contained in:
Rui Ueyama 2014-11-26 22:17:25 +00:00
parent 796e0c24e7
commit ab9d8be85c
2 changed files with 5 additions and 2 deletions

View File

@ -414,7 +414,8 @@ static uint32_t getNumberOfRelocations(const coff_section *Sec,
if (getObject(FirstReloc, M, reinterpret_cast<const coff_relocation*>( if (getObject(FirstReloc, M, reinterpret_cast<const coff_relocation*>(
base + Sec->PointerToRelocations))) base + Sec->PointerToRelocations)))
return 0; return 0;
return FirstReloc->VirtualAddress; // -1 to exclude this first relocation entry.
return FirstReloc->VirtualAddress - 1;
} }
return Sec->NumberOfRelocations; return Sec->NumberOfRelocations;
} }

View File

@ -149,6 +149,7 @@ PrivateHeadersShort("p", cl::desc("Alias for --private-headers"),
cl::aliasopt(PrivateHeaders)); cl::aliasopt(PrivateHeaders));
static StringRef ToolName; static StringRef ToolName;
static int ReturnValue = EXIT_SUCCESS;
bool llvm::error(std::error_code EC) { bool llvm::error(std::error_code EC) {
if (!EC) if (!EC)
@ -156,6 +157,7 @@ bool llvm::error(std::error_code EC) {
outs() << ToolName << ": error reading file: " << EC.message() << ".\n"; outs() << ToolName << ": error reading file: " << EC.message() << ".\n";
outs().flush(); outs().flush();
ReturnValue = EXIT_FAILURE;
return true; return true;
} }
@ -895,5 +897,5 @@ int main(int argc, char **argv) {
std::for_each(InputFilenames.begin(), InputFilenames.end(), std::for_each(InputFilenames.begin(), InputFilenames.end(),
DumpInput); DumpInput);
return 0; return ReturnValue;
} }