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