r218129 - Omit DW_TAG_subprograms for subprograms without inlined subroutines when producing -gmlt data
David Blaikie
dblaikie at gmail.com
Thu Sep 25 13:42:07 PDT 2014
On Thu, Sep 25, 2014 at 1:03 PM, Kuba Brecka <kuba.brecka at gmail.com> wrote:
> Clang r218129:
>
> $ ./bin/clang -gline-tables-only a.c -o a.out -###
> clang version 3.6.0 (218129)
>
Target: x86_64-apple-darwin14.0.0
> Thread model: posix
> "/Users/kuba/llvm-tot-cmake-release/bin/clang-3.6" "-cc1" "-triple"
> "x86_64-apple-macosx10.10.0" "-emit-obj" "-mrelax-all" "-disable-free"
> "-main-file-name" "a.c" "-mrelocation-model" "pic" "-pic-level" "2"
> "-mdisable-fp-elim" "-masm-verbose" "-munwind-tables" "-target-cpu" "core2"
> "-gline-tables-only" "-gdwarf-2" "-dwarf-column-info" "-resource-dir"
> "/Users/kuba/llvm-tot-cmake-release/bin/../lib/clang/3.6.0"
> "-fdebug-compilation-dir" "/Users/kuba/llvm-tot-cmake-release"
> "-ferror-limit" "19" "-fmessage-length" "364" "-stack-protector" "1"
> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-10.10.0"
> "-fencode-extended-block-signature" "-fmax-type-align=16"
> "-fdiagnostics-show-option" "-fcolor-diagnostics" "-o"
> "/var/folders/k0/qjt5nwj91314gwrg0j9ltrrw0000gn/T/a-87344c.o" "-x" "c" "a.c"
> "/usr/bin/ld" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.10.0"
> "-o" "a.out" "/var/folders/k0/qjt5nwj91314gwrg0j9ltrrw0000gn/T/a-87344c.o"
> "-lSystem"
> "/usr/bin/dsymutil" "-o" "a.out.dSYM" "a.out"
> $ ./bin/clang -cc1 -triple x86_64-apple-macosx10.10.0 -emit-obj
> -gline-tables-only -gdwarf-2 -dwarf-column-info a.c -o a.o
> $ ld -dynamic -arch x86_64 -o a.out a.o -lSystem -macosx_version_min
> 10.10.0
> $ dsymutil a.out -o a.out.dSYM
> warning: no debug symbols in executable (-arch x86_64)
>
I'm not sure what this warning is meant to express - but it might be
related to the issue. Have you tried dwarfdumping a.out before running
dsymutil? At least using your command line and running dwarfdump on the
object file (on Linux I don't have dsymutil, nm for MachO, etc) I see the
debug info I expect, whereas it looks like no debug info made it to the
dsym file below \/.
> $ ./bin/llvm-dwarfdump -debug-dump=all
> a.out.dSYM/Contents/Resources/DWARF/a.out
> a.out.dSYM/Contents/Resources/DWARF/a.out: file format Mach-O 64-bit
> x86-64
> .debug_abbrev contents:
> Abbrev table for offset: 0x00000000
> .debug_abbrev.dwo contents:
> < EMPTY >
> .debug_info contents:
> .debug_loc contents:
> .debug_loc.dwo contents:
> .debug_frame contents:
> .debug_aranges contents:
> .debug_line contents:
> .debug_line.dwo contents:
> .debug_str contents:
> 0x00000000: ""
> .debug_ranges contents:
> .debug_pubnames contents:
> .debug_pubtypes contents:
> .debug_gnu_pubnames contents:
> .debug_gnu_pubtypes contents:
> $
>
> Clang r218128:
>
> $ ./bin/clang -gline-tables-only a.c -o a.out -###
> clang version 3.6.0 (218128)
> Target: x86_64-apple-darwin14.0.0
> Thread model: posix
> "/Users/kuba/llvm-tot-cmake-release/bin/clang-3.6" "-cc1" "-triple"
> "x86_64-apple-macosx10.10.0" "-emit-obj" "-mrelax-all" "-disable-free"
> "-main-file-name" "a.c" "-mrelocation-model" "pic" "-pic-level" "2"
> "-mdisable-fp-elim" "-masm-verbose" "-munwind-tables" "-target-cpu" "core2"
> "-gline-tables-only" "-gdwarf-2" "-dwarf-column-info" "-resource-dir"
> "/Users/kuba/llvm-tot-cmake-release/bin/../lib/clang/3.6.0"
> "-fdebug-compilation-dir" "/Users/kuba/llvm-tot-cmake-release"
> "-ferror-limit" "19" "-fmessage-length" "364" "-stack-protector" "1"
> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-10.10.0"
> "-fencode-extended-block-signature" "-fmax-type-align=16"
> "-fdiagnostics-show-option" "-fcolor-diagnostics" "-o"
> "/var/folders/k0/qjt5nwj91314gwrg0j9ltrrw0000gn/T/a-d4d93b.o" "-x" "c" "a.c"
> "/usr/bin/ld" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.10.0"
> "-o" "a.out" "/var/folders/k0/qjt5nwj91314gwrg0j9ltrrw0000gn/T/a-d4d93b.o"
> "-lSystem"
> "/usr/bin/dsymutil" "-o" "a.out.dSYM" "a.out"
> $ ./bin/clang -cc1 -triple x86_64-apple-macosx10.10.0 -emit-obj
> -gline-tables-only -gdwarf-2 -dwarf-column-info a.c -o a.o
> $ ld -dynamic -arch x86_64 -o a.out a.o -lSystem -macosx_version_min
> 10.10.0
> $ dsymutil a.out -o a.out.dSYM
> $ ./bin/llvm-dwarfdump -debug-dump=all
> a.out.dSYM/Contents/Resources/DWARF/a.out
> a.out.dSYM/Contents/Resources/DWARF/a.out: file format Mach-O 64-bit
> x86-64
>
> .debug_abbrev contents:
> Abbrev table for offset: 0x00000000
> [1] DW_TAG_compile_unit DW_CHILDREN_yes
> DW_AT_producer DW_FORM_strp
> DW_AT_language DW_FORM_data2
> DW_AT_name DW_FORM_strp
> DW_AT_stmt_list DW_FORM_data4
> DW_AT_comp_dir DW_FORM_strp
>
> [2] DW_TAG_subprogram DW_CHILDREN_no
> DW_AT_low_pc DW_FORM_addr
> DW_AT_high_pc DW_FORM_addr
> DW_AT_APPLE_omit_frame_ptr DW_FORM_flag
> DW_AT_name DW_FORM_strp
>
>
> .debug_abbrev.dwo contents:
> < EMPTY >
>
> .debug_info contents:
> 0x00000000: Compile Unit: length = 0x00000047 version = 0x0002 abbr_offset
> = 0x0000 addr_size = 0x08 (next unit at 0x0000004b)
>
> 0x0000000b: DW_TAG_compile_unit [1] *
> DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000001] =
> "clang version 3.6.0 (218128)")
> DW_AT_language [DW_FORM_data2] (DW_LANG_C99)
> DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000001e] =
> "<stdin>")
> DW_AT_stmt_list [DW_FORM_data4] (0x00000000)
> DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000026] =
> "/Users/kuba/llvm-tot-cmake-release")
>
> 0x0000001e: DW_TAG_subprogram [2]
> DW_AT_low_pc [DW_FORM_addr] (0x0000000100000f20)
> DW_AT_high_pc [DW_FORM_addr] (0x0000000100000f39)
> DW_AT_APPLE_omit_frame_ptr [DW_FORM_flag] (0x01)
> DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000049] = "f")
>
> 0x00000034: DW_TAG_subprogram [2]
> DW_AT_low_pc [DW_FORM_addr] (0x0000000100000f40)
> DW_AT_high_pc [DW_FORM_addr] (0x0000000100000f83)
> DW_AT_APPLE_omit_frame_ptr [DW_FORM_flag] (0x01)
> DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000004b] =
> "main")
>
> 0x0000004a: NULL
>
> .debug_loc contents:
>
> .debug_loc.dwo contents:
>
> .debug_frame contents:
>
> 00000000 00000014 ffffffff CIE
> Version: 1
> Augmentation: ""
> Code alignment factor: 1
> Data alignment factor: -8
> Return address column: 16
>
> DW_CFA_def_cfa:
> DW_CFA_offset:
> DW_CFA_nop:
> DW_CFA_nop:
> DW_CFA_nop:
> DW_CFA_nop:
> DW_CFA_nop:
> DW_CFA_nop:
>
> 00000018 0000001c 00000000 FDE cie=00000000 pc=00000f20...00000f39
> DW_CFA_advance_loc:
> DW_CFA_def_cfa_offset:
> DW_CFA_nop:
> DW_CFA_nop:
> DW_CFA_nop:
> DW_CFA_nop:
> DW_CFA_nop:
>
> 00000038 0000001c 00000000 FDE cie=00000000 pc=00000f40...00000f83
> DW_CFA_advance_loc:
> DW_CFA_def_cfa_offset:
> DW_CFA_nop:
> DW_CFA_nop:
> DW_CFA_nop:
> DW_CFA_nop:
> DW_CFA_nop:
>
>
> .debug_aranges contents:
> Address Range Header: length = 0x0000003c, version = 0x0002, cu_offset =
> 0x00000000, addr_size = 0x08, seg_size = 0x00
> [0x0000000100000f20 - 0x0000000100000f39)
> [0x0000000100000f40 - 0x0000000100000f83)
>
> .debug_line contents:
> Line table prologue:
> total_length: 0x00000052
> version: 2
> prologue_length: 0x0000001a
> min_inst_length: 1
> default_is_stmt: 1
> line_base: -5
> line_range: 14
> opcode_base: 13
> standard_opcode_lengths[DW_LNS_copy] = 0
> standard_opcode_lengths[DW_LNS_advance_pc] = 1
> standard_opcode_lengths[DW_LNS_advance_line] = 1
> standard_opcode_lengths[DW_LNS_set_file] = 1
> standard_opcode_lengths[DW_LNS_set_column] = 1
> standard_opcode_lengths[DW_LNS_negate_stmt] = 0
> standard_opcode_lengths[DW_LNS_set_basic_block] = 0
> standard_opcode_lengths[DW_LNS_const_add_pc] = 0
> standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
> standard_opcode_lengths[DW_LNS_set_prologue_end] = 0
> standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0
> standard_opcode_lengths[DW_LNS_set_isa] = 1
> Dir Mod Time File Len File Name
> ---- ---------- ---------- ---------------------------
> file_names[ 1] 0 0x00000000 0x00000000 a.c
>
> Address Line Column File ISA Discriminator Flags
> ------------------ ------ ------ ------ --- ------------- -------------
> 0x0000000100000f20 3 0 1 0 0 is_stmt
> 0x0000000100000f28 4 2 1 0 0 is_stmt
> prologue_end
> 0x0000000100000f31 5 2 1 0 0 is_stmt
> 0x0000000100000f39 5 2 1 0 0 is_stmt
> end_sequence
> 0x0000000100000f40 8 0 1 0 0 is_stmt
> 0x0000000100000f4b 9 2 1 0 0 is_stmt
> prologue_end
> 0x0000000100000f59 10 2 1 0 0 is_stmt
> 0x0000000100000f6b 11 2 1 0 0 is_stmt
> 0x0000000100000f78 12 1 1 0 0 is_stmt
> 0x0000000100000f83 12 1 1 0 0 is_stmt
> end_sequence
>
> .debug_line.dwo contents:
>
> .debug_str contents:
> 0x00000000: ""
> 0x00000001: "clang version 3.6.0 (218128)"
> 0x0000001e: "<stdin>"
> 0x00000026: "/Users/kuba/llvm-tot-cmake-release"
> 0x00000049: "f"
> 0x0000004b: "main"
>
> .debug_ranges contents:
>
> .debug_pubnames contents:
> length = 0x0000001d version = 0x0002 unit_offset = 0x00000000 unit_size =
> 0x0000004b
> Offset Name
> 0x0000001e "f"
> 0x00000034 "main"
>
> .debug_pubtypes contents:
>
> .debug_gnu_pubnames contents:
>
> .debug_gnu_pubtypes contents:
> $
>
>
>
> Kuba
>
>
>
> On Thu, Sep 25, 2014 at 10:51 AM, David Blaikie <dblaikie at gmail.com>
> wrote:
>
>>
>>
>> On Wed, Sep 24, 2014 at 12:27 PM, Kuba Brecka <kuba.brecka at gmail.com>
>> wrote:
>>
>>> Sure. It works with my system's clang, but when using my just-built
>>> ./bin/clang, the symbolizer doesn't give me any line information.
>>>
>>> $ cat a.c
>>> #include <stdio.h>
>>>
>>> int f() {
>>> printf("X");
>>> return 0;
>>> }
>>>
>>> int main() {
>>> printf("1");
>>> printf("2");
>>> printf("3");
>>> }
>>> $ clang a.c -o a.out -gline-tables-only
>>>
>>
>> A -cc1 command line would be helpful, not sure which -target I should
>> use, etc.
>>
>>
>>> $ nm a.out
>>> 0000000100000000 T __mh_execute_header
>>> 0000000100000f00 T _f
>>> 0000000100000f30 T _main
>>> U _printf
>>> U dyld_stub_binder
>>> $ echo "a.out 0x0000000100000f00" | ./bin/llvm-symbolizer
>>> f
>>> /Users/kuba/llvm-tot-cmake-release/a.c:3:0
>>> $ echo "a.out 0x0000000100000f18" | ./bin/llvm-symbolizer
>>> f
>>> /Users/kuba/llvm-tot-cmake-release/a.c:5:2
>>> $ ./bin/llvm-dwarfdump -debug-dump=line
>>> a.out.dSYM/Contents/Resources/DWARF/a.out
>>>
>>
>> The full dwarfdump, not just the line table, is probably necessary to
>> investigate this - my change didn't modify the line table, it modified the
>> compile units in the debug_info section (and added ranges back into the
>> debug_ranges section).
>>
>>
>>> a.out.dSYM/Contents/Resources/DWARF/a.out: file format Mach-O
>>> 64-bit x86-64
>>> .debug_line contents:
>>> Line table prologue:
>>> total_length: 0x00000052
>>> version: 2
>>> prologue_length: 0x0000001a
>>> min_inst_length: 1
>>> default_is_stmt: 1
>>> line_base: -5
>>> line_range: 14
>>> opcode_base: 13
>>> standard_opcode_lengths[DW_LNS_copy] = 0
>>> standard_opcode_lengths[DW_LNS_advance_pc] = 1
>>> standard_opcode_lengths[DW_LNS_advance_line] = 1
>>> standard_opcode_lengths[DW_LNS_set_file] = 1
>>> standard_opcode_lengths[DW_LNS_set_column] = 1
>>> standard_opcode_lengths[DW_LNS_negate_stmt] = 0
>>> standard_opcode_lengths[DW_LNS_set_basic_block] = 0
>>> standard_opcode_lengths[DW_LNS_const_add_pc] = 0
>>> standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
>>> standard_opcode_lengths[DW_LNS_set_prologue_end] = 0
>>> standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0
>>> standard_opcode_lengths[DW_LNS_set_isa] = 1
>>> Dir Mod Time File Len File Name
>>> ---- ---------- ---------- ---------------------------
>>> file_names[ 1] 0 0x00000000 0x00000000 a.c
>>> Address Line Column File ISA Discriminator Flags
>>> ------------------ ------ ------ ------ --- ------------- -------------
>>> 0x0000000100000f00 3 0 1 0 0 is_stmt
>>> 0x0000000100000f0f 4 2 1 0 0 is_stmt
>>> prologue_end
>>> 0x0000000100000f18 5 2 1 0 0 is_stmt
>>> 0x0000000100000f23 5 2 1 0 0 is_stmt
>>> end_sequence
>>> 0x0000000100000f30 8 0 1 0 0 is_stmt
>>> 0x0000000100000f3f 9 2 1 0 0 is_stmt
>>> prologue_end
>>> 0x0000000100000f4d 10 2 1 0 0 is_stmt
>>> 0x0000000100000f5e 11 2 1 0 0 is_stmt
>>> 0x0000000100000f6a 12 1 1 0 0 is_stmt
>>> 0x0000000100000f75 12 1 1 0 0 is_stmt
>>> end_sequence
>>>
>>> $ ./bin/clang a.c -o a.out -gline-tables-only
>>> warning: no debug symbols in executable (-arch x86_64)
>>> $ echo "a.out 0x0000000100000f00" | ./bin/llvm-symbolizer
>>> f
>>> ??:0:0
>>> $ echo "a.out 0x0000000100000f18" | ./bin/llvm-symbolizer
>>> f
>>> ??:0:0
>>> $ ./bin/llvm-dwarfdump -debug-dump=line
>>> a.out.dSYM/Contents/Resources/DWARF/a.out
>>> a.out.dSYM/Contents/Resources/DWARF/a.out: file format Mach-O
>>> 64-bit x86-64
>>>
>>>
>>> .debug_line contents:
>>> $
>>>
>>> Kuba
>>>
>>>
>>> On Wed, Sep 24, 2014 at 12:10 PM, David Blaikie <dblaikie at gmail.com>
>>> wrote:
>>>
>>>>
>>>>
>>>> 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/20140925/efea116e/attachment.html>
More information about the llvm-commits
mailing list