* config/m68k/tm-m68k.h: Rearrange code so macros not in the
authorGrace Sainsbury <graces@redhat.com>
Wed, 26 Jun 2002 17:09:30 +0000 (17:09 +0000)
committerGrace Sainsbury <graces@redhat.com>
Wed, 26 Jun 2002 17:09:30 +0000 (17:09 +0000)
gdbarch vector are at the top.
(NUM_REGS): Remove.
(FP_REGNUM, SP_REGNUM, PS_REGNUM, PC_REGNUM, FP0_REGNUM): Remove.
(FRAME_ARGS_ADDRESS): Remove.
(FRAME_LOCALS_ADDRESS): Remove.
(FRAME_NUM_ARGS): Remove.
(FRAME_ARGS_SKIP): Remove.
* m68k-tdep.c (enum): Add eumeration of special register numbers.
(m68k_gdbarch_init): Add gdbarch initializations for macros
undefined in tm-m68k.h

gdb/ChangeLog
gdb/config/m68k/tm-m68k.h
gdb/m68k-tdep.c

index d61da7c..00c8236 100644 (file)
 
 2002-06-26  Grace Sainsbury  <graces@redhat.com>
 
+       * config/m68k/tm-m68k.h: Rearrange code so macros not in the
+       gdbarch vector are at the top.
+       (NUM_REGS): Remove.
+       (FP_REGNUM, SP_REGNUM, PS_REGNUM, PC_REGNUM, FP0_REGNUM): Remove.
+       (FRAME_ARGS_ADDRESS): Remove.
+       (FRAME_LOCALS_ADDRESS): Remove.
+       (FRAME_NUM_ARGS): Remove.
+       (FRAME_ARGS_SKIP): Remove.  
+       * m68k-tdep.c (enum): Add eumeration of special register numbers.
+       (m68k_gdbarch_init): Add gdbarch initializations for macros
+       undefined in tm-m68k.h
+
+2002-06-26  Grace Sainsbury  <graces@redhat.com>
+
        * monitor.h: Add the function regname to monitor_ops
        structure. This way NUM_REGS does not have to be a constant.
        * monitor.c (monitor_fetch_register): Added support for regname
index c08ab99..fd86564 100644 (file)
 
 /* Generic 68000 stuff, to be included by other tm-*.h files.  */
 
+struct frame_info;
+
+/* Sequence of bytes for breakpoint instruction.
+   This is a TRAP instruction.  The last 4 bits (0xf below) is the
+   vector.  Systems which don't use 0xf should define BPT_VECTOR
+   themselves before including this file.  */
+
+#if !defined (BPT_VECTOR)
+#define BPT_VECTOR 0xf
+#endif
+
+#if !defined (BREAKPOINT)
+#define BREAKPOINT {0x4e, (0x40 | BPT_VECTOR)}
+#endif
+
+/* We default to vector 1 for the "remote" target, but allow targets
+   to override.  */
+#if !defined (REMOTE_BPT_VECTOR)
+#define REMOTE_BPT_VECTOR 1
+#endif
+
+#if !defined (REMOTE_BREAKPOINT)
+#define REMOTE_BREAKPOINT {0x4e, (0x40 | REMOTE_BPT_VECTOR)}
+#endif
+
+#define REGISTER_BYTES_FP (16*4 + 8 + 8*12 + 3*4)
+#define REGISTER_BYTES_NOFP (16*4 + 8)
+
+
+#define NUM_FREGS (NUM_REGS-24)
+
+/* This was determined by experimentation on hp300 BSD 4.3.  Perhaps
+   it corresponds to some offset in /usr/include/sys/user.h or
+   something like that.  Using some system include file would
+   have the advantage of probably being more robust in the face
+   of OS upgrades, but the disadvantage of being wrong for
+   cross-debugging.  */
+
+#define SIG_PC_FP_OFFSET 530
+
+/* Offset from SP to first arg on stack at first instruction of a function */
+
+#define SP_ARG0 (1 * 4)
+
+#define TARGET_M68K
+
+
 #if !GDB_MULTI_ARCH
 #define TARGET_LONG_DOUBLE_FORMAT &floatformat_m68881_ext
 
@@ -50,8 +97,6 @@ extern CORE_ADDR m68k_skip_prologue (CORE_ADDR ip);
    the new frame is not set up until the new function executes
    some instructions.  */
 
-struct frame_info;
-
 #if !GDB_MULTI_ARCH
 extern CORE_ADDR m68k_saved_pc_after_call (struct frame_info *);
 
@@ -69,29 +114,6 @@ extern CORE_ADDR m68k_saved_pc_after_call (struct frame_info *);
 #define STACK_ALIGN(ADDR) (((ADDR) + 1) & ~1)
 #endif
 
-/* Sequence of bytes for breakpoint instruction.
-   This is a TRAP instruction.  The last 4 bits (0xf below) is the
-   vector.  Systems which don't use 0xf should define BPT_VECTOR
-   themselves before including this file.  */
-
-#if !defined (BPT_VECTOR)
-#define BPT_VECTOR 0xf
-#endif
-
-#if !defined (BREAKPOINT)
-#define BREAKPOINT {0x4e, (0x40 | BPT_VECTOR)}
-#endif
-
-/* We default to vector 1 for the "remote" target, but allow targets
-   to override.  */
-#if !defined (REMOTE_BPT_VECTOR)
-#define REMOTE_BPT_VECTOR 1
-#endif
-
-#if !defined (REMOTE_BREAKPOINT)
-#define REMOTE_BREAKPOINT {0x4e, (0x40 | REMOTE_BPT_VECTOR)}
-#endif
-
 /* If your kernel resets the pc after the trap happens you may need to
    define this before including this file.  */
 
@@ -101,6 +123,12 @@ extern CORE_ADDR m68k_saved_pc_after_call (struct frame_info *);
 #endif
 #endif
 
+#if !GDB_MULTI_ARCH
+#ifndef NUM_REGS
+#define NUM_REGS 29
+#endif
+#endif
+
 /* Say how long (ordinary) registers are.  This is a piece of bogosity
    used in push_word and a few other places; REGISTER_RAW_SIZE is the
    real way to know how big a register is.  */
@@ -109,17 +137,6 @@ extern CORE_ADDR m68k_saved_pc_after_call (struct frame_info *);
 #define REGISTER_SIZE 4
 #endif
 
-#define REGISTER_BYTES_FP (16*4 + 8 + 8*12 + 3*4)
-#define REGISTER_BYTES_NOFP (16*4 + 8)
-
-
-#ifndef NUM_REGS
-#define NUM_REGS 29
-#endif
-
-
-#define NUM_FREGS (NUM_REGS-24)
-
 #if !GDB_MULTI_ARCH
 #ifndef REGISTER_BYTES_OK
 #define REGISTER_BYTES_OK(b) \
@@ -197,14 +214,17 @@ extern CORE_ADDR m68k_saved_pc_after_call (struct frame_info *);
    to be actual register numbers as far as the user is concerned
    but do serve to get the desired values when passed to read_register.  */
 
+
 #define D0_REGNUM 0
 #define A0_REGNUM 8
 #define A1_REGNUM 9
+#if !GDB_MULTI_ARCH
 #define FP_REGNUM 14           /* Contains address of executing stack frame */
 #define SP_REGNUM 15           /* Contains address of top of stack */
 #define PS_REGNUM 16           /* Contains processor status */
 #define PC_REGNUM 17           /* Contains program counter */
 #define FP0_REGNUM 18          /* Floating point register 0 */
+#endif
 #define FPC_REGNUM 26          /* 68881 control register */
 #define FPS_REGNUM 27          /* 68881 status register */
 #define FPI_REGNUM 28          /* 68881 iaddr register */
@@ -277,14 +297,7 @@ extern CORE_ADDR m68k_saved_pc_after_call (struct frame_info *);
      (((FI)->signal_handler_caller) ? 0 : frameless_look_for_prologue(FI))
 #endif
 
-/* This was determined by experimentation on hp300 BSD 4.3.  Perhaps
-   it corresponds to some offset in /usr/include/sys/user.h or
-   something like that.  Using some system include file would
-   have the advantage of probably being more robust in the face
-   of OS upgrades, but the disadvantage of being wrong for
-   cross-debugging.  */
 
-#define SIG_PC_FP_OFFSET 530
 
 #if !GDB_MULTI_ARCH
 #define FRAME_SAVED_PC(FRAME) \
@@ -298,22 +311,27 @@ extern CORE_ADDR m68k_saved_pc_after_call (struct frame_info *);
    )
 #endif
 
+#if !GDB_MULTI_ARCH
 #define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
 
 #define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
+#endif
 
 /* Set VAL to the number of args passed to frame described by FI.
    Can set VAL to -1, meaning no way to tell.  */
 
 /* We can't tell how many args there are
    now that the C compiler delays popping them.  */
+#if !GDB_MULTI_ARCH
 #if !defined (FRAME_NUM_ARGS)
 #define FRAME_NUM_ARGS(fi) (-1)
 #endif
 
+
 /* Return number of bytes at start of arglist that are not really args.  */
 
 #define FRAME_ARGS_SKIP 8
+#endif
 
 /* Put here the code to store, into a struct frame_saved_regs,
    the addresses of the saved registers of frame described by FRAME_INFO.
@@ -385,12 +403,7 @@ extern void m68k_pop_frame (void);
 /* Discard from the stack the innermost frame, restoring all registers.  */
 
 #define POP_FRAME              { m68k_pop_frame (); }
-#endif
-/* Offset from SP to first arg on stack at first instruction of a function */
-
-#define SP_ARG0 (1 * 4)
 
-#define TARGET_M68K
 
 /* Figure out where the longjmp will land.  Slurp the args out of the stack.
    We expect the first arg to be a pointer to the jmp_buf structure from which
@@ -398,3 +411,4 @@ extern void m68k_pop_frame (void);
    This routine returns true on success */
 
 extern int m68k_get_longjmp_target (CORE_ADDR *);
+#endif
index 7450d21..d1ab13f 100644 (file)
 #define P_FMOVM                0xf237
 #define P_TRAP         0x4e40
 
+enum
+{
+  E_FP_REGNUM = 14,            /* Contains address of executing stack frame */
+  E_SP_REGNUM = 15,            /* Contains address of top of stack */
+  E_PS_REGNUM = 16,            /* Contains processor status */
+  E_PC_REGNUM = 17,            /* Contains program counter */
+  E_FP0_REGNUM = 18            /* Floating point register 0 */
+};
+
 void m68k_frame_init_saved_regs (struct frame_info *frame_info);
 
 static int
@@ -917,7 +926,7 @@ m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 #if 0
   tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
 #endif
-
   gdbarch = gdbarch_alloc (&info, 0);
 
   set_gdbarch_long_double_format (gdbarch, &floatformat_m68881_ext);
@@ -932,6 +941,8 @@ m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
   set_gdbarch_stack_align (gdbarch, m68k_stack_align);
 
+
+  set_gdbarch_believe_pcc_promotion (gdbarch, 1);
   set_gdbarch_decr_pc_after_break (gdbarch, 2);
 
   set_gdbarch_store_struct_return (gdbarch, m68k_store_struct_return);
@@ -940,10 +951,16 @@ m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_store_return_value (gdbarch, m68k_store_return_value);
 
   set_gdbarch_frame_chain (gdbarch, m68k_frame_chain);
+  set_gdbarch_frame_chain_valid (gdbarch, generic_func_frame_chain_valid);
   set_gdbarch_frame_saved_pc (gdbarch, m68k_frame_saved_pc);
   set_gdbarch_frame_init_saved_regs (gdbarch, m68k_frame_init_saved_regs);
   set_gdbarch_frameless_function_invocation (gdbarch,
                                             m68k_frameless_function_invocation);
+  /* OK to default this value to 'unknown'. */
+  set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
+  set_gdbarch_frame_args_skip (gdbarch, 8);
+  set_gdbarch_frame_args_address (gdbarch, default_frame_address);
+  set_gdbarch_frame_locals_address (gdbarch, default_frame_address);
 
   set_gdbarch_register_raw_size (gdbarch, m68k_register_raw_size);
   set_gdbarch_register_virtual_size (gdbarch, m68k_register_virtual_size);
@@ -956,6 +973,11 @@ m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_num_regs (gdbarch, 29);
   set_gdbarch_register_bytes_ok (gdbarch, m68k_register_bytes_ok);
   set_gdbarch_register_bytes (gdbarch, (16 * 4 + 8 + 8 * 12 + 3 * 4));
+  set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
+  set_gdbarch_fp_regnum (gdbarch, E_FP_REGNUM);
+  set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
+  set_gdbarch_ps_regnum (gdbarch, E_PS_REGNUM);
+  set_gdbarch_fp0_regnum (gdbarch, E_FP0_REGNUM);
 
   set_gdbarch_use_generic_dummy_frames (gdbarch, 0);
   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);