Re: JIT code debugging doesn't work with dynamically linked LLVM

Yichao Yu <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAMvDr+RzwHjtjKrFp1WcrJbmVSwUJwa-pe2Y72YT6+1XqeMXZg@mail.gmail.com>
On Mon, Sep 19, 2016 at 11:51 AM, Yichao Yu <[email protected]> wrote:
> The symptom is that when we switch to dynamically linked LLVM (shared
> library, instead of static library), the JIT code debugging doesn't
> work anymore.


I've posted here since I somehow thought the mailing list is used for
bug tracking. I've just realized / remembered that there's an actual
bug tracker so I've posted it there instead.

https://sourceware.org/bugzilla/show_bug.cgi?id=20633

>
> I've just traced down the issue to this piece of code in
> `jit_breakpoint_re_set_internal`
>
> ```
>       reg_symbol = lookup_minimal_symbol_and_objfile (jit_break_name);
>       if (reg_symbol.minsym == NULL
>       || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0)
>     return 1;
>
>       desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL,
>                        reg_symbol.objfile);
>       if (desc_symbol.minsym == NULL
>       || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0)
>     return 1;
> ```
>
> The issue is that `lookup_minimal_symbol_and_objfile (jit_break_name)`
> returns the plt entry in our code that links to LLVM so obviously the
> lookup for the desc_symbol cannot success since there's no plt entry
> for it..... (and even if it does, the breakpoint is still set on the
> wrong function)
>
> This can probably be fixed by skipping plt entries in the first symbol
> lookup (no patch attached since I don't know how to do that in gdb).
> It might also be nice if multiple symbols presented in different
> libraries can be supported to.
>
> Yichao Yu
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.