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