From: Andrew Cagney <ac131313@redhat.com>
To: Daniel Jacobowitz <drow@mvista.com>
Cc: Mark Kettenis <kettenis@chello.nl>, gdb@sources.redhat.com
Subject: Re: [RFC] Register sets
Date: Thu, 04 Sep 2003 15:04:00 -0000 [thread overview]
Message-ID: <3F575472.2030405@redhat.com> (raw)
In-Reply-To: <20030904140822.GA22838@nevyn.them.org>
> On Thu, Sep 04, 2003 at 10:00:39AM -0400, Andrew Cagney wrote:
>
>>
>
>> >Hmm, yes and no. That definition of regset is only useful for core
>> >files; I would like something more generally useful, for remote and
>> >native use. I also don't really like passing the core gdbarch around,
>> >for the same reason. How about this instead?
>> >
>> >struct regset
>> >{
>> > void (*supply_regset)(struct regcache *, const void *, size_t, int);
>> > void (*read_regset)(struct regcache *, void *, size_t, int);
>> >};
>> >
>> >const struct regset *
>> >core_section_to_regset (struct gdbarch *core_gdbarch,
>> > const char *sec_name, size_t sec_size);
>> >
>> >which would then allow:
>> >
>> >const struct regset *
>> >remote_name_to_regset (const char *name);
>
>>
>> As far as I know, the required lookups are:
>> REGNUM -> REGSET
>> foreach REGSET
>> and not SETNAME -> REGSET. This is so that a request for a single
>> register, or all registers, can be directed to the correct regset. I
>> also think having remote and corefile adopt an identical naming schema
>> should make life easier.
>
>
> I'd really rather not enforce that - remote can provide regsets that
> BFD doesn't know about, and the ".reg" names would look silly being
> defined as part of the remote protocol. My instinct says that the
> flexibility is worthwhile so that the two implementation details don't
> become coupled.
It's best to delay adding generality until there is hard evidence
supporting its need.
The core file's "reg" layout is pretty much wired down - it lets GDB
adopt an existing standard. Also, passing the BFD regset name down to
the remote end makes for a very simple remote core file reader.
Finally, if the remote end has a regset missing from the core file, then
the core file spec needs to be extended to include it - cf
GET_THREAD_INFO on i386, or the system registers from a core.
The original remote code had this right (intentional or not I don't
know) - "G" transfered the general registers or the gregset.
Unfortunatly, at some point in the mid '90's GDB lost the plot. Instead
of adding other packets to fetch other regset's the G packet started
growing :-( Getting regset's back into the protocol would be a good idea.
> I believe REGSET->SETNAME is necessary for the remote protocol approach
> I described. Don't necessarily want to fetch all register sets, so we
> need to figure out the name of the one we do want. You could implement
> the core side with REGSET->SETNAME and foreach REGSET, but I think it's
> more straightforward with SETNAME->REGSET.
Um, did you mean REGNUM -> {SETNAME, REGSET}? It's the REGNUM that
determines what happens next. Otherwize I don't understand your point :-(
> Also, core_section_to_regset is more than just SETNAME->REGSET. It
> considers the regset's size and core file's architecture, for reasons
> Mark described.
Ah! So you're suggesting a table of regcache-arch X regset-arch? That
requirement isn't unique to core files. /proc ptrace and other
interfaces can also need such transformations.
>> As for the architecture, supply_regset needs this. It might, for
>> instance, be an x86-64 method supplying registers to an i386 register cache.
>
>
> It needs the regcache's architecture, but I don't believe it needs any
> other. The method will be defined for a particular regcache layout,
> which incorporates all of the information it needs about the other
> involved architecture. We could get the regcache's architecture from
> the regcache, or pass it explicitly.
That's the architecture mark was passing in. The alternative is a
larger table of regcache X regset maps.
>> I should note that I do know of a second way of handling cross
>> architectures (x86-64 on i386 et.al.). Add a table of cross
>> architecture unwinders and then allow different frames to have different
>> architectures vis:
>>
>> x86-64 frame
>> <x86-64 X i386>
>> i386 frame
>> i386 frame
>> <ia64 X i386>
>> ia64 frame
>>
>> but that's getting way ahead of many other changes.
Here the regcache and regset architecture would always match. Cross
architectures would be handled elsewhere.
Andrew
next prev parent reply other threads:[~2003-09-04 15:04 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-08-23 22:50 Mark Kettenis
2003-08-24 16:43 ` Daniel Jacobowitz
2003-08-25 22:35 ` Mark Kettenis
2003-08-26 15:49 ` Andrew Cagney
2003-08-26 16:55 ` Daniel Jacobowitz
2003-08-27 3:50 ` Andrew Cagney
2003-08-31 14:04 ` Mark Kettenis
2003-09-02 18:40 ` Andrew Cagney
2003-09-04 21:31 ` Mark Kettenis
2003-09-04 12:55 ` Daniel Jacobowitz
2003-09-04 14:00 ` Andrew Cagney
2003-09-04 14:08 ` Daniel Jacobowitz
2003-09-04 15:04 ` Andrew Cagney [this message]
2003-09-04 15:13 ` Daniel Jacobowitz
2003-09-04 22:07 ` Mark Kettenis
2003-09-04 22:05 ` Mark Kettenis
2003-09-04 22:16 ` Andrew Cagney
2003-09-04 22:59 ` Andrew Cagney
2003-09-05 23:15 ` Daniel Jacobowitz
2003-09-09 4:21 ` Andrew Cagney
2003-09-04 21:58 ` Mark Kettenis
2003-09-06 0:02 ` Jim Blandy
2003-09-06 14:18 ` Mark Kettenis
2003-09-09 4:51 ` Andrew Cagney
2003-09-09 17:15 ` Jim Blandy
2003-09-09 19:16 ` Andrew Cagney
2003-08-29 20:20 ` Mark Kettenis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3F575472.2030405@redhat.com \
--to=ac131313@redhat.com \
--cc=drow@mvista.com \
--cc=gdb@sources.redhat.com \
--cc=kettenis@chello.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox