/* User visible, per-frame registers, for GDB, the GNU debugger.
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
Contributed by Red Hat.
struct user_reg
{
const char *name;
- struct value *(*read) (struct frame_info * frame);
+ struct value *(*read) (struct frame_info * frame, const void *baton);
+ const void *baton;
struct user_reg *next;
};
static void
append_user_reg (struct gdb_user_regs *regs, const char *name,
- user_reg_read_ftype *read, struct user_reg *reg)
+ user_reg_read_ftype *read, const void *baton,
+ struct user_reg *reg)
{
/* The caller is responsible for allocating memory needed to store
the register. By doing this, the function can operate on a
gdb_assert (reg != NULL);
reg->name = name;
reg->read = read;
+ reg->baton = baton;
reg->next = NULL;
(*regs->last) = reg;
regs->last = &(*regs->last)->next;
static struct gdb_user_regs builtin_user_regs = { NULL, &builtin_user_regs.first };
void
-user_reg_add_builtin (const char *name, user_reg_read_ftype *read)
+user_reg_add_builtin (const char *name, user_reg_read_ftype *read,
+ const void *baton)
{
- append_user_reg (&builtin_user_regs, name, read,
+ append_user_reg (&builtin_user_regs, name, read, baton,
XMALLOC (struct user_reg));
}
struct gdb_user_regs *regs = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct gdb_user_regs);
regs->last = ®s->first;
for (reg = builtin_user_regs.first; reg != NULL; reg = reg->next)
- append_user_reg (regs, reg->name, reg->read,
+ append_user_reg (regs, reg->name, reg->read, reg->baton,
GDBARCH_OBSTACK_ZALLOC (gdbarch, struct user_reg));
return regs;
}
void
user_reg_add (struct gdbarch *gdbarch, const char *name,
- user_reg_read_ftype *read)
+ user_reg_read_ftype *read, const void *baton)
{
struct gdb_user_regs *regs = gdbarch_data (gdbarch, user_regs_data);
if (regs == NULL)
regs = user_regs_init (gdbarch);
deprecated_set_gdbarch_data (gdbarch, user_regs_data, regs);
}
- append_user_reg (regs, name, read,
+ append_user_reg (regs, name, read, baton,
GDBARCH_OBSTACK_ZALLOC (gdbarch, struct user_reg));
}
+ gdbarch_num_pseudo_regs (gdbarch));
struct user_reg *reg = usernum_to_user_reg (gdbarch, regnum - maxregs);
gdb_assert (reg != NULL);
- return reg->read (frame);
+ return reg->read (frame, reg->baton);
}
extern initialize_file_ftype _initialize_user_regs; /* -Wmissing-prototypes */