<div dir="ltr">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.<div><br></div><div><div>$ cat a.c</div><div>#include <stdio.h></div><div><br></div><div>int f() {</div><div>        printf("X");</div><div>        return 0;</div><div>}</div><div><br></div><div>int main() {</div><div>        printf("1");</div><div>        printf("2");</div><div>        printf("3");</div><div>}</div><div>$ clang a.c -o a.out -gline-tables-only</div><div>$ nm a.out</div><div>0000000100000000 T __mh_execute_header</div><div>0000000100000f00 T _f</div><div>0000000100000f30 T _main</div><div>                 U _printf</div><div>                 U dyld_stub_binder</div><div>$ echo "a.out 0x0000000100000f00" | ./bin/llvm-symbolizer </div><div>f</div><div>/Users/kuba/llvm-tot-cmake-release/a.c:3:0</div><div>$ echo "a.out 0x0000000100000f18" | ./bin/llvm-symbolizer </div><div>f</div><div>/Users/kuba/llvm-tot-cmake-release/a.c:5:2</div><div>$ ./bin/llvm-dwarfdump -debug-dump=line a.out.dSYM/Contents/Resources/DWARF/a.out</div><div>a.out.dSYM/Contents/Resources/DWARF/a.out:      file format Mach-O 64-bit x86-64</div><div>.debug_line contents:</div><div>Line table prologue:</div><div>    total_length: 0x00000052</div><div>         version: 2</div><div> prologue_length: 0x0000001a</div><div> min_inst_length: 1</div><div> default_is_stmt: 1</div><div>       line_base: -5</div><div>      line_range: 14</div><div>     opcode_base: 13</div><div>standard_opcode_lengths[DW_LNS_copy] = 0</div><div>standard_opcode_lengths[DW_LNS_advance_pc] = 1</div><div>standard_opcode_lengths[DW_LNS_advance_line] = 1</div><div>standard_opcode_lengths[DW_LNS_set_file] = 1</div><div>standard_opcode_lengths[DW_LNS_set_column] = 1</div><div>standard_opcode_lengths[DW_LNS_negate_stmt] = 0</div><div>standard_opcode_lengths[DW_LNS_set_basic_block] = 0</div><div>standard_opcode_lengths[DW_LNS_const_add_pc] = 0</div><div>standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1</div><div>standard_opcode_lengths[DW_LNS_set_prologue_end] = 0</div><div>standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0</div><div>standard_opcode_lengths[DW_LNS_set_isa] = 1</div><div>                Dir  Mod Time   File Len   File Name</div><div>                ---- ---------- ---------- ---------------------------</div><div>file_names[  1]    0 0x00000000 0x00000000 a.c</div><div>Address            Line   Column File   ISA Discriminator Flags</div><div>------------------ ------ ------ ------ --- ------------- -------------</div><div>0x0000000100000f00      3      0      1   0             0  is_stmt</div><div>0x0000000100000f0f      4      2      1   0             0  is_stmt prologue_end</div><div>0x0000000100000f18      5      2      1   0             0  is_stmt</div><div>0x0000000100000f23      5      2      1   0             0  is_stmt end_sequence</div><div>0x0000000100000f30      8      0      1   0             0  is_stmt</div><div>0x0000000100000f3f      9      2      1   0             0  is_stmt prologue_end</div><div>0x0000000100000f4d     10      2      1   0             0  is_stmt</div><div>0x0000000100000f5e     11      2      1   0             0  is_stmt</div><div>0x0000000100000f6a     12      1      1   0             0  is_stmt</div><div>0x0000000100000f75     12      1      1   0             0  is_stmt end_sequence</div><div><br></div><div>$ ./bin/clang a.c -o a.out -gline-tables-only</div><div>warning: no debug symbols in executable (-arch x86_64)</div><div>$ echo "a.out 0x0000000100000f00" | ./bin/llvm-symbolizer </div><div>f</div><div>??:0:0</div><div>$ echo "a.out 0x0000000100000f18" | ./bin/llvm-symbolizer </div><div>f</div><div>??:0:0</div><div>$ ./bin/llvm-dwarfdump -debug-dump=line a.out.dSYM/Contents/Resources/DWARF/a.out</div><div>a.out.dSYM/Contents/Resources/DWARF/a.out:      file format Mach-O 64-bit x86-64</div><div><br></div><div><br></div><div>.debug_line contents:</div><div>$</div></div><div><br></div><div>Kuba</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 24, 2014 at 12:10 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Wed, Sep 24, 2014 at 12:08 PM, Kuba Brecka <span dir="ltr"><<a href="mailto:kuba.brecka@gmail.com" target="_blank">kuba.brecka@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>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:</div></div></blockquote></span><div><br>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.<br> </div><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div>FAIL: AddressSanitizer32 :: TestCases/use-after-free.cc (222 of 460)</div></div><div><div>******************** TEST 'AddressSanitizer32 :: TestCases/use-after-free.cc' FAILED ********************</div></div><div><div>Script:</div></div><div><div>--</div></div><div><div>/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</div></div><div><div>/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</div></div><div><div>/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</div></div><div><div>/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</div></div><div><div>--</div></div><div><div>Exit Code: 1</div></div><div><div><br></div></div><div><div>Command Output (stdout):</div></div><div><div>--</div></div><div><div>warning: no debug symbols in executable (-arch i386)</div></div><div><div><br></div></div><div><div>--</div></div><div><div>Command Output (stderr):</div></div><div><div>--</div></div><div><div>/Users/kuba/llvm-tot/projects/compiler-rt/test/asan/TestCases/use-after-free.cc:15:12: error: expected string not found in input</div></div><div><div> // CHECK: {{ #0 0x.* in main .*use-after-free.cc:}}[[@LINE-4]]</div></div><div><div>           ^</div></div><div><div><stdin>:4:2: note: scanning from here</div></div><div><div> #0 0x75e5f in main (/Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp+0x1e5f)</div></div><div><div> ^</div></div><div><div><stdin>:4:2: note: with expression "@LINE-4" equal to "11"</div></div><div><div> #0 0x75e5f in main (/Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp+0x1e5f)</div></div><div><div> ^</div></div><div><div><stdin>:4:97: note: possible intended match here</div></div><div><div> #0 0x75e5f in main (/Users/kuba/llvm-tot-cmake-release/projects/compiler-rt/test/asan/32bitConfig/TestCases/Output/use-after-free.cc.tmp+0x1e5f)</div></div></blockquote><span><font color="#888888"><div><br></div><div>Kuba</div></font></span><div><div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: dblaikie<br>Date: Fri Sep 19 12:03:16 2014<br>New Revision: 218129<br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=218129&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=218129&view=rev</a><br>Log:<br>Omit DW_TAG_subprograms for subprograms without inlined subroutines when producing -gmlt data<br>To reduce the size of -gmlt data, skip the subprograms without any<br>inlined subroutines. Since we've now got the ability to make these<br>determinations in the backend (funnily enough - we added the flag so we<br>wouldn't produce ranges under -gmlt, but with this change we use the<br>flag, but go back to producing ranges under -gmlt).<br>Instead, just produce CU ranges to inform the consumer which parts of<br>the code are described by this CU's line table. Tools could inspect the<br>line table directly to compute the range, but the CU ranges only seem to<br>be about 0.5% of object/executable size, so I'm not too worried about<br>teaching llvm-symbolizer that trick just yet - it's certainly a possible<br>piece of future work.<br>Update an llvm-symbolizer test just to demonstrate that this schema is<br>acceptable there (if it wasn't, the compiler-rt tests would catch this,<br>but good to have an in-llvm-tree test for llvm-symbolizer's behavior<br>here)<br>Building the clang binary with -gmlt with this patch reduces the total<br>size of object files by 5.1% (5.56% without ranges) without compression<br>and the executable by 4.37% (4.75% without ranges).<br>Modified:<br>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp<br>    llvm/trunk/test/DebugInfo/Inputs/dwarfdump-inl-test.elf-x86-64<br>    llvm/trunk/test/DebugInfo/gmlt.ll<br>    llvm/trunk/test/DebugInfo/llvm-symbolizer.test</blockquote></div></div></div>
</blockquote></div></div></div><br></div></div>
</blockquote></div><br></div>