From: Reid Kleckner Date: Fri, 9 Oct 2015 00:15:08 +0000 (+0000) Subject: Address review comments, remove error case and return 0 instead as required by tests X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=00fda7326747a933f448fa5ebfd5bf5f9d8c99b9;p=oota-llvm.git Address review comments, remove error case and return 0 instead as required by tests git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249785 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Object/COFF.h b/include/llvm/Object/COFF.h index ba846dd7d8b..1b0e2e36bd5 100644 --- a/include/llvm/Object/COFF.h +++ b/include/llvm/Object/COFF.h @@ -773,7 +773,7 @@ public: std::error_code getSectionContents(const coff_section *Sec, ArrayRef &Res) const; - ErrorOr getImageBase() const; + uint64_t getImageBase() const; std::error_code getVaPtr(uint64_t VA, uintptr_t &Res) const; std::error_code getRvaPtr(uint32_t Rva, uintptr_t &Res) const; std::error_code getHintName(uint32_t Rva, uint16_t &Hint, diff --git a/lib/Object/COFFObjectFile.cpp b/lib/Object/COFFObjectFile.cpp index efb3ea04083..1f2111759a0 100644 --- a/lib/Object/COFFObjectFile.cpp +++ b/lib/Object/COFFObjectFile.cpp @@ -174,7 +174,7 @@ ErrorOr COFFObjectFile::getSymbolAddress(DataRefImpl Ref) const { // The section VirtualAddress does not include ImageBase, and we want to // return virtual addresses. - Result += getImageBase().get(); + Result += getImageBase(); return Result; } @@ -271,7 +271,7 @@ uint64_t COFFObjectFile::getSectionAddress(DataRefImpl Ref) const { // The section VirtualAddress does not include ImageBase, and we want to // return virtual addresses. - Result += getImageBase().get(); + Result += getImageBase(); return Result; } @@ -418,17 +418,18 @@ std::error_code COFFObjectFile::initSymbolTablePtr() { return std::error_code(); } -ErrorOr COFFObjectFile::getImageBase() const { +uint64_t COFFObjectFile::getImageBase() const { if (PE32Header) - return uint64_t(PE32Header->ImageBase); + return PE32Header->ImageBase; else if (PE32PlusHeader) - return uint64_t(PE32PlusHeader->ImageBase); - return object_error::parse_failed; + return PE32PlusHeader->ImageBase; + // This actually comes up in practice. + return 0; } // Returns the file offset for the given VA. std::error_code COFFObjectFile::getVaPtr(uint64_t Addr, uintptr_t &Res) const { - uint64_t ImageBase = getImageBase().get(); + uint64_t ImageBase = getImageBase(); uint64_t Rva = Addr - ImageBase; assert(Rva <= UINT32_MAX); return getRvaPtr((uint32_t)Rva, Res); diff --git a/test/tools/llvm-symbolizer/Inputs/coff-dwarf.input b/test/tools/llvm-symbolizer/Inputs/coff-dwarf.input deleted file mode 100644 index 6f6cd2eedb5..00000000000 --- a/test/tools/llvm-symbolizer/Inputs/coff-dwarf.input +++ /dev/null @@ -1,2 +0,0 @@ -0x5009 -0x5038 diff --git a/test/tools/llvm-symbolizer/coff-dwarf.test b/test/tools/llvm-symbolizer/coff-dwarf.test index 5daf6b04a33..53e3b602cae 100644 --- a/test/tools/llvm-symbolizer/coff-dwarf.test +++ b/test/tools/llvm-symbolizer/coff-dwarf.test @@ -1,5 +1,9 @@ -RUN: llvm-symbolizer --inlining --relative-address -obj="%p/Inputs/coff-dwarf.exe" \ -RUN: < %p/Inputs/coff-dwarf.input | FileCheck %s +RUN: grep '^ADDR:' %s | sed -s 's/ADDR: //' \ +RUN: | llvm-symbolizer --inlining --relative-address -obj="%p/Inputs/coff-dwarf.exe" \ +RUN: | FileCheck %s + +ADDR: 0x5009 +ADDR: 0x5038 CHECK: foo(void) CHECK: coff-dwarf.cpp:7 diff --git a/test/tools/llvm-symbolizer/pdb/Inputs/test.exe.input b/test/tools/llvm-symbolizer/pdb/Inputs/test.exe.input deleted file mode 100644 index f8344470150..00000000000 --- a/test/tools/llvm-symbolizer/pdb/Inputs/test.exe.input +++ /dev/null @@ -1,8 +0,0 @@ -0x401000 -0x401010 -0x401070 -0x401030 -0x401040 -0x401050 -0x401060 -0x500000 diff --git a/test/tools/llvm-symbolizer/pdb/pdb.test b/test/tools/llvm-symbolizer/pdb/pdb.test index 228779e56a8..3f5dbc30218 100644 --- a/test/tools/llvm-symbolizer/pdb/pdb.test +++ b/test/tools/llvm-symbolizer/pdb/pdb.test @@ -1,18 +1,27 @@ -RUN: llvm-symbolizer -obj="%p/Inputs/test.exe" < "%p/Inputs/test.exe.input" | \ -RUN: FileCheck %s --check-prefix=CHECK -RUN: llvm-symbolizer -obj="%p/Inputs/test.exe" < "%p/Inputs/test.exe.input" | \ -RUN: FileCheck %s --check-prefix=CHECK -RUN: llvm-symbolizer -obj="%p/Inputs/test.exe" -demangle=false < \ -RUN: "%p/Inputs/test.exe.input" | FileCheck %s --check-prefix=CHECK-NO-DEMANGLE +RUN: grep '^ADDR:' %s | sed -s 's/ADDR: //' \ +RUN: | llvm-symbolizer -obj="%p/Inputs/test.exe" \ +RUN: | FileCheck %s --check-prefix=CHECK +RUN: grep '^ADDR:' %s | sed -s 's/ADDR: //' \ +RUN: | llvm-symbolizer -obj="%p/Inputs/test.exe" -demangle=false \ +RUN: | FileCheck %s --check-prefix=CHECK-NO-DEMANGLE Subtract ImageBase from all the offsets and run the test again with --relative-address. -RUN: python -c 'import sys;print "\n".join([hex(int(x, 16) - 0x400000) for x in sys.stdin])' \ -RUN: < %p/Inputs/test.exe.input \ +RUN: grep '^ADDR:' %s | sed -s 's/ADDR: //' \ +RUN: | python -c 'import sys;print "\n".join([hex(int(x, 16) - 0x400000) for x in sys.stdin])' \ RUN: | llvm-symbolizer -obj="%p/Inputs/test.exe" -demangle=false --relative-address \ RUN: | FileCheck %s --check-prefix=CHECK-NO-DEMANGLE +ADDR: 0x401000 +ADDR: 0x401010 +ADDR: 0x401070 +ADDR: 0x401030 +ADDR: 0x401040 +ADDR: 0x401050 +ADDR: 0x401060 +ADDR: 0x500000 + CHECK: foo(void) CHECK-NEXT: test.cpp:10 CHECK: main diff --git a/tools/llvm-symbolizer/LLVMSymbolize.cpp b/tools/llvm-symbolizer/LLVMSymbolize.cpp index cbfbdda08c9..996520b8430 100644 --- a/tools/llvm-symbolizer/LLVMSymbolize.cpp +++ b/tools/llvm-symbolizer/LLVMSymbolize.cpp @@ -128,8 +128,7 @@ bool ModuleInfo::isWin32Module() const { uint64_t ModuleInfo::getModulePreferredBase() const { if (auto *CoffObject = dyn_cast(Module)) - if (auto Base = CoffObject->getImageBase()) - return Base.get(); + return CoffObject->getImageBase(); return 0; }