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

David Blaikie dblaikie at gmail.com
Thu Sep 25 14:28:32 PDT 2014


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


More information about the llvm-commits mailing list