[lldb-dev] Breakpoints on inlined functions described by DW_AT_ranges

Jim Ingham via lldb-dev lldb-dev at lists.llvm.org
Fri Sep 4 12:20:10 PDT 2015

Certainly a bug.  This bit:

        if (inlined_die)
            Block &function_block = sc.function->GetBlock (true);
            sc.block = function_block.FindBlockByID (inlined_die.GetID());
            if (sc.block == NULL)
                sc.block = function_block.FindBlockByID (inlined_die.GetOffset());
            if (sc.block == NULL || sc.block->GetStartAddress (addr) == false)

from SymbolFileDwarf::ResolveFunction is most likely responsible.  I don't remember offhand how the blocks deal with the fact that this one die actually represents multiple blocks, but it's going to be something related to that.  

If you want to have a look, that would be great, otherwise file a bug and we can take a look when we get some free time.


> On Sep 4, 2015, at 12:05 PM, Keno Fischer via lldb-dev <lldb-dev at lists.llvm.org> wrote:
> I'm trying to set a breakpoint (using `b jl_apply`) on a function (jl_apply) that is inlined in a number of places. This generally works fine, but I have noticed that in certain cases LLDB fails to set a breakpoint even though when I step through manually, it does know which function the code belongs to. Investigating further, I have found that the difference comes from whether the inlined subroutine is described via DW_AT_low_pc or via DW_AT_ranges, so e.g.
> 0x0000f6c8:                   DW_TAG_inlined_subroutine [42] *
>                                 DW_AT_abstract_origin [DW_FORM_ref4]    (cu + 0x22e7 => {0x0000d394} "jl_apply")
>                                 DW_AT_low_pc [DW_FORM_addr]     (0x000000000000f768)
>                                 DW_AT_high_pc [DW_FORM_addr]    (0x000000000000f776)
>                                 DW_AT_call_file [DW_FORM_data1] ("/Users/kfischer/Projects/julia-testpatch/src/gf.c")
>                                 DW_AT_call_line [DW_FORM_data1] (34)
> will get a  breakpoint while 
> 0x0000f6ee:         DW_TAG_inlined_subroutine [53] *
>                       DW_AT_abstract_origin [DW_FORM_ref4]      (cu + 0x22e7 => {0x0000d394} "jl_apply")
>                       DW_AT_ranges [DW_FORM_data4]      (0x0000b790
>                          [0x000000000000f785 - 0x000000000000f788)
>                          [0x000000000000f79c - 0x000000000000f7b8))
>                       DW_AT_call_file [DW_FORM_data1]   ("/Users/kfischer/Projects/julia-testpatch/src/gf.c")
>                       DW_AT_call_line [DW_FORM_data2]   (1668)
> will not. Is this the intended behavior or a bug? If it's a bug, any ideas where to look to try to fix it?
> Thanks,
> Keno
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

More information about the lldb-dev mailing list