From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1649 invoked by alias); 18 May 2003 21:08:46 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 1539 invoked from network); 18 May 2003 21:08:45 -0000 Received: from unknown (HELO mout1.freenet.de) (194.97.50.132) by sources.redhat.com with SMTP; 18 May 2003 21:08:45 -0000 Received: from [194.97.50.135] (helo=mx2.freenet.de) by mout1.freenet.de with asmtp (Exim 4.20) id 19HVOe-0006hj-Ek for gdb-patches@sources.redhat.com; Sun, 18 May 2003 23:08:44 +0200 Received: from b00fe.pppool.de ([213.7.0.254] helo=whitebox.local) by mx2.freenet.de with esmtp (Exim 4.20 #1) id 19HVOc-0004Pk-32 for gdb-patches@sources.redhat.com; Sun, 18 May 2003 23:08:42 +0200 Received: from whitebox.local (localhost [127.0.0.1]) by whitebox.local (8.12.7/8.12.7/SuSE Linux 0.6) with ESMTP id h4IL5sIk016029 for ; Sun, 18 May 2003 23:05:54 +0200 Received: (from andreas@localhost) by whitebox.local (8.12.7/8.12.7/Submit) id h4IL5reC016026; Sun, 18 May 2003 23:05:53 +0200 X-Authentication-Warning: whitebox.local: andreas set sender to schwab@suse.de using -f To: gdb-patches@sources.redhat.com Subject: Compile fix for target m68k-linux X-Yow: Leona, I want to CONFESS things to you.. I want to WRAP you in a SCARLET ROBE trimmed with POLYVINYL CHLORIDE.. I want to EMPTY your ASHTRAYS... From: Andreas Schwab Date: Sun, 18 May 2003 21:08:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2003-05/txt/msg00325.txt.bz2 This fixes the target m68k-linux so that it compiles again, and prepares for some multi-arching. Andreas. 2003-05-18 Andreas Schwab * 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 *);