diff -urN src/gdb/findvar.c dev/gdb/findvar.c --- src/gdb/findvar.c 2007-06-11 11:31:56.000000000 +0200 +++ dev/gdb/findvar.c 2007-06-11 20:11:39.000000000 +0200 @@ -624,20 +624,21 @@ struct type *type1 = check_typedef (type); struct value *v; - if (CONVERT_REGISTER_P (regnum, type1)) + if (gdbarch_convert_register_p (current_gdbarch, regnum, type1)) { /* The ISA/ABI need to something weird when obtaining the specified value from this register. It might need to re-order non-adjacent, starting with REGNUM (see MIPS and i386). It might need to convert the [float] register into the corresponding [integer] type (see Alpha). The assumption - is that REGISTER_TO_VALUE populates the entire value + is that gdbarch_register_to_value populates the entire value including the location. */ v = allocate_value (type); VALUE_LVAL (v) = lval_register; VALUE_FRAME_ID (v) = get_frame_id (frame); VALUE_REGNUM (v) = regnum; - REGISTER_TO_VALUE (frame, regnum, type1, value_contents_raw (v)); + gdbarch_register_to_value (current_gdbarch, + frame, regnum, type1, value_contents_raw (v)); } else { diff -urN src/gdb/gdbarch.c dev/gdb/gdbarch.c --- src/gdb/gdbarch.c 2007-06-11 11:31:56.000000000 +0200 +++ dev/gdb/gdbarch.c 2007-06-11 20:11:39.000000000 +0200 @@ -751,12 +751,6 @@ fprintf_unfiltered (file, "gdbarch_dump: convert_from_func_ptr_addr = <0x%lx>\n", (long) current_gdbarch->convert_from_func_ptr_addr); -#ifdef CONVERT_REGISTER_P - fprintf_unfiltered (file, - "gdbarch_dump: %s # %s\n", - "CONVERT_REGISTER_P(regnum, type)", - XSTRING (CONVERT_REGISTER_P (regnum, type))); -#endif fprintf_unfiltered (file, "gdbarch_dump: convert_register_p = <0x%lx>\n", (long) current_gdbarch->convert_register_p); @@ -1155,12 +1149,6 @@ fprintf_unfiltered (file, "gdbarch_dump: register_sim_regno = <0x%lx>\n", (long) current_gdbarch->register_sim_regno); -#ifdef REGISTER_TO_VALUE - fprintf_unfiltered (file, - "gdbarch_dump: %s # %s\n", - "REGISTER_TO_VALUE(frame, regnum, type, buf)", - XSTRING (REGISTER_TO_VALUE (frame, regnum, type, buf))); -#endif fprintf_unfiltered (file, "gdbarch_dump: register_to_value = <0x%lx>\n", (long) current_gdbarch->register_to_value); @@ -1303,12 +1291,6 @@ fprintf_unfiltered (file, "gdbarch_dump: value_from_register = <0x%lx>\n", (long) current_gdbarch->value_from_register); -#ifdef VALUE_TO_REGISTER - fprintf_unfiltered (file, - "gdbarch_dump: %s # %s\n", - "VALUE_TO_REGISTER(frame, regnum, type, buf)", - XSTRING (VALUE_TO_REGISTER (frame, regnum, type, buf))); -#endif fprintf_unfiltered (file, "gdbarch_dump: value_to_register = <0x%lx>\n", (long) current_gdbarch->value_to_register); diff -urN src/gdb/gdbarch.h dev/gdb/gdbarch.h --- src/gdb/gdbarch.h 2007-06-11 11:31:56.000000000 +0200 +++ dev/gdb/gdbarch.h 2007-06-11 20:11:39.000000000 +0200 @@ -525,32 +525,14 @@ typedef int (gdbarch_convert_register_p_ftype) (int regnum, struct type *type); extern int gdbarch_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type); extern void set_gdbarch_convert_register_p (struct gdbarch *gdbarch, gdbarch_convert_register_p_ftype *convert_register_p); -#if !defined (GDB_TM_FILE) && defined (CONVERT_REGISTER_P) -#error "Non multi-arch definition of CONVERT_REGISTER_P" -#endif -#if !defined (CONVERT_REGISTER_P) -#define CONVERT_REGISTER_P(regnum, type) (gdbarch_convert_register_p (current_gdbarch, regnum, type)) -#endif typedef void (gdbarch_register_to_value_ftype) (struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf); extern void gdbarch_register_to_value (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf); extern void set_gdbarch_register_to_value (struct gdbarch *gdbarch, gdbarch_register_to_value_ftype *register_to_value); -#if !defined (GDB_TM_FILE) && defined (REGISTER_TO_VALUE) -#error "Non multi-arch definition of REGISTER_TO_VALUE" -#endif -#if !defined (REGISTER_TO_VALUE) -#define REGISTER_TO_VALUE(frame, regnum, type, buf) (gdbarch_register_to_value (current_gdbarch, frame, regnum, type, buf)) -#endif typedef void (gdbarch_value_to_register_ftype) (struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf); extern void gdbarch_value_to_register (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf); extern void set_gdbarch_value_to_register (struct gdbarch *gdbarch, gdbarch_value_to_register_ftype *value_to_register); -#if !defined (GDB_TM_FILE) && defined (VALUE_TO_REGISTER) -#error "Non multi-arch definition of VALUE_TO_REGISTER" -#endif -#if !defined (VALUE_TO_REGISTER) -#define VALUE_TO_REGISTER(frame, regnum, type, buf) (gdbarch_value_to_register (current_gdbarch, frame, regnum, type, buf)) -#endif /* Construct a value representing the contents of register REGNUM in frame FRAME, interpreted as type TYPE. The routine needs to diff -urN src/gdb/gdbarch.sh dev/gdb/gdbarch.sh --- src/gdb/gdbarch.sh 2007-06-11 11:31:56.000000000 +0200 +++ dev/gdb/gdbarch.sh 2007-06-11 20:11:39.000000000 +0200 @@ -487,9 +487,9 @@ # v:=:int:believe_pcc_promotion::::::: # -f:=:int:convert_register_p:int regnum, struct type *type:regnum, type:0:generic_convert_register_p::0 -f:=:void:register_to_value:struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf:frame, regnum, type, buf:0 -f:=:void:value_to_register:struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf:frame, regnum, type, buf:0 +f::int:convert_register_p:int regnum, struct type *type:regnum, type:0:generic_convert_register_p::0 +f::void:register_to_value:struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf:frame, regnum, type, buf:0 +f::void:value_to_register:struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf:frame, regnum, type, buf:0 # Construct a value representing the contents of register REGNUM in # frame FRAME, interpreted as type TYPE. The routine needs to # allocate and return a struct value with all value attributes diff -urN src/gdb/valops.c dev/gdb/valops.c --- src/gdb/valops.c 2007-06-11 11:31:58.000000000 +0200 +++ dev/gdb/valops.c 2007-06-11 20:11:39.000000000 +0200 @@ -636,12 +636,14 @@ if (!frame) error (_("Value being assigned to is no longer active.")); - if (CONVERT_REGISTER_P (VALUE_REGNUM (toval), type)) + if (gdbarch_convert_register_p + (current_gdbarch, VALUE_REGNUM (toval), type)) { /* If TOVAL is a special machine register requiring conversion of program values to a special raw format. */ - VALUE_TO_REGISTER (frame, VALUE_REGNUM (toval), - type, value_contents (fromval)); + gdbarch_value_to_register (current_gdbarch, + frame, VALUE_REGNUM (toval), + type, value_contents (fromval)); } else {