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

Kuba Brecka kuba.brecka at gmail.com
Wed Sep 24 12:08:04 PDT 2014


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:

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/8a6b4456/attachment.html>


More information about the llvm-commits mailing list