Compile fix for target m68k-linux
Andreas Schwab
schwab@suse.de
Sun May 18 21:08:00 GMT 2003
This fixes the target m68k-linux so that it compiles again, and
prepares for some multi-arching.
Andreas.
2003-05-18 Andreas Schwab <schwab@suse.de>
* Makefile (m68klinux-nat.o, m68klinux-tdep.o): Update
dependencies.
* config/m68k/tm-linux.h (DEPRECATED_EXTRACT_RETURN_VALUE): Define
as m68k_linux_extract_return_value.
(DEPRECATED_STORE_RETURN_VALUE): Define as
m68k_linux_store_return_value.
(DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS): Define as
m68k_linux_extract_struct_value_address.
* m68klinux-tdep.c (m68k_linux_sigtramp_saved_pc): Use
get_next_frame, get_frame_base, get_frame_pc.
(m68k_linux_frame_saved_pc): Use get_frame_base.
(m68k_linux_extract_return_value): New function.
(m68k_linux_store_return_value): New function.
(m68k_linux_extract_struct_value_address): New function.
* config/m68k/tm-m68k.h: Declare m68k_get_longjmp_target.
Index: gdb/Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.377
diff -u -a -p -r1.377 Makefile.in
--- gdb/Makefile.in 15 May 2003 22:18:42 -0000 1.377
+++ gdb/Makefile.in 18 May 2003 17:15:25 -0000
@@ -1920,10 +1920,10 @@ m68k-tdep.o: m68k-tdep.c $(defs_h) $(fra
$(value_h) $(gdb_string_h) $(inferior_h) $(regcache_h) \
$(arch_utils_h) $(gregset_h) $(m68k_tdep_h)
m68klinux-nat.o: m68klinux-nat.c $(defs_h) $(frame_h) $(inferior_h) \
- $(language_h) $(gdbcore_h) $(regcache_h) $(gdb_stat_h) \
- $(floatformat_h) $(target_h) $(gregset_h) $(m68k_tdep_h)
+ $(language_h) $(gdbcore_h) $(gdb_string_h) $(regcache_h) \
+ $(m68k_tdep_h) $(gdb_stat_h) $(floatformat_h) $(target_h)
m68klinux-tdep.o: m68klinux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \
- $(target_h)
+ $(target_h) $(gdb_string_h) $(gdbtypes_h) $(m68k_tdep_t)
m68knbsd-nat.o: m68knbsd-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
$(regcache_h)
m68knbsd-tdep.o: m68knbsd-tdep.c $(defs_h) $(gdbtypes_h) $(regcache_h)
Index: gdb/m68klinux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/m68klinux-tdep.c,v
retrieving revision 1.2
diff -u -a -p -r1.2 m68klinux-tdep.c
--- gdb/m68klinux-tdep.c 29 Nov 2002 19:33:17 -0000 1.2
+++ gdb/m68klinux-tdep.c 18 May 2003 17:15:32 -0000
@@ -24,7 +24,9 @@
#include "gdbcore.h"
#include "frame.h"
#include "target.h"
-
+#include "gdb_string.h"
+#include "gdbtypes.h"
+#include "m68k-tdep.h"
/* Check whether insn1 and insn2 are parts of a signal trampoline. */
@@ -93,9 +95,9 @@ m68k_linux_sigtramp_saved_pc (struct fra
int sigcontext_offs = (2 * TARGET_INT_BIT) / TARGET_CHAR_BIT;
/* Get sigcontext address, it is the third parameter on the stack. */
- if (frame->next)
+ if (get_next_frame (frame))
sigcontext_addr
- = read_memory_unsigned_integer (FRAME_ARGS_ADDRESS (frame->next))
+ = read_memory_unsigned_integer (get_frame_base (get_next_frame (frame))
+ FRAME_ARGS_SKIP
+ sigcontext_offs,
ptrbytes);
@@ -107,7 +109,7 @@ m68k_linux_sigtramp_saved_pc (struct fra
/* Don't cause a memory_error when accessing sigcontext in case the
stack layout has changed or the stack is corrupt. */
- if (m68k_linux_in_sigtramp (frame->pc) == 2)
+ if (m68k_linux_in_sigtramp (get_frame_pc (frame)) == 2)
target_read_memory (sigcontext_addr + UCONTEXT_PC_OFFSET, buf, ptrbytes);
else
target_read_memory (sigcontext_addr + SIGCONTEXT_PC_OFFSET, buf, ptrbytes);
@@ -122,5 +124,48 @@ m68k_linux_frame_saved_pc (struct frame_
if (get_frame_type (frame) == SIGTRAMP_FRAME)
return m68k_linux_sigtramp_saved_pc (frame);
- return read_memory_unsigned_integer (frame->frame + 4, 4);
+ return read_memory_unsigned_integer (get_frame_base (frame) + 4, 4);
+}
+
+void
+m68k_linux_extract_return_value (struct type *type, char *regbuf, char *valbuf)
+{
+ if (TYPE_CODE (type) == TYPE_CODE_FLT)
+ {
+ REGISTER_CONVERT_TO_VIRTUAL (FP0_REGNUM, type,
+ regbuf + REGISTER_BYTE (FP0_REGNUM),
+ valbuf);
+ }
+ else if (TYPE_CODE (type) == TYPE_CODE_PTR)
+ memcpy (valbuf, regbuf + REGISTER_BYTE (M68K_A0_REGNUM),
+ TYPE_LENGTH (type));
+ else
+ memcpy (valbuf,
+ regbuf + (TYPE_LENGTH (type) >= 4 ? 0 : 4 - TYPE_LENGTH (type)),
+ TYPE_LENGTH (type));
+}
+
+void
+m68k_linux_store_return_value (struct type *type, char *valbuf)
+{
+ if (TYPE_CODE (type) == TYPE_CODE_FLT)
+ {
+ char raw_buffer[REGISTER_RAW_SIZE (FP0_REGNUM)];
+ REGISTER_CONVERT_TO_RAW (type, FP0_REGNUM, valbuf, raw_buffer);
+ deprecated_write_register_bytes (REGISTER_BYTE (FP0_REGNUM),
+ raw_buffer, TYPE_LENGTH (type));
+ }
+ else
+ {
+ if (TYPE_CODE (type) == TYPE_CODE_PTR)
+ deprecated_write_register_bytes (REGISTER_BYTE (M68K_A0_REGNUM),
+ valbuf, TYPE_LENGTH (type));
+ deprecated_write_register_bytes (0, valbuf, TYPE_LENGTH (type));
+ }
+}
+
+CORE_ADDR
+m68k_linux_extract_struct_value_address (char *regbuf)
+{
+ return *(CORE_ADDR *) (regbuf + REGISTER_BYTE (M68K_A0_REGNUM));
}
Index: gdb/config/m68k/tm-linux.h
===================================================================
RCS file: /cvs/src/src/gdb/config/m68k/tm-linux.h,v
retrieving revision 1.13
diff -u -a -p -r1.13 tm-linux.h
--- gdb/config/m68k/tm-linux.h 12 Mar 2003 16:50:46 -0000 1.13
+++ gdb/config/m68k/tm-linux.h 18 May 2003 17:15:37 -0000
@@ -1,6 +1,6 @@
/* Definitions to target GDB to GNU/Linux on m680x0.
- Copyright 1996, 1998, 1999, 2000, 2002 Free Software Foundation,
+ Copyright 1996, 1998, 1999, 2000, 2002, 2003 Free Software Foundation,
Inc.
This file is part of GDB.
@@ -20,8 +20,10 @@
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include "config/tm-linux.h"
+#include "m68k/tm-m68k.h"
+
#include "regcache.h"
-#include "m68k-tdep.h"
/* Number of traps that happen between exec'ing the shell to run an
inferior, and when we finally get to the inferior code. This is 2
@@ -37,56 +39,24 @@
function return value of type TYPE, and copy that, in virtual
format, into VALBUF. */
-#define DEPRECATED_EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
-{ \
- if (TYPE_CODE (TYPE) == TYPE_CODE_FLT) \
- { \
- REGISTER_CONVERT_TO_VIRTUAL (FP0_REGNUM, TYPE, \
- ((char *) (REGBUF) \
- + REGISTER_BYTE (FP0_REGNUM)), \
- VALBUF); \
- } \
- else if (TYPE_CODE (TYPE) == TYPE_CODE_PTR) \
- memcpy (VALBUF, (char *) (REGBUF) + REGISTER_BYTE (M68K_A0_REGNUM), \
- TYPE_LENGTH (TYPE)); \
- else \
- memcpy (VALBUF, \
- ((char *) (REGBUF) \
- + (TYPE_LENGTH (TYPE) >= 4 ? 0 : 4 - TYPE_LENGTH (TYPE))), \
- TYPE_LENGTH (TYPE)); \
-}
+#define DEPRECATED_EXTRACT_RETURN_VALUE(TYPE, REGBUF, VALBUF) \
+ m68k_linux_extract_return_value (TYPE, REGBUF, VALBUF)
+extern void m68k_linux_extract_return_value (struct type *, char *, char *);
/* Write into appropriate registers a function return value of type
TYPE, given in virtual format. */
-#define DEPRECATED_STORE_RETURN_VALUE(TYPE,VALBUF) \
-{ \
- if (TYPE_CODE (TYPE) == TYPE_CODE_FLT) \
- { \
- char raw_buffer[REGISTER_RAW_SIZE (FP0_REGNUM)]; \
- REGISTER_CONVERT_TO_RAW (TYPE, FP0_REGNUM, VALBUF, raw_buffer); \
- deprecated_write_register_bytes (REGISTER_BYTE (FP0_REGNUM), \
- raw_buffer, TYPE_LENGTH (TYPE)); \
- } \
- else \
- { \
- if (TYPE_CODE (TYPE) == TYPE_CODE_PTR) \
- deprecated_write_register_bytes (REGISTER_BYTE (M68K_A0_REGNUM), VALBUF, \
- TYPE_LENGTH (TYPE)); \
- deprecated_write_register_bytes (0, VALBUF, TYPE_LENGTH (TYPE)); \
- } \
-}
-
-#include "config/tm-linux.h"
-#include "m68k/tm-m68k.h"
+#define DEPRECATED_STORE_RETURN_VALUE(TYPE, VALBUF) \
+ m68k_linux_store_return_value (TYPE, VALBUF)
+extern void m68k_linux_store_return_value (struct type *, char *);
/* Extract from an array REGBUF containing the (raw) register state
the address in which a function should return its structure value,
as a CORE_ADDR (or an expression that can be used as one). */
-#undef DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS
#define DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
- (*(CORE_ADDR *)((char *) (REGBUF) + REGISTER_BYTE (M68K_A0_REGNUM)))
+ m68k_linux_extract_struct_value_address (REGBUF)
+extern CORE_ADDR m68k_linux_extract_struct_value_address (char *);
/* Offsets (in target ints) into jmp_buf. */
@@ -100,7 +70,6 @@
#define GET_LONGJMP_TARGET(ADDR) m68k_get_longjmp_target(ADDR)
-#undef DEPRECATED_FRAME_SAVED_PC
#define DEPRECATED_FRAME_SAVED_PC(frame) m68k_linux_frame_saved_pc (frame)
extern CORE_ADDR m68k_linux_frame_saved_pc (struct frame_info *);
Index: gdb/config/m68k/tm-m68k.h
===================================================================
RCS file: /cvs/src/src/gdb/config/m68k/tm-m68k.h,v
retrieving revision 1.20
diff -u -a -p -r1.20 tm-m68k.h
--- gdb/config/m68k/tm-m68k.h 23 Nov 2002 19:45:12 -0000 1.20
+++ gdb/config/m68k/tm-m68k.h 18 May 2003 17:15:37 -0000
@@ -22,3 +22,5 @@
#include "regcache.h"
#define GDB_MULTI_ARCH GDB_MULTI_ARCH_PARTIAL
+
+extern int m68k_get_longjmp_target (CORE_ADDR *);
More information about the Gdb-patches
mailing list