summaryrefslogtreecommitdiff
path: root/gdb/arch-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/arch-utils.c')
-rw-r--r--gdb/arch-utils.c108
1 files changed, 43 insertions, 65 deletions
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index d76a8e40a7f..b60ed33f556 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -1,7 +1,7 @@
/* Dynamic architecture support for GDB, the GNU debugger.
- Copyright 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation,
- Inc.
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+ Foundation, Inc.
This file is part of GDB.
@@ -30,7 +30,7 @@
#include "regcache.h"
#include "gdb_assert.h"
#include "sim-regno.h"
-
+#include "gdbcore.h"
#include "osabi.h"
#include "version.h"
@@ -60,13 +60,46 @@ legacy_store_return_value (struct type *type, struct regcache *regcache,
DEPRECATED_STORE_RETURN_VALUE (type, b);
}
-
int
always_use_struct_convention (int gcc_p, struct type *value_type)
{
return 1;
}
+enum return_value_convention
+legacy_return_value (struct gdbarch *gdbarch, struct type *valtype,
+ struct regcache *regcache, void *readbuf,
+ const void *writebuf)
+{
+ /* NOTE: cagney/2004-06-13: The gcc_p parameter to
+ USE_STRUCT_CONVENTION isn't used. */
+ int struct_return = ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
+ || TYPE_CODE (valtype) == TYPE_CODE_UNION
+ || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
+ && DEPRECATED_USE_STRUCT_CONVENTION (0, valtype));
+
+ if (writebuf != NULL)
+ {
+ gdb_assert (!struct_return);
+ /* NOTE: cagney/2004-06-13: See stack.c:return_command. Old
+ architectures don't expect STORE_RETURN_VALUE to handle small
+ structures. Should not be called with such types. */
+ gdb_assert (TYPE_CODE (valtype) != TYPE_CODE_STRUCT
+ && TYPE_CODE (valtype) != TYPE_CODE_UNION);
+ STORE_RETURN_VALUE (valtype, regcache, writebuf);
+ }
+
+ if (readbuf != NULL)
+ {
+ gdb_assert (!struct_return);
+ EXTRACT_RETURN_VALUE (valtype, regcache, readbuf);
+ }
+
+ if (struct_return)
+ return RETURN_VALUE_STRUCT_CONVENTION;
+ else
+ return RETURN_VALUE_REGISTER_CONVENTION;
+}
int
legacy_register_sim_regno (int regnum)
@@ -84,12 +117,6 @@ legacy_register_sim_regno (int regnum)
return LEGACY_SIM_REGNO_IGNORE;
}
-int
-generic_return_value_on_stack_not (struct type *type)
-{
- return 0;
-}
-
CORE_ADDR
generic_skip_trampoline_code (CORE_ADDR pc)
{
@@ -120,13 +147,6 @@ generic_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
return 0;
}
-#if defined (CALL_DUMMY)
-LONGEST legacy_call_dummy_words[] = CALL_DUMMY;
-#else
-LONGEST legacy_call_dummy_words[1];
-#endif
-int legacy_sizeof_call_dummy_words = sizeof (legacy_call_dummy_words);
-
void
generic_remote_translate_xfer_address (struct gdbarch *gdbarch,
struct regcache *regcache,
@@ -208,17 +228,6 @@ no_op_reg_to_regnum (int reg)
return reg;
}
-CORE_ADDR
-deprecated_init_frame_pc_default (int fromleaf, struct frame_info *prev)
-{
- if (fromleaf && DEPRECATED_SAVED_PC_AFTER_CALL_P ())
- return DEPRECATED_SAVED_PC_AFTER_CALL (get_next_frame (prev));
- else if (get_next_frame (prev) != NULL)
- return DEPRECATED_FRAME_SAVED_PC (get_next_frame (prev));
- else
- return read_pc ();
-}
-
void
default_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
{
@@ -269,13 +278,7 @@ int
generic_register_size (int regnum)
{
gdb_assert (regnum >= 0 && regnum < NUM_REGS + NUM_PSEUDO_REGS);
- if (gdbarch_register_type_p (current_gdbarch))
- return TYPE_LENGTH (gdbarch_register_type (current_gdbarch, regnum));
- else
- /* FIXME: cagney/2003-03-01: Once all architectures implement
- gdbarch_register_type(), this entire function can go away. It
- is made obsolete by register_size(). */
- return TYPE_LENGTH (DEPRECATED_REGISTER_VIRTUAL_TYPE (regnum)); /* OK */
+ return TYPE_LENGTH (gdbarch_register_type (current_gdbarch, regnum));
}
/* Assume all registers are adjacent. */
@@ -298,42 +301,17 @@ generic_register_byte (int regnum)
int
legacy_pc_in_sigtramp (CORE_ADDR pc, char *name)
{
-#if !defined (DEPRECATED_IN_SIGTRAMP)
- if (DEPRECATED_SIGTRAMP_START_P ())
- return ((pc) >= DEPRECATED_SIGTRAMP_START (pc)
- && (pc) < DEPRECATED_SIGTRAMP_END (pc));
- else
- return name && strcmp ("_sigtramp", name) == 0;
-#else
+#if defined (DEPRECATED_IN_SIGTRAMP)
return DEPRECATED_IN_SIGTRAMP (pc, name);
+#else
+ return name && strcmp ("_sigtramp", name) == 0;
#endif
}
int
-legacy_convert_register_p (int regnum, struct type *type)
-{
- return (DEPRECATED_REGISTER_CONVERTIBLE_P ()
- && DEPRECATED_REGISTER_CONVERTIBLE (regnum));
-}
-
-void
-legacy_register_to_value (struct frame_info *frame, int regnum,
- struct type *type, void *to)
+generic_convert_register_p (int regnum, struct type *type)
{
- char from[MAX_REGISTER_SIZE];
- get_frame_register (frame, regnum, from);
- DEPRECATED_REGISTER_CONVERT_TO_VIRTUAL (regnum, type, from, to);
-}
-
-void
-legacy_value_to_register (struct frame_info *frame, int regnum,
- struct type *type, const void *tmp)
-{
- char to[MAX_REGISTER_SIZE];
- char *from = alloca (TYPE_LENGTH (type));
- memcpy (from, from, TYPE_LENGTH (type));
- DEPRECATED_REGISTER_CONVERT_TO_RAW (type, regnum, from, to);
- put_frame_register (frame, regnum, to);
+ return 0;
}
int