[llvm] r275487 - llvm-objdump: handle stubbed and malformed dylibs better

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 14 17:47:12 PDT 2016


On Thu, Jul 14, 2016 at 3:13 PM, Tim Northover via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: tnorthover
> Date: Thu Jul 14 17:13:32 2016
> New Revision: 275487
>
> URL: http://llvm.org/viewvc/llvm-project?rev=275487&view=rev
> Log:
> llvm-objdump: handle stubbed and malformed dylibs better
>
> We were quite happy to read past the end of the valid section data when
> disassembling. Instead we entirely skip stub dylibs, and tell the user
> what's
> happened if their section only has partial data.
>
> Added:
>
> llvm/trunk/test/tools/llvm-objdump/X86/Inputs/stubbed.dylib.macho-x86_64
>  (with props)
>
> llvm/trunk/test/tools/llvm-objdump/X86/Inputs/truncated-section.dylib.macho-x86_64
>  (with props)
>

I assume that this file can't work with yaml2obj because it is malformed?


>     llvm/trunk/test/tools/llvm-objdump/X86/stubbed-dylib.test
>     llvm/trunk/test/tools/llvm-objdump/X86/truncated-section.test
> Modified:
>     llvm/trunk/tools/llvm-objdump/MachODump.cpp
>
> Added:
> llvm/trunk/test/tools/llvm-objdump/X86/Inputs/stubbed.dylib.macho-x86_64
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/Inputs/stubbed.dylib.macho-x86_64?rev=275487&view=auto
>
> ==============================================================================
> Binary files
> llvm/trunk/test/tools/llvm-objdump/X86/Inputs/stubbed.dylib.macho-x86_64
> (added) and
> llvm/trunk/test/tools/llvm-objdump/X86/Inputs/stubbed.dylib.macho-x86_64
> Thu Jul 14 17:13:32 2016 differ
>
> Propchange:
> llvm/trunk/test/tools/llvm-objdump/X86/Inputs/stubbed.dylib.macho-x86_64
>
> ------------------------------------------------------------------------------
>     svn:executable = *
>
> Added:
> llvm/trunk/test/tools/llvm-objdump/X86/Inputs/truncated-section.dylib.macho-x86_64
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/Inputs/truncated-section.dylib.macho-x86_64?rev=275487&view=auto
>
> ==============================================================================
> Binary files
> llvm/trunk/test/tools/llvm-objdump/X86/Inputs/truncated-section.dylib.macho-x86_64
> (added) and
> llvm/trunk/test/tools/llvm-objdump/X86/Inputs/truncated-section.dylib.macho-x86_64
> Thu Jul 14 17:13:32 2016 differ
>
> Propchange:
> llvm/trunk/test/tools/llvm-objdump/X86/Inputs/truncated-section.dylib.macho-x86_64
>
> ------------------------------------------------------------------------------
>     svn:executable = *
>
> Added: llvm/trunk/test/tools/llvm-objdump/X86/stubbed-dylib.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/stubbed-dylib.test?rev=275487&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-objdump/X86/stubbed-dylib.test (added)
> +++ llvm/trunk/test/tools/llvm-objdump/X86/stubbed-dylib.test Thu Jul 14
> 17:13:32 2016
> @@ -0,0 +1,5 @@
> +RUN: llvm-objdump -macho -d %p/Inputs/stubbed.dylib.macho-x86_64 |
> FileCheck %s
> +
> +CHECK: (__TEXT,__text) section
> +CHECK-NOT: func
> +CHECK-NOT: func2
>
> Added: llvm/trunk/test/tools/llvm-objdump/X86/truncated-section.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/truncated-section.test?rev=275487&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-objdump/X86/truncated-section.test (added)
> +++ llvm/trunk/test/tools/llvm-objdump/X86/truncated-section.test Thu Jul
> 14 17:13:32 2016
> @@ -0,0 +1,7 @@
> +RUN: llvm-objdump -macho -d
> %p/Inputs/truncated-section.dylib.macho-x86_64 | FileCheck %s
> +
> +CHECK: _func:
> +CHECK:     retq
> +CHECK:     retq
> +
> +CHECK: section data ends, _func2 lies outside valid range
>
> Modified: llvm/trunk/tools/llvm-objdump/MachODump.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/MachODump.cpp?rev=275487&r1=275486&r2=275487&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-objdump/MachODump.cpp (original)
> +++ llvm/trunk/tools/llvm-objdump/MachODump.cpp Thu Jul 14 17:13:32 2016
> @@ -6662,6 +6662,10 @@ static void DisassembleMachO(StringRef F
>
>      unsigned int Arch = MachOOF->getArch();
>
> +    // Skip all symbols if this is a stubs file.
> +    if (Bytes.size() == 0)
> +      return;
> +
>      // Disassemble symbol by symbol.
>      for (unsigned SymIdx = 0; SymIdx != Symbols.size(); SymIdx++) {
>        Expected<StringRef> SymNameOrErr = Symbols[SymIdx].getName();
> @@ -6716,10 +6720,17 @@ static void DisassembleMachO(StringRef F
>          continue;
>
>        // Start at the address of the symbol relative to the section's
> address.
> +      uint64_t SectSize = Sections[SectIdx].getSize();
>        uint64_t Start = Symbols[SymIdx].getValue();
>        uint64_t SectionAddress = Sections[SectIdx].getAddress();
>        Start -= SectionAddress;
>
> +      if (Start > SectSize) {
> +        outs() << "section data ends, " << SymName
> +               << " lies outside valid range\n";
> +        return;
> +      }
> +
>        // Stop disassembling either at the beginning of the next symbol or
> at
>        // the end of the section.
>        bool containsNextSym = false;
> @@ -6745,8 +6756,7 @@ static void DisassembleMachO(StringRef F
>          ++NextSymIdx;
>        }
>
> -      uint64_t SectSize = Sections[SectIdx].getSize();
> -      uint64_t End = containsNextSym ? NextSym : SectSize;
> +      uint64_t End = containsNextSym ? std::min(NextSym, SectSize) :
> SectSize;
>        uint64_t Size;
>
>        symbolTableWorked = true;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>



-- 
Saleem Abdulrasool
compnerd (at) compnerd (dot) org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160714/9002ee25/attachment.html>


More information about the llvm-commits mailing list