This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [PATCH]: New default method for multi-arch


Committed.

Michael Snyder wrote:
> 
> This is an example of a multi-arched method that should have a default
> impl.
> (because many architectures do it the same way).
> 
>   ------------------------------------------------------------------------
> 2000-12-20  Michael Snyder  <msnyder@mvstp600e.cygnus.com>
> 
>         * arch-utils.c (default_frame_address): New function.  Default
>         implementation of frame_args_address and frame_locals_address.
>         * arch-utils.h (default_frame_address): Export.
>         * d10v-tdep.c (d10v_gdbarch_init): Use default_frame_address.
>         (d10v_frame_args_address, d10v_frame_locals_address): Delete.
>         * sh-tdep.c (sh_gdbarch_init): Use default_frame_address.
>         (sh_frame_args_address, sh_frame_locals_address): Delete.
>         * sparc-tdep.c (sparc_gdbarch_init): Use default_frame_address.
>         (sparc_frame_address): Delete.
> 
> Index: arch-utils.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/arch-utils.c,v
> retrieving revision 1.18
> diff -c -3 -p -r1.18 arch-utils.c
> *** arch-utils.c        2000/12/15 01:01:45     1.18
> --- arch-utils.c        2000/12/20 23:44:23
> *************** no_op_reg_to_regnum (int reg)
> *** 239,244 ****
> --- 239,251 ----
>     return reg;
>   }
> 
> + /* For use by frame_args_address and frame_locals_address.  */
> + CORE_ADDR
> + default_frame_address (struct frame_info *fi)
> + {
> +   return fi->frame;
> + }
> +
>   /* Functions to manipulate the endianness of the target.  */
> 
>   #ifdef TARGET_BYTE_ORDER_SELECTABLE
> Index: arch-utils.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/arch-utils.h,v
> retrieving revision 1.11
> diff -c -3 -p -r1.11 arch-utils.h
> *** arch-utils.h        2000/12/04 04:01:15     1.11
> --- arch-utils.h        2000/12/20 23:44:23
> *************** extern CORE_ADDR default_convert_from_fu
> *** 101,104 ****
> --- 101,109 ----
> 
>   extern int no_op_reg_to_regnum (int reg);
> 
> + /* Default frame_args_address and frame_locals_address.  */
> +
> + extern CORE_ADDR default_frame_address (struct frame_info *);
> +
> +
>   #endif
> Index: d10v-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/d10v-tdep.c,v
> retrieving revision 1.13
> diff -c -3 -p -r1.13 d10v-tdep.c
> *** d10v-tdep.c 2000/12/15 01:01:46     1.13
> --- d10v-tdep.c 2000/12/20 23:44:23
> *************** d10v_frame_saved_pc (struct frame_info *
> *** 438,455 ****
>     return ((frame)->extra_info->return_pc);
>   }
> 
> - CORE_ADDR
> - d10v_frame_args_address (struct frame_info *fi)
> - {
> -   return (fi)->frame;
> - }
> -
> - CORE_ADDR
> - d10v_frame_locals_address (struct frame_info *fi)
> - {
> -   return (fi)->frame;
> - }
> -
>   /* Immediately after a function call, return the saved pc.  We can't
>      use frame->return_pc beause that is determined by reading R13 off
>      the stack and that may not be written yet. */
> --- 438,443 ----
> *************** d10v_gdbarch_init (struct gdbarch_info i
> *** 1592,1599 ****
>     set_gdbarch_frame_chain (gdbarch, d10v_frame_chain);
>     set_gdbarch_frame_chain_valid (gdbarch, d10v_frame_chain_valid);
>     set_gdbarch_frame_saved_pc (gdbarch, d10v_frame_saved_pc);
> !   set_gdbarch_frame_args_address (gdbarch, d10v_frame_args_address);
> !   set_gdbarch_frame_locals_address (gdbarch, d10v_frame_locals_address);
>     set_gdbarch_saved_pc_after_call (gdbarch, d10v_saved_pc_after_call);
>     set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
>     set_gdbarch_stack_align (gdbarch, d10v_stack_align);
> --- 1580,1587 ----
>     set_gdbarch_frame_chain (gdbarch, d10v_frame_chain);
>     set_gdbarch_frame_chain_valid (gdbarch, d10v_frame_chain_valid);
>     set_gdbarch_frame_saved_pc (gdbarch, d10v_frame_saved_pc);
> !   set_gdbarch_frame_args_address (gdbarch, default_frame_address);
> !   set_gdbarch_frame_locals_address (gdbarch, default_frame_address);
>     set_gdbarch_saved_pc_after_call (gdbarch, d10v_saved_pc_after_call);
>     set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
>     set_gdbarch_stack_align (gdbarch, d10v_stack_align);
> Index: sh-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/sh-tdep.c,v
> retrieving revision 1.25
> diff -c -3 -p -r1.25 sh-tdep.c
> *** sh-tdep.c   2000/12/19 23:20:45     1.25
> --- sh-tdep.c   2000/12/20 23:44:23
> *************** sh_frame_saved_pc (struct frame_info *fr
> *** 850,867 ****
>     return ((frame)->extra_info->return_pc);
>   }
> 
> - static CORE_ADDR
> - sh_frame_args_address (struct frame_info *fi)
> - {
> -   return (fi)->frame;
> - }
> -
> - static CORE_ADDR
> - sh_frame_locals_address (struct frame_info *fi)
> - {
> -   return (fi)->frame;
> - }
> -
>   /* Discard from the stack the innermost frame,
>      restoring all saved registers.  */
>   static void
> --- 850,855 ----
> *************** sh_gdbarch_init (struct gdbarch_info inf
> *** 2116,2123 ****
>     set_gdbarch_frame_chain (gdbarch, sh_frame_chain);
>     set_gdbarch_frame_chain_valid (gdbarch, generic_file_frame_chain_valid);
>     set_gdbarch_frame_saved_pc (gdbarch, sh_frame_saved_pc);
> !   set_gdbarch_frame_args_address (gdbarch, sh_frame_args_address);
> !   set_gdbarch_frame_locals_address (gdbarch, sh_frame_locals_address);
>     set_gdbarch_saved_pc_after_call (gdbarch, sh_saved_pc_after_call);
>     set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
>     set_gdbarch_believe_pcc_promotion (gdbarch, 1);
> --- 2104,2111 ----
>     set_gdbarch_frame_chain (gdbarch, sh_frame_chain);
>     set_gdbarch_frame_chain_valid (gdbarch, generic_file_frame_chain_valid);
>     set_gdbarch_frame_saved_pc (gdbarch, sh_frame_saved_pc);
> !   set_gdbarch_frame_args_address (gdbarch, default_frame_address);
> !   set_gdbarch_frame_locals_address (gdbarch, default_frame_address);
>     set_gdbarch_saved_pc_after_call (gdbarch, sh_saved_pc_after_call);
>     set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
>     set_gdbarch_believe_pcc_promotion (gdbarch, 1);
> Index: sparc-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/sparc-tdep.c,v
> retrieving revision 1.9
> diff -c -3 -p -r1.9 sparc-tdep.c
> *** sparc-tdep.c        2000/10/24 20:05:35     1.9
> --- sparc-tdep.c        2000/12/20 23:44:24
> *************** sparc_frame_init_saved_regs (struct fram
> *** 2810,2823 ****
>   {     /* no-op */
>   }
> 
> - /* The frame address: stored in the 'frame' field of the frame_info.  */
> -
> - static CORE_ADDR
> - sparc_frame_address (struct frame_info *fi)
> - {
> -   return fi->frame;
> - }
> -
>   /* gdbarch fix call dummy:
>      All this function does is rearrange the arguments before calling
>      sparc_fix_call_dummy (which does the real work).  */
> --- 2810,2815 ----
> *************** sparc_gdbarch_init (struct gdbarch_info
> *** 2957,2966 ****
>     set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
>     set_gdbarch_fp_regnum (gdbarch, SPARC_FP_REGNUM);
>     set_gdbarch_fp0_regnum (gdbarch, SPARC_FP0_REGNUM);
> !   set_gdbarch_frame_args_address (gdbarch, sparc_frame_address);
>     set_gdbarch_frame_chain (gdbarch, sparc_frame_chain);
>     set_gdbarch_frame_init_saved_regs (gdbarch, sparc_frame_init_saved_regs);
> !   set_gdbarch_frame_locals_address (gdbarch, sparc_frame_address);
>     set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
>     set_gdbarch_frame_saved_pc (gdbarch, sparc_frame_saved_pc);
>     set_gdbarch_frameless_function_invocation (gdbarch,
> --- 2949,2958 ----
>     set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
>     set_gdbarch_fp_regnum (gdbarch, SPARC_FP_REGNUM);
>     set_gdbarch_fp0_regnum (gdbarch, SPARC_FP0_REGNUM);
> !   set_gdbarch_frame_args_address (gdbarch, default_frame_address);
>     set_gdbarch_frame_chain (gdbarch, sparc_frame_chain);
>     set_gdbarch_frame_init_saved_regs (gdbarch, sparc_frame_init_saved_regs);
> !   set_gdbarch_frame_locals_address (gdbarch, default_frame_address);
>     set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
>     set_gdbarch_frame_saved_pc (gdbarch, sparc_frame_saved_pc);
>     set_gdbarch_frameless_function_invocation (gdbarch,

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]