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

David Blaikie dblaikie at gmail.com
Thu Sep 25 16:19:43 PDT 2014


On Thu, Sep 25, 2014 at 4:07 PM, Greg Clayton <gclayton at apple.com> wrote:

> Yes dsymutil should be fixed. We have a radar for this:
>
> <rdar://problem/18442575> TOT clang: using -gline-table-only produces no
> line numbers
>
> But the reason it is failing is because the clang symbolizer is only
> looking at debug info for the function bounds. It should be modified to
> also look at symbols from the symbol table.
>

Hmm - I'm confused then. The llvm-symbolizer knows how to look in the
symbol table, but it'll only consult the line table if it's present and the
CU's ranges (either ranges on the compile_unit itself, or the ranegs of the
subprograms within it) covers the instruction.

It'd be nice to remove that latter restriction (it'd save another 8% on
object file size in -O0 -gmlt) if possible. That'd require the symbolizer
to walk the line table to build up the address ranges, though, which might
be a performance problem.


>
> Greg
>
>
> > On Sep 25, 2014, at 3:49 PM, Adrian Prantl <aprantl at apple.com> wrote:
> >
> > Hi Greg,
> >
> > This commit causes testcases on Darwin to fail, and appears the reason
> for this is that dsymutil is skipping compile units that do not have any
> subprograms in it (see Kuba&David’s analysis below). Is that the case? If
> so, would it make sense to change that behavior in dsymutil or should we
> rather disable this optimization on Darwin?
> >
> > -- adrian
> >
> > 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).
> >
> >
> >
> >> On Sep 25, 2014, at 3:07 PM, David Blaikie <dblaikie at gmail.com> wrote:
> >>
> >>
> >>
> >> 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
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> llvm-commits mailing list
> >> llvm-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140925/cd15bd73/attachment.html>


More information about the llvm-commits mailing list