From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21049 invoked by alias); 4 Nov 2004 02:38:17 -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 21039 invoked from network); 4 Nov 2004 02:38:16 -0000 Received: from unknown (HELO mail03.idc.renesas.com) (202.234.163.13) by sourceware.org with SMTP; 4 Nov 2004 02:38:16 -0000 Received: (from root@localhost) by guardian01.idc.renesas.com with id iA42cCa6023656 for gdb-patches@sources.redhat.com; Thu, 4 Nov 2004 11:38:12 +0900 (JST) Received: from unknown [172.20.8.70] by guardian01.idc.renesas.com with SMTP id MAA23655 ; Thu, 4 Nov 2004 11:38:12 +0900 Received: from mrkaisv.hoku.renesas.com ([10.145.105.245]) by rnsmtp01.hoku_r.renesas.com (8.9.3/3.7W) with ESMTP id LAA13344 for ; Thu, 4 Nov 2004 11:38:12 +0900 (JST) Received: from E5A02646 (unknown [10.145.105.81]) by mrkaisv.hoku.renesas.com (Postfix) with SMTP id 3F4267981B7 for ; Thu, 4 Nov 2004 11:38:12 +0900 (JST) Message-ID: <02a701c4c217$a56bac70$5169910a@E5A02646> From: "Kei Sakamoto" To: Subject: [RFA/m32r] Add core file support to m32r-linux Date: Thu, 04 Nov 2004 02:38:00 -0000 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_02A4_01C4C263.154598D0" X-SW-Source: 2004-11/txt/msg00058.txt.bz2 This is a multi-part message in MIME format. ------=_NextPart_000_02A4_01C4C263.154598D0 Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: 7bit Content-length: 408 Hello, The attached patch adds core file support to m32r-linux target. OK to commit? 2004-11-04 Kei Sakamoto * Makefile.in (m32r-linux-tdep.o): Update dependencies. * m32r-linux-tdep.c (m32r_linux_init_abi): Call set_gdbarch_regset_from_core_section for core file support. (m32r_linux_supply_gregset, m32r_linux_regset_from_core_section): New functions. ------=_NextPart_000_02A4_01C4C263.154598D0 Content-Type: application/octet-stream; name="m32r-linux-tdep.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="m32r-linux-tdep.patch" Content-length: 4895 Index: Makefile.in=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/src/src/gdb/Makefile.in,v=0A= retrieving revision 1.654=0A= diff -u -r1.654 Makefile.in=0A= --- Makefile.in 4 Nov 2004 02:15:19 -0000 1.654=0A= +++ Makefile.in 4 Nov 2004 02:30:03 -0000=0A= @@ -2162,7 +2162,7 @@=0A= m32r-linux-tdep.o: m32r-linux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \= =0A= $(value_h) $(regcache_h) $(inferior_h) $(osabi_h) $(reggroups_h) \=0A= $(gdb_string_h) $(glibc_tdep_h) $(solib_svr4_h) $(trad_frame_h) \=0A= - $(frame_unwind_h) $(m32r_tdep_h)=0A= + $(frame_unwind_h) $(regset_h) $(m32r_tdep_h)=0A= m32r-rom.o: m32r-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \= =0A= $(serial_h) $(symtab_h) $(command_h) $(gdbcmd_h) $(symfile_h) \=0A= $(gdb_string_h) $(objfiles_h) $(inferior_h) $(regcache_h)=0A= Index: m32r-linux-tdep.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/src/src/gdb/m32r-linux-tdep.c,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 m32r-linux-tdep.c=0A= --- m32r-linux-tdep.c 1 Oct 2004 07:29:34 -0000 1.1=0A= +++ m32r-linux-tdep.c 4 Nov 2004 02:30:03 -0000=0A= @@ -27,6 +27,7 @@=0A= #include "inferior.h"=0A= #include "osabi.h"=0A= #include "reggroups.h"=0A= +#include "regset.h"=0A= =20=0A= #include "gdb_string.h"=0A= =20=0A= @@ -309,6 +310,97 @@=0A= return NULL;=0A= }=0A= =20=0A= +/* Mapping between the registers in `struct pt_regs'=0A= + format and GDB's register array layout. */=0A= +=0A= +static int m32r_pt_regs_offset[] =3D {=0A= + 4 * 4, /* r0 */=0A= + 4 * 5, /* r1 */=0A= + 4 * 6, /* r2 */=0A= + 4 * 7, /* r3 */=0A= + 4 * 0, /* r4 */=0A= + 4 * 1, /* r5 */=0A= + 4 * 2, /* r6 */=0A= + 4 * 8, /* r7 */=0A= + 4 * 9, /* r8 */=0A= + 4 * 10, /* r9 */=0A= + 4 * 11, /* r10 */=0A= + 4 * 12, /* r11 */=0A= + 4 * 13, /* r12 */=0A= + 4 * 24, /* fp */=0A= + 4 * 25, /* lr */=0A= + 4 * 23, /* sp */=0A= + 4 * 19, /* psw */=0A= + 4 * 19, /* cbr */=0A= + 4 * 26, /* spi */=0A= + 4 * 23, /* spu */=0A= + 4 * 22, /* bpc */=0A= + 4 * 20, /* pc */=0A= + 4 * 16, /* accl */=0A= + 4 * 15 /* acch */=0A= +};=0A= +=0A= +#define PSW_OFFSET (4 * 19)=0A= +#define BBPSW_OFFSET (4 * 21)=0A= +#define SPU_OFFSET (4 * 23)=0A= +#define SPI_OFFSET (4 * 26)=0A= +=0A= +static void=0A= +m32r_linux_supply_gregset (const struct regset *regset,=0A= + struct regcache *regcache, int regnum,=0A= + const void *gregs, size_t size)=0A= +{=0A= + const char *regs =3D gregs;=0A= + unsigned long psw, bbpsw;=0A= + int i;=0A= +=0A= + psw =3D *((unsigned long *) (regs + PSW_OFFSET));=0A= + bbpsw =3D *((unsigned long *) (regs + BBPSW_OFFSET));=0A= +=0A= + for (i =3D 0; i < sizeof (m32r_pt_regs_offset) / 4; i++)=0A= + {=0A= + if (regnum !=3D -1 && regnum !=3D i)=0A= + continue;=0A= +=0A= + switch (i)=0A= + {=0A= + case PSW_REGNUM:=0A= + *((unsigned long *) (regs + m32r_pt_regs_offset[i])) =3D=0A= + ((0x00c1 & bbpsw) << 8) | ((0xc100 & psw) >> 8);=0A= + break;=0A= + case CBR_REGNUM:=0A= + *((unsigned long *) (regs + m32r_pt_regs_offset[i])) =3D=0A= + ((psw >> 8) & 1);=0A= + break;=0A= + case M32R_SP_REGNUM:=0A= + if (psw & 0x8000)=0A= + *((unsigned long *) (regs + m32r_pt_regs_offset[i])) =3D=0A= + *((unsigned long *) (regs + SPU_OFFSET));=0A= + else=0A= + *((unsigned long *) (regs + m32r_pt_regs_offset[i])) =3D=0A= + *((unsigned long *) (regs + SPI_OFFSET));=0A= + break;=0A= + }=0A= +=0A= + regcache_raw_supply (current_regcache, i,=0A= + regs + m32r_pt_regs_offset[i]);=0A= + }=0A= +}=0A= +=0A= +static struct regset m32r_linux_gregset =3D {=0A= + NULL, m32r_linux_supply_gregset=0A= +};=0A= +=0A= +static const struct regset *=0A= +m32r_linux_regset_from_core_section (struct gdbarch *core_arch,=0A= + const char *sect_name, size_t sect_size)=0A= +{=0A= + struct gdbarch_tdep *tdep =3D gdbarch_tdep (core_arch);=0A= + if (strcmp (sect_name, ".reg") =3D=3D 0)=0A= + return &m32r_linux_gregset;=0A= + return NULL;=0A= +}=0A= +=0A= static void=0A= m32r_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)=0A= {=0A= @@ -323,6 +415,10 @@=0A= /* GNU/Linux uses SVR4-style shared libraries. */=0A= set_solib_svr4_fetch_link_map_offsets=0A= (gdbarch, svr4_ilp32_fetch_link_map_offsets);=0A= +=0A= + /* Core file support. */=0A= + set_gdbarch_regset_from_core_section=0A= + (gdbarch, m32r_linux_regset_from_core_section);=0A= }=0A= =20=0A= /* Provide a prototype to silence -Wmissing-prototypes. */=0A= ------=_NextPart_000_02A4_01C4C263.154598D0--