* core regs vs. proc-service regs mess
@ 2006-04-05 7:07 David S. Miller
2006-04-05 8:25 ` Mark Kettenis
0 siblings, 1 reply; 7+ messages in thread
From: David S. Miller @ 2006-04-05 7:07 UTC (permalink / raw)
To: drow; +Cc: gdb
In trying to get core files working properly again on Linux/Sparc and
Daniel I now see the problems you referred to the other day.
What we have currently on Linux/Sparc is:
1) ptrace() interfaces have one layout for regsets
2) ELF core files store regsets in a different
format
Now proc-service.c wants fill_gregset() et al. to
provide things in the ptrace() style layout, that is
what libthread_db expects under Linux.
But linux_nat_make_corefile_notes() expects the fill_gregset()
et al. to provide ELF core file format registers.
This is completely contradictory, and I don't have any idea how to
cleanly resolve this outside of duplicating the entirety of
linux_nat_make_corefile_notes() on Linux/Sparc which is silly.
Daniel any ideas? :-) Maybe we can have a "linux_tdep" struct where we
can place a "->to_fill_core_gregset()" type method or similar?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: core regs vs. proc-service regs mess
2006-04-05 7:07 core regs vs. proc-service regs mess David S. Miller
@ 2006-04-05 8:25 ` Mark Kettenis
2006-04-05 13:23 ` Daniel Jacobowitz
0 siblings, 1 reply; 7+ messages in thread
From: Mark Kettenis @ 2006-04-05 8:25 UTC (permalink / raw)
To: David S. Miller; +Cc: drow, gdb
>
> In trying to get core files working properly again on Linux/Sparc and
> Daniel I now see the problems you referred to the other day.
>
> What we have currently on Linux/Sparc is:
>
> 1) ptrace() interfaces have one layout for regsets
> 2) ELF core files store regsets in a different
> format
>
> Now proc-service.c wants fill_gregset() et al. to
> provide things in the ptrace() style layout, that is
> what libthread_db expects under Linux.
>
> But linux_nat_make_corefile_notes() expects the fill_gregset()
> et al. to provide ELF core file format registers.
Hi Dave,
Yes this is annoying, and ultimately caused because the ptrace(2) and
core(5) interfaces on Linux were never properly designed (heck they're not
even fully documented) and inconsistent between the different hardware
platforms. For most platforms the ptrace(2) and core(5) layout are the
same, but not on sparc (presumably because ptrace(2) on sparc tries to
be compatible with SunOS/Solaris).
> This is completely contradictory, and I don't have any idea how to
> cleanly resolve this outside of duplicating the entirety of
> linux_nat_make_corefile_notes() on Linux/Sparc which is silly.
>
> Daniel any ideas? :-) Maybe we can have a "linux_tdep" struct where we
> can place a "->to_fill_core_gregset()" type method or similar?
What really should happen is to convert linux_nat_make_corefile_notes() to
use the regset_from_core_section() interface. Unfortunately that is quite
a bit of work since most Linux targets don't provide that interface yet.
Mark
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: core regs vs. proc-service regs mess
2006-04-05 8:25 ` Mark Kettenis
@ 2006-04-05 13:23 ` Daniel Jacobowitz
2006-04-06 1:10 ` David S. Miller
2006-04-06 13:15 ` David S. Miller
0 siblings, 2 replies; 7+ messages in thread
From: Daniel Jacobowitz @ 2006-04-05 13:23 UTC (permalink / raw)
To: Mark Kettenis; +Cc: David S. Miller, gdb
On Wed, Apr 05, 2006 at 10:25:21AM +0200, Mark Kettenis wrote:
> > This is completely contradictory, and I don't have any idea how to
> > cleanly resolve this outside of duplicating the entirety of
> > linux_nat_make_corefile_notes() on Linux/Sparc which is silly.
> >
> > Daniel any ideas? :-) Maybe we can have a "linux_tdep" struct where we
> > can place a "->to_fill_core_gregset()" type method or similar?
>
> What really should happen is to convert linux_nat_make_corefile_notes() to
> use the regset_from_core_section() interface. Unfortunately that is quite
> a bit of work since most Linux targets don't provide that interface yet.
Shouldn't this be pretty simple: gdbarch_regset_from_core_section_p?
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: core regs vs. proc-service regs mess
2006-04-05 13:23 ` Daniel Jacobowitz
@ 2006-04-06 1:10 ` David S. Miller
2006-04-06 13:15 ` David S. Miller
1 sibling, 0 replies; 7+ messages in thread
From: David S. Miller @ 2006-04-06 1:10 UTC (permalink / raw)
To: drow; +Cc: mark.kettenis, gdb
From: Daniel Jacobowitz <drow@false.org>
Date: Wed, 5 Apr 2006 09:23:00 -0400
> On Wed, Apr 05, 2006 at 10:25:21AM +0200, Mark Kettenis wrote:
> > > This is completely contradictory, and I don't have any idea how to
> > > cleanly resolve this outside of duplicating the entirety of
> > > linux_nat_make_corefile_notes() on Linux/Sparc which is silly.
> > >
> > > Daniel any ideas? :-) Maybe we can have a "linux_tdep" struct where we
> > > can place a "->to_fill_core_gregset()" type method or similar?
> >
> > What really should happen is to convert linux_nat_make_corefile_notes() to
> > use the regset_from_core_section() interface. Unfortunately that is quite
> > a bit of work since most Linux targets don't provide that interface yet.
>
> Shouldn't this be pretty simple: gdbarch_regset_from_core_section_p?
I'll work on converting the Linux/Sparc targets over to the
regset_from_core_section() interface.
Then I'll give the linux_nat_make_corefile_notes() change a
try with the test that Daniel is suggesting here to decide
how to get at the core regs.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: core regs vs. proc-service regs mess
2006-04-05 13:23 ` Daniel Jacobowitz
2006-04-06 1:10 ` David S. Miller
@ 2006-04-06 13:15 ` David S. Miller
2006-04-06 13:38 ` Daniel Jacobowitz
1 sibling, 1 reply; 7+ messages in thread
From: David S. Miller @ 2006-04-06 13:15 UTC (permalink / raw)
To: drow; +Cc: mark.kettenis, gdb
From: Daniel Jacobowitz <drow@false.org>
Date: Wed, 5 Apr 2006 09:23:00 -0400
> On Wed, Apr 05, 2006 at 10:25:21AM +0200, Mark Kettenis wrote:
> > > This is completely contradictory, and I don't have any idea how to
> > > cleanly resolve this outside of duplicating the entirety of
> > > linux_nat_make_corefile_notes() on Linux/Sparc which is silly.
> > >
> > > Daniel any ideas? :-) Maybe we can have a "linux_tdep" struct where we
> > > can place a "->to_fill_core_gregset()" type method or similar?
> >
> > What really should happen is to convert linux_nat_make_corefile_notes() to
> > use the regset_from_core_section() interface. Unfortunately that is quite
> > a bit of work since most Linux targets don't provide that interface yet.
>
> Shouldn't this be pretty simple: gdbarch_regset_from_core_section_p?
So something like the following patch? I didn't know what to do with
the fpxregset stuff, I guess we'll just have to pick some random
string for that? I couldn't find a ELF section name string assigned
to that stuff.
I tested this patch along with Linux/Sparc regset_from_core_section()
support, and it all seems to work fine.
--- linux-nat.c.~1~ 2006-04-05 18:08:11.000000000 -0700
+++ linux-nat.c 2006-04-05 18:41:57.000000000 -0700
@@ -36,6 +36,7 @@
#include "gdbthread.h"
#include "gdbcmd.h"
#include "regcache.h"
+#include "regset.h"
#include "inf-ptrace.h"
#include "auxv.h"
#include <sys/param.h> /* for MAXPATHLEN */
@@ -2529,15 +2530,33 @@
gdb_fpxregset_t fpxregs;
#endif
unsigned long lwp = ptid_get_lwp (ptid);
+ struct gdbarch *gdbarch = current_gdbarch;
+ const struct regset *regset;
- fill_gregset (&gregs, -1);
+ if (gdbarch && gdbarch_regset_from_core_section_p (gdbarch)
+ && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
+ sizeof gregs)) != NULL)
+ {
+ regset->collect_regset (regset, current_regcache, -1,
+ &gregs, sizeof gregs);
+ }
+ else
+ fill_gregset (&gregs, -1);
note_data = (char *) elfcore_write_prstatus (obfd,
note_data,
note_size,
lwp,
stop_signal, &gregs);
- fill_fpregset (&fpregs, -1);
+ if (gdbarch && gdbarch_regset_from_core_section_p (gdbarch)
+ && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
+ sizeof fpregs)) != NULL)
+ {
+ regset->collect_regset (regset, current_regcache, -1,
+ &fpregs, sizeof fpregs);
+ }
+ else
+ fill_fpregset (&fpregs, -1);
note_data = (char *) elfcore_write_prfpreg (obfd,
note_data,
note_size,
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: core regs vs. proc-service regs mess
2006-04-06 13:15 ` David S. Miller
@ 2006-04-06 13:38 ` Daniel Jacobowitz
2006-04-07 0:35 ` David S. Miller
0 siblings, 1 reply; 7+ messages in thread
From: Daniel Jacobowitz @ 2006-04-06 13:38 UTC (permalink / raw)
To: David S. Miller; +Cc: mark.kettenis, gdb
On Wed, Apr 05, 2006 at 10:06:44PM -0700, David S. Miller wrote:
> So something like the following patch? I didn't know what to do with
> the fpxregset stuff, I guess we'll just have to pick some random
> string for that? I couldn't find a ELF section name string assigned
> to that stuff.
It's .reg-xfp; created by bfd/elf.c:elfcore_grok_prxfpreg.
> + if (gdbarch && gdbarch_regset_from_core_section_p (gdbarch)
> + && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
> + sizeof gregs)) != NULL)
No point testing gdbarch for NULL; it won't be. Also, I think
gdbarch_regset_from_core_section_p is enough. If that returns NULL,
then skip the regset. We don't need to cater to incomplete
implementations of the core functions.
Oh, and GDB prefers not to use assignments in if statements.
But otherwise, yeah, this is what I had in mind. Thanks.
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: core regs vs. proc-service regs mess
2006-04-06 13:38 ` Daniel Jacobowitz
@ 2006-04-07 0:35 ` David S. Miller
0 siblings, 0 replies; 7+ messages in thread
From: David S. Miller @ 2006-04-07 0:35 UTC (permalink / raw)
To: drow; +Cc: mark.kettenis, gdb
From: Daniel Jacobowitz <drow@false.org>
Date: Thu, 6 Apr 2006 09:32:50 -0400
> It's .reg-xfp; created by bfd/elf.c:elfcore_grok_prxfpreg.
...
> No point testing gdbarch for NULL; it won't be. Also, I think
> gdbarch_regset_from_core_section_p is enough. If that returns NULL,
> then skip the regset. We don't need to cater to incomplete
> implementations of the core functions.
>
> Oh, and GDB prefers not to use assignments in if statements.
>
> But otherwise, yeah, this is what I had in mind. Thanks.
Thanks for the feedback.
Can I get approval for the Linux/Sparc dwarf2 bit I posted yesterday?
http://sources.redhat.com/ml/gdb-patches/2006-04/msg00065.html
I want to get that in first, then I'll finish up a final version of
these core regs changes.
Also, I haven't gotten approval for that one-liner break.exp fix
I posted the other day which we discussed in depth a few days
ago:
http://sources.redhat.com/ml/gdb-patches/2006-04/msg00051.html
If I could get an ACK or NACK on that I'd really appreciate it.
Thanks a lot!
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2006-04-06 20:55 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-04-05 7:07 core regs vs. proc-service regs mess David S. Miller
2006-04-05 8:25 ` Mark Kettenis
2006-04-05 13:23 ` Daniel Jacobowitz
2006-04-06 1:10 ` David S. Miller
2006-04-06 13:15 ` David S. Miller
2006-04-06 13:38 ` Daniel Jacobowitz
2006-04-07 0:35 ` David S. Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox