diff options
author | Andrew Cagney <cagney@redhat.com> | 2001-10-13 22:13:35 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2001-10-13 22:13:35 +0000 |
commit | 5769d3cd7dfe38f704e6818b4587a65f885879fa (patch) | |
tree | 1666b8fa77daca955a4446fe1940fff3190188a9 /gdb/config/s390 | |
parent | 83e6b173e791941d7bbd5a0b2057832f56e28b1d (diff) | |
download | gdb-5769d3cd7dfe38f704e6818b4587a65f885879fa.zip gdb-5769d3cd7dfe38f704e6818b4587a65f885879fa.tar.gz gdb-5769d3cd7dfe38f704e6818b4587a65f885879fa.tar.bz2 |
S/390 31 & 64 bit target and GNU/Linux native support.
Contributed by D.J. Barrow <djbarrow@de.ibm.com> of IBM.
* s390-nat.c, s390-tdep.c: New file.
* config/s390/nm-linux.h, config/s390/s390.mh: New file.
* config/s390/s390.mt, config/s390/s390x.mt: New file.
* config/s390/tm-linux.h, config/s390/tm-s390.h: New file.
* config/s390/xm-linux.h: New file.
* NEWS: Update.
* MAINTAINERS: Update.
Diffstat (limited to 'gdb/config/s390')
-rw-r--r-- | gdb/config/s390/nm-linux.h | 92 | ||||
-rw-r--r-- | gdb/config/s390/s390.mh | 15 | ||||
-rw-r--r-- | gdb/config/s390/s390.mt | 7 | ||||
-rw-r--r-- | gdb/config/s390/s390x.mt | 9 | ||||
-rw-r--r-- | gdb/config/s390/tm-linux.h | 42 | ||||
-rw-r--r-- | gdb/config/s390/tm-s390.h | 115 | ||||
-rw-r--r-- | gdb/config/s390/xm-linux.h | 33 |
7 files changed, 313 insertions, 0 deletions
diff --git a/gdb/config/s390/nm-linux.h b/gdb/config/s390/nm-linux.h new file mode 100644 index 0000000..ddf298e --- /dev/null +++ b/gdb/config/s390/nm-linux.h @@ -0,0 +1,92 @@ +/* Native support for Linux for S390 + Copyright 2001 Free Software Foundation, Inc. + Ported by D.J. Barrow for IBM Deutschland Entwicklung GmbH, IBM Corporation. + derived from i390-nmlinux.h + 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. */ + +#ifndef NM_LINUX_H +#define NM_LINUX_H + +#include "config/nm-linux.h" + +#define REGISTER_U_ADDR(addr, blockend, regno) \ + (addr) = s390_register_u_addr((blockend),(regno)); +extern int s390_register_u_addr (int, int); + +/* Return sizeof user struct to callers in less machine dependent routines */ + +#define KERNEL_U_SIZE kernel_u_size() +extern int kernel_u_size (void); + +#define U_REGS_OFFSET 0 + + +/* We define this if link.h is available, because with ELF we use SVR4 style + shared libraries. */ + +#ifdef HAVE_LINK_H +#define SVR4_SHARED_LIBS +#include "solib.h" /* Support for shared libraries. */ +#endif + + +/* WATCHPOINT SPECIFIC STUFF */ + +#define TARGET_HAS_HARDWARE_WATCHPOINTS +#define HAVE_CONTINUABLE_WATCHPOINT +#define HAVE_STEPPABLE_WATCHPOINT +#define target_insert_watchpoint(addr, len, type) \ + s390_insert_watchpoint (PIDGET (inferior_ptid), addr, len, type) + +#define target_remove_watchpoint(addr, len, type) \ + s390_remove_watchpoint (PIDGET (inferior_ptid), addr, len) + +extern int watch_area_cnt; +/* gdb if really stupid & calls this all the time without a + watchpoint even being set */ +#define STOPPED_BY_WATCHPOINT(W) \ + (watch_area_cnt&&s390_stopped_by_watchpoint (PIDGET(inferior_ptid))) + +extern CORE_ADDR s390_stopped_by_watchpoint (int); + +/* + Type can be 1 for a read_watchpoint or 2 for an access watchpoint. + */ +extern int s390_insert_watchpoint (int pid, CORE_ADDR addr, int len, int rw); +extern int s390_remove_watchpoint (int pid, CORE_ADDR addr, int len); +#define TARGET_CAN_USE_HARDWARE_WATCHPOINT(type, cnt, ot) \ + (((type) == bp_hardware_watchpoint)|| \ + ((type) == bp_watchpoint)|| \ + ((type) == bp_read_watchpoint) || \ + ((type) == bp_access_watchpoint)) + +#undef PREPARE_TO_PROCEED + +extern void lin_lwp_attach_lwp (ptid_t ptid, int verbose); +#define ATTACH_LWP(ptid, verbose) lin_lwp_attach_lwp ((ptid), (verbose)) + + +#include <signal.h> + +extern void lin_thread_get_thread_signals (sigset_t * mask); +#define GET_THREAD_SIGNALS(mask) lin_thread_get_thread_signals (mask) + +/* Needed for s390x */ +#define PTRACE_ARG3_TYPE long +#define PTRACE_XFER_TYPE long +#endif /* nm_linux.h */ diff --git a/gdb/config/s390/s390.mh b/gdb/config/s390/s390.mh new file mode 100644 index 0000000..fa953b4 --- /dev/null +++ b/gdb/config/s390/s390.mh @@ -0,0 +1,15 @@ +# Host: S390, running Linux + +XM_FILE= xm-linux.h +XDEPFILES= ser-tcp.o +XM_CLIBS= + +NAT_FILE= nm-linux.h +NATDEPFILES= infptrace.o solib.o inftarg.o fork-child.o corelow.o \ + s390-nat.o linux-thread.o core-aout.o core-regset.o +# post 5.0 natdepfiles. +NATDEPFILES+= thread-db.o lin-lwp.o proc-service.o +LOADLIBES = -ldl -rdynamic + + + diff --git a/gdb/config/s390/s390.mt b/gdb/config/s390/s390.mt new file mode 100644 index 0000000..87a5ba3 --- /dev/null +++ b/gdb/config/s390/s390.mt @@ -0,0 +1,7 @@ +# Target: S390 running Linux +TM_FILE= tm-linux.h +TDEPFILES=s390-tdep.o solib.o +# Post 5.0 tdep-files +TDEPFILES+=solib-svr4.o solib-legacy.o +GDB_MULTI_ARCH=GDB_MULTI_ARCH_PARTIAL +GDBSERVER_DEPFILES= low-linux.o s390-tdep.o s390-nat.o diff --git a/gdb/config/s390/s390x.mt b/gdb/config/s390/s390x.mt new file mode 100644 index 0000000..310021d --- /dev/null +++ b/gdb/config/s390/s390x.mt @@ -0,0 +1,9 @@ +# Target: S390 running Linux +TM_FILE= tm-linux.h +TDEPFILES=s390-tdep.o solib.o +# Post 5.0 tdep-files +TDEPFILES+=solib-svr4.o solib-legacy.o +GDB_MULTI_ARCH=GDB_MULTI_ARCH_PARTIAL +GDBSERVER_DEPFILES= low-linux.o s390-tdep.o s390-nat.o +# needed for gdbserver. +MT_CFLAGS= -DCONFIG_ARCH_S390X diff --git a/gdb/config/s390/tm-linux.h b/gdb/config/s390/tm-linux.h new file mode 100644 index 0000000..ce47ccc --- /dev/null +++ b/gdb/config/s390/tm-linux.h @@ -0,0 +1,42 @@ +/* Target definitions for GDB for a s390 running Linux. + Copyright 2001 Free Software Foundation, Inc. + Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) + for IBM Deutschland Entwicklung GmbH, IBM Corporation. + + 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. */ + +#ifndef TM_LINUX_H +#define TM_LINUX_H +#ifdef GDBSERVER +#define S390_GNULINUX_TARGET +#endif /* GDBSERVER */ +#undef TARGET_ELF64 +#define TARGET_ELF64 (gdbarch_tdep (current_gdbarch)->intreg_size==8) + +#include "config/tm-linux.h" + +/* Zap several macros defined in the above header so that multi-arch + can safely re-define them. The ``correct fix'' involves + eliminating either the above include or even this file. */ +#undef SKIP_TRAMPOLINE_CODE + +#include "s390/tm-s390.h" + + + +#endif /* TM_LINUX_H */ diff --git a/gdb/config/s390/tm-s390.h b/gdb/config/s390/tm-s390.h new file mode 100644 index 0000000..da9f621 --- /dev/null +++ b/gdb/config/s390/tm-s390.h @@ -0,0 +1,115 @@ +/* Macro definitions for GDB on an S390. + Copyright 2001 Free Software Foundation, Inc. + Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) + for IBM Deutschland Entwicklung GmbH, IBM Corporation. + + 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. */ + +#if !defined(TM_S390_H) +#define TM_S390_H 1 + +#define S390_NUM_GPRS (16) +#define S390_GPR_SIZE REGISTER_SIZE +#define S390_PSW_MASK_SIZE REGISTER_SIZE +#define S390_PSW_ADDR_SIZE REGISTER_SIZE +#define S390_NUM_FPRS (16) +#define S390_FPR_SIZE (8) +#define S390_FPC_SIZE (4) +#define S390_FPC_PAD_SIZE (4) /* gcc insists on aligning the fpregs */ +#define S390_NUM_CRS (16) +#define S390_CR_SIZE REGISTER_SIZE +#define S390_NUM_ACRS (16) +#define S390_ACR_SIZE (4) + +#define S390_NUM_REGS (2+S390_NUM_GPRS+S390_NUM_ACRS+S390_NUM_CRS+1+S390_NUM_FPRS) +#define S390_FIRST_ACR (2+S390_NUM_GPRS) +#define S390_LAST_ACR (S390_FIRST_ACR+S390_NUM_ACRS-1) +#define S390_FIRST_CR (S390_FIRST_ACR+S390_NUM_ACRS) +#define S390_LAST_CR (S390_FIRST_CR+S390_NUM_CRS-1) + +#define S390_PSWM_REGNUM 0 +#define S390_PC_REGNUM 1 +#define S390_GP0_REGNUM 2 /* GPR register 0 */ +#define S390_GP_LAST_REGNUM (S390_GP0_REGNUM+S390_NUM_GPRS-1) +/* Usually return address */ +#define S390_RETADDR_REGNUM (S390_GP0_REGNUM+14) +/* Contains address of top of stack */ +#define S390_SP_REGNUM (S390_GP0_REGNUM+15) +/* needed in findvar.c still */ +#define S390_FP_REGNUM S390_SP_REGNUM +#define S390_FRAME_REGNUM (S390_GP0_REGNUM+11) +#define S390_FPC_REGNUM (S390_GP0_REGNUM+S390_NUM_GPRS+S390_NUM_ACRS+S390_NUM_CRS) +/* FPR (Floating point) register 0 */ +#define S390_FP0_REGNUM (S390_FPC_REGNUM+1) +/* Last floating point register */ +#define S390_FPLAST_REGNUM (S390_FP0_REGNUM+S390_NUM_FPRS-1) +#define S390_LAST_REGNUM S390_FPLAST_REGNUM + + +#define S390_ACR0_OFFSET ((S390_PSW_MASK_SIZE+S390_PSW_ADDR_SIZE)+(S390_GPR_SIZE*S390_NUM_GPRS)) +#define S390_CR0_OFFSET (S390_ACR0_OFFSET+(S390_ACR_SIZE*S390_NUM_ACRS)) +#define S390_FPC_OFFSET (S390_CR0_OFFSET+(S390_CR_SIZE*S390_NUM_CRS)) +#define S390_FP0_OFFSET (S390_FPC_OFFSET+(S390_FPC_SIZE+S390_FPC_PAD_SIZE)) +#define S390_GPR6_STACK_OFFSET (GDB_TARGET_IS_ESAME ? 48:24) + +#define S390_REGISTER_BYTES ((4+4)+(4*S390_NUM_GPRS)+(4*S390_NUM_ACRS)+ \ +(4*S390_NUM_CRS)+(S390_FPC_SIZE+S390_FPC_PAD_SIZE)+(S390_FPR_SIZE*S390_NUM_FPRS)) + +#define S390X_REGISTER_BYTES ((8+8)+(8*S390_NUM_GPRS)+(4*S390_NUM_ACRS)+ \ +(8*S390_NUM_CRS)+(S390_FPC_SIZE+S390_FPC_PAD_SIZE)+(S390_FPR_SIZE*S390_NUM_FPRS)) + +#ifdef GDBSERVER + +int s390_register_byte (int reg_nr); +#define REGISTER_BYTE(reg_nr) s390_register_byte(reg_nr) +#define PC_REGNUM S390_PC_REGNUM +#define NUM_REGS S390_NUM_REGS +#define NUM_FREGS S390_NUM_FPRS +#define FP_REGNUM S390_FP_REGNUM +#define SP_REGNUM S390_SP_REGNUM +/* Obviously ptrace for user program tracing cannot be allowed + mess with control registers (except per registers for hardware watchpoints), + when we add kernel debugging we may need to alter these macros. */ +int s390_cannot_fetch_register (int regno); +#define CANNOT_FETCH_REGISTER(regno) s390_cannot_fetch_register(regno) +#define CANNOT_STORE_REGISTER(regno) s390_cannot_fetch_register(regno) + +#if CONFIG_ARCH_S390X + +int s390x_register_raw_size (int reg_nr); +#define REGISTER_RAW_SIZE(reg_nr) s390x_register_raw_size(reg_nr) +#define GDB_TARGET_IS_ESAME (1) +#define REGISTER_SIZE (8) +#define REGISTER_BYTES S390X_REGISTER_BYTES + +#else /* CONFIG_ARCH_S390X */ + +int s390_register_raw_size (int reg_nr); +#define REGISTER_RAW_SIZE(reg_nr) s390_register_raw_size(reg_nr) +#define GDB_TARGET_IS_ESAME (0) +#define REGISTER_SIZE (4) +#define REGISTER_BYTES S390_REGISTER_BYTES + +#endif /* CONFIG_ARCH_S390X */ + +#else /* GDBSERVER */ + +#define GDB_TARGET_IS_ESAME (TARGET_ARCHITECTURE->mach == bfd_mach_s390_esame) + +#endif /* GDBSERVER */ +#endif /* ifndef TM_S390_H */ diff --git a/gdb/config/s390/xm-linux.h b/gdb/config/s390/xm-linux.h new file mode 100644 index 0000000..5c5955c --- /dev/null +++ b/gdb/config/s390/xm-linux.h @@ -0,0 +1,33 @@ +/* Native support for GNU/Linux, for GDB, the GNU debugger. + Copyright 2001 Free Software Foundation, Inc. + Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) + for IBM Deutschland Entwicklung GmbH, IBM Corporation. + + 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. */ + +#ifndef XM_LINUX_H +#define XM_LINUX_H + +#define HOST_BYTE_ORDER BIG_ENDIAN + + +/* This is the amount to subtract from u.u_ar0 + to get the offset in the core file of the register values. */ +#define KERNEL_U_ADDR 0x0 + +#endif /* #ifndef XM_LINUX_H */ |