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

Kuba Brecka kuba.brecka at gmail.com
Thu Sep 25 14:56:28 PDT 2014


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?

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/6f785218/attachment.html>


More information about the llvm-commits mailing list