From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27871 invoked by alias); 4 Apr 2004 17:44:51 -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 27847 invoked from network); 4 Apr 2004 17:44:47 -0000 Received: from unknown (HELO pippin.tausq.org) (64.81.244.94) by sources.redhat.com with SMTP; 4 Apr 2004 17:44:47 -0000 Received: by pippin.tausq.org (Postfix, from userid 1000) id CDB18CD28A; Sun, 4 Apr 2004 10:45:32 -0700 (PDT) Date: Sun, 04 Apr 2004 17:44:00 -0000 From: Randolph Chung To: gdb-patches@sources.redhat.com Subject: [patch 2/2] Add hppa-linux target to gdb Message-ID: <20040404174532.GR750@tausq.org> Reply-To: Randolph Chung Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-GPG: for GPG key, see http://www.tausq.org/gpg.txt User-Agent: Mutt/1.5.5.1+cvs20040105i X-SW-Source: 2004-04/txt/msg00114.txt.bz2 Second of two patches incorporating comments from Eli and Dan. This adds code to support hppa-linux as a target. Compared to the previous version, tm-linux.h was removed in favor of the existing tm-hppa.h. thanks randolph 2004-04-04 Randolph Chung * configure.host: Add hppa*-*-linux* target. * configure.tgt: Likewise. * config/pa/linux.mh: New file. * config/pa/linux.mt: New file. * config/pa/nm-linux.h: New file. * config/pa/tm-linux.h: New file. * hppa-linux-nat.c: New file. * hppa-linux-tdep.c: New file. * hppa-linux-tdep.h: New file. * config/djgpp/fnchange.lst: Add entries for hppa-linux-tdep.c and diff -uNrp gdb-cvs/gdb/config/djgpp/fnchange.lst gdb-work/gdb/config/djgpp/fnchange.lst --- gdb-cvs/gdb/config/djgpp/fnchange.lst 2004-02-28 10:01:48.000000000 -0800 +++ gdb-work/gdb/config/djgpp/fnchange.lst 2004-04-03 22:09:29.000000000 -0800 @@ -232,6 +232,8 @@ @V@/gdb/testsuite/gdb.mi/mi2-var-display.exp @V@/gdb/testsuite/gdb.mi/mi2vardisplay.exp @V@/gdb/amd64-linux-tdep.c @V@/gdb/amd64-ltdep.c @V@/gdb/amd64-linux-nat.c @V@/gdb/amd64-lnat.c +@V@/gdb/hppa-linux-tdep.c @V@/gdb/palnxtdep.c +@V@/gdb/hppa-linux-nat.c @V@/gdb/palnxnat.c @V@/include/ChangeLog-9103 @V@/include/ChangeLog.9103 @V@/include/coff/ChangeLog-9103 @V@/include/coff/ChangeLog.9103 @V@/include/elf/ChangeLog-9103 @V@/include/elf/ChangeLog.9103 diff -uNrp gdb-cvs/gdb/config/pa/linux.mh gdb-work/gdb/config/pa/linux.mh --- gdb-cvs/gdb/config/pa/linux.mh 1969-12-31 16:00:00.000000000 -0800 +++ gdb-work/gdb/config/pa/linux.mh 2004-04-04 10:37:16.363143992 -0700 @@ -0,0 +1,9 @@ +# Host: Hewlett-Packard PA-RISC machine, running Linux +XDEPFILES= +XM_FILE= xm-linux.h +NAT_FILE= nm-linux.h +NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o gcore.o \ + core-regset.o hppa-linux-nat.o linux-proc.o \ + proc-service.o thread-db.o lin-lwp.o linux-nat.o + +XM_CLIBS= -ldl diff -uNrp gdb-cvs/gdb/config/pa/linux.mt gdb-work/gdb/config/pa/linux.mt --- gdb-cvs/gdb/config/pa/linux.mt 1969-12-31 16:00:00.000000000 -0800 +++ gdb-work/gdb/config/pa/linux.mt 2004-04-04 09:36:32.799049928 -0700 @@ -0,0 +1,3 @@ +# Target: HP PA-RISC running Linux +TDEPFILES= hppa-tdep.o hppa-linux-tdep.o glibc-tdep.o solib.o solib-svr4.o +TM_FILE=tm-hppa.h diff -uNrp gdb-cvs/gdb/config/pa/nm-linux.h gdb-work/gdb/config/pa/nm-linux.h --- gdb-cvs/gdb/config/pa/nm-linux.h 1969-12-31 16:00:00.000000000 -0800 +++ gdb-work/gdb/config/pa/nm-linux.h 2004-04-04 10:01:17.686312752 -0700 @@ -0,0 +1,56 @@ +/* Native support for GNU/Linux, for GDB, the GNU debugger. + Copyright (C) 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. */ + +#ifndef PA_NM_LINUX_H +#define PA_NM_LINUX_H + +#include "config/nm-linux.h" + +#define U_REGS_OFFSET 0 + +#define CANNOT_FETCH_REGISTER(regno) pa_cannot_fetch_register(regno) +extern int pa_cannot_fetch_register (int regno); + +#define CANNOT_STORE_REGISTER(regno) pa_cannot_store_register(regno) +extern int pa_cannot_store_register (int regno); + +#define HAVE_STEPPABLE_WATCHPOINT 1 +#define STOPPED_BY_WATCHPOINT(W) \ + pa_linux_stopped_by_watchpoint (PIDGET(inferior_ptid)) +extern CORE_ADDR pa_linux_stopped_by_watchpoint (int); + +#define target_insert_watchpoint(addr, len, type) \ + pa_linux_insert_watchpoint (PIDGET(inferior_ptid), addr, len, type) +extern int pa_linux_insert_watchpoint (int pid, CORE_ADDR addr, + int len, int rw); + +#define target_remove_watchpoint(addr, len, type) \ + pa_linux_remove_watchpoint (PIDGET(inferior_ptid), addr, len) +extern int pa_linux_remove_watchpoint (int pid, CORE_ADDR addr, int len); + +/* Hardware watchpoints */ + +#define TARGET_HAS_HARDWARE_WATCHPOINTS + +#define TARGET_CAN_USE_HARDWARE_WATCHPOINT(type, cnt, ot) \ + (type == bp_hardware_watchpoint) + +#endif + diff -uNrp gdb-cvs/gdb/config/pa/xm-linux.h gdb-work/gdb/config/pa/xm-linux.h --- gdb-cvs/gdb/config/pa/xm-linux.h 1969-12-31 16:00:00.000000000 -0800 +++ gdb-work/gdb/config/pa/xm-linux.h 2004-04-04 09:38:25.591902808 -0700 @@ -0,0 +1,31 @@ +/* Host-dependent definitions for the hppa-linux. + + 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. */ + +#ifndef XM_HPPA_LINUX_H +#define XM_HPPA_LINUX_H + +#include "floatformat.h" + +#define HOST_FLOAT_FORMAT &floatformat_ieee_single_big +#define HOST_DOUBLE_FORMAT &floatformat_ieee_double_big +#define HOST_LONG_DOUBLE_FORMAT &floatformat_ieee_double_big + +#endif /* xm-linux.h */ diff -uNrp gdb-cvs/gdb/configure.host gdb-work/gdb/configure.host --- gdb-cvs/gdb/configure.host 2004-02-25 12:45:30.000000000 -0800 +++ gdb-work/gdb/configure.host 2004-04-03 16:29:22.000000000 -0800 @@ -48,6 +48,7 @@ hppa*-*-hpux10.20) gdb_host=hpux1020 ;; hppa*64*-*-hpux11*) gdb_host=hpux11w ;; hppa*-*-hpux11*) gdb_host=hpux11 ;; hppa*-*-hpux*) gdb_host=hppahpux ;; +hppa*-*-linux*) gdb_host=linux ;; i[34567]86-ncr-*) gdb_host=ncr3000 ;; i[34567]86-*-dgux*) gdb_host=i386v4 ;; diff -uNrp gdb-cvs/gdb/configure.tgt gdb-work/gdb/configure.tgt --- gdb-cvs/gdb/configure.tgt 2004-02-25 12:45:30.000000000 -0800 +++ gdb-work/gdb/configure.tgt 2004-04-03 16:29:43.000000000 -0800 @@ -74,6 +74,7 @@ frv-*-*) gdb_target=frv ;; hppa*64*-*-hpux11*) gdb_target=hppa64 ;; hppa*-*-hpux*) gdb_target=hppahpux ;; hppa*-*-hiux*) gdb_target=hppahpux ;; +hppa*-*-linux*) gdb_target=linux ;; hppa*-*-*) gdb_target=hppa ;; i[34567]86-ncr-*) gdb_target=ncr3000 ;; diff -uNrp gdb-cvs/gdb/hppa-linux-nat.c gdb-work/gdb/hppa-linux-nat.c --- gdb-cvs/gdb/hppa-linux-nat.c 1969-12-31 16:00:00.000000000 -0800 +++ gdb-work/gdb/hppa-linux-nat.c 2004-04-04 10:29:54.805270992 -0700 @@ -0,0 +1,350 @@ +/* Functions specific to running gdb native on HPPA running Linux. + 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 "gdbcore.h" +#include "regcache.h" +#include "linux-nat.h" + +#include "gdb_assert.h" +#include "gdb_string.h" +#include +#include +#include +#include + +#ifdef HAVE_SYS_REG_H +#include +#endif + +#include + +/* Prototypes for supply_gregset etc. */ +#include "gregset.h" + +#include "hppa-linux-tdep.h" + +/* These must match the order of the register names. + + Some sort of lookup table is needed because the offsets associated + with the registers are all over the board. */ + +static const int u_offsets[] = + { + /* general registers */ + -1, + PT_GR1, + PT_GR2, + PT_GR3, + PT_GR4, + PT_GR5, + PT_GR6, + PT_GR7, + PT_GR8, + PT_GR9, + PT_GR10, + PT_GR11, + PT_GR12, + PT_GR13, + PT_GR14, + PT_GR15, + PT_GR16, + PT_GR17, + PT_GR18, + PT_GR19, + PT_GR20, + PT_GR21, + PT_GR22, + PT_GR23, + PT_GR24, + PT_GR25, + PT_GR26, + PT_GR27, + PT_GR28, + PT_GR29, + PT_GR30, + PT_GR31, + + PT_SAR, + PT_IAOQ0, + PT_IASQ0, + PT_IAOQ1, + PT_IASQ1, + -1, /* eiem */ + PT_IIR, + PT_ISR, + PT_IOR, + PT_PSW, + -1, /* goto */ + + PT_SR4, + PT_SR0, + PT_SR1, + PT_SR2, + PT_SR3, + PT_SR5, + PT_SR6, + PT_SR7, + + -1, /* cr0 */ + -1, /* pid0 */ + -1, /* pid1 */ + -1, /* ccr */ + -1, /* pid2 */ + -1, /* pid3 */ + -1, /* cr24 */ + -1, /* cr25 */ + -1, /* cr26 */ + PT_CR27, + -1, /* cr28 */ + -1, /* cr29 */ + -1, /* cr30 */ + + /* Floating point regs. */ + PT_FR0, PT_FR0 + 4, + PT_FR1, PT_FR1 + 4, + PT_FR2, PT_FR2 + 4, + PT_FR3, PT_FR3 + 4, + PT_FR4, PT_FR4 + 4, + PT_FR5, PT_FR5 + 4, + PT_FR6, PT_FR6 + 4, + PT_FR7, PT_FR7 + 4, + PT_FR8, PT_FR8 + 4, + PT_FR9, PT_FR9 + 4, + PT_FR10, PT_FR10 + 4, + PT_FR11, PT_FR11 + 4, + PT_FR12, PT_FR12 + 4, + PT_FR13, PT_FR13 + 4, + PT_FR14, PT_FR14 + 4, + PT_FR15, PT_FR15 + 4, + PT_FR16, PT_FR16 + 4, + PT_FR17, PT_FR17 + 4, + PT_FR18, PT_FR18 + 4, + PT_FR19, PT_FR19 + 4, + PT_FR20, PT_FR20 + 4, + PT_FR21, PT_FR21 + 4, + PT_FR22, PT_FR22 + 4, + PT_FR23, PT_FR23 + 4, + PT_FR24, PT_FR24 + 4, + PT_FR25, PT_FR25 + 4, + PT_FR26, PT_FR26 + 4, + PT_FR27, PT_FR27 + 4, + PT_FR28, PT_FR28 + 4, + PT_FR29, PT_FR29 + 4, + PT_FR30, PT_FR30 + 4, + PT_FR31, PT_FR31 + 4, + }; + +CORE_ADDR +register_addr (int regno, CORE_ADDR blockend) +{ + CORE_ADDR addr; + + if ((unsigned) regno >= NUM_REGS) + error ("Invalid register number %d.", regno); + + if (u_offsets[regno] == -1) + addr = 0; + else + { + addr = (CORE_ADDR) u_offsets[regno]; + } + + return addr; +} + +int pa_cannot_fetch_register (regno) + int regno; +{ + return (unsigned int) regno >= NUM_REGS || u_offsets[regno] == -1; +} + +int pa_cannot_store_register (regno) + int regno; +{ + return ((unsigned int) regno >= NUM_REGS + || regno == PA_GR0_REGNUM + || regno == PA_PCSQ_HEAD_REGNUM + || (regno >= PA_PCSQ_TAIL_REGNUM && regno < PA_IPSW_REGNUM) + || (regno > PA_IPSW_REGNUM && regno < PA_FR4_REGNUM)); +} + +static const int greg_map[] = + { + PA_GR0_REGNUM, + PA_GR1_REGNUM, + PA_GR2_REGNUM, + PA_GR3_REGNUM, + PA_GR4_REGNUM, + PA_GR5_REGNUM, + PA_GR6_REGNUM, + PA_GR7_REGNUM, + PA_GR8_REGNUM, + PA_GR9_REGNUM, + PA_GR10_REGNUM, + PA_GR11_REGNUM, + PA_GR12_REGNUM, + PA_GR13_REGNUM, + PA_GR14_REGNUM, + PA_GR15_REGNUM, + PA_GR16_REGNUM, + PA_GR17_REGNUM, + PA_GR18_REGNUM, + PA_GR19_REGNUM, + PA_GR20_REGNUM, + PA_GR21_REGNUM, + PA_GR22_REGNUM, + PA_GR23_REGNUM, + PA_GR24_REGNUM, + PA_GR25_REGNUM, + PA_GR26_REGNUM, + PA_GR27_REGNUM, + PA_GR28_REGNUM, + PA_GR29_REGNUM, + PA_GR30_REGNUM, + PA_GR31_REGNUM, + PA_SR0_REGNUM, + PA_SR1_REGNUM, + PA_SR2_REGNUM, + PA_SR3_REGNUM, + PA_SR4_REGNUM, + PA_SR5_REGNUM, + PA_SR6_REGNUM, + PA_SR7_REGNUM, + PA_PCOQ_HEAD_REGNUM, + PA_PCOQ_TAIL_REGNUM, + PA_PCSQ_HEAD_REGNUM, + PA_PCSQ_TAIL_REGNUM, + PA_CR11_REGNUM, + PA_CR19_REGNUM, + PA_CR20_REGNUM, + PA_CR21_REGNUM, + PA_CR22_REGNUM, + PA_CR0_REGNUM, + PA_CR24_REGNUM, + PA_CR25_REGNUM, + PA_CR26_REGNUM, + PA_CR27_REGNUM, + PA_CR28_REGNUM, + PA_CR29_REGNUM, + PA_CR30_REGNUM, + PA_CR31_REGNUM, + PA_CR8_REGNUM, + PA_CR9_REGNUM, + PA_CR12_REGNUM, + PA_CR13_REGNUM, + PA_CR10_REGNUM, + PA_CR15_REGNUM + }; + +void +supply_gregset (gdb_gregset_t *gregsetp) +{ + int i; + greg_t *regp = (greg_t *) gregsetp; + + for (i = 0; i < sizeof (greg_map) / sizeof (greg_map[0]); i++, regp++) + { + int regno = greg_map[i]; + /* When running a 64 bit kernel, a greg_t may be larger than the + actual register, so just pick off the LS bits of big-endian word. */ + supply_register (regno, + ((char *) (regp + 1)) - register_size (current_gdbarch, regno)); + } +} + +void +fill_gregset (gdb_gregset_t *gregsetp, int regno) +{ + int i; + greg_t *regp = (greg_t *) gregsetp; + + memset (gregsetp, 0, sizeof (*gregsetp)); + for (i = 0; i < sizeof (greg_map) / sizeof (greg_map[0]); i++, regp++) + { + int regi = greg_map[i]; + + if (regno == -1 || regi == regno) + { + int rawsize = register_size (current_gdbarch, regi); + regcache_collect (regi, ((char *) (regp + 1)) - rawsize); + } + } +} + +/* Given a pointer to a floating point register set in /proc format + (fpregset_t *), unpack the register contents and supply them as gdb's + idea of the current floating point register values. */ + +void +supply_fpregset (gdb_fpregset_t *fpregsetp) +{ + register int regi; + char *from; + + for (regi = 0; regi <= 31; regi++) + { + from = (char *) &((*fpregsetp)[regi]); + supply_register (2*regi + PA_FR0_REGNUM, from); + supply_register (2*regi + PA_FR0_REGNUM + 1, from + 4); + } +} + +/* Given a pointer to a floating point register set in /proc format + (fpregset_t *), update the register specified by REGNO from gdb's idea + of the current floating point register set. If REGNO is -1, update + them all. */ + +void +fill_fpregset (gdb_fpregset_t *fpregsetp, int regno) +{ + if (regno == -1) + deprecated_read_register_bytes (DEPRECATED_REGISTER_BYTE (PA_FR0_REGNUM), + (char *)fpregsetp, + 32 * 2 * DEPRECATED_REGISTER_RAW_SIZE (PA_FR0_REGNUM)); + else + { + /* Gross. fpregset_t is double, registers[x] has single + precision reg. */ + char *to = (char *) &((*fpregsetp)[(regno - PA_FR0_REGNUM) / 2]); + if ((regno - PA_FR0_REGNUM) & 1) + to += 4; + regcache_collect (regno, to); + } +} + +int +pa_linux_insert_watchpoint (int pid, CORE_ADDR addr, int len, int rw) +{ + return -1; +} + +int +pa_linux_remove_watchpoint (int pid, CORE_ADDR addr, int len) +{ + return -1; +} + +CORE_ADDR +pa_linux_stopped_by_watchpoint (int pid) +{ + return 0; +} diff -uNrp gdb-cvs/gdb/hppa-linux-tdep.c gdb-work/gdb/hppa-linux-tdep.c --- gdb-cvs/gdb/hppa-linux-tdep.c 1969-12-31 16:00:00.000000000 -0800 +++ gdb-work/gdb/hppa-linux-tdep.c 2004-04-03 20:02:21.000000000 -0800 @@ -0,0 +1,58 @@ +/* Target-dependent code for Linux running on PA-RISC, for GDB. + + 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 "arch-utils.h" +#include "gdbcore.h" +#include "osabi.h" +#include "gdb_string.h" +#include "frame.h" +#include "inferior.h" +#include "target.h" +#include "objfiles.h" +#include "elf/common.h" +#include "solib-svr4.h" +#include "glibc-tdep.h" + +#include "hppa-linux-tdep.h" + +/* Forward declarations. */ +extern initialize_file_ftype _initialize_hppa_linux_tdep; + +static void +hppa_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + /* GNU/Linux uses SVR4-style shared libraries. */ + set_solib_svr4_fetch_link_map_offsets + (gdbarch, svr4_ilp32_fetch_link_map_offsets); + + /* GNU/Linux uses the dynamic linker included in the GNU C Library. */ + set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver); +} + +void +_initialize_hppa_linux_tdep (void) +{ + gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_LINUX, hppa_linux_init_abi); +} + + diff -uNrp gdb-cvs/gdb/hppa-linux-tdep.h gdb-work/gdb/hppa-linux-tdep.h --- gdb-cvs/gdb/hppa-linux-tdep.h 1969-12-31 16:00:00.000000000 -0800 +++ gdb-work/gdb/hppa-linux-tdep.h 2004-04-03 19:51:40.000000000 -0800 @@ -0,0 +1,140 @@ +/* Definitions to target GDB to any Hewlett-Packard PA-RISC machine. + Copyright 2004 Free Software Foundation, Inc. + + Contributed by Randolph Chung + + 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 HPPA_LINUX_TDEP_H +#define HPPA_LINUX_TDEP_H + +#include "hppa-tdep.h" + +/* Register numbers of various registers, */ + +/* General registers. */ +#define PA_GR0_REGNUM 0 +#define PA_GR1_REGNUM (PA_GR0_REGNUM+1) +#define PA_GR2_REGNUM (PA_GR0_REGNUM+2) +#define PA_GR3_REGNUM (PA_GR0_REGNUM+3) +#define PA_GR4_REGNUM (PA_GR0_REGNUM+4) +#define PA_GR5_REGNUM (PA_GR0_REGNUM+5) +#define PA_GR6_REGNUM (PA_GR0_REGNUM+6) +#define PA_GR7_REGNUM (PA_GR0_REGNUM+7) +#define PA_GR8_REGNUM (PA_GR0_REGNUM+8) +#define PA_GR9_REGNUM (PA_GR0_REGNUM+9) +#define PA_GR10_REGNUM (PA_GR0_REGNUM+10) +#define PA_GR11_REGNUM (PA_GR0_REGNUM+11) +#define PA_GR12_REGNUM (PA_GR0_REGNUM+12) +#define PA_GR13_REGNUM (PA_GR0_REGNUM+13) +#define PA_GR14_REGNUM (PA_GR0_REGNUM+14) +#define PA_GR15_REGNUM (PA_GR0_REGNUM+15) +#define PA_GR16_REGNUM (PA_GR0_REGNUM+16) +#define PA_GR17_REGNUM (PA_GR0_REGNUM+17) +#define PA_GR18_REGNUM (PA_GR0_REGNUM+18) +#define PA_GR19_REGNUM (PA_GR0_REGNUM+19) +#define PA_GR20_REGNUM (PA_GR0_REGNUM+20) +#define PA_GR21_REGNUM (PA_GR0_REGNUM+21) +#define PA_GR22_REGNUM (PA_GR0_REGNUM+22) +#define PA_GR23_REGNUM (PA_GR0_REGNUM+23) +#define PA_GR24_REGNUM (PA_GR0_REGNUM+24) +#define PA_GR25_REGNUM (PA_GR0_REGNUM+25) +#define PA_GR26_REGNUM (PA_GR0_REGNUM+26) +#define PA_GR27_REGNUM (PA_GR0_REGNUM+27) +#define PA_GR28_REGNUM (PA_GR0_REGNUM+28) +#define PA_GR29_REGNUM (PA_GR0_REGNUM+29) +#define PA_GR30_REGNUM (PA_GR0_REGNUM+30) +#define PA_GR31_REGNUM (PA_GR0_REGNUM+31) + +/* Control registers. The peculiar layout is to match HPUX interrupt save + state. */ +#define PA_CR11_REGNUM 32 +#define PA_PCOQ_HEAD_REGNUM 33 /* CR18 */ +#define PA_PCSQ_HEAD_REGNUM 34 /* CR17 */ +#define PA_PCOQ_TAIL_REGNUM 35 /* CR18 */ +#define PA_PCSQ_TAIL_REGNUM 36 /* CR17 */ +#define PA_CR15_REGNUM 37 +#define PA_CR19_REGNUM 38 +#define PA_CR20_REGNUM 39 +#define PA_CR21_REGNUM 40 +#define PA_CR22_REGNUM 41 +#define PA_CR31_REGNUM 42 + +/* Space registers. */ +#define PA_SR4_REGNUM 43 +#define PA_SR0_REGNUM 44 +#define PA_SR1_REGNUM 45 +#define PA_SR2_REGNUM 46 +#define PA_SR3_REGNUM 47 +#define PA_SR5_REGNUM 48 +#define PA_SR6_REGNUM 49 +#define PA_SR7_REGNUM 50 + +/* More control regs. */ +#define PA_CR0_REGNUM 51 +#define PA_CR8_REGNUM 52 +#define PA_CR9_REGNUM 53 +#define PA_CR10_REGNUM 54 +#define PA_CR12_REGNUM 55 +#define PA_CR13_REGNUM 56 +#define PA_CR24_REGNUM 57 +#define PA_CR25_REGNUM 58 +#define PA_CR26_REGNUM 59 +#define PA_CR27_REGNUM 60 +#define PA_CR28_REGNUM 61 +#define PA_CR29_REGNUM 62 +#define PA_CR30_REGNUM 63 + +/* Floating point registers. */ +#define PA_FR0_REGNUM 64 +#define PA_FR1_REGNUM (PA_FR0_REGNUM+2) +#define PA_FR2_REGNUM (PA_FR0_REGNUM+4) +#define PA_FR3_REGNUM (PA_FR0_REGNUM+6) +#define PA_FR4_REGNUM (PA_FR0_REGNUM+8) +#define PA_FR5_REGNUM (PA_FR0_REGNUM+10) +#define PA_FR6_REGNUM (PA_FR0_REGNUM+12) +#define PA_FR7_REGNUM (PA_FR0_REGNUM+14) +#define PA_FR31_REGNUM (PA_FR0_REGNUM+62) + +/* Some aliases. */ +#define PA_FLAGS_REGNUM PA_GR0_REGNUM +#define PA_SAR_REGNUM PA_CR11_REGNUM +#define PA_IPSW_REGNUM PA_CR22_REGNUM + +/* + * Processor Status Word Masks + */ + +#define PSW_T 0x01000000 /* Taken Branch Trap Enable */ +#define PSW_H 0x00800000 /* Higher-Privilege Transfer Trap Enable */ +#define PSW_L 0x00400000 /* Lower-Privilege Transfer Trap Enable */ +#define PSW_N 0x00200000 /* PC Queue Front Instruction Nullified */ +#define PSW_X 0x00100000 /* Data Memory Break Disable */ +#define PSW_B 0x00080000 /* Taken Branch in Previous Cycle */ +#define PSW_C 0x00040000 /* Code Address Translation Enable */ +#define PSW_V 0x00020000 /* Divide Step Correction */ +#define PSW_M 0x00010000 /* High-Priority Machine Check Disable */ +#define PSW_CB 0x0000ff00 /* Carry/Borrow Bits */ +#define PSW_R 0x00000010 /* Recovery Counter Enable */ +#define PSW_Q 0x00000008 /* Interruption State Collection Enable */ +#define PSW_P 0x00000004 /* Protection ID Validation Enable */ +#define PSW_D 0x00000002 /* Data Address Translation Enable */ +#define PSW_I 0x00000001 /* External, Power Failure, Low-Priority */ + /* Machine Check Interruption Enable */ +#endif + -- Randolph Chung Debian GNU/Linux Developer, hppa/ia64 ports http://www.tausq.org/