This is the mail archive of the
mailing list for the GDB project.
Re: about current_gdbarch
- From: Michael Snyder <msnyder at specifix dot com>
- To: Tea <teawater at gmail dot com>
- Cc: Thiago Jung Bauermann <bauerman at br dot ibm dot com>, gdb-patches at sourceware dot org
- Date: Mon, 21 Apr 2008 11:19:10 -0700
- Subject: Re: about current_gdbarch
- References: <firstname.lastname@example.org>
On Mon, 2008-04-21 at 17:59 +0800, Tea wrote:
> Hi Thiago,
> In your mail, you want me remove the "current_gdbarch" from my patch.
> But it's so hard to me.
> Because most of "current_gdbarch" is used in function "record_message"
> and sub-function of it(such as i386_record and mips_record).
> "record_message" will be called by function "resume" that use a lot of
> "current_gdbarch" in it. So I think get current gdbarch without
> "current_gdbarch" is so hard.
> Could you please help me about it? Or let me keep "current_gdbarch" in
> current time. Maybe I can remove it in the future.
gdbarch is a data structure that's meant to be passed around
as a token to the various functions that will use it. It's
a relatively new interface (though it's been in place for a
number of years now).
"current_gdbarch" is a cheat -- a global constant -- that
we have allowed ourselves to use while we transition various
parts of gdb into using the gdbarch interface.
I think what you are being encouraged to do is, rather than
just using the global constant whenever you need it, start
at highest possible level of calling into your code (eg.
"record_message" in infrun.c) and pass in a pointer to
current_gdbarch (assuming an actual gdbarch pointer is not
available). Then let the rest of your code pass that pointer
around, and use it instead of using the global.
That way, eventually, we only have one reference to the
global "current_gdbarch" to get rid of, instead of many.