This is the mail archive of the
gdb-patches@sourceware.cygnus.com
mailing list for the GDB project.
Re: [PATCH]: Messy prototypes for supply_gregset and friends.
Mark Kettenis wrote:
> Most use gregset_t and fpregset_t -- but Solaris uses
> prgregset_t and prfpregset_t, and at least one Linux (i386)
> uses elf_gregset_t and elf_fpregset_t.
>
> This makes it hard to prototype the functions. Procfs has used an
> ugly workaround involving ifdefs and typedefs and autoconf. Everybody
> else just lets it slide. This situation has existed long enough.
>
> Using autoconf isn't such a bad idea.
I think it's overkill for this application. All we really need is eg.
#define GDB_GREGSET_T elf_gregset_t
in two or three nm.h files.
Besides, I can do this easily while autoconf would be hard (for me).
If you want to do it, feel free! ;-)
> I propose a new file, "gregset.h", which will contain prototypes
>
> I'd prefer regset.h, or gdb-regset.h. The `g' in gregset stands for
> "general purpose" but the file will also contain definitions for
> floating-point registers.
Umm... I'm viewing them as a family. "regset.h" is definitely
too broad. I could live with gdb-regset.h but it seems more
obscure than gregset.h, which tells you exactly what the file
is "about". Is this issue important to you?
> You forgot to include gregset.h, although I can image what it looks
> like :-).
Argh, sorry:
/* Interface for functions using gregset and fpregset types.
Copyright (C) 2000 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef GDB_GREGSET_T
#define GDB_GREGSET_T gregset_t
#endif
#ifndef GDB_FPREGSET_T
#define GDB_FPREGSET_T fpregset_t
#endif
typedef GDB_GREGSET_T gdb_gregset_t;
typedef GDB_FPREGSET_T gdb_fpregset_t;
/* A gregset is a data structure supplied by the native OS containing
the general register values of the debugged process. Usually this
includes integer registers and control registers. An fpregset is a
data structure containing the floating point registers. These data
structures were originally a part of the /proc interface, but have
been borrowed or copied by other GDB targets, eg. Linux. */
/* Copy register values from the native target gregset / fpregset
into GDB's internal register cache. */
extern void supply_gregset (gdb_gregset_t *gregs);
extern void supply_fpregset (gdb_fpregset_t *fpregs);
/* Copy register values from GDB's register cache into
the native target gregset / fpregset. If regno is -1,
copy all the registers. */
extern void fill_gregset (gdb_gregset_t *gregs, int regno);
extern void fill_fpregset (gdb_fpregset_t *fpregs, int regno);