* [PATCH] Lookup the JIT descriptor symbol first to avoid finding the PLT entry of the breakpoint in the wrong object file. @ 2017-01-26 20:24 Yichao Yu 2017-01-26 20:31 ` Yichao Yu 0 siblings, 1 reply; 5+ messages in thread From: Yichao Yu @ 2017-01-26 20:24 UTC (permalink / raw) To: gdb; +Cc: Yichao Yu Fix 20633 --- gdb/jit.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/gdb/jit.c b/gdb/jit.c index 158d6d8..d6eb800 100644 --- a/gdb/jit.c +++ b/gdb/jit.c @@ -1051,18 +1051,21 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, if (ps_data->objfile == NULL) { /* Lookup the registration symbol. If it is missing, then we - assume we are not attached to a JIT. */ - reg_symbol = lookup_minimal_symbol_and_objfile (jit_break_name); - if (reg_symbol.minsym == NULL - || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) - return 1; + assume we are not attached to a JIT. + Lookup the descriptor first since looking up the breakpoint might + return a PLT entry in the wrong file. */ - desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL, - reg_symbol.objfile); + desc_symbol = lookup_minimal_symbol_and_objfile (jit_descriptor_name); if (desc_symbol.minsym == NULL || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0) return 1; + reg_symbol = lookup_minimal_symbol (jit_break_name, NULL, + desc_symbol.objfile); + if (reg_symbol.minsym == NULL + || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) + return 1; + objf_data = get_jit_objfile_data (reg_symbol.objfile); objf_data->register_code = reg_symbol.minsym; objf_data->descriptor = desc_symbol.minsym; -- 2.10.2 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Lookup the JIT descriptor symbol first to avoid finding the PLT entry of the breakpoint in the wrong object file. 2017-01-26 20:24 [PATCH] Lookup the JIT descriptor symbol first to avoid finding the PLT entry of the breakpoint in the wrong object file Yichao Yu @ 2017-01-26 20:31 ` Yichao Yu 2017-02-06 0:46 ` Yichao Yu 0 siblings, 1 reply; 5+ messages in thread From: Yichao Yu @ 2017-01-26 20:31 UTC (permalink / raw) To: gdb; +Cc: Yichao Yu On Thu, Jan 26, 2017 at 3:24 PM, Yichao Yu <yyc1992@gmail.com> wrote: > Fix 20633 ..... I don't use git send-mail very often and missed the chance to type more comments.... The link to the bug report is https://sourceware.org/bugzilla/show_bug.cgi?id=20633 . I think ideally the interface should find all the global and local symbols and breakpoint on all of them since there isn't an agreement on who will provide it AFAICT (and for example,a process can load multiple copies of statically linked LLVM each providing a jit debugging interface). However, I'm not really sure what's the right function to use for that and it'll probably be a much bigger change so I went for this smaller change that fixes the original issue. Not sure how this should be tested....... =( > --- > gdb/jit.c | 17 ++++++++++------- > 1 file changed, 10 insertions(+), 7 deletions(-) > > diff --git a/gdb/jit.c b/gdb/jit.c > index 158d6d8..d6eb800 100644 > --- a/gdb/jit.c > +++ b/gdb/jit.c > @@ -1051,18 +1051,21 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, > if (ps_data->objfile == NULL) > { > /* Lookup the registration symbol. If it is missing, then we > - assume we are not attached to a JIT. */ > - reg_symbol = lookup_minimal_symbol_and_objfile (jit_break_name); > - if (reg_symbol.minsym == NULL > - || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) > - return 1; > + assume we are not attached to a JIT. > + Lookup the descriptor first since looking up the breakpoint might > + return a PLT entry in the wrong file. */ > > - desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL, > - reg_symbol.objfile); > + desc_symbol = lookup_minimal_symbol_and_objfile (jit_descriptor_name); > if (desc_symbol.minsym == NULL > || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0) > return 1; > > + reg_symbol = lookup_minimal_symbol (jit_break_name, NULL, > + desc_symbol.objfile); > + if (reg_symbol.minsym == NULL > + || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) > + return 1; > + > objf_data = get_jit_objfile_data (reg_symbol.objfile); > objf_data->register_code = reg_symbol.minsym; > objf_data->descriptor = desc_symbol.minsym; > -- > 2.10.2 > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Lookup the JIT descriptor symbol first to avoid finding the PLT entry of the breakpoint in the wrong object file. 2017-01-26 20:31 ` Yichao Yu @ 2017-02-06 0:46 ` Yichao Yu 2017-02-24 19:01 ` Yichao Yu 0 siblings, 1 reply; 5+ messages in thread From: Yichao Yu @ 2017-02-06 0:46 UTC (permalink / raw) To: gdb; +Cc: Yichao Yu Ping. Can anyone please review this? Or is there a better place to post this? On Thu, Jan 26, 2017 at 3:31 PM, Yichao Yu <yyc1992@gmail.com> wrote: > On Thu, Jan 26, 2017 at 3:24 PM, Yichao Yu <yyc1992@gmail.com> wrote: >> Fix 20633 > > > ..... I don't use git send-mail very often and missed the chance to > type more comments.... > > The link to the bug report is > https://sourceware.org/bugzilla/show_bug.cgi?id=20633 . I think > ideally the interface should find all the global and local symbols and > breakpoint on all of them since there isn't an agreement on who will > provide it AFAICT (and for example,a process can load multiple copies > of statically linked LLVM each providing a jit debugging interface). > However, I'm not really sure what's the right function to use for that > and it'll probably be a much bigger change so I went for this smaller > change that fixes the original issue. > > Not sure how this should be tested....... =( > >> --- >> gdb/jit.c | 17 ++++++++++------- >> 1 file changed, 10 insertions(+), 7 deletions(-) >> >> diff --git a/gdb/jit.c b/gdb/jit.c >> index 158d6d8..d6eb800 100644 >> --- a/gdb/jit.c >> +++ b/gdb/jit.c >> @@ -1051,18 +1051,21 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, >> if (ps_data->objfile == NULL) >> { >> /* Lookup the registration symbol. If it is missing, then we >> - assume we are not attached to a JIT. */ >> - reg_symbol = lookup_minimal_symbol_and_objfile (jit_break_name); >> - if (reg_symbol.minsym == NULL >> - || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) >> - return 1; >> + assume we are not attached to a JIT. >> + Lookup the descriptor first since looking up the breakpoint might >> + return a PLT entry in the wrong file. */ >> >> - desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL, >> - reg_symbol.objfile); >> + desc_symbol = lookup_minimal_symbol_and_objfile (jit_descriptor_name); >> if (desc_symbol.minsym == NULL >> || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0) >> return 1; >> >> + reg_symbol = lookup_minimal_symbol (jit_break_name, NULL, >> + desc_symbol.objfile); >> + if (reg_symbol.minsym == NULL >> + || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) >> + return 1; >> + >> objf_data = get_jit_objfile_data (reg_symbol.objfile); >> objf_data->register_code = reg_symbol.minsym; >> objf_data->descriptor = desc_symbol.minsym; >> -- >> 2.10.2 >> ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Lookup the JIT descriptor symbol first to avoid finding the PLT entry of the breakpoint in the wrong object file. 2017-02-06 0:46 ` Yichao Yu @ 2017-02-24 19:01 ` Yichao Yu 2017-03-09 12:25 ` Yichao Yu 0 siblings, 1 reply; 5+ messages in thread From: Yichao Yu @ 2017-02-24 19:01 UTC (permalink / raw) To: gdb; +Cc: Yichao Yu Ping again. On Sun, Feb 5, 2017 at 7:46 PM, Yichao Yu <yyc1992@gmail.com> wrote: > Ping. Can anyone please review this? Or is there a better place to post this? > > On Thu, Jan 26, 2017 at 3:31 PM, Yichao Yu <yyc1992@gmail.com> wrote: >> On Thu, Jan 26, 2017 at 3:24 PM, Yichao Yu <yyc1992@gmail.com> wrote: >>> Fix 20633 >> >> >> ..... I don't use git send-mail very often and missed the chance to >> type more comments.... >> >> The link to the bug report is >> https://sourceware.org/bugzilla/show_bug.cgi?id=20633 . I think >> ideally the interface should find all the global and local symbols and >> breakpoint on all of them since there isn't an agreement on who will >> provide it AFAICT (and for example,a process can load multiple copies >> of statically linked LLVM each providing a jit debugging interface). >> However, I'm not really sure what's the right function to use for that >> and it'll probably be a much bigger change so I went for this smaller >> change that fixes the original issue. >> >> Not sure how this should be tested....... =( >> >>> --- >>> gdb/jit.c | 17 ++++++++++------- >>> 1 file changed, 10 insertions(+), 7 deletions(-) >>> >>> diff --git a/gdb/jit.c b/gdb/jit.c >>> index 158d6d8..d6eb800 100644 >>> --- a/gdb/jit.c >>> +++ b/gdb/jit.c >>> @@ -1051,18 +1051,21 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, >>> if (ps_data->objfile == NULL) >>> { >>> /* Lookup the registration symbol. If it is missing, then we >>> - assume we are not attached to a JIT. */ >>> - reg_symbol = lookup_minimal_symbol_and_objfile (jit_break_name); >>> - if (reg_symbol.minsym == NULL >>> - || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) >>> - return 1; >>> + assume we are not attached to a JIT. >>> + Lookup the descriptor first since looking up the breakpoint might >>> + return a PLT entry in the wrong file. */ >>> >>> - desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL, >>> - reg_symbol.objfile); >>> + desc_symbol = lookup_minimal_symbol_and_objfile (jit_descriptor_name); >>> if (desc_symbol.minsym == NULL >>> || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0) >>> return 1; >>> >>> + reg_symbol = lookup_minimal_symbol (jit_break_name, NULL, >>> + desc_symbol.objfile); >>> + if (reg_symbol.minsym == NULL >>> + || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) >>> + return 1; >>> + >>> objf_data = get_jit_objfile_data (reg_symbol.objfile); >>> objf_data->register_code = reg_symbol.minsym; >>> objf_data->descriptor = desc_symbol.minsym; >>> -- >>> 2.10.2 >>> ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Lookup the JIT descriptor symbol first to avoid finding the PLT entry of the breakpoint in the wrong object file. 2017-02-24 19:01 ` Yichao Yu @ 2017-03-09 12:25 ` Yichao Yu 0 siblings, 0 replies; 5+ messages in thread From: Yichao Yu @ 2017-03-09 12:25 UTC (permalink / raw) To: gdb; +Cc: Yichao Yu, Paul Pluzhnikov, Pedro Alves And ping again. On Fri, Feb 24, 2017 at 2:00 PM, Yichao Yu <yyc1992@gmail.com> wrote: > Ping again. > > On Sun, Feb 5, 2017 at 7:46 PM, Yichao Yu <yyc1992@gmail.com> wrote: >> Ping. Can anyone please review this? Or is there a better place to post this? >> >> On Thu, Jan 26, 2017 at 3:31 PM, Yichao Yu <yyc1992@gmail.com> wrote: >>> On Thu, Jan 26, 2017 at 3:24 PM, Yichao Yu <yyc1992@gmail.com> wrote: >>>> Fix 20633 >>> >>> >>> ..... I don't use git send-mail very often and missed the chance to >>> type more comments.... >>> >>> The link to the bug report is >>> https://sourceware.org/bugzilla/show_bug.cgi?id=20633 . I think >>> ideally the interface should find all the global and local symbols and >>> breakpoint on all of them since there isn't an agreement on who will >>> provide it AFAICT (and for example,a process can load multiple copies >>> of statically linked LLVM each providing a jit debugging interface). >>> However, I'm not really sure what's the right function to use for that >>> and it'll probably be a much bigger change so I went for this smaller >>> change that fixes the original issue. >>> >>> Not sure how this should be tested....... =( >>> >>>> --- >>>> gdb/jit.c | 17 ++++++++++------- >>>> 1 file changed, 10 insertions(+), 7 deletions(-) >>>> >>>> diff --git a/gdb/jit.c b/gdb/jit.c >>>> index 158d6d8..d6eb800 100644 >>>> --- a/gdb/jit.c >>>> +++ b/gdb/jit.c >>>> @@ -1051,18 +1051,21 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, >>>> if (ps_data->objfile == NULL) >>>> { >>>> /* Lookup the registration symbol. If it is missing, then we >>>> - assume we are not attached to a JIT. */ >>>> - reg_symbol = lookup_minimal_symbol_and_objfile (jit_break_name); >>>> - if (reg_symbol.minsym == NULL >>>> - || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) >>>> - return 1; >>>> + assume we are not attached to a JIT. >>>> + Lookup the descriptor first since looking up the breakpoint might >>>> + return a PLT entry in the wrong file. */ >>>> >>>> - desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL, >>>> - reg_symbol.objfile); >>>> + desc_symbol = lookup_minimal_symbol_and_objfile (jit_descriptor_name); >>>> if (desc_symbol.minsym == NULL >>>> || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0) >>>> return 1; >>>> >>>> + reg_symbol = lookup_minimal_symbol (jit_break_name, NULL, >>>> + desc_symbol.objfile); >>>> + if (reg_symbol.minsym == NULL >>>> + || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) >>>> + return 1; >>>> + >>>> objf_data = get_jit_objfile_data (reg_symbol.objfile); >>>> objf_data->register_code = reg_symbol.minsym; >>>> objf_data->descriptor = desc_symbol.minsym; >>>> -- >>>> 2.10.2 >>>> ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-03-09 12:25 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-01-26 20:24 [PATCH] Lookup the JIT descriptor symbol first to avoid finding the PLT entry of the breakpoint in the wrong object file Yichao Yu 2017-01-26 20:31 ` Yichao Yu 2017-02-06 0:46 ` Yichao Yu 2017-02-24 19:01 ` Yichao Yu 2017-03-09 12:25 ` Yichao Yu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox