diff -urN src/gdb/gdbarch.c dev/gdb/gdbarch.c --- src/gdb/gdbarch.c 2007-06-13 20:02:38.000000000 +0200 +++ dev/gdb/gdbarch.c 2007-06-13 20:19:51.000000000 +0200 @@ -205,7 +205,6 @@ gdbarch_unwind_sp_ftype *unwind_sp; gdbarch_frame_num_args_ftype *frame_num_args; gdbarch_frame_align_ftype *frame_align; - gdbarch_deprecated_reg_struct_has_addr_ftype *deprecated_reg_struct_has_addr; gdbarch_stabs_argument_has_addr_ftype *stabs_argument_has_addr; int frame_red_zone_size; gdbarch_convert_from_func_ptr_addr_ftype *convert_from_func_ptr_addr; @@ -329,7 +328,6 @@ 0, /* unwind_sp */ 0, /* frame_num_args */ 0, /* frame_align */ - 0, /* deprecated_reg_struct_has_addr */ default_stabs_argument_has_addr, /* stabs_argument_has_addr */ 0, /* frame_red_zone_size */ convert_from_func_ptr_addr_identity, /* convert_from_func_ptr_addr */ @@ -579,7 +577,6 @@ /* Skip verify of unwind_sp, has predicate */ /* Skip verify of frame_num_args, has predicate */ /* Skip verify of frame_align, has predicate */ - /* Skip verify of deprecated_reg_struct_has_addr, has predicate */ /* Skip verify of stabs_argument_has_addr, invalid_p == 0 */ /* Skip verify of convert_from_func_ptr_addr, invalid_p == 0 */ /* Skip verify of addr_bits_remove, invalid_p == 0 */ @@ -767,24 +764,6 @@ fprintf_unfiltered (file, "gdbarch_dump: deprecated_function_start_offset = 0x%s\n", paddr_nz (current_gdbarch->deprecated_function_start_offset)); -#ifdef DEPRECATED_REG_STRUCT_HAS_ADDR_P - fprintf_unfiltered (file, - "gdbarch_dump: %s # %s\n", - "DEPRECATED_REG_STRUCT_HAS_ADDR_P()", - XSTRING (DEPRECATED_REG_STRUCT_HAS_ADDR_P ())); -#endif - fprintf_unfiltered (file, - "gdbarch_dump: gdbarch_deprecated_reg_struct_has_addr_p() = %d\n", - gdbarch_deprecated_reg_struct_has_addr_p (current_gdbarch)); -#ifdef DEPRECATED_REG_STRUCT_HAS_ADDR - fprintf_unfiltered (file, - "gdbarch_dump: %s # %s\n", - "DEPRECATED_REG_STRUCT_HAS_ADDR(gcc_p, type)", - XSTRING (DEPRECATED_REG_STRUCT_HAS_ADDR (gcc_p, type))); -#endif - fprintf_unfiltered (file, - "gdbarch_dump: deprecated_reg_struct_has_addr = <0x%lx>\n", - (long) current_gdbarch->deprecated_reg_struct_has_addr); #ifdef DEPRECATED_REGISTER_SIZE fprintf_unfiltered (file, "gdbarch_dump: DEPRECATED_REGISTER_SIZE # %s\n", @@ -2596,30 +2575,6 @@ } int -gdbarch_deprecated_reg_struct_has_addr_p (struct gdbarch *gdbarch) -{ - gdb_assert (gdbarch != NULL); - return gdbarch->deprecated_reg_struct_has_addr != NULL; -} - -int -gdbarch_deprecated_reg_struct_has_addr (struct gdbarch *gdbarch, int gcc_p, struct type *type) -{ - gdb_assert (gdbarch != NULL); - gdb_assert (gdbarch->deprecated_reg_struct_has_addr != NULL); - if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_reg_struct_has_addr called\n"); - return gdbarch->deprecated_reg_struct_has_addr (gcc_p, type); -} - -void -set_gdbarch_deprecated_reg_struct_has_addr (struct gdbarch *gdbarch, - gdbarch_deprecated_reg_struct_has_addr_ftype deprecated_reg_struct_has_addr) -{ - gdbarch->deprecated_reg_struct_has_addr = deprecated_reg_struct_has_addr; -} - -int gdbarch_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type) { gdb_assert (gdbarch != NULL); diff -urN src/gdb/gdbarch.h dev/gdb/gdbarch.h --- src/gdb/gdbarch.h 2007-06-13 20:02:38.000000000 +0200 +++ dev/gdb/gdbarch.h 2007-06-13 20:19:40.000000000 +0200 @@ -613,34 +613,6 @@ extern CORE_ADDR gdbarch_frame_align (struct gdbarch *gdbarch, CORE_ADDR address); extern void set_gdbarch_frame_align (struct gdbarch *gdbarch, gdbarch_frame_align_ftype *frame_align); -/* DEPRECATED_REG_STRUCT_HAS_ADDR has been replaced by - stabs_argument_has_addr. */ - -#if defined (DEPRECATED_REG_STRUCT_HAS_ADDR) -/* Legacy for systems yet to multi-arch DEPRECATED_REG_STRUCT_HAS_ADDR */ -#if !defined (DEPRECATED_REG_STRUCT_HAS_ADDR_P) -#define DEPRECATED_REG_STRUCT_HAS_ADDR_P() (1) -#endif -#endif - -extern int gdbarch_deprecated_reg_struct_has_addr_p (struct gdbarch *gdbarch); -#if !defined (GDB_TM_FILE) && defined (DEPRECATED_REG_STRUCT_HAS_ADDR_P) -#error "Non multi-arch definition of DEPRECATED_REG_STRUCT_HAS_ADDR" -#endif -#if !defined (DEPRECATED_REG_STRUCT_HAS_ADDR_P) -#define DEPRECATED_REG_STRUCT_HAS_ADDR_P() (gdbarch_deprecated_reg_struct_has_addr_p (current_gdbarch)) -#endif - -typedef int (gdbarch_deprecated_reg_struct_has_addr_ftype) (int gcc_p, struct type *type); -extern int gdbarch_deprecated_reg_struct_has_addr (struct gdbarch *gdbarch, int gcc_p, struct type *type); -extern void set_gdbarch_deprecated_reg_struct_has_addr (struct gdbarch *gdbarch, gdbarch_deprecated_reg_struct_has_addr_ftype *deprecated_reg_struct_has_addr); -#if !defined (GDB_TM_FILE) && defined (DEPRECATED_REG_STRUCT_HAS_ADDR) -#error "Non multi-arch definition of DEPRECATED_REG_STRUCT_HAS_ADDR" -#endif -#if !defined (DEPRECATED_REG_STRUCT_HAS_ADDR) -#define DEPRECATED_REG_STRUCT_HAS_ADDR(gcc_p, type) (gdbarch_deprecated_reg_struct_has_addr (current_gdbarch, gcc_p, type)) -#endif - typedef int (gdbarch_stabs_argument_has_addr_ftype) (struct gdbarch *gdbarch, struct type *type); extern int gdbarch_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type); extern void set_gdbarch_stabs_argument_has_addr (struct gdbarch *gdbarch, gdbarch_stabs_argument_has_addr_ftype *stabs_argument_has_addr); diff -urN src/gdb/gdbarch.sh dev/gdb/gdbarch.sh --- src/gdb/gdbarch.sh 2007-06-13 20:02:38.000000000 +0200 +++ dev/gdb/gdbarch.sh 2007-06-13 20:19:32.000000000 +0200 @@ -574,9 +574,6 @@ F::int:frame_num_args:struct frame_info *frame:frame # M::CORE_ADDR:frame_align:CORE_ADDR address:address -# DEPRECATED_REG_STRUCT_HAS_ADDR has been replaced by -# stabs_argument_has_addr. -F:=:int:deprecated_reg_struct_has_addr:int gcc_p, struct type *type:gcc_p, type m::int:stabs_argument_has_addr:struct type *type:type::default_stabs_argument_has_addr::0 v::int:frame_red_zone_size # diff -urN src/gdb/infcall.c dev/gdb/infcall.c --- src/gdb/infcall.c 2007-06-08 05:38:50.000000000 +0200 +++ dev/gdb/infcall.c 2007-06-13 20:18:58.000000000 +0200 @@ -336,6 +336,7 @@ struct regcache *caller_regcache; struct cleanup *caller_regcache_cleanup; struct frame_id dummy_id; + int i; if (TYPE_CODE (ftype) == TYPE_CODE_PTR) ftype = check_typedef (TYPE_TARGET_TYPE (ftype)); @@ -520,7 +521,6 @@ error (_("too few arguments in function call")); { - int i; for (i = nargs - 1; i >= 0; i--) { int prototyped; @@ -582,60 +582,51 @@ } } - if (DEPRECATED_REG_STRUCT_HAS_ADDR_P ()) + /* This is a machine like the sparc, where we may need to pass a + pointer to the structure, not the structure itself. */ + for (i = nargs - 1; i >= 0; i--) { - int i; - /* This is a machine like the sparc, where we may need to pass a - pointer to the structure, not the structure itself. */ - for (i = nargs - 1; i >= 0; i--) - { - struct type *arg_type = check_typedef (value_type (args[i])); - if ((TYPE_CODE (arg_type) == TYPE_CODE_STRUCT - || TYPE_CODE (arg_type) == TYPE_CODE_UNION - || TYPE_CODE (arg_type) == TYPE_CODE_ARRAY - || TYPE_CODE (arg_type) == TYPE_CODE_STRING - || TYPE_CODE (arg_type) == TYPE_CODE_BITSTRING - || TYPE_CODE (arg_type) == TYPE_CODE_SET - || (TYPE_CODE (arg_type) == TYPE_CODE_FLT - && TYPE_LENGTH (arg_type) > 8) - ) - && DEPRECATED_REG_STRUCT_HAS_ADDR (using_gcc, arg_type)) - { - CORE_ADDR addr; - int len; /* = TYPE_LENGTH (arg_type); */ - int aligned_len; - arg_type = check_typedef (value_enclosing_type (args[i])); - len = TYPE_LENGTH (arg_type); - - aligned_len = len; - if (gdbarch_inner_than (current_gdbarch, 1, 2)) - { - /* stack grows downward */ - sp -= aligned_len; - /* ... so the address of the thing we push is the - stack pointer after we push it. */ - addr = sp; - } - else - { - /* The stack grows up, so the address of the thing - we push is the stack pointer before we push it. */ - addr = sp; - sp += aligned_len; - } - /* Push the structure. */ - write_memory (addr, value_contents_all (args[i]), len); - /* The value we're going to pass is the address of the - thing we just pushed. */ - /*args[i] = value_from_longest (lookup_pointer_type (values_type), - (LONGEST) addr); */ - args[i] = value_from_pointer (lookup_pointer_type (arg_type), - addr); - } - } + struct type *arg_type = check_typedef (value_type (args[i])); + if ((TYPE_CODE (arg_type) == TYPE_CODE_STRUCT + || TYPE_CODE (arg_type) == TYPE_CODE_UNION + || TYPE_CODE (arg_type) == TYPE_CODE_ARRAY + || TYPE_CODE (arg_type) == TYPE_CODE_STRING + || TYPE_CODE (arg_type) == TYPE_CODE_BITSTRING + || TYPE_CODE (arg_type) == TYPE_CODE_SET + || (TYPE_CODE (arg_type) == TYPE_CODE_FLT + && TYPE_LENGTH (arg_type) > 8)) + && gdbarch_stabs_argument_has_addr (current_gdbarch, arg_type)) + { + CORE_ADDR addr; + int len; /* = TYPE_LENGTH (arg_type); */ + int aligned_len; + arg_type = check_typedef (value_enclosing_type (args[i])); + len = TYPE_LENGTH (arg_type); + + aligned_len = len; + if (gdbarch_inner_than (current_gdbarch, 1, 2)) + { + /* stack grows downward */ + sp -= aligned_len; + /* ... so the address of the thing we push is the + stack pointer after we push it. */ + addr = sp; + } + else + { + /* The stack grows up, so the address of the thing + we push is the stack pointer before we push it. */ + addr = sp; + sp += aligned_len; + } + /* Push the structure. */ + write_memory (addr, value_contents_all (args[i]), len); + /* The value we're going to pass is the address of the + thing we just pushed. */ + args[i] = value_from_pointer (lookup_pointer_type (arg_type), addr); + } } - /* Reserve space for the return structure to be written on the stack, if necessary. Make certain that the value is correctly aligned. */