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]

[PATCH]: New default method for multi-arch


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]