mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 03:29:47 +08:00
Use gdbarch for most target parameters for the MN10300, rather
than the tm-*.h file. * config/mn10300/tm-mn10300.h (MAX_REGISTER_VIRTUAL_SIZE, REGISTER_BYTES, FP_REGNUM, BREAKPOINT_FROM_PC, FUNCTION_START_OFFSET, DECR_PC_AFTER_BREAK, INNER_THAN, SAVED_PC_AFTER_CALL, INIT_EXTRA_FRAME_INFO, FRAME_INIT_SAVED_REGS, FRAME_CHAIN, FRAME_CHAIN_VALID, FRAME_SAVED_PC, EXTRACT_RETURN_VALUE, EXTRACT_STRUCT_VALUE_ADDRESS, STORE_RETURN_VALUE, STORE_STRUCT_RETURN, SKIP_PROLOGUE, FRAME_ARGS_SKIP, FRAME_ARGS_ADDRESS, FRAME_LOCALS_ADDRESS, FRAME_NUM_ARGS, POP_FRAME, USE_GENERIC_DUMMY_FRAMES, CALL_DUMMY, CALL_DUMMY_START_OFFSET, CALL_DUMMY_BREAKPOINT_OFFSET, CALL_DUMMY_LOCATION, FIX_CALL_DUMMY, CALL_DUMMY_ADDRESS, TARGET_READ_FP, PUSH_RETURN_ADDRESS, PUSH_DUMMY_FRAME, SAVE_DUMMY_FRAME_TOS, PUSH_ARGUMENTS, PC_IN_CALL_DUMMY, REG_STRUCT_HAS_ADDR, USE_STRUCT_CONVENTION, GET_SAVED_REGISTER): Delete definitions. We register gdbarch methods for these now. (struct frame_info, struct type, struct value): Delete forward declarations of these types; they're no longer necessary, since we don't have function declarations here any more. * mn10300-tdep.c: #include "arch-utils.h", to get declarations for some default gdbarch methods. (mn10300_store_struct_return): Return void, as expected by gdbarch. (mn10300_init_extra_frame_info): Take initial `fromleaf' argument, as expected by gdbarch. (mn10300_frame_init_saved_regs): Provide dummy definition for this, as required by gdbarch. (mn10300_gdbarch_init): Add mn10300_call_dummy_words, as expected by gdbarch. Register gdbarch methods or values for all the stuff removed from tm-10300.h, listed above.
This commit is contained in:
@ -1,3 +1,37 @@
|
|||||||
|
2001-05-08 Jim Blandy <jimb@redhat.com>
|
||||||
|
|
||||||
|
Use gdbarch for most target parameters for the MN10300, rather
|
||||||
|
than the tm-*.h file.
|
||||||
|
* config/mn10300/tm-mn10300.h (MAX_REGISTER_VIRTUAL_SIZE,
|
||||||
|
REGISTER_BYTES, FP_REGNUM, BREAKPOINT_FROM_PC,
|
||||||
|
FUNCTION_START_OFFSET, DECR_PC_AFTER_BREAK, INNER_THAN,
|
||||||
|
SAVED_PC_AFTER_CALL, INIT_EXTRA_FRAME_INFO, FRAME_INIT_SAVED_REGS,
|
||||||
|
FRAME_CHAIN, FRAME_CHAIN_VALID, FRAME_SAVED_PC,
|
||||||
|
EXTRACT_RETURN_VALUE, EXTRACT_STRUCT_VALUE_ADDRESS,
|
||||||
|
STORE_RETURN_VALUE, STORE_STRUCT_RETURN, SKIP_PROLOGUE,
|
||||||
|
FRAME_ARGS_SKIP, FRAME_ARGS_ADDRESS, FRAME_LOCALS_ADDRESS,
|
||||||
|
FRAME_NUM_ARGS, POP_FRAME, USE_GENERIC_DUMMY_FRAMES, CALL_DUMMY,
|
||||||
|
CALL_DUMMY_START_OFFSET, CALL_DUMMY_BREAKPOINT_OFFSET,
|
||||||
|
CALL_DUMMY_LOCATION, FIX_CALL_DUMMY, CALL_DUMMY_ADDRESS,
|
||||||
|
TARGET_READ_FP, PUSH_RETURN_ADDRESS, PUSH_DUMMY_FRAME,
|
||||||
|
SAVE_DUMMY_FRAME_TOS, PUSH_ARGUMENTS, PC_IN_CALL_DUMMY,
|
||||||
|
REG_STRUCT_HAS_ADDR, USE_STRUCT_CONVENTION, GET_SAVED_REGISTER):
|
||||||
|
Delete definitions. We register gdbarch methods for these now.
|
||||||
|
(struct frame_info, struct type, struct value): Delete forward
|
||||||
|
declarations of these types; they're no longer necessary, since we
|
||||||
|
don't have function declarations here any more.
|
||||||
|
* mn10300-tdep.c: #include "arch-utils.h", to get declarations for
|
||||||
|
some default gdbarch methods.
|
||||||
|
(mn10300_store_struct_return): Return void, as expected by
|
||||||
|
gdbarch.
|
||||||
|
(mn10300_init_extra_frame_info): Take initial `fromleaf' argument,
|
||||||
|
as expected by gdbarch.
|
||||||
|
(mn10300_frame_init_saved_regs): Provide dummy definition for
|
||||||
|
this, as required by gdbarch.
|
||||||
|
(mn10300_gdbarch_init): Add mn10300_call_dummy_words, as expected
|
||||||
|
by gdbarch. Register gdbarch methods or values for all the stuff
|
||||||
|
removed from tm-10300.h, listed above.
|
||||||
|
|
||||||
2001-05-08 Andrew Cagney <ac131313@redhat.com>
|
2001-05-08 Andrew Cagney <ac131313@redhat.com>
|
||||||
|
|
||||||
* cli-out.c (cli_begin, cli_end): Replace cli_list_begin and
|
* cli-out.c (cli_begin, cli_end): Replace cli_list_begin and
|
||||||
|
@ -43,10 +43,6 @@
|
|||||||
#define REGISTER_RAW_SIZE(REG) 4
|
#define REGISTER_RAW_SIZE(REG) 4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAX_REGISTER_VIRTUAL_SIZE 4
|
|
||||||
|
|
||||||
#define REGISTER_BYTES (NUM_REGS * REGISTER_SIZE)
|
|
||||||
|
|
||||||
#define D2_REGNUM 2
|
#define D2_REGNUM 2
|
||||||
#define D3_REGNUM 3
|
#define D3_REGNUM 3
|
||||||
#define A2_REGNUM 6
|
#define A2_REGNUM 6
|
||||||
@ -59,111 +55,13 @@
|
|||||||
#define LAR_REGNUM 13
|
#define LAR_REGNUM 13
|
||||||
#define E0_REGNUM 15
|
#define E0_REGNUM 15
|
||||||
|
|
||||||
/* Pseudo register that contains true address of executing stack frame */
|
|
||||||
#define FP_REGNUM 31
|
|
||||||
|
|
||||||
/* BREAKPOINT_FROM_PC uses the program counter value to determine the
|
|
||||||
breakpoint that should be used */
|
|
||||||
extern breakpoint_from_pc_fn mn10300_breakpoint_from_pc;
|
|
||||||
#define BREAKPOINT_FROM_PC(pcptr, lenptr) mn10300_breakpoint_from_pc (pcptr, lenptr)
|
|
||||||
|
|
||||||
#define FUNCTION_START_OFFSET 0
|
|
||||||
|
|
||||||
#define DECR_PC_AFTER_BREAK 0
|
|
||||||
|
|
||||||
#define INNER_THAN(lhs,rhs) ((lhs) < (rhs))
|
|
||||||
|
|
||||||
extern CORE_ADDR mn10300_saved_pc_after_call (struct frame_info *frame);
|
|
||||||
#define SAVED_PC_AFTER_CALL(frame) \
|
|
||||||
mn10300_saved_pc_after_call (frame)
|
|
||||||
|
|
||||||
struct frame_info;
|
|
||||||
struct type;
|
|
||||||
struct value;
|
|
||||||
|
|
||||||
extern void mn10300_init_extra_frame_info (struct frame_info *);
|
|
||||||
#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) mn10300_init_extra_frame_info (fi)
|
|
||||||
#define INIT_FRAME_PC /* Not necessary */
|
#define INIT_FRAME_PC /* Not necessary */
|
||||||
|
|
||||||
#define FRAME_INIT_SAVED_REGS(fi) /* handled by init_extra_frame_info */
|
|
||||||
|
|
||||||
extern CORE_ADDR mn10300_frame_chain (struct frame_info *);
|
|
||||||
#define FRAME_CHAIN(fi) mn10300_frame_chain (fi)
|
|
||||||
#define FRAME_CHAIN_VALID(FP, FI) generic_file_frame_chain_valid (FP, FI)
|
|
||||||
|
|
||||||
extern CORE_ADDR mn10300_find_callers_reg (struct frame_info *, int);
|
extern CORE_ADDR mn10300_find_callers_reg (struct frame_info *, int);
|
||||||
extern CORE_ADDR mn10300_frame_saved_pc (struct frame_info *);
|
|
||||||
#define FRAME_SAVED_PC(FI) (mn10300_frame_saved_pc (FI))
|
|
||||||
|
|
||||||
/* Extract from an array REGBUF containing the (raw) register state
|
|
||||||
a function return value of type TYPE, and copy that, in virtual format,
|
|
||||||
into VALBUF. */
|
|
||||||
|
|
||||||
extern void mn10300_extract_return_value (struct type *type, char *regbuf,
|
|
||||||
char *valbuf);
|
|
||||||
#define EXTRACT_RETURN_VALUE(TYPE, REGBUF, VALBUF) \
|
|
||||||
mn10300_extract_return_value (TYPE, REGBUF, VALBUF)
|
|
||||||
|
|
||||||
CORE_ADDR mn10300_extract_struct_value_address (char *regbuf);
|
|
||||||
#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
|
|
||||||
mn10300_extract_struct_value_address (REGBUF)
|
|
||||||
|
|
||||||
void mn10300_store_return_value (struct type *type, char *valbuf);
|
|
||||||
#define STORE_RETURN_VALUE(TYPE, VALBUF) \
|
|
||||||
mn10300_store_return_value (TYPE, VALBUF)
|
|
||||||
|
|
||||||
|
|
||||||
extern CORE_ADDR mn10300_store_struct_return (CORE_ADDR addr, CORE_ADDR sp);
|
|
||||||
#define STORE_STRUCT_RETURN(STRUCT_ADDR, SP) \
|
|
||||||
(mn10300_store_struct_return (STRUCT_ADDR, SP))
|
|
||||||
|
|
||||||
extern CORE_ADDR mn10300_skip_prologue (CORE_ADDR);
|
|
||||||
#define SKIP_PROLOGUE(pc) (mn10300_skip_prologue (pc))
|
|
||||||
|
|
||||||
#define FRAME_ARGS_SKIP 0
|
|
||||||
|
|
||||||
#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
|
|
||||||
#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
|
|
||||||
#define FRAME_NUM_ARGS(fi) (-1)
|
|
||||||
|
|
||||||
extern void mn10300_pop_frame (struct frame_info *);
|
extern void mn10300_pop_frame (struct frame_info *);
|
||||||
#define POP_FRAME mn10300_pop_frame (get_current_frame ())
|
#define POP_FRAME mn10300_pop_frame (get_current_frame ())
|
||||||
|
|
||||||
#define USE_GENERIC_DUMMY_FRAMES 1
|
|
||||||
#define CALL_DUMMY {0}
|
|
||||||
#define CALL_DUMMY_START_OFFSET (0)
|
|
||||||
#define CALL_DUMMY_BREAKPOINT_OFFSET (0)
|
|
||||||
#define CALL_DUMMY_LOCATION AT_ENTRY_POINT
|
|
||||||
#define FIX_CALL_DUMMY(DUMMY, START, FUNADDR, NARGS, ARGS, TYPE, GCCP)
|
|
||||||
#define CALL_DUMMY_ADDRESS() entry_point_address ()
|
|
||||||
|
|
||||||
#define TARGET_READ_FP() read_sp ()
|
|
||||||
|
|
||||||
extern CORE_ADDR mn10300_push_return_address (CORE_ADDR, CORE_ADDR);
|
|
||||||
#define PUSH_RETURN_ADDRESS(PC, SP) mn10300_push_return_address (PC, SP)
|
|
||||||
|
|
||||||
#define PUSH_DUMMY_FRAME generic_push_dummy_frame ()
|
|
||||||
#define SAVE_DUMMY_FRAME_TOS(SP) generic_save_dummy_frame_tos (SP)
|
|
||||||
|
|
||||||
extern CORE_ADDR
|
|
||||||
mn10300_push_arguments (int, struct value **, CORE_ADDR,
|
|
||||||
int, CORE_ADDR);
|
|
||||||
#define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \
|
|
||||||
(mn10300_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR))
|
|
||||||
|
|
||||||
#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP)
|
|
||||||
|
|
||||||
#define REG_STRUCT_HAS_ADDR(gcc_p,TYPE) \
|
|
||||||
(TYPE_LENGTH (TYPE) > 8)
|
|
||||||
|
|
||||||
extern use_struct_convention_fn mn10300_use_struct_convention;
|
|
||||||
#define USE_STRUCT_CONVENTION(GCC_P, TYPE) mn10300_use_struct_convention (GCC_P, TYPE)
|
|
||||||
|
|
||||||
/* override the default get_saved_register function with
|
|
||||||
one that takes account of generic CALL_DUMMY frames */
|
|
||||||
#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \
|
|
||||||
generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval)
|
|
||||||
|
|
||||||
/* Cons up virtual frame pointer for trace */
|
/* Cons up virtual frame pointer for trace */
|
||||||
extern void mn10300_virtual_frame_pointer (CORE_ADDR, long *, long *);
|
extern void mn10300_virtual_frame_pointer (CORE_ADDR, long *, long *);
|
||||||
#define TARGET_VIRTUAL_FRAME_POINTER(PC, REGP, OFFP) \
|
#define TARGET_VIRTUAL_FRAME_POINTER(PC, REGP, OFFP) \
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "gdbcore.h"
|
#include "gdbcore.h"
|
||||||
#include "symfile.h"
|
#include "symfile.h"
|
||||||
#include "regcache.h"
|
#include "regcache.h"
|
||||||
|
#include "arch-utils.h"
|
||||||
|
|
||||||
extern void _initialize_mn10300_tdep (void);
|
extern void _initialize_mn10300_tdep (void);
|
||||||
static CORE_ADDR mn10300_analyze_prologue (struct frame_info *fi,
|
static CORE_ADDR mn10300_analyze_prologue (struct frame_info *fi,
|
||||||
@ -727,12 +728,11 @@ mn10300_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
|
|||||||
Store the structure value return address for an inferior function
|
Store the structure value return address for an inferior function
|
||||||
call. */
|
call. */
|
||||||
|
|
||||||
CORE_ADDR
|
void
|
||||||
mn10300_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
|
mn10300_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
|
||||||
{
|
{
|
||||||
/* The structure return address is passed as the first argument. */
|
/* The structure return address is passed as the first argument. */
|
||||||
write_register (0, addr);
|
write_register (0, addr);
|
||||||
return sp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function: frame_saved_pc
|
/* Function: frame_saved_pc
|
||||||
@ -777,7 +777,7 @@ mn10300_frame_saved_pc (struct frame_info *fi)
|
|||||||
pointer just prior to calling the target function (see run_stack_dummy). */
|
pointer just prior to calling the target function (see run_stack_dummy). */
|
||||||
|
|
||||||
void
|
void
|
||||||
mn10300_init_extra_frame_info (struct frame_info *fi)
|
mn10300_init_extra_frame_info (int fromleaf, struct frame_info *fi)
|
||||||
{
|
{
|
||||||
if (fi->next)
|
if (fi->next)
|
||||||
fi->pc = FRAME_SAVED_PC (fi->next);
|
fi->pc = FRAME_SAVED_PC (fi->next);
|
||||||
@ -792,6 +792,14 @@ mn10300_init_extra_frame_info (struct frame_info *fi)
|
|||||||
mn10300_analyze_prologue (fi, 0);
|
mn10300_analyze_prologue (fi, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* This function's job is handled by init_extra_frame_info. */
|
||||||
|
void
|
||||||
|
mn10300_frame_init_saved_regs (struct frame_info *frame)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Function: mn10300_virtual_frame_pointer
|
/* Function: mn10300_virtual_frame_pointer
|
||||||
Return the register that the function uses for a frame pointer,
|
Return the register that the function uses for a frame pointer,
|
||||||
plus any necessary offset to be applied to the register before
|
plus any necessary offset to be applied to the register before
|
||||||
@ -944,6 +952,7 @@ static struct gdbarch *
|
|||||||
mn10300_gdbarch_init (struct gdbarch_info info,
|
mn10300_gdbarch_init (struct gdbarch_info info,
|
||||||
struct gdbarch_list *arches)
|
struct gdbarch_list *arches)
|
||||||
{
|
{
|
||||||
|
static LONGEST mn10300_call_dummy_words[] = { 0 };
|
||||||
struct gdbarch *gdbarch;
|
struct gdbarch *gdbarch;
|
||||||
struct gdbarch_tdep *tdep = NULL;
|
struct gdbarch_tdep *tdep = NULL;
|
||||||
int am33_mode;
|
int am33_mode;
|
||||||
@ -1001,6 +1010,44 @@ mn10300_gdbarch_init (struct gdbarch_info info,
|
|||||||
set_gdbarch_num_regs (gdbarch, num_regs);
|
set_gdbarch_num_regs (gdbarch, num_regs);
|
||||||
set_gdbarch_do_registers_info (gdbarch, mn10300_do_registers_info);
|
set_gdbarch_do_registers_info (gdbarch, mn10300_do_registers_info);
|
||||||
|
|
||||||
|
set_gdbarch_fp_regnum (gdbarch, 31);
|
||||||
|
set_gdbarch_max_register_virtual_size (gdbarch, 4);
|
||||||
|
set_gdbarch_register_bytes (gdbarch,
|
||||||
|
num_regs * gdbarch_register_size (gdbarch));
|
||||||
|
set_gdbarch_breakpoint_from_pc (gdbarch, mn10300_breakpoint_from_pc);
|
||||||
|
set_gdbarch_function_start_offset (gdbarch, 0);
|
||||||
|
set_gdbarch_decr_pc_after_break (gdbarch, 0);
|
||||||
|
set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
|
||||||
|
set_gdbarch_frame_chain_valid (gdbarch, generic_file_frame_chain_valid);
|
||||||
|
set_gdbarch_saved_pc_after_call (gdbarch, mn10300_saved_pc_after_call);
|
||||||
|
set_gdbarch_init_extra_frame_info (gdbarch, mn10300_init_extra_frame_info);
|
||||||
|
set_gdbarch_frame_init_saved_regs (gdbarch, mn10300_frame_init_saved_regs);
|
||||||
|
set_gdbarch_frame_chain (gdbarch, mn10300_frame_chain);
|
||||||
|
set_gdbarch_frame_saved_pc (gdbarch, mn10300_frame_saved_pc);
|
||||||
|
set_gdbarch_extract_return_value (gdbarch, mn10300_extract_return_value);
|
||||||
|
set_gdbarch_extract_struct_value_address
|
||||||
|
(gdbarch, mn10300_extract_struct_value_address);
|
||||||
|
set_gdbarch_store_return_value (gdbarch, mn10300_store_return_value);
|
||||||
|
set_gdbarch_store_struct_return (gdbarch, mn10300_store_struct_return);
|
||||||
|
set_gdbarch_skip_prologue (gdbarch, mn10300_skip_prologue);
|
||||||
|
set_gdbarch_frame_args_skip (gdbarch, 0);
|
||||||
|
set_gdbarch_frame_args_address (gdbarch, default_frame_address);
|
||||||
|
set_gdbarch_frame_locals_address (gdbarch, default_frame_address);
|
||||||
|
set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
|
||||||
|
/* That's right, we're using the stack pointer as our frame pointer. */
|
||||||
|
set_gdbarch_read_fp (gdbarch, generic_target_read_sp);
|
||||||
|
set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
|
||||||
|
set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
|
||||||
|
set_gdbarch_call_dummy_words (gdbarch, mn10300_call_dummy_words);
|
||||||
|
set_gdbarch_sizeof_call_dummy_words (gdbarch,
|
||||||
|
sizeof (mn10300_call_dummy_words));
|
||||||
|
set_gdbarch_call_dummy_length (gdbarch, 0);
|
||||||
|
set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
|
||||||
|
set_gdbarch_call_dummy_start_offset (gdbarch, 0);
|
||||||
|
set_gdbarch_pc_in_call_dummy (gdbarch, generic_pc_in_call_dummy);
|
||||||
|
set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
|
||||||
|
set_gdbarch_use_struct_convention (gdbarch, mn10300_use_struct_convention);
|
||||||
|
|
||||||
tdep->am33_mode = am33_mode;
|
tdep->am33_mode = am33_mode;
|
||||||
|
|
||||||
return gdbarch;
|
return gdbarch;
|
||||||
|
Reference in New Issue
Block a user