Send me the file offline. I will help narrow it down for you.

> On Oct 17, 2016, at 9:58 AM, Ted Woodward <ted.woodw...@codeaurora.org> wrote:
> 
> What's the compiler bug? I see a DW_AT_subprogram entry for main_gdbserver, 
> and linetable entries for the addresses of main_gdbserver. 
> 
> I've found that getting DWARF compiler bugs fixed can be...challenging. The 
> better I can narrow it down for the compiler engineers, the better. 
> 
> This is clang that was ToT about 2 months ago, BTW.
> 
> --
> Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a 
> Linux Foundation Collaborative Project
> 
> 
>> -----Original Message-----
>> From: Greg Clayton [mailto:gclay...@apple.com]
>> Sent: Monday, October 17, 2016 11:03 AM
>> To: Ted Woodward <ted.woodw...@codeaurora.org>
>> Cc: LLDB <lldb-dev@lists.llvm.org>
>> Subject: Re: [lldb-dev] LLDB can't find source...but it can?
>> 
>> This is a compiler bug.
>> 
>>> On Oct 14, 2016, at 12:14 PM, Ted Woodward
>> <ted.woodw...@codeaurora.org> wrote:
>>> 
>>>> Probably a debug info problem. Before we know to look for addresses
>>>> within a compile unit, the compile unit must claim it has a function
>>>> that contains this address. So check the DWARF in the compile unit
>>>> that contains 0x114720 (not sure if there is a lookup by address in
>>>> llmv-dwarfdump?) and make sure there is a DW_TAG_subprogram that
>> contains this address.
>>>> 
>>>> Greg
>>> 
>>> I'm changing gears here - I'm having the same issue with lldb-server, and
>> it's smaller, so I'm looking at that.
>>> 
>>> main calls main_gdbserver, which is in tools/lldb-server/lldb-
>> gdbserver.cpp, and has no line table info, according to lldb's list comm 
>> info.
>>> 
>>> 4: name = 'main_gdbserver', locations = 2
>>> 4.1: where = lldb-server`main_gdbserver(int, char**) + 32, address =
>>> 0x00048964, unresolved, hit count = 0
>>> 4.2: where = lldb-server`main_gdbserver(int, char**) + 32, address =
>>> 0x00048964, unresolved, hit count = 0
>>> 
>>> (lldb) list 0x48964
>>> error: address resolves to lldb-server[0x0000000000048964], but there is no
>> line table information available for this address.
>>> 
>>> 
>>> main_gdbserver has a DW_AT_subprogram entry:
>>> 0x000306a4:   DW_TAG_subprogram [106] *
>>>               DW_AT_low_pc [DW_FORM_addr]   (0x0000000000048944)
>>>               DW_AT_high_pc [DW_FORM_data4] (0x00000da4)
>>>               DW_AT_frame_base [DW_FORM_exprloc]    (<0x1> 6e )
>>>               DW_AT_linkage_name [DW_FORM_strp]     (
>> .debug_str[0x0006577b] = "_Z14main_gdbserveriPPc")
>>>               DW_AT_name [DW_FORM_strp]     ( .debug_str[0x00065792] =
>> "main_gdbserver")
>>>               DW_AT_decl_file [DW_FORM_data1]
>>      ("/local/mnt/workspace/ted/linux/llvm/tools/lldb/tools/lldb-
>> server/lldb-gdbserver.cpp")
>>>               DW_AT_decl_line [DW_FORM_data2]       (326)
>>>               DW_AT_type [DW_FORM_ref4]     (cu + 0x003b => {0x00011c13})
>>>               DW_AT_external [DW_FORM_flag_present] (true)
>>> 
>>> And a linetable entry:
>>> 0x0000000000048944    327      0      1   0             0  is_stmt
>>> 0x0000000000048964    328    11      1   0             0  is_stmt 
>>> prologue_end
>>> 
>>> 
>>> 
>>> --
>>> Qualcomm Innovation Center, Inc.
>>> The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
>>> a Linux Foundation Collaborative Project
>>> 
>>>> -----Original Message-----
>>>> From: Greg Clayton [mailto:gclay...@apple.com]
>>>> Sent: Tuesday, October 11, 2016 1:34 PM
>>>> To: Ted Woodward <ted.woodw...@codeaurora.org>
>>>> Cc: LLDB <lldb-dev@lists.llvm.org>
>>>> Subject: Re: [lldb-dev] LLDB can't find source...but it can?
>>>> 
>>>> 
>>>>> On Oct 7, 2016, at 4:53 PM, Ted Woodward via lldb-dev <lldb-
>>>> d...@lists.llvm.org> wrote:
>>>>> 
>>>>> Background – I’m working on getting LLDB to run on Hexagon Linux,
>>>>> built
>>>> with an LLVM toolchain. We’re using libc++ and MUSL. The loader is a
>>>> bit squirrelly right now, so I’ve built LLDB statically.
>>>>> 
>>>>> I’ve got full source debugging in the driver, but when I step into
>>>> SBDebugger::Create, I don’t have any source. I’ve got symbols:
>>>>> (lldb) bt
>>>>> * thread #1: tid = 1, 0x00114730 lldb`lldb::SBDebugger::Create(bool)
>>>>> + 16,
>>>> stop reason = breakpoint 2.1
>>>>> * frame #0: 0x00114730 lldb`lldb::SBDebugger::Create(bool) + 16
>>>>>   frame #1: 0x000001dc lldb`Driver::Driver(this=0x7ffefc50) + 124
>>>>> at
>>>> Driver.cpp:150
>>>>>   frame #2: 0x00006aa0 lldb`main(argc=1, argv=0x7ffefd34) + 240 at
>>>> Driver.cpp:1350
>>>>>   frame #3: 0x04744384 lldb`__libc_start_main + 48
>>>>> 
>>>>> list SBDebugger::Create fails, but list SBDebugger::Create(bool)
>>>>> gives me
>>>> source.
>>>>> (lldb) list SBDebugger::Create
>>>>> (lldb) list SBDebugger::Create(bool)
>>>>> File:
>>>> 
>> \local\mnt\workspace\ted\linux\llvm\tools\lldb\source\API\SBDebugger.
>>>> cp
>>>> p
>>>>>  172      return SBDebugger::Create(false, nullptr, nullptr);
>>>>>  173  }
>>>>>  174
>>>>>  175  SBDebugger
>>>>>  176  SBDebugger::Create(bool source_init_files)
>>>>>  177  {
>>>>>  178      return SBDebugger::Create (source_init_files, nullptr, nullptr);
>>>>>  179  }
>>>>>  180
>>>>>  181  SBDebugger
>>>>>  182  SBDebugger::Create(bool source_init_files,
>>>>> lldb::LogOutputCallback
>>>> callback, void *baton)
>>>>>  183
>>>>> 
>>>>> Finally, I try to list based on the address of the function:
>>>>> (lldb) list 0x114720
>>>>> error: address resolves to lldb[0x0000000000114720], but there is no
>>>>> line
>>>> table information available for this address.
>>>>> 
>>>>> But there is line table information for 0x114720 (from llvm-dwarfdump):
>>>>> 0x0000000000114720    177      0     80   0             0  is_stmt
>>>>> 0x0000000000114730    178     32     80   0             0  is_stmt 
>>>>> prologue_end
>>>>> 0x0000000000114734    178     12     80   0             0
>>>>> 0x0000000000114754    178      5     80   0             0
>>>>> 
>>>>> 
>>>>> 
>>>>> My breakpoint at SBDebugger::Create resolved to prologue_end:
>>>>> (lldb) break list
>>>>> Current breakpoints:
>>>>> 1: name = 'main', locations = 1, resolved = 1, hit count = 1
>>>>> 1.1: where = lldb`main + 32 at Driver.cpp:1335, address =
>>>>> 0x000069d0,
>>>> resolved, hit count = 1
>>>>> 
>>>>> 2: name = 'SBDebugger::Create', locations = 3, resolved = 3, hit
>>>>> count = 1
>>>>> 2.1: where = lldb`lldb::SBDebugger::Create(bool) + 16, address =
>>>> 0x00114730, resolved, hit count = 1
>>>>> 2.2: where = lldb`lldb::SBDebugger::Create() + 8, address =
>>>>> 0x001143c0,
>>>> resolved, hit count = 0
>>>>> 2.3: where = lldb`lldb::SBDebugger::Create(bool, void (*)(char
>>>>> const*,
>>>> void*), void*) + 40, address = 0x00114404, resolved, hit count = 0
>>>>> 
>>>>> 
>>>>> So – why can LLDB find the source when I specify the function
>>>>> explicitly, or
>>>> find the line table info when I set a breakpoint, but not when I am
>>>> in the function or list an address?
>>>>> 
>>>> 
>>>> 
>>>>> Ted
>>>>> 
>>>>> --
>>>>> Qualcomm Innovation Center, Inc.
>>>>> The Qualcomm Innovation Center, Inc. is a member of Code Aurora
>>>>> Forum,
>>>> a Linux Foundation Collaborative Project
>>>>> 
>>>>> _______________________________________________
>>>>> lldb-dev mailing list
>>>>> lldb-dev@lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>>> 
>>> 
> 
> 

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to