From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7318 invoked by alias); 23 Oct 2004 12:16:12 -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 7300 invoked from network); 23 Oct 2004 12:16:07 -0000 Received: from unknown (HELO walton.sibelius.xs4all.nl) (82.92.89.47) by sourceware.org with SMTP; 23 Oct 2004 12:16:07 -0000 Received: from elgar.sibelius.xs4all.nl (elgar.sibelius.xs4all.nl [192.168.0.2]) by walton.sibelius.xs4all.nl (8.13.0/8.13.0) with ESMTP id i9NCG7gK017288 for ; Sat, 23 Oct 2004 14:16:07 +0200 (CEST) Received: from elgar.sibelius.xs4all.nl (localhost [127.0.0.1]) by elgar.sibelius.xs4all.nl (8.12.6p3/8.12.6) with ESMTP id i9NCG6Aj023830 for ; Sat, 23 Oct 2004 14:16:07 +0200 (CEST) (envelope-from kettenis@elgar.sibelius.xs4all.nl) Received: (from kettenis@localhost) by elgar.sibelius.xs4all.nl (8.12.6p3/8.12.6/Submit) id i9NCG6YK023827; Sat, 23 Oct 2004 14:16:06 +0200 (CEST) Date: Sat, 23 Oct 2004 12:16:00 -0000 Message-Id: <200410231216.i9NCG6YK023827@elgar.sibelius.xs4all.nl> From: Mark Kettenis To: gdb-patches@sources.redhat.com Subject: [COMMIT] OpenBSD/mips64 target and native support X-SW-Source: 2004-10/txt/msg00376.txt.bz2 This seems to be working pretty reasonably, so I checked it in. I suppose not many people are running OpenBSD/mips64 (OpenBSD/sgi) yet, but those that do, probably want a working debugger. Anyway, I'm not adding a NEWS entry yet, since there are some issues with dwarf2read.c that need to be resolved before the native stuff really works. Mark Index: ChangeLog from Mark Kettenis * mips64obsd-nat.c, mips64obsd-tdep.c: New files. * configure.host: Add mips64*-*-openbsd*. * configure.tgt: Add mips64*-*-openbsd*. * Makefile.in (ALLDEPFILES): Add mips64obsd-nat.o, mips64obsd-tdep.c. (mips64obsd-nat.o, mips64obsd-tdep.o): New dependecies. * config/mips/obsd64.mh, config/mips/obsd64.mt: New files. Index: configure.host =================================================================== RCS file: /cvs/src/src/gdb/configure.host,v retrieving revision 1.84 diff -u -p -r1.84 configure.host --- configure.host 1 Sep 2004 20:46:41 -0000 1.84 +++ configure.host 23 Oct 2004 11:51:30 -0000 @@ -103,6 +103,7 @@ mips-sgi-irix6*) gdb_host=irix6 ;; mips*-*-linux*) gdb_host=linux ;; mips*-*-netbsd* | mips*-*-knetbsd*-gnu) gdb_host=nbsd ;; +mips64*-*-openbsd*) gdb_host=obsd64 ;; ns32k-*-netbsd*) gdb_host=nbsdaout ;; Index: configure.tgt =================================================================== RCS file: /cvs/src/src/gdb/configure.tgt,v retrieving revision 1.149 diff -u -p -r1.149 configure.tgt --- configure.tgt 1 Oct 2004 07:29:34 -0000 1.149 +++ configure.tgt 23 Oct 2004 11:51:30 -0000 @@ -139,6 +139,7 @@ mips*-*-linux*) gdb_target=linux ;; mips*-*-netbsd* | mips*-*-knetbsd*-gnu) gdb_target=nbsd ;; +mips64*-*-openbsd*) gdb_target=obsd64 ;; mips*-*-vxworks*) gdb_target=vxmips ;; mips*-*-*) gdb_target=embed ;; Index: mips64obsd-nat.c =================================================================== RCS file: mips64obsd-nat.c diff -N mips64obsd-nat.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ mips64obsd-nat.c 23 Oct 2004 11:51:30 -0000 @@ -0,0 +1,112 @@ +/* Native-dependent code for OpenBSD/mips64. + + Copyright 2004 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include "defs.h" +#include "inferior.h" +#include "regcache.h" +#include "target.h" + +#include +#include +#include + +#include "inf-ptrace.h" + +#define MIPS64OBSD_NUM_REGS 73 + +/* Supply the general-purpose registers stored in GREGS to REGCACHE. */ + +static void +mips64obsd_supply_gregset (struct regcache *regcache, const void *gregs) +{ + const char *regs = gregs; + int regnum; + + for (regnum = 0; regnum < MIPS64OBSD_NUM_REGS; regnum++) + regcache_raw_supply (regcache, regnum, regs + regnum * 8); +} + +/* Collect the general-purpose registers from REGCACHE and store them + in GREGS. */ + +static void +mips64obsd_collect_gregset (const struct regcache *regcache, + void *gregs, int regnum) +{ + char *regs = gregs; + int i; + + for (i = 0; i <= MIPS64OBSD_NUM_REGS; i++) + { + if (regnum == -1 || regnum == i) + regcache_raw_collect (regcache, i, regs + i * 8); + } +} + + +/* Fetch register REGNUM from the inferior. If REGNUM is -1, do this + for all registers. */ + +static void +mips64obsd_fetch_inferior_registers (int regnum) +{ + struct reg regs; + + if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), + (PTRACE_TYPE_ARG3) ®s, 0) == -1) + perror_with_name ("Couldn't get registers"); + + mips64obsd_supply_gregset (current_regcache, ®s); +} + +/* Store register REGNUM back into the inferior. If REGNUM is -1, do + this for all registers. */ + +static void +mips64obsd_store_inferior_registers (int regnum) +{ + struct reg regs; + + if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), + (PTRACE_TYPE_ARG3) ®s, 0) == -1) + perror_with_name ("Couldn't get registers"); + + mips64obsd_collect_gregset (current_regcache, ®s, regnum); + + if (ptrace (PT_SETREGS, PIDGET (inferior_ptid), + (PTRACE_TYPE_ARG3) ®s, 0) == -1) + perror_with_name ("Couldn't write registers"); +} + + +/* Provide a prototype to silence -Wmissing-prototypes. */ +void _initialize_mips64obsd_nat (void); + +void +_initialize_mips64obsd_nat (void) +{ + struct target_ops *t; + + t = inf_ptrace_target (); + t->to_fetch_registers = mips64obsd_fetch_inferior_registers; + t->to_store_registers = mips64obsd_store_inferior_registers; + add_target (t); +} Index: mips64obsd-tdep.c =================================================================== RCS file: mips64obsd-tdep.c diff -N mips64obsd-tdep.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ mips64obsd-tdep.c 23 Oct 2004 11:51:30 -0000 @@ -0,0 +1,98 @@ +/* Target-dependent code for OpenBSD/mips64. + + Copyright 2004 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include "defs.h" +#include "osabi.h" +#include "regcache.h" +#include "regset.h" + +#include "gdb_string.h" + +#include "mips-tdep.h" +#include "solib-svr4.h" + +#define MIPS64OBSD_NUM_REGS 73 + +/* Core file support. */ + +/* Supply register REGNUM from the buffer specified by GREGS and LEN + in the general-purpose register set REGSET to register cache + REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */ + +static void +mips64obsd_supply_gregset (const struct regset *regset, + struct regcache *regcache, int regnum, + const void *gregs, size_t len) +{ + const char *regs = gregs; + int i; + + for (i = 0; i < MIPS64OBSD_NUM_REGS; i++) + { + if (regnum == i || regnum == -1) + regcache_raw_supply (regcache, i, regs + i * 8); + } +} + +/* OpenBSD/mips64 register set. */ + +static struct regset mips64obsd_gregset = +{ + NULL, + mips64obsd_supply_gregset +}; + +/* Return the appropriate register set for the core section identified + by SECT_NAME and SECT_SIZE. */ + +static const struct regset * +mips64obsd_regset_from_core_section (struct gdbarch *gdbarch, + const char *sect_name, size_t sect_size) +{ + if (strcmp (sect_name, ".reg") == 0 && sect_size >= MIPS64OBSD_NUM_REGS * 8) + return &mips64obsd_gregset; + + return NULL; +} + + +static void +mips64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + set_gdbarch_regset_from_core_section + (gdbarch, mips64obsd_regset_from_core_section); + + set_gdbarch_software_single_step (gdbarch, mips_software_single_step); + + set_solib_svr4_fetch_link_map_offsets + (gdbarch, svr4_lp64_fetch_link_map_offsets); +} + + +/* Provide a prototype to silence -Wmissing-prototypes. */ +void _initialize_mips64obsd_tdep (void); + +void +_initialize_mips64obsd_tdep (void) +{ + gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_OPENBSD_ELF, + mips64obsd_init_abi); +} Index: config/mips/obsd64.mh =================================================================== RCS file: config/mips/obsd64.mh diff -N config/mips/obsd64.mh --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ config/mips/obsd64.mh 23 Oct 2004 11:51:30 -0000 @@ -0,0 +1,3 @@ +# Host: OpenBSD/mips64 +NATDEPFILES= fork-child.o inf-ptrace.o \ + mips64obsd-nat.o Index: config/mips/obsd64.mt =================================================================== RCS file: config/mips/obsd64.mt diff -N config/mips/obsd64.mt --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ config/mips/obsd64.mt 23 Oct 2004 11:51:30 -0000 @@ -0,0 +1,3 @@ +# Target: OpenBSD/mips64 +TDEPFILES= mips-tdep.o mips64obsd-tdep.o corelow.o solib.o solib-svr4.o +DEPRECATED_TM_FILE= tm-nbsd.h