From 39bbf76177180d2f051fc1a7500ca230a3ff9695 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Fri, 8 Feb 2002 18:26:37 +0000 Subject: [PATCH] * arm-tdep.c (arm_frame_chain_valid): Make static. (arm_push_arguments): Likewise. (arm_gdbarch_init): New function. (_initialize_arm_tdep): Call it. * config/arm/tm-arm.h (GDB_MULTI_ARCH): Set to 1. (TARGET_DOUBLE_FORMAT): Test TARGET_BYTE_ORDER, not target_byte_order. (FRAME_CHAIN_VALID): Delete. (arm_frame_chain_valid): Delete declaration. (PUSH_ARGUMENTS): Delete. (arm_push_arguments): Delete declaration. (CALL_DUMMY_P): Delete. --- gdb/ChangeLog | 14 ++++++++++++++ gdb/arm-tdep.c | 36 ++++++++++++++++++++++++++++++++++-- gdb/config/arm/tm-arm.h | 18 +++++------------- 3 files changed, 53 insertions(+), 15 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 08dab9cfd9b..3f579556fa9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2002-02-08 Richard Earnshaw + + * arm-tdep.c (arm_frame_chain_valid): Make static. + (arm_push_arguments): Likewise. + (arm_gdbarch_init): New function. + (_initialize_arm_tdep): Call it. + * config/arm/tm-arm.h (GDB_MULTI_ARCH): Set to 1. + (TARGET_DOUBLE_FORMAT): Test TARGET_BYTE_ORDER, not target_byte_order. + (FRAME_CHAIN_VALID): Delete. + (arm_frame_chain_valid): Delete declaration. + (PUSH_ARGUMENTS): Delete. + (arm_push_arguments): Delete declaration. + (CALL_DUMMY_P): Delete. + 2002-02-08 Andrew Cagney Corinna Vinschen diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 3228842399c..501f3d64516 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -235,7 +235,7 @@ arm_use_struct_convention (int gcc_p, struct type *type) return nRc; } -int +static int arm_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe) { return (chain != 0 && (FRAME_SAVED_PC (thisframe) >= LOWEST_PC)); @@ -1417,7 +1417,7 @@ arm_call_dummy_breakpoint_offset (void) variant of the APCS. It passes any floating point arguments in the general registers and/or on the stack. */ -CORE_ADDR +static CORE_ADDR arm_push_arguments (int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr) { @@ -2341,6 +2341,35 @@ arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym) MSYMBOL_SET_SPECIAL (msym); } +static struct gdbarch * +arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) +{ + struct gdbarch *gdbarch; + + if (arches != NULL) + return arches->gdbarch; + + /* XXX We'll probably need to set the tdep field soon. */ + gdbarch = gdbarch_alloc (&info, NULL); + + set_gdbarch_use_generic_dummy_frames (gdbarch, 0); + + /* Call dummy code. */ + set_gdbarch_call_dummy_location (gdbarch, ON_STACK); + set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1); + set_gdbarch_call_dummy_p (gdbarch, 1); + set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0); + + set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_on_stack); + + set_gdbarch_get_saved_register (gdbarch, generic_get_saved_register); + set_gdbarch_push_arguments (gdbarch, arm_push_arguments); + + set_gdbarch_frame_chain_valid (gdbarch, arm_frame_chain_valid); + + return gdbarch; +} + void _initialize_arm_tdep (void) { @@ -2353,6 +2382,9 @@ _initialize_arm_tdep (void) int numregs, i, j; static char *helptext; + if (GDB_MULTI_ARCH) + register_gdbarch_init (bfd_arch_arm, arm_gdbarch_init); + tm_print_insn = gdb_print_insn_arm; /* Get the number of possible sets of register names defined in opcodes. */ diff --git a/gdb/config/arm/tm-arm.h b/gdb/config/arm/tm-arm.h index b203da12074..0d62a5fce9e 100644 --- a/gdb/config/arm/tm-arm.h +++ b/gdb/config/arm/tm-arm.h @@ -22,6 +22,10 @@ #ifndef TM_ARM_H #define TM_ARM_H +#ifndef GDB_MULTI_ARCH +#define GDB_MULTI_ARCH 1 +#endif + #include "regcache.h" #include "floatformat.h" @@ -30,7 +34,7 @@ struct type; struct value; /* IEEE format floating point. */ -#define TARGET_DOUBLE_FORMAT (target_byte_order == BFD_ENDIAN_BIG \ +#define TARGET_DOUBLE_FORMAT (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG \ ? &floatformat_ieee_double_big \ : &floatformat_ieee_double_littlebyte_bigword) @@ -324,10 +328,6 @@ CORE_ADDR arm_target_read_fp (void); CORE_ADDR arm_frame_chain (struct frame_info *); #define FRAME_CHAIN(thisframe) arm_frame_chain (thisframe) -int arm_frame_chain_valid (CORE_ADDR, struct frame_info *); -#define FRAME_CHAIN_VALID(chain, thisframe) \ - arm_frame_chain_valid (chain, thisframe) - /* Define other aspects of the stack frame. */ int arm_frameless_function_invocation (struct frame_info *fi); @@ -359,12 +359,6 @@ void arm_frame_init_saved_regs (struct frame_info *); #define FRAME_INIT_SAVED_REGS(frame_info) \ arm_frame_init_saved_regs (frame_info); -/* Things needed for making the inferior call functions. */ - -CORE_ADDR arm_push_arguments (int, struct value **, CORE_ADDR, int, CORE_ADDR); -#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \ - arm_push_arguments ((nargs), (args), (sp), (struct_return), (struct_addr)) - /* Push an empty stack frame, to record the current PC, etc. */ void arm_push_dummy_frame (void); @@ -377,8 +371,6 @@ void arm_pop_frame (void); #define POP_FRAME arm_pop_frame () -#define CALL_DUMMY_P (1) - #define CALL_DUMMY_WORDS arm_call_dummy_words extern LONGEST arm_call_dummy_words[]; -- 2.30.2