| /* Per-frame user registers, for GDB, the GNU debugger. |
| |
| Copyright (C) 2002-2021 Free Software Foundation, Inc. |
| |
| Contributed by Red Hat. |
| |
| 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 3 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, see <http://www.gnu.org/licenses/>. */ |
| |
| #ifndef USER_REGS_H |
| #define USER_REGS_H |
| |
| /* Implement both builtin, and architecture specific, per-frame user |
| visible registers. |
| |
| Builtin registers apply to all architectures, where as architecture |
| specific registers are present when the architecture is selected. |
| |
| These registers are assigned register numbers outside the |
| architecture's register range |
| [0 .. gdbarch_num_regs + gdbarch_num_pseudo_regs]. |
| Their values should be constructed using per-frame information. */ |
| |
| /* TODO: cagney/2003-06-27: Need to think more about how these |
| registers are added, read, and modified. At present they are kind |
| of assumed to be read-only. Should it, for instance, return a |
| register descriptor that contains all the relevant access methods. */ |
| |
| struct frame_info; |
| struct gdbarch; |
| |
| /* Given an architecture, map a user visible register name onto its |
| index. */ |
| |
| extern int user_reg_map_name_to_regnum (struct gdbarch *gdbarch, |
| const char *str, int len); |
| |
| extern const char *user_reg_map_regnum_to_name (struct gdbarch *gdbarch, |
| int regnum); |
| |
| /* Return the value of the frame register in the specified frame. |
| |
| Note; These methods return a "struct value" instead of the raw |
| bytes as, at the time the register is being added, the type needed |
| to describe the register has not bee initialized. */ |
| |
| typedef struct value *(user_reg_read_ftype) (struct frame_info *frame, |
| const void *baton); |
| extern struct value *value_of_user_reg (int regnum, struct frame_info *frame); |
| |
| /* Add a builtin register (present in all architectures). */ |
| extern void user_reg_add_builtin (const char *name, |
| user_reg_read_ftype *read, |
| const void *baton); |
| |
| /* Add a per-architecture frame register. */ |
| extern void user_reg_add (struct gdbarch *gdbarch, const char *name, |
| user_reg_read_ftype *read, const void *baton); |
| |
| #endif |