(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 Richard Earnshaw <rearnsha@arm.com>
+
+ * 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 <ac131313@redhat.com>
Corinna Vinschen <vinschen@redhat.com>
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));
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)
{
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)
{
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. */
#ifndef TM_ARM_H
#define TM_ARM_H
+#ifndef GDB_MULTI_ARCH
+#define GDB_MULTI_ARCH 1
+#endif
+
#include "regcache.h"
#include "floatformat.h"
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)
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);
#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);
#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[];