r218129 - Omit DW_TAG_subprograms for subprograms without inlined subroutines when producing -gmlt data

David Blaikie dblaikie at gmail.com
Wed Sep 24 12:10:38 PDT 2014


On Wed, Sep 24, 2014 at 12:08 PM, Kuba Brecka <kuba.brecka at gmail.com> wrote:

> I'm getting test failures for compiler-rt asan tests after this patch. It
> seems the symbolizer stops working with -gline-tables-only on OS X:
>

Could you provide a simple reproduction? (a clang command line with a
-target and an llvm-symbolizer invocation that should symbolize a
particular instruction/offset in the binary, etc) and/or llvm-dwarfdump of
a simple binary that fails symbolication when it shouldn't.


>
> FAIL: AddressSanitizer32 :: TestCases/use-after-free.cc (222 of 460)
> ******************** TEST 'AddressSanitizer32 ::
> TestCases/use-after-free.cc' FAILED ********************
> Script:
> --
> /Users/kuba/llvm-tot-cmake-release/./bin/clang --driver-mode=g++
> -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer
> -fno-optimize-sibling-calls -gline-tables-only -m32 -O0
> /Users/kuba/llvm-tot/projects/compiler-rt/test/asan/TestCases/use-after-free.cc
> -o
> /Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp
> && not
>  /Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp
> 2>&1 | FileCheck
> /Users/kuba/llvm-tot/projects/compiler-rt/test/asan/TestCases/use-after-free.cc
> --check-prefix=CHECK-Darwin --check-prefix=CHECK
> /Users/kuba/llvm-tot-cmake-release/./bin/clang --driver-mode=g++
> -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer
> -fno-optimize-sibling-calls -gline-tables-only -m32 -O1
> /Users/kuba/llvm-tot/projects/compiler-rt/test/asan/TestCases/use-after-free.cc
> -o
> /Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp
> && not
>  /Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp
> 2>&1 | FileCheck
> /Users/kuba/llvm-tot/projects/compiler-rt/test/asan/TestCases/use-after-free.cc
> --check-prefix=CHECK-Darwin --check-prefix=CHECK
> /Users/kuba/llvm-tot-cmake-release/./bin/clang --driver-mode=g++
> -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer
> -fno-optimize-sibling-calls -gline-tables-only -m32 -O2
> /Users/kuba/llvm-tot/projects/compiler-rt/test/asan/TestCases/use-after-free.cc
> -o
> /Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp
> && not
>  /Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp
> 2>&1 | FileCheck
> /Users/kuba/llvm-tot/projects/compiler-rt/test/asan/TestCases/use-after-free.cc
> --check-prefix=CHECK-Darwin --check-prefix=CHECK
> /Users/kuba/llvm-tot-cmake-release/./bin/clang --driver-mode=g++
> -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer
> -fno-optimize-sibling-calls -gline-tables-only -m32 -O3
> /Users/kuba/llvm-tot/projects/compiler-rt/test/asan/TestCases/use-after-free.cc
> -o
> /Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp
> && not
>  /Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp
> 2>&1 | FileCheck
> /Users/kuba/llvm-tot/projects/compiler-rt/test/asan/TestCases/use-after-free.cc
> --check-prefix=CHECK-Darwin --check-prefix=CHECK
> --
> Exit Code: 1
>
> Command Output (stdout):
> --
> warning: no debug symbols in executable (-arch i386)
>
> --
> Command Output (stderr):
> --
> /Users/kuba/llvm-tot/projects/compiler-rt/test/asan/TestCases/use-after-free.cc:15:12:
> error: expected string not found in input
>  // CHECK: {{ #0 0x.* in main .*use-after-free.cc:}}[[@LINE-4]]
>            ^
> <stdin>:4:2: note: scanning from here
>  #0 0x75e5f in main
> (/Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp+0x1e5f)
>  ^
> <stdin>:4:2: note: with expression "@LINE-4" equal to "11"
>  #0 0x75e5f in main
> (/Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp+0x1e5f)
>  ^
> <stdin>:4:97: note: possible intended match here
>  #0 0x75e5f in main
> (/Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp+0x1e5f)
>
>
> Kuba
>
> Author: dblaikie
>> Date: Fri Sep 19 12:03:16 2014
>> New Revision: 218129
>> URL: http://llvm.org/viewvc/llvm-project?rev=218129&view=rev
>> Log:
>> Omit DW_TAG_subprograms for subprograms without inlined subroutines when
>> producing -gmlt data
>> To reduce the size of -gmlt data, skip the subprograms without any
>> inlined subroutines. Since we've now got the ability to make these
>> determinations in the backend (funnily enough - we added the flag so we
>> wouldn't produce ranges under -gmlt, but with this change we use the
>> flag, but go back to producing ranges under -gmlt).
>> Instead, just produce CU ranges to inform the consumer which parts of
>> the code are described by this CU's line table. Tools could inspect the
>> line table directly to compute the range, but the CU ranges only seem to
>> be about 0.5% of object/executable size, so I'm not too worried about
>> teaching llvm-symbolizer that trick just yet - it's certainly a possible
>> piece of future work.
>> Update an llvm-symbolizer test just to demonstrate that this schema is
>> acceptable there (if it wasn't, the compiler-rt tests would catch this,
>> but good to have an in-llvm-tree test for llvm-symbolizer's behavior
>> here)
>> Building the clang binary with -gmlt with this patch reduces the total
>> size of object files by 5.1% (5.56% without ranges) without compression
>> and the executable by 4.37% (4.75% without ranges).
>> Modified:
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>>     llvm/trunk/test/DebugInfo/Inputs/dwarfdump-inl-test.elf-x86-64
>>     llvm/trunk/test/DebugInfo/gmlt.ll
>>     llvm/trunk/test/DebugInfo/llvm-symbolizer.test
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140924/40610c9b/attachment.html>


More information about the llvm-commits mailing list