From 98fe58a3a7e209002b8ecfd94f1419973a29028c Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Wed, 26 Nov 2014 22:17:25 +0000 Subject: [PATCH] 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 --- llvm/lib/Object/COFFObjectFile.cpp | 3 ++- llvm/tools/llvm-objdump/llvm-objdump.cpp | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp index 04cd616..92f920d 100644 --- a/llvm/lib/Object/COFFObjectFile.cpp +++ b/llvm/lib/Object/COFFObjectFile.cpp @@ -414,7 +414,8 @@ static uint32_t getNumberOfRelocations(const coff_section *Sec, if (getObject(FirstReloc, M, reinterpret_cast( base + Sec->PointerToRelocations))) return 0; - return FirstReloc->VirtualAddress; + // -1 to exclude this first relocation entry. + return FirstReloc->VirtualAddress - 1; } return Sec->NumberOfRelocations; } diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 8903bff..c62922e 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -149,6 +149,7 @@ PrivateHeadersShort("p", cl::desc("Alias for --private-headers"), cl::aliasopt(PrivateHeaders)); static StringRef ToolName; +static int ReturnValue = EXIT_SUCCESS; bool llvm::error(std::error_code EC) { if (!EC) @@ -156,6 +157,7 @@ bool llvm::error(std::error_code EC) { outs() << ToolName << ": error reading file: " << EC.message() << ".\n"; outs().flush(); + ReturnValue = EXIT_FAILURE; return true; } @@ -895,5 +897,5 @@ int main(int argc, char **argv) { std::for_each(InputFilenames.begin(), InputFilenames.end(), DumpInput); - return 0; + return ReturnValue; } -- 2.7.4