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

David Blaikie dblaikie at gmail.com
Thu Sep 25 15:07:27 PDT 2014


On Thu, Sep 25, 2014 at 2:56 PM, Kuba Brecka <kuba.brecka at gmail.com> wrote:

> I believe you're tight about dsymutil. This commit enabled
> -gline-tables-only for compiler-rt tests:
> http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20140901/234084.html
> and I'm having lots of test failures on OS X. So should we revert it? Or
> at least just for OS X?
>

Lots of options, depending on what you do what to do for your platform &
ASan. You could change dsymutil (presumably that'll have some turnaround
time), modify -gmlt to not do this optimization on your platform (or
perhaps there's some cheap-and-dirty way we could produce /just/ enough
DWARF to fool dsymutil into not dropping all the debug info), just decide
that users of ASan on MacOS need to use -g (in which case we'd want to
change the build system)

Alexey - I guess you have an opinion on this too, perhaps? (not sure how
much you care/are invested in MacOS sanitizer support)


>
> Kuba
>
>
> On Thu, Sep 25, 2014 at 2:28 PM, David Blaikie <dblaikie at gmail.com> wrote:
>
>>
>>
>> On Thu, Sep 25, 2014 at 2:20 PM, Kuba Brecka <kuba.brecka at gmail.com>
>> wrote:
>>
>>> Dwarfdumping a.out produces nothing, but dwarfdumping a.o does and there
>>> are differences. Attaching the two outputs. This is the diff for running
>>>  cc1, ld and dwarfdump, between r218128 and r218129:
>>>
>>
>> The changes to the dump of a.o look like what I intended. It sounds like
>> dsymutil is being smart and omitting debug info if there are no subprograms
>> in the CU? Perhaps you'd need to disable this optimization on Darwin
>> unless/until you can teach dsymutil not to do this?
>>
>> You'd have to experiment more/investigate/read/etc dsymutil to understand
>> whether my hypothesis is correct.
>>
>>
>>>
>>> --- clang-218128.txt 2014-09-25 14:17:51.000000000 -0700
>>> +++ clang-218129.txt 2014-09-25 14:17:44.000000000 -0700
>>> @@ -1,190 +1,171 @@
>>>  $ ./bin/clang -v
>>> -clang version 3.6.0 (218128)
>>> +clang version 3.6.0 (218129)
>>>  Target: x86_64-apple-darwin14.0.0
>>>  Thread model: posix
>>>  $ ./bin/clang -cc1 -triple x86_64-apple-macosx10.10.0 -emit-obj
>>> -gline-tables-only a.c -o a.o
>>>  $ ld -arch x86_64 -macosx_version_min 10.10.0 a.o -o a.out -lSystem
>>>  $ ./bin/llvm-dwarfdump -debug-dump=all a.out
>>>  a.out:  file format Mach-O 64-bit x86-64
>>>
>>>  .debug_abbrev contents:
>>>  < EMPTY >
>>>
>>>  .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:
>>>
>>>  .debug_ranges contents:
>>>
>>>  .debug_pubnames contents:
>>>
>>>  .debug_pubtypes contents:
>>>
>>>  .debug_gnu_pubnames contents:
>>>
>>>  .debug_gnu_pubtypes contents:
>>>  $ ./bin/llvm-dwarfdump -debug-dump=all a.o
>>>  error: failed to compute relocation: X86_64_RELOC_UNSIGNED
>>>  error: failed to compute relocation: X86_64_RELOC_UNSIGNED
>>> -error: failed to compute relocation: X86_64_RELOC_UNSIGNED
>>>  a.o:  file format Mach-O 64-bit x86-64
>>>
>>>  .debug_abbrev contents:
>>>  Abbrev table for offset: 0x00000000
>>> -[1] DW_TAG_compile_unit DW_CHILDREN_yes
>>> +[1] DW_TAG_compile_unit DW_CHILDREN_no
>>>    DW_AT_producer  DW_FORM_strp
>>>    DW_AT_language  DW_FORM_data2
>>>    DW_AT_name  DW_FORM_strp
>>>    DW_AT_stmt_list DW_FORM_sec_offset
>>>    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_data4
>>> -  DW_AT_APPLE_omit_frame_ptr  DW_FORM_flag_present
>>> -  DW_AT_name  DW_FORM_strp
>>>
>>>
>>>  .debug_abbrev.dwo contents:
>>>  < EMPTY >
>>>
>>>  .debug_info contents:
>>> -0x00000000: Compile Unit: length = 0x0000003d version = 0x0004
>>> abbr_offset = 0x0000 addr_size = 0x08 (next unit at 0x00000041)
>>> +0x00000000: Compile Unit: length = 0x00000026 version = 0x0004
>>> abbr_offset = 0x0000 addr_size = 0x08 (next unit at 0x0000002a)
>>>
>>> -0x0000000b: DW_TAG_compile_unit [1] *
>>> -              DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] =
>>> "clang version 3.6.0 (218128)")
>>> +0x0000000b: DW_TAG_compile_unit [1]
>>> +              DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] =
>>> "clang version 3.6.0 (218129)")
>>>                DW_AT_language [DW_FORM_data2]  (DW_LANG_C99)
>>>                DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000001d] =
>>> "<stdin>")
>>>                DW_AT_stmt_list [DW_FORM_sec_offset]  (0x00000000)
>>>                DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000025] =
>>> "/Users/kuba/llvm-tot-cmake-release")
>>> -
>>> -0x0000001e:   DW_TAG_subprogram [2]
>>> -                DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
>>> -                DW_AT_high_pc [DW_FORM_data4] (0x00000019)
>>> -                DW_AT_APPLE_omit_frame_ptr [DW_FORM_flag_present] (true)
>>> -                DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000048] =
>>> "f")
>>> -
>>> -0x0000002f:   DW_TAG_subprogram [2]
>>> -                DW_AT_low_pc [DW_FORM_addr] (0x0000000000000020)
>>> -                DW_AT_high_pc [DW_FORM_data4] (0x00000043)
>>> -                DW_AT_APPLE_omit_frame_ptr [DW_FORM_flag_present] (true)
>>> -                DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000004a] =
>>> "main")
>>> -
>>> -0x00000040:   NULL
>>> +              DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
>>> +              DW_AT_high_pc [DW_FORM_data4] (0x00000063)
>>>
>>>  .debug_loc contents:
>>>
>>>  .debug_loc.dwo contents:
>>>
>>>  .debug_frame contents:
>>>
>>>  00000000 00000014 ffffffff CIE
>>>    Version:               3
>>>    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=00000000...00000019
>>>    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=00000020...00000063
>>>    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:
>>>
>>>  .debug_line contents:
>>>  Line table prologue:
>>>      total_length: 0x0000003b
>>>           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
>>>  ------------------ ------ ------ ------ --- ------------- -------------
>>>  0x0000000000000000      3      0      1   0             0  is_stmt
>>>  0x0000000000000008      4      0      1   0             0  is_stmt
>>> prologue_end
>>>  0x0000000000000011      5      0      1   0             0  is_stmt
>>>  0x0000000000000020      8      0      1   0             0  is_stmt
>>>  0x000000000000002b      9      0      1   0             0  is_stmt
>>> prologue_end
>>>  0x0000000000000039     10      0      1   0             0  is_stmt
>>>  0x000000000000004b     11      0      1   0             0  is_stmt
>>>  0x0000000000000058     12      0      1   0             0  is_stmt
>>>  0x0000000000000063     12      0      1   0             0  is_stmt
>>> end_sequence
>>>
>>>  .debug_line.dwo contents:
>>>
>>>  .debug_str contents:
>>> -0x00000000: "clang version 3.6.0 (218128)"
>>> +0x00000000: "clang version 3.6.0 (218129)"
>>>  0x0000001d: "<stdin>"
>>>  0x00000025: "/Users/kuba/llvm-tot-cmake-release"
>>> -0x00000048: "f"
>>> -0x0000004a: "main"
>>>
>>>  .debug_ranges contents:
>>>
>>>  .debug_pubnames contents:
>>>
>>>  .debug_pubtypes contents:
>>>
>>>  .debug_gnu_pubnames contents:
>>>
>>>  .debug_gnu_pubtypes contents:
>>>  $
>>>
>>>
>>> Kuba
>>>
>>>
>>>
>>> On Thu, Sep 25, 2014 at 1:42 PM, David Blaikie <dblaikie at gmail.com>
>>> wrote:
>>>
>>>>
>>>>
>>>> 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/cd38d34c/attachment.html>


More information about the llvm-commits mailing list