xref: /openbsd-src/gnu/usr.bin/binutils/gdb/regset.h (revision 11efff7f3ac2b3cfeff0c0cddc14294d9b3aca4f)
1b725ae77Skettenis /* Manage register sets.
2b725ae77Skettenis 
3*11efff7fSkettenis    Copyright 2003, 2004 Free Software Foundation, Inc.
4b725ae77Skettenis 
5b725ae77Skettenis    This file is part of GDB.
6b725ae77Skettenis 
7b725ae77Skettenis    This program is free software; you can redistribute it and/or modify
8b725ae77Skettenis    it under the terms of the GNU General Public License as published by
9b725ae77Skettenis    the Free Software Foundation; either version 2 of the License, or
10b725ae77Skettenis    (at your option) any later version.
11b725ae77Skettenis 
12b725ae77Skettenis    This program is distributed in the hope that it will be useful,
13b725ae77Skettenis    but WITHOUT ANY WARRANTY; without even the implied warranty of
14b725ae77Skettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15b725ae77Skettenis    GNU General Public License for more details.
16b725ae77Skettenis 
17b725ae77Skettenis    You should have received a copy of the GNU General Public License
18b725ae77Skettenis    along with this program; if not, write to the Free Software
19b725ae77Skettenis    Foundation, Inc., 59 Temple Place - Suite 330,
20b725ae77Skettenis    Boston, MA 02111-1307, USA.  */
21b725ae77Skettenis 
22b725ae77Skettenis #ifndef REGSET_H
23b725ae77Skettenis #define REGSET_H 1
24b725ae77Skettenis 
25b725ae77Skettenis struct gdbarch;
26b725ae77Skettenis struct regcache;
27b725ae77Skettenis 
28b725ae77Skettenis /* Data structure describing a register set.  */
29b725ae77Skettenis 
30*11efff7fSkettenis typedef void (supply_regset_ftype) (const struct regset *, struct regcache *,
31*11efff7fSkettenis                                     int, const void *, size_t);
32*11efff7fSkettenis typedef void (collect_regset_ftype) (const struct regset *,
33*11efff7fSkettenis                                      const struct regcache *,
34*11efff7fSkettenis                                      int, void *, size_t);
35*11efff7fSkettenis 
36b725ae77Skettenis struct regset
37b725ae77Skettenis {
38b725ae77Skettenis   /* Data pointer for private use by the methods below, presumably
39b725ae77Skettenis      providing some sort of description of the register set.  */
40b725ae77Skettenis   const void *descr;
41b725ae77Skettenis 
42*11efff7fSkettenis   /* Function supplying values in a register set to a register cache.  */
43*11efff7fSkettenis   supply_regset_ftype *supply_regset;
44*11efff7fSkettenis 
45*11efff7fSkettenis   /* Function collecting values in a register set from a register cache.  */
46*11efff7fSkettenis   collect_regset_ftype *collect_regset;
47*11efff7fSkettenis 
48*11efff7fSkettenis   /* Architecture associated with the register set.  */
49*11efff7fSkettenis   struct gdbarch *arch;
50b725ae77Skettenis };
51b725ae77Skettenis 
52*11efff7fSkettenis /* Allocate a fresh 'struct regset' whose supply_regset function is
53*11efff7fSkettenis    SUPPLY_REGSET, and whose collect_regset function is COLLECT_REGSET.
54*11efff7fSkettenis    If the regset has no collect_regset function, pass NULL for
55*11efff7fSkettenis    COLLECT_REGSET.
56*11efff7fSkettenis 
57*11efff7fSkettenis    The object returned is allocated on ARCH's obstack.  */
58*11efff7fSkettenis 
59*11efff7fSkettenis extern struct regset *regset_alloc (struct gdbarch *arch,
60*11efff7fSkettenis                                     supply_regset_ftype *supply_regset,
61*11efff7fSkettenis                                     collect_regset_ftype *collect_regset);
62*11efff7fSkettenis 
63b725ae77Skettenis #endif /* regset.h */
64