diff options
author | Jim Blandy <jimb@codesourcery.com> | 2004-09-01 17:39:06 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 2004-09-01 17:39:06 +0000 |
commit | 628fcf70ea719da2867ea8681d76b02bb2cdc5d1 (patch) | |
tree | 478e18bc684ce474a941ad35e26ad9488f6a016e | |
parent | 2c67ff2b45b866ca6b28f1eafad43c01f67a3d0c (diff) | |
download | gdb-628fcf70ea719da2867ea8681d76b02bb2cdc5d1.tar.gz |
gdb/ChangeLog:
2004-08-25 Jim Blandy <jimb@redhat.com>
Merge changes from trunk:
2004-08-09 Jim Blandy <jimb@redhat.com>
* rs6000-tdep.c (set_sim_regno, init_sim_regno_table,
rs6000_register_sim_regno): Doc fixes.
2004-08-04 Jim Blandy <jimb@redhat.com>
* ppc-linux-nat.c (fetch_register): Replace 'gdb_assert (0)' with
a call to 'internal_error', with a more helpful error message.
* rs6000-tdep.c (e500_pseudo_register_read,
e500_pseudo_register_write, rs6000_store_return_value): Same.
Change the layout of the PowerPC E500 raw register cache to allow
the lower 32-bit halves of the GPRS to be their own raw registers,
not pseudoregisters.
* ppc-tdep.h (struct gdbarch_tdep): Remove ppc_gprs_pseudo_p flag;
add ppc_ev0_upper_regnum flag.
* rs6000-tdep.c: #include "reggroups.h".
(spe_register_p): Recognize the ev upper half registers as SPE
registers.
(init_sim_regno_table): Build gdb->sim mappings for the upper-half
registers.
(e500_move_ev_register): New function.
(e500_pseudo_register_read, e500_pseudo_register_write): The 'ev'
vector registers are the pseudo-registers now, formed by splicing
together the gprs and the upper-half registers.
(e500_register_reggroup_p): New function.
(P): Macro deleted.
(P8, A4): New macro.
(PPC_EV_REGS, PPC_GPRS_PSEUDO_REGS): Macros deleted.
(PPC_SPE_GP_REGS, PPC_SPE_UPPER_GP_REGS, PPC_EV_PSEUDO_REGS): New
macros.
(registers_e500): Rearrange register set so that the raw register
set contains 32-bit GPRs and upper-half registers, and the SPE
vector registers become pseudo-registers.
(rs6000_gdbarch_init): Don't initialize tdep->ppc_gprs_pseudo_p;
it has been deleted. Initialize ppc_ev0_upper_regnum. Many other
register numbers are now the same for the E500 as they are for
other PowerPC variants. Register e500_register_reggroup_p as the
register group function for the E500.
* Makefile.in (rs6000-tdep.o): Update dependencies.
Adapt PPC E500 native support to the new raw regcache layout.
* ppc-linux-nat.c (struct gdb_evrregset_t): Doc fixes.
(read_spliced_spe_reg, write_spliced_spe_reg): Deleted.
(fetch_spe_register, store_spe_register): Handle fetching/storing
all the SPE registers at once, if regno == -1. These now take
over the job of fetch_spe_registers and store_spe_registers.
(fetch_spe_registers, store_spe_registers): Deleted.
(fetch_ppc_registers, store_ppc_registers): Fetch/store gprs
unconditionally; they're always raw. Fetch/store SPE upper half
registers, if present, instead of ev registers.
(fetch_register, store_register): Remove sanity checks: gprs are
never pseudo-registers now, so we never need to even mention any
registers that are ever pseudoregisters.
Use a fixed register numbering when communicating with the PowerPC
simulator.
* ppc-tdep.h (struct gdbarch_tdep): New member: 'sim_regno'.
* rs6000-tdep.c: #include "sim-regno.h" and "gdb/sim-ppc.h".
(set_sim_regno, init_sim_regno_table, rs6000_register_sim_regno):
New functions.
(rs6000_gdbarch_init): Register rs6000_register_sim_regno. Call
init_sim_regno_table.
* Makefile.in (gdb_sim_ppc_h): New variable.
(rs6000-tdep.o): Update dependencies.
2004-08-02 Andrew Cagney <cagney@gnu.org>
Replace DEPRECATED_REGISTER_RAW_SIZE with register_size.
* rs6000-tdep.c (rs6000_push_dummy_call)
(rs6000_extract_return_value): Use register_size.
...
* ppc-linux-nat.c (fetch_altivec_register, fetch_register)
(supply_vrregset, store_altivec_register, fill_vrregset): Ditto.
2004-07-20 Jim Blandy <jimb@redhat.com>
* rs6000-tdep.c (rs6000_gdbarch_init): The register set used for
bfd_mach_ppc has no segment registers.
Include PowerPC SPR numbers for special-purpose registers.
* rs6000-tdep.c (struct reg): Add new member, 'spr_num'.
(R, R4, R8, R16, F, P, R32, R64, R0): Include value for
new member in initializer.
(S, S4, SN4, S64): New macros for defining special-purpose
registers.
(PPC_UISA_SPRS, PPC_UISA_NOFP_SPRS, PPC_OEA_SPRS, registers_power,
registers_403, registers_403GC, registers_505, registers_860,
registers_601, registers_602, registers_603, registers_604,
registers_750, registers_e500): Use them.
* rs6000-tdep.c (rs6000_gdbarch_init): Delete variable 'power';
replace references with expression used to initialize variable.
2004-07-16 Jim Blandy <jimb@redhat.com>
* ppc-tdep.h (ppc_spr_asr): Add missing OEA SPR.
(ppc_spr_mi_dbcam, ppc_spr_mi_dbram0, ppc_spr_mi_dbram1)
(ppc_spr_md_cam, ppc_spr_md_ram0, ppc_spr_md_ram1): Add
missing MPC823 SPRs.
(ppc_spr_m_twb): Renamed from ppc_spr_md_twb; the old name was
incorrect. (This was corrected in GDB's register name tables on
2004-07-14.)
* rs6000-tdep.c (registers_602): Correct register name: "esassr"
should be "esasrr" ("ESA Save and Restore Register").
2004-07-15 Jim Blandy <jimb@redhat.com>
* ppc-tdep.h (struct gdbarch_tdep): New member: ppc_sr0_regnum.
* rs6000-tdep.c (rs6000_gdbarch_init): Initialize it.
2004-07-14 Jim Blandy <jimb@redhat.com>
* rs6000-tdep.c (COMMON_UISA_NOFP_REGS): Delete; unused.
* ppc-tdep.h (ppc_num_vrs): New enum constant.
* ppc-tdep.h (ppc_num_srs): New enum constant.
* ppc-tdep.h (ppc_spr_mq, ppc_spr_xer, ppc_spr_rtcu, ppc_spr_rtcl)
(ppc_spr_lr, ppc_spr_ctr, ppc_spr_cnt, ppc_spr_dsisr, ppc_spr_dar)
(ppc_spr_dec, ppc_spr_sdr1, ppc_spr_srr0, ppc_spr_srr1)
(ppc_spr_eie, ppc_spr_eid, ppc_spr_nri, ppc_spr_sp, ppc_spr_cmpa)
(ppc_spr_cmpb, ppc_spr_cmpc, ppc_spr_cmpd, ppc_spr_icr)
(ppc_spr_der, ppc_spr_counta, ppc_spr_countb, ppc_spr_cmpe)
(ppc_spr_cmpf, ppc_spr_cmpg, ppc_spr_cmph, ppc_spr_lctrl1)
(ppc_spr_lctrl2, ppc_spr_ictrl, ppc_spr_bar, ppc_spr_vrsave)
(ppc_spr_sprg0, ppc_spr_sprg1, ppc_spr_sprg2, ppc_spr_sprg3)
(ppc_spr_ear, ppc_spr_tbl, ppc_spr_tbu, ppc_spr_pvr)
(ppc_spr_spefscr, ppc_spr_ibat0u, ppc_spr_ibat0l, ppc_spr_ibat1u)
(ppc_spr_ibat1l, ppc_spr_ibat2u, ppc_spr_ibat2l, ppc_spr_ibat3u)
(ppc_spr_ibat3l, ppc_spr_dbat0u, ppc_spr_dbat0l, ppc_spr_dbat1u)
(ppc_spr_dbat1l, ppc_spr_dbat2u, ppc_spr_dbat2l, ppc_spr_dbat3u)
(ppc_spr_dbat3l, ppc_spr_ic_cst, ppc_spr_ic_adr, ppc_spr_ic_dat)
(ppc_spr_dc_cst, ppc_spr_dc_adr, ppc_spr_dc_dat, ppc_spr_dpdr)
(ppc_spr_dpir, ppc_spr_immr, ppc_spr_mi_ctr, ppc_spr_mi_ap)
(ppc_spr_mi_epn, ppc_spr_mi_twc, ppc_spr_mi_rpn, ppc_spr_mi_cam)
(ppc_spr_mi_ram0, ppc_spr_mi_ram1, ppc_spr_md_ctr, ppc_spr_m_casid)
(ppc_spr_md_ap, ppc_spr_md_epn, ppc_spr_md_twb, ppc_spr_md_twc)
(ppc_spr_md_rpn, ppc_spr_m_tw, ppc_spr_md_dbcam, ppc_spr_md_dbram0)
(ppc_spr_md_dbram1, ppc_spr_ummcr0, ppc_spr_upmc1, ppc_spr_upmc2)
(ppc_spr_usia, ppc_spr_ummcr1, ppc_spr_upmc3, ppc_spr_upmc4)
(ppc_spr_zpr, ppc_spr_pid, ppc_spr_mmcr0, ppc_spr_pmc1)
(ppc_spr_sgr, ppc_spr_pmc2, ppc_spr_dcwr, ppc_spr_sia)
(ppc_spr_mmcr1, ppc_spr_pmc3, ppc_spr_pmc4, ppc_spr_sda)
(ppc_spr_tbhu, ppc_spr_tblu, ppc_spr_dmiss, ppc_spr_dcmp)
(ppc_spr_hash1, ppc_spr_hash2, ppc_spr_icdbdr, ppc_spr_imiss)
(ppc_spr_esr, ppc_spr_icmp, ppc_spr_dear, ppc_spr_rpa)
(ppc_spr_evpr, ppc_spr_cdbcr, ppc_spr_tsr, ppc_spr_602_tcr)
(ppc_spr_403_tcr, ppc_spr_ibr, ppc_spr_pit, ppc_spr_esasrr)
(ppc_spr_tbhi, ppc_spr_tblo, ppc_spr_srr2, ppc_spr_sebr)
(ppc_spr_srr3, ppc_spr_ser, ppc_spr_hid0, ppc_spr_dbsr)
(ppc_spr_hid1, ppc_spr_iabr, ppc_spr_dbcr, ppc_spr_iac1)
(ppc_spr_dabr, ppc_spr_iac2, ppc_spr_dac1, ppc_spr_dac2)
(ppc_spr_l2cr, ppc_spr_dccr, ppc_spr_ictc, ppc_spr_iccr)
(ppc_spr_thrm1, ppc_spr_pbl1, ppc_spr_thrm2, ppc_spr_pbu1)
(ppc_spr_thrm3, ppc_spr_pbl2, ppc_spr_fpecr, ppc_spr_lt)
(ppc_spr_pir, ppc_spr_pbu2): New enum constants for PowerPC
special-purpose register numbers.
* rs6000-tdep.c (registers_860): Correct register name. (No PPC
manual mentions 'md_twb', but many mention 'm_twb', and at that
point in the register list.)
include/gdb/ChangeLog:
2004-08-04 Andrew Cagney <cagney@gnu.org>
* sim-ppc.h: Add extern "C" wrapper.
(enum sim_ppc_regnum): Add full list of SPRs.
2004-08-04 Jim Blandy <jimb@redhat.com>
* sim-ppc.h: New file.
sim/ppc/ChangeLog:
2004-08-04 Andrew Cagney <cagney@gnu.org>
Jim Blandy <jimb@redhat.com>
* sim_callbacks.h (simulator): Declare.
* Makefile.in (gdb-sim.o): New rule.
(MAIN_SRC, GDB_OBJ): Add gdb-sim.o, gdb-sim.c.
(DEFS_H): Delete.
(GDB_SIM_PPC_H): Define.
* gdb-sim.c: New file.
* sim_calls.c: Do not include "defs.h".
(simulator): Drop static.
(sim_store_register, sim_fetch_register): Delete.
-rw-r--r-- | gdb/Makefile.in | 2973 | ||||
-rw-r--r-- | gdb/ppc-tdep.h | 376 | ||||
-rw-r--r-- | gdb/rs6000-tdep.c | 3355 | ||||
-rw-r--r-- | include/gdb/ChangeLog | 125 | ||||
-rw-r--r-- | include/gdb/sim-ppc.h | 771 | ||||
-rw-r--r-- | sim/ppc/gdb-sim.c | 1295 | ||||
-rw-r--r-- | sim/ppc/sim_callbacks.h | 4 | ||||
-rw-r--r-- | sim/ppc/sim_calls.c | 74 |
8 files changed, 8900 insertions, 73 deletions
diff --git a/gdb/Makefile.in b/gdb/Makefile.in new file mode 100644 index 00000000000..a81fe9f790b --- /dev/null +++ b/gdb/Makefile.in @@ -0,0 +1,2973 @@ +# Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, +# 1998, 1999, 2000, 2001, 2002, 2003, 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. + +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +host_alias = @host_alias@ +target_alias = @target_alias@ +program_transform_name = @program_transform_name@ +bindir = @bindir@ +libdir = @libdir@ +tooldir = $(libdir)/$(target_alias) + +datadir = @datadir@ +mandir = @mandir@ +man1dir = $(mandir)/man1 +man2dir = $(mandir)/man2 +man3dir = $(mandir)/man3 +man4dir = $(mandir)/man4 +man5dir = $(mandir)/man5 +man6dir = $(mandir)/man6 +man7dir = $(mandir)/man7 +man8dir = $(mandir)/man8 +man9dir = $(mandir)/man9 +infodir = @infodir@ +htmldir = $(prefix)/html +includedir = @includedir@ + +# This can be referenced by `INTLDEPS' as computed by CY_GNU_GETTEXT. +top_builddir = . + +SHELL = @SHELL@ +EXEEXT = @EXEEXT@ + +AWK = @AWK@ +LN_S = @LN_S@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ + +DESTDIR = + +AR = @AR@ +AR_FLAGS = qv +RANLIB = @RANLIB@ +DLLTOOL = @DLLTOOL@ +WINDRES = @WINDRES@ +MIG = @MIG@ + +# If you are compiling with GCC, make sure that either 1) You have the +# fixed include files where GCC can reach them, or 2) You use the +# -traditional flag. Otherwise the ioctl calls in inflow.c +# will be incorrectly compiled. The "fixincludes" script in the gcc +# distribution will fix your include files up. +CC=@CC@ + +# Directory containing source files. +srcdir = @srcdir@ +VPATH = @srcdir@ + +YACC=@YACC@ + +# This is used to rebuild ada-lex.c from ada-lex.l. If the program is +# not defined, but ada-lex.c is present, compilation will continue, +# possibly with a warning. +FLEX = flex + +YLWRAP = $(srcdir)/../ylwrap + +# where to find makeinfo, preferably one designed for texinfo-2 +MAKEINFO=makeinfo + +MAKEHTML = texi2html + +MAKEHTMLFLAGS = -glossary -menu -split_chapter + +# Set this up with gcc if you have gnu ld and the loader will print out +# line numbers for undefined references. +#CC_LD=gcc -static +CC_LD=$(CC) + +# Where is our "include" directory? Typically $(srcdir)/../include. +# This is essentially the header file directory for the library +# routines in libiberty. +INCLUDE_DIR = $(srcdir)/../include +INCLUDE_CFLAGS = -I$(INCLUDE_DIR) + +# Where is the "-liberty" library? Typically in ../libiberty. +LIBIBERTY = ../libiberty/libiberty.a + +# Where is the BFD library? Typically in ../bfd. +BFD_DIR = ../bfd +BFD = $(BFD_DIR)/libbfd.a +BFD_SRC = $(srcdir)/$(BFD_DIR) +BFD_CFLAGS = -I$(BFD_DIR) -I$(BFD_SRC) + +# Where is the READLINE library? Typically in ../readline. +READLINE_DIR = ../readline +READLINE = $(READLINE_DIR)/libreadline.a +READLINE_SRC = $(srcdir)/$(READLINE_DIR) +READLINE_CFLAGS = -I$(READLINE_SRC)/.. + +WARN_CFLAGS = @WARN_CFLAGS@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +GDB_WARN_CFLAGS = $(WARN_CFLAGS) +GDB_WERROR_CFLAGS = $(WERROR_CFLAGS) + +# Where is the INTL library? Typically in ../intl. +INTL_DIR = ../intl +INTL = @INTLLIBS@ +INTL_DEPS = @INTLDEPS@ +INTL_SRC = $(srcdir)/$(INTL_DIR) +INTL_CFLAGS = -I$(INTL_DIR) -I$(INTL_SRC) + +# Where is the ICONV library? This can be empty if libc has iconv. +LIBICONV = @LIBICONV@ + +# Did the user give us a --with-sysroot option? +TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@ +TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@ + +# +# CLI sub directory definitons +# +SUBDIR_CLI_OBS = \ + cli-dump.o \ + cli-decode.o cli-script.o cli-cmds.o cli-setshow.o cli-utils.o \ + cli-logging.o \ + cli-interp.o +SUBDIR_CLI_SRCS = \ + cli/cli-dump.c \ + cli/cli-decode.c cli/cli-script.c cli/cli-cmds.c cli/cli-setshow.c \ + cli/cli-logging.c \ + cli/cli-interp.c \ + cli/cli-utils.c +SUBDIR_CLI_DEPS = +SUBDIR_CLI_LDFLAGS= +SUBDIR_CLI_CFLAGS= + +# +# MI sub directory definitons +# +SUBDIR_MI_OBS = \ + mi-out.o mi-console.o \ + mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \ + mi-cmd-file.o mi-cmd-disas.o mi-symbol-cmds.o \ + mi-interp.o \ + mi-main.o mi-parse.o mi-getopt.o +SUBDIR_MI_SRCS = \ + mi/mi-out.c mi/mi-console.c \ + mi/mi-cmds.c mi/mi-cmd-env.c \ + mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \ + mi/mi-cmd-file.c mi/mi-cmd-disas.c mi/mi-symbol-cmds.c \ + mi/mi-interp.c \ + mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c +SUBDIR_MI_DEPS = +SUBDIR_MI_LDFLAGS= +SUBDIR_MI_CFLAGS= \ + -DMI_OUT=1 + +# +# TUI sub directory definitions +# + +# Name of the TUI program +TUI=gdbtui + +SUBDIR_TUI_OBS = \ + tui-command.o \ + tui-data.o \ + tui-disasm.o \ + tui-file.o tui.o \ + tui-hooks.o \ + tui-interp.o \ + tui-io.o \ + tui-layout.o \ + tui-out.o \ + tui-regs.o \ + tui-source.o \ + tui-stack.o \ + tui-win.o \ + tui-windata.o \ + tui-wingeneral.o \ + tui-winsource.o +SUBDIR_TUI_SRCS = \ + tui/tui-command.c \ + tui/tui-data.c \ + tui/tui-disasm.c \ + tui/tui-file.c \ + tui/tui-hooks.c \ + tui/tui-interp.c \ + tui/tui-io.c \ + tui/tui-layout.c \ + tui/tui-out.c \ + tui/tui-regs.c \ + tui/tui-source.c \ + tui/tui-stack.c \ + tui/tui-win.c \ + tui/tui-windata.c \ + tui/tui-wingeneral.c \ + tui/tui-winsource.c \ + tui/tui.c +SUBDIR_TUI_DEPS = +SUBDIR_TUI_LDFLAGS= +SUBDIR_TUI_CFLAGS= \ + -DTUI=1 + + +# Opcodes currently live in one of two places. Either they are in the +# opcode library, typically ../opcodes, or they are in a header file +# in INCLUDE_DIR. +# Where is the "-lopcodes" library, with (some of) the opcode tables and +# disassemblers? +OPCODES_DIR = ../opcodes +OPCODES_SRC = $(srcdir)/$(OPCODES_DIR) +OPCODES = $(OPCODES_DIR)/libopcodes.a +# Where are the other opcode tables which only have header file +# versions? +OP_INCLUDE = $(INCLUDE_DIR)/opcode +OPCODES_CFLAGS = -I$(OP_INCLUDE) + +# The simulator is usually nonexistent; targets that include one +# should set this to list all the .o or .a files to be linked in. +SIM = + +WIN32LIBS = @WIN32LIBS@ + +# Where is the TCL library? Typically in ../tcl. +LIB_INSTALL_DIR = $(libdir) +# This variable is needed when doing dynamic linking. +LIB_RUNTIME_DIR = $(libdir) +TCL = @TCL_CC_SEARCH_FLAGS@ @TCL_BUILD_LIB_SPEC@ +TCL_CFLAGS = @TCLHDIR@ +GDBTKLIBS = @GDBTKLIBS@ +# Extra flags that the GDBTK files need: +GDBTK_CFLAGS = @GDBTK_CFLAGS@ + +# Where is the TK library? Typically in ../tk. +TK = @TK_BUILD_LIB_SPEC@ +TK_CFLAGS = @TKHDIR@ @TK_BUILD_INCLUDES@ + +# Where is Itcl? Typically in ../itcl/itcl. +ITCL_CFLAGS = @ITCLHDIR@ +ITCL = @ITCLLIB@ + +# Where is Itk? Typically in ../itcl/itk. +ITK_CFLAGS = @ITKHDIR@ +ITK = @ITKLIB@ + +X11_CFLAGS = @TK_XINCLUDES@ +X11_LDFLAGS = +X11_LIBS = + +WIN32LDAPP = @WIN32LDAPP@ + +LIBGUI = @LIBGUI@ +GUI_CFLAGS_X = @GUI_CFLAGS_X@ +IDE_CFLAGS=$(GUI_CFLAGS_X) $(IDE_CFLAGS_X) + +# The version of gdbtk we're building. This should be kept +# in sync with GDBTK_VERSION and friends in gdbtk.h. +GDBTK_VERSION = 1.0 +GDBTK_LIBRARY = $(datadir)/insight$(GDBTK_VERSION) + +# Gdbtk requires an absolute path to the source directory or +# the testsuite won't run properly. +GDBTK_SRC_DIR = @GDBTK_SRC_DIR@ + +SUBDIR_GDBTK_OBS = \ + gdbtk.o gdbtk-bp.o gdbtk-cmds.o gdbtk-hooks.o gdbtk-interp.o \ + gdbtk-register.o gdbtk-stack.o gdbtk-varobj.o gdbtk-wrapper.o +SUBDIR_GDBTK_SRCS = \ + gdbtk/generic/gdbtk.c gdbtk/generic/gdbtk-bp.c \ + gdbtk/generic/gdbtk-cmds.c gdbtk/generic/gdbtk-hooks.c \ + gdbtk/generic/gdbtk-interp.c \ + gdbtk/generic/gdbtk-register.c gdbtk/generic/gdbtk-stack.c \ + gdbtk/generic/gdbtk-varobj.c gdbtk/generic/gdbtk-wrapper.c \ + gdbtk/generic/gdbtk-main.c +SUBDIR_GDBTK_DEPS = \ + $(LIBGUI) $(ITCL_DEPS) $(ITK_DEPS) $(TK_DEPS) $(TCL_DEPS) +SUBDIR_GDBTK_LDFLAGS= +SUBDIR_GDBTK_CFLAGS= -DGDBTK + +CONFIG_OBS= @CONFIG_OBS@ +CONFIG_SRCS= @CONFIG_SRCS@ +CONFIG_DEPS= @CONFIG_DEPS@ +CONFIG_LDFLAGS = @CONFIG_LDFLAGS@ +ENABLE_CFLAGS= @ENABLE_CFLAGS@ +CONFIG_ALL= @CONFIG_ALL@ +CONFIG_CLEAN= @CONFIG_CLEAN@ +CONFIG_CLEAN= @CONFIG_CLEAN@ +CONFIG_INSTALL = @CONFIG_INSTALL@ +CONFIG_UNINSTALL = @CONFIG_UNINSTALL@ + +# -I. for config files. +# -I$(srcdir) for gdb internal headers. +# -I$(srcdir)/config for more generic config files. + +# It is also possible that you will need to add -I/usr/include/sys if +# your system doesn't have fcntl.h in /usr/include (which is where it +# should be according to Posix). +DEFS = @DEFS@ +GDB_CFLAGS = -I. -I$(srcdir) -I$(srcdir)/config -DLOCALEDIR="\"$(prefix)/share/locale\"" $(DEFS) + +# M{H,T}_CFLAGS, if defined, have host- and target-dependent CFLAGS +# from the config directory. +GLOBAL_CFLAGS = $(MT_CFLAGS) $(MH_CFLAGS) + +PROFILE_CFLAGS = @PROFILE_CFLAGS@ + +# CFLAGS is specifically reserved for setting from the command line +# when running make. I.E. "make CFLAGS=-Wmissing-prototypes". +CFLAGS = @CFLAGS@ + +# Need to pass this to testsuite for "make check". Probably should be +# consistent with top-level Makefile.in and gdb/testsuite/Makefile.in +# so "make check" has the same result no matter where it is run. +CXXFLAGS = -g -O + +# INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros. +INTERNAL_WARN_CFLAGS = \ + $(CFLAGS) $(GLOBAL_CFLAGS) $(PROFILE_CFLAGS) \ + $(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) \ + $(BFD_CFLAGS) $(INCLUDE_CFLAGS) \ + $(INTL_CFLAGS) $(ENABLE_CFLAGS) \ + $(GDB_WARN_CFLAGS) +INTERNAL_CFLAGS = $(INTERNAL_WARN_CFLAGS) $(GDB_WERROR_CFLAGS) + +# LDFLAGS is specifically reserved for setting from the command line +# when running make. +LDFLAGS = @LDFLAGS@ + +# Profiling options need to go here to work. +# I think it's perfectly reasonable for a user to set -pg in CFLAGS +# and have it work; that's why CFLAGS is here. +# PROFILE_CFLAGS is _not_ included, however, because we use monstartup. +INTERNAL_LDFLAGS = $(CFLAGS) $(GLOBAL_CFLAGS) $(MH_LDFLAGS) $(LDFLAGS) $(CONFIG_LDFLAGS) + +# If your system is missing alloca(), or, more likely, it's there but +# it doesn't work, then refer to libiberty. + +# Libraries and corresponding dependencies for compiling gdb. +# {X,T}M_CLIBS, defined in *config files, have host- and target-dependent libs. +# LIBIBERTY appears twice on purpose. +# If you have the Cygnus libraries installed, +# you can use 'CLIBS=$(INSTALLED_LIBS)' 'CDEPS=' +INSTALLED_LIBS=-lbfd -lreadline -lopcodes -liberty \ + $(XM_CLIBS) $(TM_CLIBS) $(NAT_CLIBS) $(GDBTKLIBS) @LIBS@ \ + -lintl -liberty +CLIBS = $(SIM) $(BFD) $(READLINE) $(OPCODES) $(INTL) $(LIBIBERTY) \ + $(XM_CLIBS) $(TM_CLIBS) $(NAT_CLIBS) $(GDBTKLIBS) @LIBS@ \ + $(LIBICONV) \ + $(LIBIBERTY) $(WIN32LIBS) +CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE) \ + $(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) + +ADD_FILES = $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES) +ADD_DEPS = $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES) + +DIST=gdb + +LINT=/usr/5bin/lint +LINTFLAGS= $(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) \ + $(BFD_CFLAGS) $(INCLUDE_CFLAGS) \ + $(INTL_CFLAGS) + +RUNTEST = `if [ -f $${rootsrc}/../dejagnu/runtest ] ; then \ + echo $${rootsrc}/../dejagnu/runtest ; else echo runtest; \ + fi` + +RUNTESTFLAGS= + +# This is ser-unix.o for any system which supports a v7/BSD/SYSV/POSIX +# interface to the serial port. Hopefully if get ported to OS/2, VMS, +# etc., then there will be (as part of the C library or perhaps as +# part of libiberty) a POSIX interface. But at least for now the +# host-dependent makefile fragment might need to use something else +# besides ser-unix.o +SER_HARDWIRE = @SER_HARDWIRE@ + +# The `remote' debugging target is supported for most architectures, +# but not all (e.g. 960) +REMOTE_OBS = remote.o dcache.o remote-utils.o tracepoint.o ax-general.o ax-gdb.o remote-fileio.o + +# This is remote-sim.o if a simulator is to be linked in. +SIM_OBS = + +# Host and target-dependent makefile fragments come in here. +@host_makefile_frag@ +@target_makefile_frag@ +# End of host and target-dependent makefile fragments + +# Possibly ignore the simulator. If the simulator is being ignored, +# these expand into SIM= and SIM_OBJ=, overriding the entries from +# target_makefile_frag +# +@IGNORE_SIM@ +@IGNORE_SIM_OBS@ + +FLAGS_TO_PASS = \ + "prefix=$(prefix)" \ + "exec_prefix=$(exec_prefix)" \ + "infodir=$(infodir)" \ + "libdir=$(libdir)" \ + "mandir=$(mandir)" \ + "datadir=$(datadir)" \ + "includedir=$(includedir)" \ + "against=$(against)" \ + "DESTDIR=$(DESTDIR)" \ + "AR=$(AR)" \ + "AR_FLAGS=$(AR_FLAGS)" \ + "CC=$(CC)" \ + "CFLAGS=$(CFLAGS)" \ + "CXX=$(CXX)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "DLLTOOL=$(DLLTOOL)" \ + "LDFLAGS=$(LDFLAGS)" \ + "RANLIB=$(RANLIB)" \ + "MAKEINFO=$(MAKEINFO)" \ + "MAKEHTML=$(MAKEHTML)" \ + "MAKEHTMLFLAGS=$(MAKEHTMLFLAGS)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "RUNTEST=$(RUNTEST)" \ + "RUNTESTFLAGS=$(RUNTESTFLAGS)" + +# Flags that we pass when building the testsuite. + +# empty for native, $(target_alias)/ for cross +target_subdir = @target_subdir@ + +CC_FOR_TARGET = ` \ + if [ -f $${rootme}/../gcc/xgcc ] ; then \ + if [ -f $${rootme}/../$(target_subdir)newlib/Makefile ] ; then \ + echo $${rootme}/../gcc/xgcc -B$${rootme}/../gcc/ -idirafter $${rootme}/$(target_subdir)newlib/targ-include -idirafter $${rootsrc}/../$(target_subdir)newlib/libc/include -nostdinc -B$${rootme}/../$(target_subdir)newlib/; \ + else \ + echo $${rootme}/../gcc/xgcc -B$${rootme}/../gcc/; \ + fi; \ + else \ + if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \ + echo $(CC); \ + else \ + t='$(program_transform_name)'; echo gcc | sed -e '' $$t; \ + fi; \ + fi` + +CXX = gcc +CXX_FOR_TARGET = ` \ + if [ -f $${rootme}/../gcc/xgcc ] ; then \ + if [ -f $${rootme}/../$(target_subdir)newlib/Makefile ] ; then \ + echo $${rootme}/../gcc/xgcc -B$${rootme}/../gcc/ -idirafter $${rootme}/$(target_subdir)newlib/targ-include -idirafter $${rootsrc}/../$(target_subdir)newlib/libc/include -nostdinc -B$${rootme}/../$(target_subdir)newlib/; \ + else \ + echo $${rootme}/../gcc/xgcc -B$${rootme}/../gcc/; \ + fi; \ + else \ + if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \ + echo $(CXX); \ + else \ + t='$(program_transform_name)'; echo gcc | sed -e '' $$t; \ + fi; \ + fi` + +# The use of $$(x_FOR_TARGET) reduces the command line length by not +# duplicating the lengthy definition. +TARGET_FLAGS_TO_PASS = \ + "prefix=$(prefix)" \ + "exec_prefix=$(exec_prefix)" \ + "against=$(against)" \ + 'CC=$$(CC_FOR_TARGET)' \ + "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ + "CFLAGS=$(CFLAGS)" \ + 'CXX=$$(CXX_FOR_TARGET)' \ + "CXX_FOR_TARGET=$(CXX_FOR_TARGET)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "MAKEINFO=$(MAKEINFO)" \ + "MAKEHTML=$(MAKEHTML)" \ + "RUNTEST=$(RUNTEST)" \ + "RUNTESTFLAGS=$(RUNTESTFLAGS)" + +# All source files that go into linking GDB. +# Links made at configuration time should not be specified here, since +# SFILES is used in building the distribution archive. + +SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \ + ax-general.c ax-gdb.c \ + bcache.c \ + bfd-target.c \ + block.c blockframe.c breakpoint.c buildsym.c \ + c-exp.y c-lang.c c-typeprint.c c-valprint.c \ + charset.c cli-out.c coffread.c coff-pe-read.c \ + complaints.c completer.c corefile.c \ + cp-abi.c cp-support.c cp-namespace.c cp-valprint.c \ + dbxread.c demangle.c dictionary.c disasm.c doublest.c dummy-frame.c \ + dwarfread.c dwarf2expr.c dwarf2loc.c dwarf2read.c dwarf2-frame.c \ + elfread.c environ.c eval.c event-loop.c event-top.c expprint.c \ + f-exp.y f-lang.c f-typeprint.c f-valprint.c findvar.c frame.c \ + frame-base.c \ + frame-unwind.c \ + gdbarch.c arch-utils.c gdbtypes.c gnu-v2-abi.c gnu-v3-abi.c \ + hpacc-abi.c \ + inf-loop.c \ + infcall.c \ + infcmd.c inflow.c infrun.c \ + interps.c \ + jv-exp.y jv-lang.c jv-valprint.c jv-typeprint.c \ + kod.c kod-cisco.c \ + language.c linespec.c \ + m2-exp.y m2-lang.c m2-typeprint.c m2-valprint.c \ + macrotab.c macroexp.c macrocmd.c macroscope.c main.c maint.c \ + mdebugread.c memattr.c mem-break.c minsyms.c mipsread.c \ + nlmread.c \ + objc-exp.y objc-lang.c \ + objfiles.c osabi.c observer.c \ + p-exp.y p-lang.c p-typeprint.c p-valprint.c parse.c printcmd.c \ + regcache.c reggroups.c remote.c remote-fileio.c \ + scm-exp.c scm-lang.c scm-valprint.c \ + sentinel-frame.c \ + serial.c ser-unix.c source.c \ + stabsread.c stack.c std-regs.c symfile.c symfile-mem.c symmisc.c \ + symtab.c \ + target.c thread.c top.c tracepoint.c \ + trad-frame.c \ + tramp-frame.c \ + typeprint.c \ + ui-out.c utils.c ui-file.h ui-file.c \ + user-regs.c \ + valarith.c valops.c valprint.c values.c varobj.c \ + wrapper.c + +LINTFILES = $(SFILES) $(YYFILES) $(CONFIG_SRCS) init.c + +# "system" headers. Using these in dependencies is a rather personal +# choice. (-rich, summer 1993) +# (Why would we not want to depend on them? If one of these changes in a +# non-binary-compatible way, it is a real pain to remake the right stuff +# without these dependencies -kingdon, 13 Mar 1994) +aout_aout64_h = $(INCLUDE_DIR)/aout/aout64.h +aout_stabs_gnu_h = $(INCLUDE_DIR)/aout/stabs_gnu.h +getopt_h = $(INCLUDE_DIR)/getopt.h +floatformat_h = $(INCLUDE_DIR)/floatformat.h +bfd_h = $(BFD_DIR)/bfd.h +coff_sym_h = $(INCLUDE_DIR)/coff/sym.h +coff_symconst_h = $(INCLUDE_DIR)/coff/symconst.h +coff_ecoff_h = $(INCLUDE_DIR)/coff/ecoff.h +coff_internal_h = $(INCLUDE_DIR)/coff/internal.h +dis_asm_h = $(INCLUDE_DIR)/dis-asm.h $(bfd_h) +elf_reloc_macros_h = $(INCLUDE_DIR)/elf/reloc-macros.h +elf_sh_h = $(INCLUDE_DIR)/elf/sh.h +elf_arm_h = $(INCLUDE_DIR)/elf/arm.h $(elf_reloc_macros_h) +elf_bfd_h = $(BFD_SRC)/elf-bfd.h +elf_frv_h = $(INCLUDE_DIR)/elf/frv.h $(elf_reloc_macros_h) +libaout_h = $(BFD_SRC)/libaout.h +libbfd_h = $(BFD_SRC)/libbfd.h +remote_sim_h = $(INCLUDE_DIR)/gdb/remote-sim.h +demangle_h = $(INCLUDE_DIR)/demangle.h +obstack_h = $(INCLUDE_DIR)/obstack.h +opcode_m68hc11_h = $(INCLUDE_DIR)/opcode/m68hc11.h +readline_h = $(READLINE_SRC)/readline.h +readline_tilde_h = $(READLINE_SRC)/tilde.h +readline_history_h = $(READLINE_SRC)/history.h +frv_desc_h = $(OPCODES_SRC)/frv-desc.h +sh_opc_h = $(OPCODES_SRC)/sh-opc.h +gdb_callback_h = $(INCLUDE_DIR)/gdb/callback.h +gdb_sim_arm_h = $(INCLUDE_DIR)/gdb/sim-arm.h +gdb_sim_d10v_h = $(INCLUDE_DIR)/gdb/sim-d10v.h +gdb_sim_frv_h = $(INCLUDE_DIR)/gdb/sim-frv.h +gdb_sim_ppc_h = $(INCLUDE_DIR)/gdb/sim-ppc.h +gdb_sim_sh_h = $(INCLUDE_DIR)/gdb/sim-sh.h +splay_tree_h = $(INCLUDE_DIR)/splay-tree.h +hashtab_h = $(INCLUDE_DIR)/hashtab.h + +# +# $BUILD/ headers +# + +config_h = config.h +exc_request_U_h = exc_request_U.h +exc_request_S_h = exc_request_S.h +msg_reply_S_h = msg_reply_S.h +msg_U_h = msg_U.h +notify_S_h = notify_S.h +observer_h = observer.h +observer_inc = observer.inc +process_reply_S_h = process_reply_S.h + +# +# config/ headers +# + +xm_h = @xm_h@ +tm_h = @tm_h@ +nm_h = @nm_h@ + +# +# gdb/ headers +# + +ada_lang_h = ada-lang.h $(value_h) $(gdbtypes_h) +alphabsd_tdep_h = alphabsd-tdep.h +alpha_tdep_h = alpha-tdep.h +amd64_nat_h = amd64-nat.h +amd64_tdep_h = amd64-tdep.h $(i386_tdep_h) +annotate_h = annotate.h $(symtab_h) $(gdbtypes_h) +arch_utils_h = arch-utils.h +arm_tdep_h = arm-tdep.h +auxv_h = auxv.h +ax_gdb_h = ax-gdb.h +ax_h = ax.h $(doublest_h) +bcache_h = bcache.h +bfd_target_h = bfd-target.h +block_h = block.h +breakpoint_h = breakpoint.h $(frame_h) $(value_h) $(gdb_events_h) +bsd_kvm_h = bsd-kvm.h +buildsym_h = buildsym.h +call_cmds_h = call-cmds.h +charset_h = charset.h +c_lang_h = c-lang.h $(value_h) $(macroexp_h) +cli_out_h = cli-out.h +coff_pe_read_h = coff-pe-read.h +coff_solib_h = coff-solib.h +command_h = command.h +complaints_h = complaints.h +completer_h = completer.h +cp_abi_h = cp-abi.h +cp_support_h = cp-support.h $(symtab_h) +dcache_h = dcache.h +defs_h = defs.h $(config_h) $(ansidecl_h) $(gdb_locale_h) $(gdb_signals_h) \ + $(libiberty_h) $(bfd_h) $(ui_file_h) $(xm_h) $(nm_h) $(tm_h) \ + $(fopen_same_h) $(gdbarch_h) +dictionary_h = dictionary.h +disasm_h = disasm.h +doublest_h = doublest.h $(floatformat_h) +dummy_frame_h = dummy-frame.h +dwarf2expr_h = dwarf2expr.h +dwarf2_frame_h = dwarf2-frame.h +dwarf2loc_h = dwarf2loc.h +environ_h = environ.h +event_loop_h = event-loop.h +event_top_h = event-top.h +exec_h = exec.h $(target_h) +expression_h = expression.h $(symtab_h) $(doublest_h) +f_lang_h = f-lang.h +frame_base_h = frame-base.h +frame_h = frame.h +frame_unwind_h = frame-unwind.h $(frame_h) +frv_tdep_h = frv-tdep.h +gdbarch_h = gdbarch.h +gdb_assert_h = gdb_assert.h +gdbcmd_h = gdbcmd.h $(command_h) $(ui_out_h) +gdbcore_h = gdbcore.h $(bfd_h) +gdb_curses_h = gdb_curses.h +gdb_dirent_h = gdb_dirent.h +gdb_events_h = gdb-events.h +gdb_h = gdb.h +gdb_locale_h = gdb_locale.h +gdb_obstack_h = gdb_obstack.h $(obstack_h) +gdb_proc_service_h = gdb_proc_service.h $(gregset_h) +gdb_regex_h = gdb_regex.h $(xregex_h) +gdb_stabs_h = gdb-stabs.h +gdb_stat_h = gdb_stat.h +gdb_string_h = gdb_string.h +gdb_thread_db_h = gdb_thread_db.h +gdbthread_h = gdbthread.h $(breakpoint_h) $(frame_h) +gdbtypes_h = gdbtypes.h +gdb_vfork_h = gdb_vfork.h +gdb_wait_h = gdb_wait.h +glibc_tdep_h = glibc-tdep.h +gnu_nat_h = gnu-nat.h +gregset_h = gregset.h +hppa_tdep_h = hppa-tdep.h +i386_linux_tdep_h = i386-linux-tdep.h +i386_tdep_h = i386-tdep.h +i387_tdep_h = i387-tdep.h +ia64_tdep_h = ia64-tdep.h +infcall_h = infcall.h +inferior_h = inferior.h $(breakpoint_h) $(target_h) $(frame_h) +inf_loop_h = inf-loop.h +inflow_h = inflow.h $(terminal_h) +infttrace_h = infttrace.h $(target_h) +interps_h = interps.h +jv_lang_h = jv-lang.h +kod_h = kod.h +language_h = language.h +libunwind_frame_h = libunwind-frame.h $(libunwind_h) +linespec_h = linespec.h +linux_nat_h = linux-nat.h $(target_h) +m2_lang_h = m2-lang.h +m68k_tdep_h = m68k-tdep.h +m88k_tdep_h = m88k-tdep.h +macroexp_h = macroexp.h +macroscope_h = macroscope.h $(macrotab_h) $(symtab_h) +macrotab_h = macrotab.h +main_h = main.h +memattr_h = memattr.h +minimon_h = minimon.h +mipsnbsd_tdep_h = mipsnbsd-tdep.h +mips_tdep_h = mips-tdep.h +monitor_h = monitor.h +nbsd_tdep_h = nbsd-tdep.h +ns32k_tdep_h = ns32k-tdep.h +nto_tdep_h = nto-tdep.h $(defs_h) $(solist_h) +objc_lang_h = objc-lang.h +objfiles_h = objfiles.h $(gdb_obstack_h) $(symfile_h) +ocd_h = ocd.h +osabi_h = osabi.h +pa64solib_h = pa64solib.h +parser_defs_h = parser-defs.h $(doublest_h) +p_lang_h = p-lang.h +ppcnbsd_tdep_h = ppcnbsd-tdep.h +ppc_tdep_h = ppc-tdep.h +proc_utils_h = proc-utils.h +regcache_h = regcache.h +reggroups_h = reggroups.h +regset_h = regset.h +remote_fileio_h = remote-fileio.h +remote_h = remote.h +remote_utils_h = remote-utils.h $(target_h) +s390_tdep_h = s390-tdep.h +scm_lang_h = scm-lang.h $(scm_tags_h) +scm_tags_h = scm-tags.h +sentinel_frame_h = sentinel-frame.h +serial_h = serial.h +ser_unix_h = ser-unix.h +shnbsd_tdep_h = shnbsd-tdep.h +sh_tdep_h = sh-tdep.h +sim_regno_h = sim-regno.h +solib_h = solib.h +solib_svr4_h = solib-svr4.h +solist_h = solist.h +somsolib_h = somsolib.h +source_h = source.h +sparc64_tdep_h = sparc64-tdep.h $(sparc_tdep_h) +sparc_nat_h = sparc-nat.h +sparc_tdep_h = sparc-tdep.h +srec_h = srec.h +stabsread_h = stabsread.h +stack_h = stack.h +symfile_h = symfile.h +symtab_h = symtab.h +target_h = target.h $(bfd_h) $(symtab_h) $(dcache_h) $(memattr_h) +terminal_h = terminal.h +top_h = top.h +tracepoint_h = tracepoint.h +trad_frame_h = trad-frame.h $(frame_h) +tramp_frame_h = tramp-frame.h +typeprint_h = typeprint.h +ui_file_h = ui-file.h +ui_out_h = ui-out.h +user_regs_h = user-regs.h +valprint_h = valprint.h +value_h = value.h $(doublest_h) $(frame_h) $(symtab_h) $(gdbtypes_h) \ + $(expression_h) +varobj_h = varobj.h $(symtab_h) $(gdbtypes_h) +vax_tdep_h = vax-tdep.h +version_h = version.h +wince_stub_h = wince-stub.h +wrapper_h = wrapper.h $(gdb_h) +xcoffsolib_h = xcoffsolib.h + +# +# gdb/cli/ headers +# + +cli_cmds_h = $(srcdir)/cli/cli-cmds.h +cli_decode_h = $(srcdir)/cli/cli-decode.h $(command_h) +cli_dump_h = $(srcdir)/cli/cli-dump.h +cli_script_h = $(srcdir)/cli/cli-script.h +cli_setshow_h = $(srcdir)/cli/cli-setshow.h +cli_utils_h = $(srcdir)/cli/cli-utils.h + +# +# gdb/mi/ headers +# + +mi_cmds_h = $(srcdir)/mi/mi-cmds.h +mi_console_h = $(srcdir)/mi/mi-console.h +mi_getopt_h = $(srcdir)/mi/mi-getopt.h +mi_main_h = $(srcdir)/mi/mi-main.h +mi_out_h = $(srcdir)/mi/mi-out.h +mi_parse_h = $(srcdir)/mi/mi-parse.h + +# +# gdb/tui/ headers +# + +tui_command_h = $(srcdir)/tui/tui-command.h +tui_data_h = $(srcdir)/tui/tui-data.h $(tui_h) $(gdb_curses_h) +tui_disasm_h = $(srcdir)/tui/tui-disasm.h $(tui_h) $(tui_data_h) +tui_file_h = $(srcdir)/tui/tui-file.h +tui_h = $(srcdir)/tui/tui.h +tui_hooks_h = $(srcdir)/tui/tui-hooks.h +tui_io_h = $(srcdir)/tui/tui-io.h +tui_layout_h = $(srcdir)/tui/tui-layout.h $(tui_h) $(tui_data_h) +tui_regs_h = $(srcdir)/tui/tui-regs.h $(tui_data_h) +tui_source_h = $(srcdir)/tui/tui-source.h $(tui_data_h) +tui_stack_h = $(srcdir)/tui/tui-stack.h +tui_windata_h = $(srcdir)/tui/tui-windata.h $(tui_data_h) +tui_wingeneral_h = $(srcdir)/tui/tui-wingeneral.h +tui_win_h = $(srcdir)/tui/tui-win.h $(tui_data_h) +tui_winsource_h = $(srcdir)/tui/tui-winsource.h $(tui_data_h) + +# Header files that need to have srcdir added. Note that in the cases +# where we use a macro like $(gdbcmd_h), things are carefully arranged +# so that each .h file is listed exactly once (M-x tags-search works +# wrong if TAGS has files twice). Because this is tricky to get +# right, it is probably easiest just to list .h files here directly. + +HFILES_NO_SRCDIR = bcache.h buildsym.h call-cmds.h coff-solib.h defs.h \ + environ.h $(gdbcmd_h) gdb.h gdbcore.h \ + gdb-stabs.h $(inferior_h) language.h minimon.h monitor.h \ + objfiles.h parser-defs.h serial.h solib.h \ + symfile.h symfile-mem.h stabsread.h target.h terminal.h typeprint.h \ + xcoffsolib.h \ + macrotab.h macroexp.h macroscope.h \ + c-lang.h f-lang.h \ + jv-lang.h \ + m2-lang.h p-lang.h \ + complaints.h valprint.h \ + vx-share/dbgRpcLib.h vx-share/ptrace.h vx-share/vxTypes.h \ + vx-share/vxWorks.h vx-share/wait.h vx-share/xdr_ld.h \ + vx-share/xdr_ptrace.h vx-share/xdr_rdb.h gdbthread.h \ + dcache.h remote-utils.h top.h somsolib.h + +# Header files that already have srcdir in them, or which are in objdir. + +HFILES_WITH_SRCDIR = ../bfd/bfd.h + + +# GDB "info" files, which should be included in their entirety +INFOFILES = gdb.info* + +REMOTE_EXAMPLES = m68k-stub.c i386-stub.c sparc-stub.c rem-multi.shar + +# {X,T,NAT}DEPFILES are something of a pain in that it's hard to +# default their values the way we do for SER_HARDWIRE; in the future +# maybe much of the stuff now in {X,T,NAT}DEPFILES will go into other +# variables analogous to SER_HARDWIRE which get defaulted in this +# Makefile.in + +DEPFILES = $(TDEPFILES) $(SER_HARDWIRE) $(NATDEPFILES) \ + $(REMOTE_OBS) $(SIM_OBS) $(CONFIG_OBS) + +SOURCES = $(SFILES) $(ALLDEPFILES) $(YYFILES) $(CONFIG_SRCS) +# Don't include YYFILES (*.c) because we already include *.y in SFILES, +# and it's more useful to see it in the .y file. +TAGFILES_NO_SRCDIR = $(SFILES) $(HFILES_NO_SRCDIR) $(ALLDEPFILES) \ + $(SUBDIR_CLI_SRCS) +TAGFILES_WITH_SRCDIR = $(HFILES_WITH_SRCDIR) + +COMMON_OBS = $(DEPFILES) $(YYOBJ) \ + version.o \ + annotate.o \ + auxv.o \ + bfd-target.o \ + blockframe.o breakpoint.o findvar.o regcache.o \ + charset.o disasm.o dummy-frame.o \ + source.o values.o eval.o valops.o valarith.o valprint.o printcmd.o \ + block.o symtab.o symfile.o symmisc.o linespec.o dictionary.o \ + infcall.o \ + infcmd.o infrun.o \ + expprint.o environ.o stack.o thread.o \ + interps.o \ + main.o \ + macrotab.o macrocmd.o macroexp.o macroscope.o \ + event-loop.o event-top.o inf-loop.o completer.o \ + gdbarch.o arch-utils.o gdbtypes.o osabi.o copying.o \ + memattr.o mem-break.o target.o parse.o language.o buildsym.o \ + std-regs.o \ + signals.o \ + kod.o kod-cisco.o \ + gdb-events.o \ + exec.o bcache.o objfiles.o observer.o minsyms.o maint.o demangle.o \ + dbxread.o coffread.o coff-pe-read.o elfread.o \ + dwarfread.o dwarf2read.o mipsread.o stabsread.o corefile.o \ + dwarf2expr.o dwarf2loc.o dwarf2-frame.o \ + c-lang.o f-lang.o objc-lang.o \ + ui-out.o cli-out.o \ + varobj.o wrapper.o \ + jv-lang.o jv-valprint.o jv-typeprint.o \ + m2-lang.o p-lang.o p-typeprint.o p-valprint.o \ + scm-exp.o scm-lang.o scm-valprint.o \ + sentinel-frame.o \ + complaints.o typeprint.o \ + c-typeprint.o f-typeprint.o m2-typeprint.o \ + c-valprint.o cp-valprint.o f-valprint.o m2-valprint.o \ + nlmread.o serial.o mdebugread.o top.o utils.o \ + ui-file.o \ + user-regs.o \ + frame.o frame-unwind.o doublest.o \ + frame-base.o \ + gnu-v2-abi.o gnu-v3-abi.o hpacc-abi.o cp-abi.o cp-support.o \ + cp-namespace.o \ + reggroups.o regset.o \ + trad-frame.o \ + tramp-frame.o + +TSOBS = inflow.o + +SUBDIRS = @subdirs@ + +# For now, shortcut the "configure GDB for fewer languages" stuff. +YYFILES = c-exp.c \ + objc-exp.c \ + ada-exp.c \ + jv-exp.c \ + f-exp.c m2-exp.c p-exp.c +YYOBJ = c-exp.o \ + objc-exp.o \ + jv-exp.o \ + f-exp.o m2-exp.o p-exp.o + +# Things which need to be built when making a distribution. + +DISTSTUFF = $(YYFILES) + +# Prevent Sun make from putting in the machine type. Setting +# TARGET_ARCH to nothing works for SunOS 3, 4.0, but not for 4.1. +.c.o: + $(CC) -c $(INTERNAL_CFLAGS) $< + +all: gdb$(EXEEXT) $(CONFIG_ALL) + @$(MAKE) $(FLAGS_TO_PASS) DO=all "DODIRS=`echo $(SUBDIRS) | sed 's/testsuite//'`" subdir_do +.PHONY: all-tui +all-tui: $(TUI)$(EXEEXT) + +installcheck: + +# The check target can not use subdir_do, because subdir_do does not +# use TARGET_FLAGS_TO_PASS. +check: force + @if [ -f testsuite/Makefile ]; then \ + rootme=`pwd`; export rootme; \ + rootsrc=`cd $(srcdir); pwd`; export rootsrc; \ + cd testsuite; \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) check; \ + else true; fi + +# The idea is to parallelize testing of multilibs, for example: +# make -j3 check//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu} +# will run 3 concurrent sessions of check, eventually testing all 10 +# combinations. GNU make is required for the % pattern to work, as is +# a shell that expands alternations within braces. If GNU make is not +# used, this rule will harmlessly fail to match. +check//%: force + @if [ -f testsuite/config.status ]; then \ + rootme=`pwd`; export rootme; \ + rootsrc=`cd $(srcdir); pwd`; export rootsrc; \ + target=`echo "$@" | sed 's,//.*,,'`; \ + variant=`echo "$@" | sed 's,^[^/]*//,,'`; \ + vardots=`echo "$$variant" | sed 's,/,.,g'`; \ + testdir=testsuite.$$vardots; \ + if [ ! -f $$testdir/Makefile ]; then \ + (cd testsuite && find . -name config.status) | \ + sed s,/config.status$$,, | sort | while read subdir; do \ + $(SHELL) $(srcdir)/../mkinstalldirs $$testdir/$$subdir && \ + (cd $$testdir/$$subdir && \ + $(SHELL) $$rootme/testsuite/$$subdir/config.status \ + --recheck && \ + $(SHELL) ./config.status); done; \ + else :; fi && cd $$testdir && \ + $(MAKE) $(TARGET_FLAGS_TO_PASS) \ + RUNTESTFLAGS="--target_board=$$variant $(RUNTESTFLAGS)" \ + "$$target"; \ + else true; fi + +info dvi install-info clean-info html install-html: force + @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do + +gdb.z:gdb.1 + nroff -man $(srcdir)/gdb.1 | col -b > gdb.t + pack gdb.t ; rm -f gdb.t + mv gdb.t.z gdb.z + +# Traditionally "install" depends on "all". But it may be useful +# not to; for example, if the user has made some trivial change to a +# source file and doesn't care about rebuilding or just wants to save the +# time it takes for make to check that all is up to date. +# install-only is intended to address that need. +install: all install-only +install-only: $(CONFIG_INSTALL) + transformed_name=`t='$(program_transform_name)'; \ + echo gdb | sed -e "$$t"` ; \ + if test "x$$transformed_name" = x; then \ + transformed_name=gdb ; \ + else \ + true ; \ + fi ; \ + $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir) ; \ + $(INSTALL_PROGRAM) gdb$(EXEEXT) \ + $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \ + $(SHELL) $(srcdir)/../mkinstalldirs \ + $(DESTDIR)$(man1dir) ; \ + $(INSTALL_DATA) $(srcdir)/gdb.1 \ + $(DESTDIR)$(man1dir)/$$transformed_name.1 + @$(MAKE) DO=install "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do +.PHONY: install-tui +install-tui: + transformed_name=`t='$(program_transform_name)'; \ + echo $(TUI) | sed -e "$$t"` ; \ + if test "x$$transformed_name" = x; then \ + transformed_name=$(TUI) ; \ + else \ + true ; \ + fi ; \ + $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir) ; \ + $(INSTALL_PROGRAM) $(TUI)$(EXEEXT) \ + $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \ + $(SHELL) $(srcdir)/../mkinstalldirs \ + $(DESTDIR)$(man1dir) ; \ + $(INSTALL_DATA) $(srcdir)/gdb.1 \ + $(DESTDIR)$(man1dir)/$$transformed_name.1 + + +uninstall: force $(CONFIG_UNINSTALL) + transformed_name=`t='$(program_transform_name)'; \ + echo gdb | sed -e $$t` ; \ + if test "x$$transformed_name" = x; then \ + transformed_name=gdb ; \ + else \ + true ; \ + fi ; \ + rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \ + $(DESTDIR)$(man1dir)/$$transformed_name.1 + @$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do +.PHONY: uninstall-tui +uninstall-tui: + transformed_name=`t='$(program_transform_name)'; \ + echo $(TUI) | sed -e $$t` ; \ + if test "x$$transformed_name" = x; then \ + transformed_name=$(TUI) ; \ + else \ + true ; \ + fi ; \ + rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \ + $(DESTDIR)$(man1dir)/$$transformed_name.1 + +# We do this by grepping through sources. If that turns out to be too slow, +# maybe we could just require every .o file to have an initialization routine +# of a given name (top.o -> _initialize_top, etc.). +# +# Formatting conventions: The name of the _initialize_* routines must start +# in column zero, and must not be inside #if. +# +# Note that the set of files with init functions might change, or the names +# of the functions might change, so this files needs to depend on all the +# object files that will be linked into gdb. + +# FIXME: There is a problem with this approach - init.c may force +# unnecessary files to be linked in. + +# FIXME: cagney/2002-06-09: gdb/564: gdb/563: Force the order so that +# the first call is to _initialize_gdbtypes (implemented by explicitly +# putting that function's name first in the init.l-tmp file). This is +# a hack to ensure that all the architecture dependant global +# builtin_type_* variables are initialized before anything else +# (per-architecture code is called in the same order that it is +# registered). The ``correct fix'' is to have all the builtin types +# made part of the architecture and initialize them on-demand (using +# gdbarch_data) just like everything else. The catch is that other +# modules still take the address of these builtin types forcing them +# to be variables, sigh! + +# NOTE: cagney/2003-03-18: The sed pattern ``s|^\([^ /]...'' is +# anchored on the first column and excludes the ``/'' character so +# that it doesn't add the $(srcdir) prefix to any file that already +# has an absolute path. It turns out that $(DEC)'s True64 make +# automatically adds the $(srcdir) prefixes when it encounters files +# in sub-directories such as cli/ and mi/. + +# NOTE: cagney/2004-02-08: The ``case "$$fs" in'' eliminates +# duplicates. Files in the gdb/ directory can end up appearing in +# COMMON_OBS (as a .o file) and CONFIG_SRCS (as a .c file). + +INIT_FILES = $(COMMON_OBS) $(TSOBS) $(CONFIG_SRCS) +init.c: $(INIT_FILES) + @echo Making init.c + @rm -f init.c-tmp init.l-tmp + @touch init.c-tmp + @echo gdbtypes > init.l-tmp + @-echo $(INIT_FILES) | \ + tr ' ' '\012' | \ + sed \ + -e '/^gdbtypes.[co]$$/d' \ + -e '/^init.[co]$$/d' \ + -e '/xdr_ld.[co]$$/d' \ + -e '/xdr_ptrace.[co]$$/d' \ + -e '/xdr_rdb.[co]$$/d' \ + -e '/udr.[co]$$/d' \ + -e '/udip2soc.[co]$$/d' \ + -e '/udi2go32.[co]$$/d' \ + -e '/version.[co]$$/d' \ + -e '/^[a-z0-9A-Z_]*_[SU].[co]$$/d' \ + -e '/[a-z0-9A-Z_]*-exp.tab.[co]$$/d' \ + -e 's/\.[co]$$/.c/' \ + -e 's,signals\.c,signals/signals\.c,' \ + -e 's|^\([^ /][^ ]*\)|$(srcdir)/\1|g' | \ + while read f; do \ + sed -n -e 's/^_initialize_\([a-z_0-9A-Z]*\).*/\1/p' $$f 2>/dev/null; \ + done | \ + while read f; do \ + case " $$fs " in \ + *" $$f "* ) ;; \ + * ) echo $$f ; fs="$$fs $$f";; \ + esac; \ + done >> init.l-tmp + @echo '/* Do not modify this file. */' >>init.c-tmp + @echo '/* It is created automatically by the Makefile. */'>>init.c-tmp + @echo '#include "defs.h" /* For initialize_file_ftype. */' >>init.c-tmp + @echo '#include "call-cmds.h" /* For initialize_all_files. */' >>init.c-tmp + @sed -e 's/\(.*\)/extern initialize_file_ftype _initialize_\1;/' <init.l-tmp >>init.c-tmp + @echo 'void' >>init.c-tmp + @echo 'initialize_all_files (void)' >>init.c-tmp + @echo '{' >>init.c-tmp + @sed -e 's/\(.*\)/ _initialize_\1 ();/' <init.l-tmp >>init.c-tmp + @echo '}' >>init.c-tmp + @rm init.l-tmp + @mv init.c-tmp init.c + +.PRECIOUS: init.c + +init.o: init.c $(defs_h) $(call_cmds_h) + +# Removing the old gdb first works better if it is running, at least on SunOS. +gdb$(EXEEXT): gdb.o libgdb.a $(ADD_DEPS) $(CDEPS) $(TDEPLIBS) + rm -f gdb$(EXEEXT) + $(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \ + -o gdb$(EXEEXT) gdb.o libgdb.a \ + $(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES) + +$(TUI)$(EXEEXT): tui-main.o libgdb.a $(ADD_DEPS) $(CDEPS) $(TDEPLIBS) + rm -f $(TUI)$(EXEEXT) + $(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \ + -o $(TUI)$(EXEEXT) tui-main.o libgdb.a \ + $(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES) + +nlm: force + rootme=`pwd`; export rootme; $(MAKE) $(TARGET_FLAGS_TO_PASS) DO=all DODIRS=nlm subdir_do + +# Create a library of the gdb object files and build GDB by linking +# against that. +# +# init.o is very important. It pulls in the rest of GDB. +LIBGDB_OBS= $(COMMON_OBS) $(TSOBS) $(ADD_FILES) init.o +libgdb.a: $(LIBGDB_OBS) + -rm -f libgdb.a + $(AR) q libgdb.a $(LIBGDB_OBS) + $(RANLIB) libgdb.a + +# A Mach 3.0 program to force gdb back to command level + +stop-gdb: stop-gdb.o + ${CC_LD} $(GLOBAL_CFLAGS) $(LDFLAGS) -o stop-gdb \ + stop-gdb.o $(CLIBS) $(LOADLIBES) + +# This is useful when debugging GDB, because some Unix's don't let you run GDB +# on itself without copying the executable. So "make gdb1" will make +# gdb and put a copy in gdb1, and you can run it with "gdb gdb1". +# Removing gdb1 before the copy is the right thing if gdb1 is open +# in another process. +gdb1$(EXEEXT): gdb$(EXEEXT) + rm -f gdb1$(EXEEXT) + cp gdb$(EXEEXT) gdb1$(EXEEXT) + +# FIXME. These are not generated by "make depend" because they only are there +# for some machines. +# But these rules don't do what we want; we want to hack the foo.o: tm.h +# dependency to do the right thing. +xm-vaxult.h: xm-vax.h +xm-vaxbsd.h: xm-vax.h + +# Put the proper machine-specific files first, so M-. on a machine +# specific routine gets the one for the correct machine. (FIXME: those +# files go in twice; we should be removing them from the main list). + +# TAGS depends on all the files that go into it so you can rebuild TAGS +# with `make TAGS' and not have to say `rm TAGS' first. + +TAGS: $(TAGFILES_NO_SRCDIR) $(TAGFILES_WITH_SRCDIR) + @echo Making TAGS + @etags $(srcdir)/$(TM_FILE) \ + $(srcdir)/$(XM_FILE) \ + $(srcdir)/$(NAT_FILE) \ + `(for i in $(DEPFILES) $(TAGFILES_NO_SRCDIR); do \ + echo $(srcdir)/$$i ; \ + done ; for i in $(TAGFILES_WITH_SRCDIR); do \ + echo $$i ; \ + done) | sed -e 's/\.o$$/\.c/'` \ + `find $(srcdir)/config -name '*.h' -print` + +tags: TAGS + +clean mostlyclean: $(CONFIG_CLEAN) + @$(MAKE) $(FLAGS_TO_PASS) DO=clean "DODIRS=$(SUBDIRS)" subdir_do + rm -f *.o *.a $(ADD_FILES) *~ init.c-tmp init.l-tmp version.c-tmp + rm -f init.c version.c + rm -f gdb$(EXEEXT) core make.log + rm -f gdb[0-9]$(EXEEXT) +.PHONY: clean-tui +clean-tui: + rm -f $(TUI)$(EXEEXT) + +# This used to depend on c-exp.c m2-exp.c TAGS +# I believe this is wrong; the makefile standards for distclean just +# describe removing files; the only sort of "re-create a distribution" +# functionality described is if the distributed files are unmodified. +# NB: While GDBSERVER might be configured on native systems, it isn't +# always included in SUBDIRS. Remove the gdbserver files explictly. +distclean: clean + @$(MAKE) $(FLAGS_TO_PASS) DO=distclean "DODIRS=$(SUBDIRS)" subdir_do + rm -f gdbserver/config.status gdbserver/config.log + rm -f gdbserver/tm.h gdbserver/xm.h gdbserver/nm.h + rm -f gdbserver/Makefile gdbserver/config.cache + rm -f nm.h tm.h xm.h config.status config.h stamp-h .gdbinit + rm -f y.output yacc.acts yacc.tmp y.tab.h + rm -f config.log config.cache + rm -f Makefile + +maintainer-clean: local-maintainer-clean do-maintainer-clean distclean +realclean: maintainer-clean + +local-maintainer-clean: + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f c-exp.c \ + ada-lex.c ada-exp.c \ + objc-exp.c \ + jv-exp.tab \ + f-exp.c m2-exp.c p-exp.c + rm -f TAGS $(INFOFILES) + rm -f $(YYFILES) + rm -f nm.h tm.h xm.h config.status + +do-maintainer-clean: + @$(MAKE) $(FLAGS_TO_PASS) DO=maintainer-clean "DODIRS=$(SUBDIRS)" \ + subdir_do + +diststuff: $(DISTSTUFF) + cd doc; $(MAKE) $(MFLAGS) diststuff + +subdir_do: force + @for i in $(DODIRS); do \ + if [ -f ./$$i/Makefile ] ; then \ + if (cd ./$$i; \ + $(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \ + else exit 1 ; fi ; \ + else true ; fi ; \ + done + +Makefile: Makefile.in config.status @frags@ + $(SHELL) config.status + +config.h: stamp-h ; @true +stamp-h: config.in config.status + CONFIG_HEADERS=config.h:config.in $(SHELL) config.status + +config.status: configure configure.tgt configure.host + $(SHELL) config.status --recheck + +force: + +# Documentation! +# GDB QUICK REFERENCE (TeX dvi file, CM fonts) +doc/refcard.dvi: + cd doc; $(MAKE) refcard.dvi $(FLAGS_TO_PASS) + +# GDB QUICK REFERENCE (PostScript output, common PS fonts) +doc/refcard.ps: + cd doc; $(MAKE) refcard.ps $(FLAGS_TO_PASS) + +# GDB MANUAL: TeX dvi file +doc/gdb.dvi: + cd doc; $(MAKE) gdb.dvi $(FLAGS_TO_PASS) + +# GDB MANUAL: info file +doc/gdb.info: + cd doc; $(MAKE) gdb.info $(FLAGS_TO_PASS) + +# Make copying.c from COPYING +$(srcdir)/copying.c: @MAINTAINER_MODE_TRUE@ \ + $(srcdir)/COPYING $(srcdir)/copying.awk + awk -f $(srcdir)/copying.awk \ + < $(srcdir)/COPYING > $(srcdir)/copying.tmp + mv $(srcdir)/copying.tmp $(srcdir)/copying.c + +version.c: Makefile version.in + rm -f version.c-tmp version.c + echo '#include "version.h"' >> version.c-tmp + echo 'const char version[] = "'"`sed q ${srcdir}/version.in`"'";' >> version.c-tmp + echo 'const char host_name[] = "$(host_alias)";' >> version.c-tmp + echo 'const char target_name[] = "$(target_alias)";' >> version.c-tmp + mv version.c-tmp version.c +version.o: version.c $(version_h) + +observer.h: observer.sh doc/observer.texi + ${srcdir}/observer.sh h ${srcdir}/doc/observer.texi observer.h + +observer.inc: observer.sh doc/observer.texi + ${srcdir}/observer.sh inc ${srcdir}/doc/observer.texi observer.inc + +lint: $(LINTFILES) + $(LINT) $(INCLUDE_CFLAGS) $(LINTFLAGS) $(LINTFILES) \ + `echo $(DEPFILES) | sed 's/\.o /\.c /g'` + +gdb.cxref: $(SFILES) + cxref -I. $(SFILES) >gdb.cxref + +force_update: + +# GNU Make has an annoying habit of putting *all* the Makefile variables +# into the environment, unless you include this target as a circumvention. +# Rumor is that this will be fixed (and this target can be removed) +# in GNU Make 4.0. +.NOEXPORT: + +# GNU Make 3.63 has a different problem: it keeps tacking command line +# overrides onto the definition of $(MAKE). This variable setting +# will remove them. +MAKEOVERRIDES= + +ALLDEPFILES = \ + aix-thread.c \ + alpha-nat.c alphabsd-nat.c \ + alpha-tdep.c alpha-linux-tdep.c alphabsd-tdep.c alphanbsd-tdep.c \ + alpha-osf1-tdep.c alphafbsd-tdep.c alpha-mdebug-tdep.c \ + amd64-nat.c amd64-tdep.c \ + amd64bsd-nat.c amdfbsd-nat.c amd64fbsd-tdep.c \ + amd64nbsd-nat.c amd64nbsd-tdep.c \ + amd64obsd-nat.c amd64obsd-tdep.c \ + amd64-linux-nat.c amd64-linux-tdep.c \ + arm-linux-nat.c arm-linux-tdep.c arm-tdep.c \ + armnbsd-nat.c armnbsd-tdep.c \ + avr-tdep.c \ + bsd-kvm.c \ + coff-solib.c \ + core-regset.c core-aout.c corelow.c \ + dcache.c exec.c fork-child.c \ + glibc-tdep.c \ + go32-nat.c h8300-tdep.c \ + hppa-tdep.c hppa-hpux-tdep.c \ + hppah-nat.c hpread.c \ + hppa-linux-tdep.c hppa-linux-nat.c \ + hppabsd-nat.c hppabsd-tdep.c \ + i386-tdep.c i386v-nat.c i386-linux-nat.c \ + i386v4-nat.c i386ly-tdep.c i386-cygwin-tdep.c \ + i386bsd-nat.c i386bsd-tdep.c i386fbsd-nat.c i386fbsd-tdep.c \ + i386nbsd-nat.c i386nbsd-tdep.c i386obsd-nat.c i386obsd-tdep.c \ + i387-tdep.c \ + i386-linux-tdep.c i386-nat.c \ + i386gnu-nat.c i386gnu-tdep.c \ + ia64-linux-nat.c ia64-linux-tdep.c ia64-tdep.c \ + infptrace.c inftarg.c irix4-nat.c irix5-nat.c \ + libunwind-frame.c \ + lynx-nat.c m3-nat.c \ + m68hc11-tdep.c \ + m68k-tdep.c \ + m68kbsd-nat.c m68kbsd-tdep.c \ + m88k-tdep.c m88kbsd-nat.c \ + mcore-tdep.c \ + mips-linux-nat.c mips-linux-tdep.c \ + mips-nat.c \ + mips-irix-tdep.c \ + mips-tdep.c mipsm3-nat.c mipsv4-nat.c \ + mipsnbsd-nat.c mipsnbsd-tdep.c \ + nbsd-tdep.c \ + ns32k-tdep.c solib-osf.c \ + somread.c somsolib.c $(HPREAD_SOURCE) \ + ppc-sysv-tdep.c ppc-linux-nat.c ppc-linux-tdep.c \ + ppcnbsd-nat.c ppcnbsd-tdep.c \ + ppcobsd-nat.c ppcobsd-tdep.c \ + procfs.c \ + remote-e7000.c \ + remote-hms.c remote-m32r-sdi.c remote-mips.c \ + remote-rdp.c remote-sim.c \ + remote-st.c remote-utils.c dcache.c \ + remote-vx.c \ + rs6000-nat.c rs6000-tdep.c \ + s390-tdep.c s390-nat.c \ + ser-go32.c ser-pipe.c ser-tcp.c \ + sh-tdep.c sh64-tdep.c shnbsd-tdep.c shnbsd-nat.c \ + solib.c solib-irix.c solib-svr4.c solib-sunos.c \ + sparc-linux-tdep.c sparc-nat.c sparc-sol2-nat.c sparc-sol2-tdep.c \ + sparc-tdep.c sparc-sol2-nat.c sparc-sol2-tdep.c sparc64-linux-nat.c \ + sparc64-linux-tdep.c sparc64-nat.c sparc64-sol2-tdep.c \ + sparc64-tdep.c sparc64fbsd-nat.c sparc64fbsd-tdep.c \ + sparc64nbsd-nat.c sparc64nbsd-tdep.c sparc64obsd-tdep.c \ + sparcnbsd-nat.c sparcnbsd-tdep.c sparcobsd-tdep.c \ + symm-tdep.c symm-nat.c \ + vax-tdep.c \ + vx-share/xdr_ld.c vx-share/xdr_ptrace.c vx-share/xdr_rdb.c \ + win32-nat.c \ + xcoffread.c xcoffsolib.c \ + xstormy16-tdep.c + +# Some files need explict build rules (due to -Werror problems) or due +# to sub-directory fun 'n' games. + +# Provide explicit rule/dependency - works for more makes. +copying.o: $(srcdir)/copying.c + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/copying.c + +hpux-thread.o: $(srcdir)/hpux-thread.c + $(CC) -c $(INTERNAL_CFLAGS) -I$(srcdir)/osf-share \ + -I$(srcdir)/osf-share/HP800 -I/usr/include/dce \ + $(srcdir)/hpux-thread.c + +# main.o needs an explicit build rule to get TARGET_SYSTEM_ROOT and BINDIR. +main.o: main.c + $(CC) -c $(INTERNAL_CFLAGS) $(TARGET_SYSTEM_ROOT_DEFINE) \ + -DBINDIR=\"$(bindir)\" $(srcdir)/main.c + +# FIXME: cagney/2003-08-10: "monitor.c" gets -Wformat-nonliteral +# errors. It turns out that that is the least of monitor.c's +# problems. The function print_vsprintf appears to be using +# va_arg(long) to extract CORE_ADDR parameters - something that +# definitly will not work. "monitor.c" needs to be rewritten so that +# it doesn't use format strings and instead uses callbacks. +monitor.o: $(srcdir)/monitor.c + $(CC) -c $(INTERNAL_WARN_CFLAGS) $(NO_WERROR_CFLAGS) $(srcdir)/monitor.c + +# FIXME: cagney/2003-08-10: Do not try to build "printcmd.c" with +# -Wformat-nonliteral. It needs to be overhauled so that it doesn't +# pass user input strings as the format parameter to host printf +# function calls. +printcmd.o: $(srcdir)/printcmd.c + $(CC) -c $(INTERNAL_WARN_CFLAGS) $(NO_WERROR_CFLAGS) $(srcdir)/printcmd.c + +# FIXME: Procfs.o gets -Wformat errors because things like pid_t don't +# match output format strings. +procfs.o: $(srcdir)/procfs.c + $(CC) -c $(INTERNAL_WARN_CFLAGS) $(NO_WERROR_CFLAGS) $(srcdir)/procfs.c + +# FIXME: Thread-db.o gets warnings because the definitions of the register +# sets are different from kernel to kernel. +thread-db.o: $(srcdir)/thread-db.c + $(CC) -c $(INTERNAL_WARN_CFLAGS) $(NO_WERROR_CFLAGS) \ + $(srcdir)/thread-db.c + +v850ice.o: $(srcdir)/v850ice.c + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(ITCL_CFLAGS) \ + $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) \ + $(GDBTK_CFLAGS) \ + $(srcdir)/v850ice.c + +# FIXME: cagney/2003-08-10: Do not try to build "valprint.c" with +# -Wformat-nonliteral. It relies on local_hex_format et.al. and +# that's a mess. It needs a serious overhaul. +valprint.o: $(srcdir)/valprint.c + $(CC) -c $(INTERNAL_WARN_CFLAGS) $(NO_WERROR_CFLAGS) $(srcdir)/valprint.c + +# +# YACC/LEX dependencies +# +# LANG-exp.c is generated in objdir from LANG-exp.y if it doesn't +# exist in srcdir, then compiled in objdir to LANG-exp.o. If we +# said LANG-exp.c rather than ./c-exp.c some makes would +# sometimes re-write it into $(srcdir)/c-exp.c. Remove bogus +# decls for malloc/realloc/free which conflict with everything else. +# Strictly speaking c-exp.c should therefore depend on +# Makefile.in, but that was a pretty big annoyance. + +.SUFFIXES: .y .l +.y.c: + $(SHELL) $(YLWRAP) "$(YACC)" $< y.tab.c $@.tmp -- $(YFLAGS) + -sed -e '/extern.*malloc/d' \ + -e '/extern.*realloc/d' \ + -e '/extern.*free/d' \ + -e '/include.*malloc.h/d' \ + -e 's/malloc/xmalloc/g' \ + -e 's/realloc/xrealloc/g' \ + -e '/^#line.*y.tab.c/d' \ + < $@.tmp > $@.new + -rm $@.tmp + mv $@.new ./$*.c +.l.c: + @if [ "$(FLEX)" ] && $(FLEX) --version >/dev/null 2>&1; then \ + echo $(FLEX) -Isit $< ">" $@; \ + $(FLEX) -Isit $< > $@; \ + elif [ ! -f $@ -a ! -f $< ]; then \ + echo "ada-lex.c missing and flex not available."; \ + false; \ + elif [ ! -f $@ ]; then \ + echo "Warning: $*.c older than $*.l and flex not available."; \ + fi + +.PRECIOUS: ada-exp.c ada-lex.c +.PRECIOUS: c-exp.c +.PRECIOUS: f-exp.c +.PRECIOUS: jv-exp.c +.PRECIOUS: m2-exp.c +.PRECIOUS: objc-exp.c +.PRECIOUS: p-exp.c + +# +# gdb/ dependencies +# + +abug-rom.o: abug-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(serial_h) $(regcache_h) $(m68k_tdep_h) +ada-exp.o: ada-exp.c $(defs_h) $(expression_h) $(value_h) $(parser_defs_h) \ + $(language_h) $(ada_lang_h) $(bfd_h) $(symfile_h) $(objfiles_h) \ + $(frame_h) $(block_h) $(ada_lex_c) +ada-lang.o: ada-lang.c $(gdb_string_h) $(demangle_h) $(defs_h) $(symtab_h) \ + $(gdbtypes_h) $(gdbcmd_h) $(expression_h) $(parser_defs_h) \ + $(language_h) $(c_lang_h) $(inferior_h) $(symfile_h) $(objfiles_h) \ + $(breakpoint_h) $(gdbcore_h) $(ada_lang_h) $(ui_out_h) $(block_h) \ + $(infcall_h) $(dictionary_h) +ada-lex.o: ada-lex.c +ada-tasks.o: ada-tasks.c $(defs_h) $(command_h) $(value_h) $(language_h) \ + $(inferior_h) $(symtab_h) $(target_h) $(regcache_h) $(gdbcore_h) \ + $(gregset_h) $(ada_lang_h) +ada-typeprint.o: ada-typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) \ + $(symtab_h) $(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) \ + $(target_h) $(command_h) $(gdbcmd_h) $(language_h) $(demangle_h) \ + $(c_lang_h) $(typeprint_h) $(ada_lang_h) $(gdb_string_h) +ada-valprint.o: ada-valprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) \ + $(expression_h) $(value_h) $(demangle_h) $(valprint_h) $(language_h) \ + $(annotate_h) $(ada_lang_h) $(c_lang_h) $(infcall_h) +aix-thread.o: aix-thread.c $(defs_h) $(gdb_assert_h) $(gdbthread_h) \ + $(target_h) $(inferior_h) $(regcache_h) $(gdbcmd_h) $(language_h) \ + $(ppc_tdep_h) $(gdb_string_h) +alphabsd-nat.o: alphabsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ + $(alpha_tdep_h) $(alphabsd_tdep_h) $(gregset_h) +alphabsd-tdep.o: alphabsd-tdep.c $(defs_h) $(alpha_tdep_h) \ + $(alphabsd_tdep_h) +alphafbsd-tdep.o: alphafbsd-tdep.c $(defs_h) $(value_h) $(osabi_h) \ + $(alpha_tdep_h) +alpha-linux-tdep.o: alpha-linux-tdep.c $(defs_h) $(frame_h) $(gdb_assert_h) \ + $(osabi_h) $(alpha_tdep_h) +alpha-mdebug-tdep.o: alpha-mdebug-tdep.c $(defs_h) $(frame_h) \ + $(frame_unwind_h) $(frame_base_h) $(symtab_h) $(gdbcore_h) \ + $(block_h) $(gdb_assert_h) $(alpha_tdep_h) +alpha-nat.o: alpha-nat.c $(defs_h) $(gdb_string_h) $(inferior_h) \ + $(gdbcore_h) $(target_h) $(regcache_h) $(alpha_tdep_h) $(gregset_h) +alphanbsd-tdep.o: alphanbsd-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \ + $(regcache_h) $(value_h) $(osabi_h) $(gdb_string_h) $(alpha_tdep_h) \ + $(alphabsd_tdep_h) $(nbsd_tdep_h) $(solib_svr4_h) +alpha-osf1-tdep.o: alpha-osf1-tdep.c $(defs_h) $(frame_h) $(gdbcore_h) \ + $(value_h) $(osabi_h) $(gdb_string_h) $(objfiles_h) $(alpha_tdep_h) +alpha-tdep.o: alpha-tdep.c $(defs_h) $(doublest_h) $(frame_h) \ + $(frame_unwind_h) $(frame_base_h) $(dwarf2_frame_h) $(inferior_h) \ + $(symtab_h) $(value_h) $(gdbcmd_h) $(gdbcore_h) $(dis_asm_h) \ + $(symfile_h) $(objfiles_h) $(gdb_string_h) $(linespec_h) \ + $(regcache_h) $(reggroups_h) $(arch_utils_h) $(osabi_h) $(block_h) \ + $(elf_bfd_h) $(infcall_h) $(alpha_tdep_h) +amd64bsd-nat.o: amd64bsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ + $(gdb_assert_h) $(amd64_tdep_h) $(amd64_nat_h) +amd64fbsd-nat.o: amd64fbsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ + $(gdb_assert_h) $(amd64_tdep_h) $(amd64_nat_h) +amd64fbsd-tdep.o: amd64fbsd-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) \ + $(gdbcore_h) $(regcache_h) $(osabi_h) $(gdb_string_h) \ + $(amd64_tdep_h) $(solib_svr4_h) +amd64-linux-nat.o: amd64-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \ + $(regcache_h) $(linux_nat_h) $(gdb_assert_h) $(gdb_string_h) \ + $(gdb_proc_service_h) $(gregset_h) $(amd64_tdep_h) \ + $(i386_linux_tdep_h) $(amd64_nat_h) +amd64-linux-tdep.o: amd64-linux-tdep.c $(defs_h) $(frame_h) $(gdbcore_h) \ + $(regcache_h) $(osabi_h) $(symtab_h) $(gdb_string_h) \ + $(amd64_tdep_h) $(solib_svr4_h) +amd64-nat.o: amd64-nat.c $(defs_h) $(gdbarch_h) $(regcache_h) \ + $(gdb_assert_h) $(gdb_string_h) $(i386_tdep_h) $(amd64_tdep_h) +amd64nbsd-nat.o: amd64nbsd-nat.c $(defs_h) $(gdb_assert_h) $(amd64_tdep_h) \ + $(amd64_nat_h) +amd64nbsd-tdep.o: amd64nbsd-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) \ + $(gdbcore_h) $(osabi_h) $(symtab_h) $(gdb_assert_h) $(amd64_tdep_h) \ + $(nbsd_tdep_h) $(solib_svr4_h) +amd64obsd-nat.o: amd64obsd-nat.c $(defs_h) $(gdbcore_h) $(regcache_h) \ + $(gdb_assert_h) $(amd64_tdep_h) $(amd64_nat_h) $(bsd_kvm_h) +amd64obsd-tdep.o: amd64obsd-tdep.c $(defs_h) $(frame_h) $(gdbcore_h) \ + $(symtab_h) $(objfiles_h) $(osabi_h) $(regset_h) $(target_h) \ + $(gdb_assert_h) $(gdb_string_h) $(amd64_tdep_h) $(i387_tdep_h) \ + $(solib_svr4_h) +amd64-tdep.o: amd64-tdep.c $(defs_h) $(arch_utils_h) $(block_h) \ + $(dummy_frame_h) $(frame_h) $(frame_base_h) $(frame_unwind_h) \ + $(inferior_h) $(gdbcmd_h) $(gdbcore_h) $(objfiles_h) $(regcache_h) \ + $(regset_h) $(symfile_h) $(gdb_assert_h) $(amd64_tdep_h) \ + $(i387_tdep_h) +annotate.o: annotate.c $(defs_h) $(annotate_h) $(value_h) $(target_h) \ + $(gdbtypes_h) $(breakpoint_h) +arch-utils.o: arch-utils.c $(defs_h) $(arch_utils_h) $(buildsym_h) \ + $(gdbcmd_h) $(inferior_h) $(gdb_string_h) $(regcache_h) \ + $(gdb_assert_h) $(sim_regno_h) $(osabi_h) $(version_h) \ + $(floatformat_h) $(gdbcore_h) +arm-linux-nat.o: arm-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \ + $(gdb_string_h) $(regcache_h) $(arm_tdep_h) $(gregset_h) +arm-linux-tdep.o: arm-linux-tdep.c $(defs_h) $(target_h) $(value_h) \ + $(gdbtypes_h) $(floatformat_h) $(gdbcore_h) $(frame_h) $(regcache_h) \ + $(doublest_h) $(solib_svr4_h) $(osabi_h) $(arm_tdep_h) \ + $(glibc_tdep_h) +armnbsd-nat.o: armnbsd-nat.c $(defs_h) $(arm_tdep_h) $(inferior_h) \ + $(regcache_h) $(gdbcore_h) +armnbsd-tdep.o: armnbsd-tdep.c $(defs_h) $(osabi_h) $(gdb_string_h) \ + $(arm_tdep_h) $(nbsd_tdep_h) $(solib_svr4_h) +arm-tdep.o: arm-tdep.c $(defs_h) $(frame_h) $(inferior_h) $(gdbcmd_h) \ + $(gdbcore_h) $(gdb_string_h) $(dis_asm_h) $(regcache_h) \ + $(doublest_h) $(value_h) $(arch_utils_h) $(osabi_h) \ + $(frame_unwind_h) $(frame_base_h) $(trad_frame_h) $(arm_tdep_h) \ + $(gdb_sim_arm_h) $(elf_bfd_h) $(coff_internal_h) $(elf_arm_h) \ + $(gdb_assert_h) $(bfd_in2_h) $(libcoff_h) +auxv.o: auxv.c $(defs_h) $(target_h) $(gdbtypes_h) $(command_h) \ + $(inferior_h) $(valprint_h) $(gdb_assert_h) $(auxv_h) \ + $(elf_common_h) +avr-tdep.o: avr-tdep.c $(defs_h) $(frame_h) $(frame_unwind_h) \ + $(frame_base_h) $(trad_frame_h) $(gdbcmd_h) $(gdbcore_h) \ + $(inferior_h) $(symfile_h) $(arch_utils_h) $(regcache_h) \ + $(gdb_string_h) $(dis_asm_h) +ax-gdb.o: ax-gdb.c $(defs_h) $(symtab_h) $(symfile_h) $(gdbtypes_h) \ + $(value_h) $(expression_h) $(command_h) $(gdbcmd_h) $(frame_h) \ + $(target_h) $(ax_h) $(ax_gdb_h) $(gdb_string_h) $(block_h) \ + $(regcache_h) +ax-general.o: ax-general.c $(defs_h) $(ax_h) $(value_h) $(gdb_string_h) +bcache.o: bcache.c $(defs_h) $(gdb_obstack_h) $(bcache_h) $(gdb_string_h) \ + $(gdb_assert_h) +bfd-target.o: bfd-target.c $(defs_h) $(target_h) $(bfd_target_h) \ + $(gdb_assert_h) $(gdb_string_h) +block.o: block.c $(defs_h) $(block_h) $(symtab_h) $(symfile_h) \ + $(gdb_obstack_h) $(cp_support_h) +blockframe.o: blockframe.c $(defs_h) $(symtab_h) $(bfd_h) $(objfiles_h) \ + $(frame_h) $(gdbcore_h) $(value_h) $(target_h) $(inferior_h) \ + $(annotate_h) $(regcache_h) $(gdb_assert_h) $(dummy_frame_h) \ + $(command_h) $(gdbcmd_h) $(block_h) +breakpoint.o: breakpoint.c $(defs_h) $(symtab_h) $(frame_h) $(breakpoint_h) \ + $(gdbtypes_h) $(expression_h) $(gdbcore_h) $(gdbcmd_h) $(value_h) \ + $(command_h) $(inferior_h) $(gdbthread_h) $(target_h) $(language_h) \ + $(gdb_string_h) $(demangle_h) $(annotate_h) $(symfile_h) \ + $(objfiles_h) $(source_h) $(linespec_h) $(completer_h) $(gdb_h) \ + $(ui_out_h) $(cli_script_h) $(gdb_assert_h) $(block_h) \ + $(gdb_events_h) +bsd-kvm.o: bsd-kvm.c $(defs_h) $(cli_cmds.h) $(command_h) $(value_h) \ + $(frame_h) $(regcache_h) $(target_h) $(gdb_assert_h) $(readline_h) \ + $(bsd_kvm_h) +buildsym.o: buildsym.c $(defs_h) $(bfd_h) $(gdb_obstack_h) $(symtab_h) \ + $(symfile_h) $(objfiles_h) $(gdbtypes_h) $(gdb_assert_h) \ + $(complaints_h) $(gdb_string_h) $(expression_h) $(language_h) \ + $(bcache_h) $(filenames_h) $(macrotab_h) $(demangle_h) $(block_h) \ + $(cp_support_h) $(dictionary_h) $(buildsym_h) $(stabsread_h) +c-exp.o: c-exp.c $(defs_h) $(gdb_string_h) $(expression_h) $(value_h) \ + $(parser_defs_h) $(language_h) $(c_lang_h) $(bfd_h) $(symfile_h) \ + $(objfiles_h) $(charset_h) $(block_h) $(cp_support_h) +charset.o: charset.c $(defs_h) $(charset_h) $(gdbcmd_h) $(gdb_assert_h) \ + $(gdb_string_h) +c-lang.o: c-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \ + $(parser_defs_h) $(language_h) $(c_lang_h) $(valprint_h) \ + $(macroscope_h) $(gdb_assert_h) $(charset_h) $(gdb_string_h) \ + $(demangle_h) $(cp_support_h) +cli-out.o: cli-out.c $(defs_h) $(ui_out_h) $(cli_out_h) $(gdb_string_h) \ + $(gdb_assert_h) +coff-pe-read.o: coff-pe-read.c $(coff_pe_read_h) $(bfd_h) $(defs_h) \ + $(gdbtypes_h) $(symtab_h) $(symfile_h) $(objfiles_h) +coffread.o: coffread.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(demangle_h) \ + $(breakpoint_h) $(bfd_h) $(gdb_obstack_h) $(gdb_string_h) \ + $(coff_internal_h) $(libcoff_h) $(objfiles_h) $(buildsym_h) \ + $(gdb_stabs_h) $(stabsread_h) $(complaints_h) $(target_h) \ + $(gdb_assert_h) $(block_h) $(dictionary_h) $(coff_pe_read_h) +coff-solib.o: coff-solib.c $(defs_h) $(frame_h) $(bfd_h) $(gdbcore_h) \ + $(symtab_h) $(symfile_h) $(objfiles_h) +complaints.o: complaints.c $(defs_h) $(complaints_h) $(gdb_assert_h) \ + $(command_h) $(gdbcmd_h) +completer.o: completer.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \ + $(filenames_h) $(language_h) $(cli_decode_h) $(gdbcmd_h) \ + $(readline_h) $(completer_h) +copying.o: copying.c $(defs_h) $(command_h) $(gdbcmd_h) +core-aout.o: core-aout.c $(defs_h) $(gdbcore_h) $(value_h) $(regcache_h) \ + $(gdb_dirent_h) $(gdb_stat_h) +corefile.o: corefile.c $(defs_h) $(gdb_string_h) $(inferior_h) $(symtab_h) \ + $(command_h) $(gdbcmd_h) $(bfd_h) $(target_h) $(gdbcore_h) \ + $(dis_asm_h) $(gdb_stat_h) $(completer_h) +corelow.o: corelow.c $(defs_h) $(arch_utils_h) $(gdb_string_h) $(frame_h) \ + $(inferior_h) $(symtab_h) $(command_h) $(bfd_h) $(target_h) \ + $(gdbcore_h) $(gdbthread_h) $(regcache_h) $(regset_h) $(symfile_h) \ + $(exec_h) $(readline_h) $(gdb_assert_h) $(observer_h) +core-regset.o: core-regset.c $(defs_h) $(command_h) $(gdbcore_h) \ + $(inferior_h) $(target_h) $(gdb_string_h) $(gregset_h) +cp-abi.o: cp-abi.c $(defs_h) $(value_h) $(cp_abi_h) $(command_h) $(gdbcmd_h) \ + $(ui_out_h) $(gdb_string_h) +cp-namespace.o: cp-namespace.c $(defs_h) $(cp_support_h) $(gdb_obstack_h) \ + $(symtab_h) $(symfile_h) $(gdb_assert_h) $(block_h) $(objfiles_h) \ + $(gdbtypes_h) $(dictionary_h) $(command_h) $(frame_h) +cp-support.o: cp-support.c $(defs_h) $(cp_support_h) $(gdb_string_h) \ + $(demangle_h) $(gdb_assert_h) $(gdbcmd_h) $(dictionary_h) \ + $(objfiles_h) $(frame_h) $(symtab_h) $(block_h) $(complaints_h) \ + $(gdbtypes_h) +cpu32bug-rom.o: cpu32bug-rom.c $(defs_h) $(gdbcore_h) $(target_h) \ + $(monitor_h) $(serial_h) $(regcache_h) $(m68k_tdep_h) +cp-valprint.o: cp-valprint.c $(defs_h) $(gdb_obstack_h) $(symtab_h) \ + $(gdbtypes_h) $(expression_h) $(value_h) $(command_h) $(gdbcmd_h) \ + $(demangle_h) $(annotate_h) $(gdb_string_h) $(c_lang_h) $(target_h) \ + $(cp_abi_h) $(valprint_h) +cris-tdep.o: cris-tdep.c $(defs_h) $(frame_h) $(frame_unwind_h) \ + $(frame_base_h) $(trad_frame_h) $(dwarf2_frame_h) $(symtab_h) \ + $(inferior_h) $(gdbtypes_h) $(gdbcore_h) $(gdbcmd_h) $(target_h) \ + $(value_h) $(opcode_cris_h) $(arch_utils_h) $(regcache_h) \ + $(gdb_assert_h) $(objfiles_h) $(solib_h) $(solib_svr4_h) \ + $(gdb_string_h) $(dis_asm_h) +c-typeprint.o: c-typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) $(symtab_h) \ + $(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) $(target_h) \ + $(language_h) $(demangle_h) $(c_lang_h) $(typeprint_h) $(cp_abi_h) \ + $(gdb_string_h) +c-valprint.o: c-valprint.c $(defs_h) $(gdb_string_h) $(symtab_h) \ + $(gdbtypes_h) $(expression_h) $(value_h) $(valprint_h) $(language_h) \ + $(c_lang_h) $(cp_abi_h) $(target_h) +d10v-tdep.o: d10v-tdep.c $(defs_h) $(frame_h) $(frame_unwind_h) \ + $(frame_base_h) $(symtab_h) $(gdbtypes_h) $(gdbcmd_h) $(gdbcore_h) \ + $(gdb_string_h) $(value_h) $(inferior_h) $(dis_asm_h) $(symfile_h) \ + $(objfiles_h) $(language_h) $(arch_utils_h) $(regcache_h) \ + $(remote_h) $(floatformat_h) $(gdb_sim_d10v_h) $(sim_regno_h) \ + $(disasm_h) $(trad_frame_h) $(gdb_assert_h) +dbug-rom.o: dbug-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(serial_h) $(regcache_h) $(m68k_tdep_h) +dbxread.o: dbxread.c $(defs_h) $(gdb_string_h) $(gdb_obstack_h) \ + $(gdb_stat_h) $(symtab_h) $(breakpoint_h) $(target_h) $(gdbcore_h) \ + $(libaout_h) $(objfiles_h) $(buildsym_h) $(stabsread_h) \ + $(gdb_stabs_h) $(demangle_h) $(language_h) $(complaints_h) \ + $(cp_abi_h) $(gdb_assert_h) $(aout_aout64_h) $(aout_stab_gnu_h) +dcache.o: dcache.c $(defs_h) $(dcache_h) $(gdbcmd_h) $(gdb_string_h) \ + $(gdbcore_h) $(target_h) +demangle.o: demangle.c $(defs_h) $(command_h) $(gdbcmd_h) $(demangle_h) \ + $(gdb_string_h) +dictionary.o: dictionary.c $(defs_h) $(gdb_obstack_h) $(symtab_h) \ + $(buildsym_h) $(gdb_assert_h) $(dictionary_h) +dink32-rom.o: dink32-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(serial_h) $(symfile_h) $(inferior_h) $(regcache_h) +disasm.o: disasm.c $(defs_h) $(target_h) $(value_h) $(ui_out_h) \ + $(gdb_string_h) $(disasm_h) $(gdbcore_h) $(dis_asm_h) +doublest.o: doublest.c $(defs_h) $(doublest_h) $(floatformat_h) \ + $(gdb_assert_h) $(gdb_string_h) $(gdbtypes_h) +dsrec.o: dsrec.c $(defs_h) $(serial_h) $(srec_h) $(gdb_assert_h) \ + $(gdb_string_h) +dummy-frame.o: dummy-frame.c $(defs_h) $(dummy_frame_h) $(regcache_h) \ + $(frame_h) $(inferior_h) $(gdb_assert_h) $(frame_unwind_h) \ + $(command_h) $(gdbcmd_h) +dve3900-rom.o: dve3900-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(serial_h) $(inferior_h) $(command_h) $(gdb_string_h) $(regcache_h) \ + $(mips_tdep_h) +dwarf2expr.o: dwarf2expr.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(value_h) \ + $(gdbcore_h) $(elf_dwarf2_h) $(dwarf2expr_h) +dwarf2-frame.o: dwarf2-frame.c $(defs_h) $(dwarf2expr_h) $(elf_dwarf2_h) \ + $(frame_h) $(frame_base_h) $(frame_unwind_h) $(gdbcore_h) \ + $(gdbtypes_h) $(symtab_h) $(objfiles_h) $(regcache_h) \ + $(gdb_assert_h) $(gdb_string_h) $(complaints_h) $(dwarf2_frame_h) +dwarf2loc.o: dwarf2loc.c $(defs_h) $(ui_out_h) $(value_h) $(frame_h) \ + $(gdbcore_h) $(target_h) $(inferior_h) $(ax_h) $(ax_gdb_h) \ + $(regcache_h) $(objfiles_h) $(elf_dwarf2_h) $(dwarf2expr_h) \ + $(dwarf2loc_h) $(gdb_string_h) +dwarf2read.o: dwarf2read.c $(defs_h) $(bfd_h) $(symtab_h) $(gdbtypes_h) \ + $(objfiles_h) $(elf_dwarf2_h) $(buildsym_h) $(demangle_h) \ + $(expression_h) $(filenames_h) $(macrotab_h) $(language_h) \ + $(complaints_h) $(bcache_h) $(dwarf2expr_h) $(dwarf2loc_h) \ + $(cp_support_h) $(gdb_string_h) $(gdb_assert_h) $(hashtab_h) +dwarfread.o: dwarfread.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(objfiles_h) \ + $(elf_dwarf_h) $(buildsym_h) $(demangle_h) $(expression_h) \ + $(language_h) $(complaints_h) $(gdb_string_h) +elfread.o: elfread.c $(defs_h) $(bfd_h) $(gdb_string_h) $(elf_bfd_h) \ + $(elf_mips_h) $(symtab_h) $(symfile_h) $(objfiles_h) $(buildsym_h) \ + $(stabsread_h) $(gdb_stabs_h) $(complaints_h) $(demangle_h) +environ.o: environ.c $(defs_h) $(environ_h) $(gdb_string_h) +eval.o: eval.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \ + $(value_h) $(expression_h) $(target_h) $(frame_h) $(language_h) \ + $(f_lang_h) $(cp_abi_h) $(infcall_h) $(objc_lang_h) $(block_h) \ + $(parser_defs_h) +event-loop.o: event-loop.c $(defs_h) $(event_loop_h) $(event_top_h) \ + $(gdb_string_h) +event-top.o: event-top.c $(defs_h) $(top_h) $(inferior_h) $(target_h) \ + $(terminal_h) $(event_loop_h) $(event_top_h) $(interps_h) \ + $(gdbcmd_h) $(readline_h) $(readline_history_h) +exec.o: exec.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) $(gdbcmd_h) \ + $(language_h) $(symfile_h) $(objfiles_h) $(completer_h) $(value_h) \ + $(exec_h) $(readline_h) $(gdb_string_h) $(gdbcore_h) $(gdb_stat_h) \ + $(xcoffsolib_h) +expprint.o: expprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \ + $(value_h) $(language_h) $(parser_defs_h) $(user_regs_h) $(target_h) \ + $(gdb_string_h) $(block_h) +fbsd-proc.o: fbsd-proc.c $(defs_h) $(gdbcore_h) $(inferior_h) \ + $(regcache_h) $(regset_h) $(gdb_assert_h) $(gdb_string_h) \ + $(elf_bfd_h) +f-exp.o: f-exp.c $(defs_h) $(gdb_string_h) $(expression_h) $(value_h) \ + $(parser_defs_h) $(language_h) $(f_lang_h) $(bfd_h) $(symfile_h) \ + $(objfiles_h) $(block_h) +findvar.o: findvar.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(frame_h) \ + $(value_h) $(gdbcore_h) $(inferior_h) $(target_h) $(gdb_string_h) \ + $(gdb_assert_h) $(floatformat_h) $(symfile_h) $(regcache_h) \ + $(user_regs_h) $(block_h) +f-lang.o: f-lang.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \ + $(expression_h) $(parser_defs_h) $(language_h) $(f_lang_h) \ + $(valprint_h) $(value_h) +fork-child.o: fork-child.c $(defs_h) $(gdb_string_h) $(frame_h) \ + $(inferior_h) $(target_h) $(gdb_wait_h) $(gdb_vfork_h) $(gdbcore_h) \ + $(terminal_h) $(gdbthread_h) $(command_h) +frame-base.o: frame-base.c $(defs_h) $(frame_base_h) $(frame_h) \ + $(gdb_obstack_h) +frame.o: frame.c $(defs_h) $(frame_h) $(target_h) $(value_h) $(inferior_h) \ + $(regcache_h) $(gdb_assert_h) $(gdb_string_h) $(user_regs_h) \ + $(gdb_obstack_h) $(dummy_frame_h) $(sentinel_frame_h) $(gdbcore_h) \ + $(annotate_h) $(language_h) $(frame_unwind_h) $(frame_base_h) \ + $(command_h) $(gdbcmd_h) $(observer_h) +frame-unwind.o: frame-unwind.c $(defs_h) $(frame_h) $(frame_unwind_h) \ + $(gdb_assert_h) $(dummy_frame_h) $(gdb_obstack_h) +frv-linux-tdep.o: frv-linux-tdep.c $(defs_h) $(target_h) $(frame_h) \ + $(osabi_h) $(elf_bfd_h) $(elf_frv_h) $(frv_tdep_h) \ + $(trad_frame_h) $(frame_unwind_h) +frv-tdep.o: frv-tdep.c $(defs_h) $(gdb_string_h) $(inferior_h) $(gdbcore_h) \ + $(arch_utils_h) $(regcache_h) $(frame_h) $(frame_unwind_h) \ + $(frame_base_h) $(trad_frame_h) $(dis_asm_h) $(gdb_assert_h) \ + $(sim_regno_h) $(gdb_sim_frv_h) $(opcodes_frv_desc_h) $(symtab_h) \ + $(elf_bfd_h) $(elf_frv_h) $(osabi_h) $(infcall_h) $(frv_tdep_h) +f-typeprint.o: f-typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) $(symtab_h) \ + $(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) $(target_h) \ + $(f_lang_h) $(gdb_string_h) +f-valprint.o: f-valprint.c $(defs_h) $(gdb_string_h) $(symtab_h) \ + $(gdbtypes_h) $(expression_h) $(value_h) $(valprint_h) $(language_h) \ + $(f_lang_h) $(frame_h) $(gdbcore_h) $(command_h) $(block_h) +gcore.o: gcore.c $(defs_h) $(elf_bfd_h) $(infcall_h) $(inferior_h) \ + $(gdbcore_h) $(objfiles_h) $(symfile_h) $(cli_decode_h) \ + $(gdb_assert_h) +gdbarch.o: gdbarch.c $(defs_h) $(arch_utils_h) $(gdbcmd_h) $(inferior_h) \ + $(symcat_h) $(floatformat_h) $(gdb_assert_h) $(gdb_string_h) \ + $(gdb_events_h) $(reggroups_h) $(osabi_h) $(gdb_obstack_h) +gdb.o: gdb.c $(defs_h) $(main_h) $(gdb_string_h) $(interps_h) +gdb-events.o: gdb-events.c $(defs_h) $(gdb_events_h) $(gdbcmd_h) +gdbtypes.o: gdbtypes.c $(defs_h) $(gdb_string_h) $(bfd_h) $(symtab_h) \ + $(symfile_h) $(objfiles_h) $(gdbtypes_h) $(expression_h) \ + $(language_h) $(target_h) $(value_h) $(demangle_h) $(complaints_h) \ + $(gdbcmd_h) $(wrapper_h) $(cp_abi_h) $(gdb_assert_h) +glibc-tdep.o: glibc-tdep.c $(defs_h) $(frame_h) $(symtab_h) $(symfile_h) \ + $(objfiles_h) $(glibc_tdep_h) +gnu-nat.o: gnu-nat.c $(gdb_string_h) $(defs_h) $(inferior_h) $(symtab_h) \ + $(value_h) $(language_h) $(target_h) $(gdb_wait_h) $(gdbcmd_h) \ + $(gdbcore_h) $(gdbthread_h) $(gdb_assert_h) $(gdb_obstack_h) \ + $(gnu_nat_h) $(exc_request_S_h) $(notify_S_h) $(process_reply_S_h) \ + $(msg_reply_S_h) $(exc_request_U_h) $(msg_U_h) +gnu-v2-abi.o: gnu-v2-abi.c $(defs_h) $(gdb_string_h) $(symtab_h) \ + $(gdbtypes_h) $(value_h) $(demangle_h) $(cp_abi_h) $(cp_support_h) +gnu-v3-abi.o: gnu-v3-abi.c $(defs_h) $(value_h) $(cp_abi_h) $(cp_support_h) \ + $(demangle_h) $(gdb_assert_h) $(gdb_string_h) +go32-nat.o: go32-nat.c $(defs_h) $(inferior_h) $(gdb_wait_h) $(gdbcore_h) \ + $(command_h) $(gdbcmd_h) $(floatformat_h) $(buildsym_h) \ + $(i387_tdep_h) $(i386_tdep_h) $(value_h) $(regcache_h) \ + $(gdb_string_h) +h8300-tdep.o: h8300-tdep.c $(defs_h) $(value_h) $(inferior_h) $(symfile_h) \ + $(arch_utils_h) $(regcache_h) $(gdbcore_h) $(objfiles_h) $(gdbcmd_h) \ + $(gdb_assert_h) $(dis_asm_h) +hpacc-abi.o: hpacc-abi.c $(defs_h) $(value_h) $(gdb_regex_h) $(gdb_string_h) \ + $(gdbtypes_h) $(gdbcore_h) $(cp_abi_h) +hppah-nat.o: hppah-nat.c $(defs_h) $(inferior_h) $(target_h) $(gdbcore_h) \ + $(gdb_wait_h) $(regcache_h) $(gdb_string_h) $(infttrace_h) \ + $(hppa_tdep_h) +hppa-hpux-tdep.o: hppa-hpux-tdep.c $(defs_h) $(arch_utils_h) $(gdbcore_h) \ + $(osabi_h) $(gdb_string_h) $(frame_h) $(frame_unwind_h) \ + $(trad_frame_h) $(symtab_h) $(objfiles_h) $(inferior_h) $(infcall_h) \ + $(observer_h) $(hppa_tdep_h) +hppa-tdep.o: hppa-tdep.c $(defs_h) $(frame_h) $(bfd_h) $(inferior_h) \ + $(regcache_h) $(completer_h) $(osabi_h) $(gdb_assert_h) \ + $(arch_utils_h) $(symtab_h) $(dis_asm_h) $(trad_frame_h) \ + $(frame_unwind_h) $(frame_base_h) $(gdbcore_h) $(gdbcmd_h) \ + $(symfile_h) $(objfiles_h) $(hppa_tdep_h) +hppa-linux-tdep.o: hppa-linux-tdep.c $(defs_h) $(gdbcore_h) $(osabi_h) \ + $(target_h) $(objfiles_h) $(solib_svr4_h) $(glibc_tdep_h) \ + $(frame_unwind_h) $(trad_frame_h) $(dwarf2_frame_h) $(hppa_tdep_h) \ + $(elf_common_h) $(value_h) +hppa-linux-nat.o: hppa-linux-nat.c $(defs_h) $(gdbcore_h) $(regcache_h) \ + $(gdb_string_h) $(inferior_h) +hppabsd-nat.o: hppabsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ + $(hppa_tdep_h) +hppabsd-tdep.o: hppabsd-tdep.c $(defs_h) $(arch_utils_h) $(osabi_h) \ + $(regcache_h) $(regset_h) $(gdb_assert_h) $(gdb_string_h) \ + $(hppa_tdep_h) $(solib_svr4_h) +hpread.o: hpread.c $(defs_h) $(bfd_h) $(gdb_string_h) $(hp_symtab_h) \ + $(syms_h) $(symtab_h) $(symfile_h) $(objfiles_h) $(buildsym_h) \ + $(complaints_h) $(gdb_stabs_h) $(gdbtypes_h) $(demangle_h) \ + $(somsolib_h) $(gdb_assert_h) $(gdb_string_h) $(hppa_tdep_h) +hpux-thread.o: hpux-thread.c $(defs_h) $(gdbthread_h) $(target_h) \ + $(inferior_h) $(regcache_h) $(gdb_stat_h) $(gdbcore_h) +i386bsd-nat.o: i386bsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ + $(gdb_assert_h) $(i386_tdep_h) $(i387_tdep_h) +i386bsd-tdep.o: i386bsd-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) \ + $(gdbcore_h) $(regcache_h) $(osabi_h) $(gdb_string_h) $(i386_tdep_h) +i386-cygwin-tdep.o: i386-cygwin-tdep.c $(defs_h) $(osabi_h) $(gdb_string_h) \ + $(i386_tdep_h) +i386fbsd-nat.o: i386fbsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ + $(i386_tdep_h) $(bsd_kvm_h) +i386fbsd-tdep.o: i386fbsd-tdep.c $(defs_h) $(arch_utils_h) $(osabi_h) \ + $(i386_tdep_h) $(i387_tdep_h) $(solib_svr4_h) +i386gnu-nat.o: i386gnu-nat.c $(defs_h) $(inferior_h) $(floatformat_h) \ + $(regcache_h) $(gdb_assert_h) $(i386_tdep_h) $(gnu_nat_h) \ + $(i387_tdep_h) $(gregset_h) +i386gnu-tdep.o: i386gnu-tdep.c $(defs_h) $(osabi_h) $(i386_tdep_h) +i386-linux-nat.o: i386-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \ + $(regcache_h) $(linux_nat_h) $(gdb_assert_h) $(gdb_string_h) \ + $(gregset_h) $(i387_tdep_h) $(i386_tdep_h) $(i386_linux_tdep_h) \ + $(gdb_proc_service_h) +i386-linux-tdep.o: i386-linux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \ + $(value_h) $(regcache_h) $(inferior_h) $(osabi_h) $(reggroups_h) \ + $(gdb_string_h) $(i386_tdep_h) $(i386_linux_tdep_h) $(glibc_tdep_h) \ + $(solib_svr4_h) +i386ly-tdep.o: i386ly-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \ + $(regcache_h) $(target_h) $(osabi_h) $(i386_tdep_h) +i386-nat.o: i386-nat.c $(defs_h) $(breakpoint_h) $(command_h) $(gdbcmd_h) +i386nbsd-nat.o: i386nbsd-nat.c $(defs_h) $(gdbcore_h) $(regcache_h) \ + $(i386_tdep_h) $(bsd_kvm_h) +i386nbsd-tdep.o: i386nbsd-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) \ + $(gdbcore_h) $(regcache_h) $(regset_h) $(osabi_h) $(symtab_h) \ + $(gdb_assert_h) $(gdb_string_h) $(i386_tdep_h) $(i387_tdep_h) \ + $(nbsd_tdep_h) $(solib_svr4_h) +i386-nto-tdep.o: i386-nto-tdep.c $(gdb_string_h) $(gdb_assert_h) $(defs_h) \ + $(frame_h) $(target_h) $(regcache_h) $(solib_svr4_h) $(i386_tdep_h) \ + $(nto_tdep_h) $(osabi_h) $(i387_tdep_h) +i386obsd-nat.o: i386obsd-nat.c $(defs_h) $(i386_tdep_h) +i386obsd-tdep.o: i386obsd-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) \ + $(gdbcore_h) $(regcache_h) $(regset_h) $(symtab_h) $(objfiles_h) \ + $(osabi_h) $(target_h) $(gdb_assert_h) $(gdb_string_h) \ + $(i386_tdep_h) $(i387_tdep_h) $(solib_svr4_h) +i386-sol2-tdep.o: i386-sol2-tdep.c $(defs_h) $(value_h) $(osabi_h) \ + $(gdb_string_h) $(i386_tdep_h) $(solib_svr4_h) +i386-stub.o: i386-stub.c +i386-tdep.o: i386-tdep.c $(defs_h) $(arch_utils_h) $(command_h) \ + $(dummy_frame_h) $(dwarf2_frame_h) $(doublest_h) $(floatformat_h) \ + $(frame_h) $(frame_base_h) $(frame_unwind_h) $(inferior_h) \ + $(gdbcmd_h) $(gdbcore_h) $(objfiles_h) $(osabi_h) $(regcache_h) \ + $(reggroups_h) $(regset_h) $(symfile_h) $(symtab_h) $(target_h) \ + $(value_h) $(dis_asm_h) $(gdb_assert_h) $(gdb_string_h) \ + $(i386_tdep_h) $(i387_tdep_h) +i386v4-nat.o: i386v4-nat.c $(defs_h) $(value_h) $(inferior_h) $(regcache_h) \ + $(i386_tdep_h) $(i387_tdep_h) $(gregset_h) +i386v-nat.o: i386v-nat.c $(defs_h) $(frame_h) $(inferior_h) $(language_h) \ + $(gdbcore_h) $(gdb_stat_h) $(floatformat_h) $(target_h) \ + $(i386_tdep_h) +i387-tdep.o: i387-tdep.c $(defs_h) $(doublest_h) $(floatformat_h) $(frame_h) \ + $(gdbcore_h) $(inferior_h) $(language_h) $(regcache_h) $(value_h) \ + $(gdb_assert_h) $(gdb_string_h) $(i386_tdep_h) $(i387_tdep_h) +ia64-aix-nat.o: ia64-aix-nat.c $(defs_h) $(inferior_h) $(target_h) \ + $(gdbcore_h) $(regcache_h) $(symtab_h) $(bfd_h) $(symfile_h) \ + $(objfiles_h) $(gdb_stat_h) +ia64-aix-tdep.o: ia64-aix-tdep.c $(defs_h) +ia64-linux-nat.o: ia64-linux-nat.c $(defs_h) $(gdb_string_h) $(inferior_h) \ + $(target_h) $(gdbcore_h) $(regcache_h) $(gdb_wait_h) $(gregset_h) +ia64-linux-tdep.o: ia64-linux-tdep.c $(defs_h) $(ia64_tdep_h) \ + $(arch_utils_h) $(gdbcore_h) $(regcache_h) +ia64-tdep.o: ia64-tdep.c $(defs_h) $(inferior_h) $(gdbcore_h) \ + $(arch_utils_h) $(floatformat_h) $(regcache_h) $(reggroups_h) \ + $(frame_h) $(frame_base_h) $(frame_unwind_h) $(doublest_h) \ + $(value_h) $(gdb_assert_h) $(objfiles_h) $(elf_common_h) \ + $(elf_bfd_h) $(elf_h) $(dis_asm_h) $(infcall_h) $(ia64_tdep_h) \ + $(libunwind_frame_h) $(libunwind_ia64_h) +infcall.o: infcall.c $(defs_h) $(breakpoint_h) $(target_h) $(regcache_h) \ + $(inferior_h) $(gdb_assert_h) $(block_h) $(gdbcore_h) $(language_h) \ + $(objfiles_h) $(gdbcmd_h) $(command_h) $(gdb_string_h) $(infcall_h) +infcmd.o: infcmd.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \ + $(frame_h) $(inferior_h) $(environ_h) $(value_h) $(gdbcmd_h) \ + $(symfile_h) $(gdbcore_h) $(target_h) $(language_h) $(symfile_h) \ + $(objfiles_h) $(completer_h) $(ui_out_h) $(event_top_h) \ + $(parser_defs_h) $(regcache_h) $(reggroups_h) $(block_h) \ + $(gdb_assert_h) +inf-loop.o: inf-loop.c $(defs_h) $(inferior_h) $(target_h) $(event_loop_h) \ + $(event_top_h) $(inf_loop_h) $(remote_h) +inflow.o: inflow.c $(defs_h) $(frame_h) $(inferior_h) $(command_h) \ + $(serial_h) $(terminal_h) $(target_h) $(gdbthread_h) $(gdb_string_h) \ + $(inflow_h) +infptrace.o: infptrace.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \ + $(gdb_string_h) $(regcache_h) $(gdb_wait_h) $(command_h) \ + $(gdb_dirent_h) $(gdbcore_h) $(gdb_stat_h) +infrun.o: infrun.c $(defs_h) $(gdb_string_h) $(symtab_h) $(frame_h) \ + $(inferior_h) $(breakpoint_h) $(gdb_wait_h) $(gdbcore_h) $(gdbcmd_h) \ + $(cli_script_h) $(target_h) $(gdbthread_h) $(annotate_h) \ + $(symfile_h) $(top_h) $(inf_loop_h) $(regcache_h) $(value_h) \ + $(observer_h) $(language_h) $(gdb_assert_h) +inftarg.o: inftarg.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \ + $(gdbcore_h) $(command_h) $(gdb_stat_h) $(gdb_wait_h) $(inflow_h) \ + $(observer_h) +infttrace.o: infttrace.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \ + $(gdb_string_h) $(gdb_wait_h) $(command_h) $(gdbthread_h) \ + $(gdbcore_h) $(infttrace_h) +interps.o: interps.c $(defs_h) $(gdbcmd_h) $(ui_out_h) $(event_loop_h) \ + $(event_top_h) $(interps_h) $(completer_h) $(gdb_string_h) \ + $(gdb_events_h) $(gdb_assert_h) $(top_h) +irix5-nat.o: irix5-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) $(target_h) \ + $(regcache_h) $(gdb_string_h) $(gregset_h) $(mips_tdep_h) +jv-exp.o: jv-exp.c $(defs_h) $(gdb_string_h) $(expression_h) $(value_h) \ + $(parser_defs_h) $(language_h) $(jv_lang_h) $(bfd_h) $(symfile_h) \ + $(objfiles_h) $(block_h) +jv-lang.o: jv-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \ + $(parser_defs_h) $(language_h) $(gdbtypes_h) $(symtab_h) \ + $(symfile_h) $(objfiles_h) $(gdb_string_h) $(value_h) $(c_lang_h) \ + $(jv_lang_h) $(gdbcore_h) $(block_h) $(demangle_h) $(dictionary_h) +jv-typeprint.o: jv-typeprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) \ + $(value_h) $(demangle_h) $(jv_lang_h) $(gdb_string_h) $(typeprint_h) \ + $(c_lang_h) $(cp_abi_h) +jv-valprint.o: jv-valprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) \ + $(gdbcore_h) $(expression_h) $(value_h) $(demangle_h) $(valprint_h) \ + $(language_h) $(jv_lang_h) $(c_lang_h) $(annotate_h) $(gdb_string_h) +kod.o: kod.c $(defs_h) $(command_h) $(gdbcmd_h) $(target_h) $(gdb_string_h) \ + $(kod_h) +kod-cisco.o: kod-cisco.c $(defs_h) $(gdb_string_h) $(kod_h) +language.o: language.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \ + $(value_h) $(gdbcmd_h) $(expression_h) $(language_h) $(target_h) \ + $(parser_defs_h) $(jv_lang_h) $(demangle_h) +libunwind-frame.o: libunwind-frame.c $(defs_h) $(inferior_h) $(frame_h) \ + $(frame_base_h) $(frame_unwind_h) $(gdbcore_h) $(gdbtypes_h) \ + $(symtab_h) $(objfiles_h) $(regcache_h) $(gdb_assert_h) \ + $(gdb_string_h) $(libunwind_frame_h) $(complaints_h) +linespec.o: linespec.c $(defs_h) $(symtab_h) $(frame_h) $(command_h) \ + $(symfile_h) $(objfiles_h) $(source_h) $(demangle_h) $(value_h) \ + $(completer_h) $(cp_abi_h) $(parser_defs_h) $(block_h) \ + $(objc_lang_h) $(linespec_h) +lin-lwp.o: lin-lwp.c $(defs_h) $(gdb_assert_h) $(gdb_string_h) $(gdb_wait_h) \ + $(gdbthread_h) $(inferior_h) $(target_h) $(regcache_h) $(gdbcmd_h) \ + $(linux_nat_h) +linux-nat.o: linux-nat.c $(defs_h) $(inferior_h) $(target_h) $(gdb_wait_h) \ + $(linux_nat_h) +linux-proc.o: linux-proc.c $(defs_h) $(inferior_h) $(gdb_stat_h) \ + $(regcache_h) $(gregset_h) $(gdbcore_h) $(gdbthread_h) $(elf_bfd_h) \ + $(cli_decode_h) $(gdb_string_h) $(linux_nat_h) +lynx-nat.o: lynx-nat.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \ + $(gdbcore_h) $(regcache_h) +m2-exp.o: m2-exp.c $(defs_h) $(gdb_string_h) $(expression_h) $(language_h) \ + $(value_h) $(parser_defs_h) $(m2_lang_h) $(bfd_h) $(symfile_h) \ + $(objfiles_h) $(block_h) +m2-lang.o: m2-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \ + $(parser_defs_h) $(language_h) $(m2_lang_h) $(c_lang_h) \ + $(valprint_h) +m2-typeprint.o: m2-typeprint.c $(defs_h) $(bfd_h) $(symtab_h) $(gdbtypes_h) \ + $(expression_h) $(value_h) $(gdbcore_h) $(target_h) $(m2_lang_h) +m2-valprint.o: m2-valprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) \ + $(m2_lang_h) +m32r-rom.o: m32r-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(serial_h) $(symtab_h) $(command_h) $(gdbcmd_h) $(symfile_h) \ + $(gdb_string_h) $(objfiles_h) $(inferior_h) $(regcache_h) +m32r-stub.o: m32r-stub.c $(syscall_h) +m32r-tdep.o: m32r-tdep.c $(defs_h) $(frame_h) $(frame_unwind_h) \ + $(frame_base_h) $(symtab_h) $(gdbtypes_h) $(gdbcmd_h) $(gdbcore_h) \ + $(gdb_string_h) $(value_h) $(inferior_h) $(symfile_h) $(objfiles_h) \ + $(language_h) $(arch_utils_h) $(regcache_h) $(trad_frame_h) \ + $(dis_asm_h) $(gdb_assert_h) +m68hc11-tdep.o: m68hc11-tdep.c $(defs_h) $(frame_h) $(frame_unwind_h) \ + $(frame_base_h) $(dwarf2_frame_h) $(trad_frame_h) $(symtab_h) \ + $(gdbtypes_h) $(gdbcmd_h) $(gdbcore_h) $(gdb_string_h) $(value_h) \ + $(inferior_h) $(dis_asm_h) $(symfile_h) $(objfiles_h) \ + $(arch_utils_h) $(regcache_h) $(reggroups_h) $(target_h) \ + $(opcode_m68hc11_h) $(elf_m68hc11_h) $(elf_bfd_h) +m68klinux-nat.o: m68klinux-nat.c $(defs_h) $(frame_h) $(inferior_h) \ + $(language_h) $(gdbcore_h) $(gdb_string_h) $(regcache_h) \ + $(m68k_tdep_h) $(gdb_stat_h) $(floatformat_h) $(target_h) \ + $(gregset_h) +m68klinux-tdep.o: m68klinux-tdep.c $(defs_h) $(gdbcore_h) $(doublest_h) \ + $(floatformat_h) $(frame_h) $(target_h) $(gdb_string_h) \ + $(gdbtypes_h) $(osabi_h) $(regcache_h) $(objfiles_h) $(symtab_h) \ + $(m68k_tdep_h) $(trad_frame_h) $(frame_unwind_h) +m68kbsd-nat.o: m68kbsd-nat.c $(defs_h) $(gdbcore_h) $(inferior_h) \ + $(regcache_h) $(gdb_assert_h) $(m68k_tdep_h) $(bsd_kvm_h) +m68kbsd-tdep.o: m68kbsd-tdep.c $(defs_h) $(arch_utils_h) $(osabi_h) \ + $(regcache_h) $(regset_h) $(gdb_assert_h) $(gdb_string_h) \ + $(m68k_tdep_h) $(solib_svr4_h) +m68k-stub.o: m68k-stub.c +m68k-tdep.o: m68k-tdep.c $(defs_h) $(dwarf2_frame_h) $(frame_h) \ + $(frame_base_h) $(frame_unwind_h) $(floatformat_h) $(symtab_h)\ + $(gdbcore_h) $(value_h) $(gdb_string_h) $(gdb_assert_h) \ + $(inferior_h) $(regcache_h) $(arch_utils_h) $(osabi_h) $(dis_asm_h) \ + $(m68k_tdep_h) $(gregset_h) +m88kbsd-nat.o: m88kbsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ + $(gdb_assert_h) $(m88k_tdep_h) +m88k-tdep.o: m88k-tdep.c $(defs_h) $(arch_utils_h) $(dis_asm_h) $(frame_h) \ + $(frame_base_h) $(frame_unwind_h) $(gdbcore_h) $(gdbtypes_h) \ + $(regcache_h) $(regset_h) $(symtab_h) $(trad_frame_h) $(value_h) \ + $(gdb_string_h) $(gdb_string_h) $(m88k_tdep_h) +macrocmd.o: macrocmd.c $(defs_h) $(macrotab_h) $(macroexp_h) $(macroscope_h) \ + $(command_h) $(gdbcmd_h) +macroexp.o: macroexp.c $(defs_h) $(gdb_obstack_h) $(bcache_h) $(macrotab_h) \ + $(macroexp_h) $(gdb_assert_h) +macroscope.o: macroscope.c $(defs_h) $(macroscope_h) $(symtab_h) $(source_h) \ + $(target_h) $(frame_h) $(inferior_h) $(complaints_h) +macrotab.o: macrotab.c $(defs_h) $(gdb_obstack_h) $(splay_tree_h) \ + $(symtab_h) $(symfile_h) $(objfiles_h) $(macrotab_h) $(gdb_assert_h) \ + $(bcache_h) $(complaints_h) +main.o: main.c $(defs_h) $(top_h) $(target_h) $(inferior_h) $(symfile_h) \ + $(gdbcore_h) $(getopt_h) $(gdb_stat_h) $(gdb_string_h) \ + $(event_loop_h) $(ui_out_h) $(interps_h) $(main_h) +maint.o: maint.c $(defs_h) $(command_h) $(gdbcmd_h) $(symtab_h) \ + $(gdbtypes_h) $(demangle_h) $(gdbcore_h) $(expression_h) \ + $(language_h) $(symfile_h) $(objfiles_h) $(value_h) $(cli_decode_h) +mcore-rom.o: mcore-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(gdb_string_h) $(regcache_h) $(serial_h) +mcore-tdep.o: mcore-tdep.c $(defs_h) $(frame_h) $(symtab_h) $(value_h) \ + $(gdbcmd_h) $(regcache_h) $(objfiles_h) $(gdbcore_h) $(inferior_h) \ + $(arch_utils_h) $(gdb_string_h) $(disasm_h) $(dis_asm_h) +mdebugread.o: mdebugread.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(gdbcore_h) \ + $(objfiles_h) $(gdb_obstack_h) $(buildsym_h) $(stabsread_h) \ + $(complaints_h) $(demangle_h) $(gdb_assert_h) $(block_h) \ + $(dictionary_h) $(coff_sym_h) $(coff_symconst_h) $(gdb_stat_h) \ + $(gdb_string_h) $(bfd_h) $(coff_ecoff_h) $(libaout_h) \ + $(aout_aout64_h) $(aout_stab_gnu_h) $(expression_h) $(language_h) +memattr.o: memattr.c $(defs_h) $(command_h) $(gdbcmd_h) $(memattr_h) \ + $(target_h) $(value_h) $(language_h) $(gdb_string_h) +mem-break.o: mem-break.c $(defs_h) $(symtab_h) $(breakpoint_h) $(inferior_h) \ + $(target_h) +minsyms.o: minsyms.c $(defs_h) $(gdb_string_h) $(symtab_h) $(bfd_h) \ + $(symfile_h) $(objfiles_h) $(demangle_h) $(value_h) $(cp_abi_h) +mips-irix-tdep.o: mips-irix-tdep.c $(defs_h) $(osabi_h) $(elf_bfd_h) +mips-linux-nat.o: mips-linux-nat.c $(defs_h) $(mips_tdep_h) +mips-linux-tdep.o: mips-linux-tdep.c $(defs_h) $(gdbcore_h) $(target_h) \ + $(solib_svr4_h) $(osabi_h) $(mips_tdep_h) $(gdb_string_h) \ + $(gdb_assert_h) $(frame_h) $(trad_frame_h) $(tramp_frame_h) +mips-nat.o: mips-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) $(regcache_h) +mipsnbsd-nat.o: mipsnbsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ + $(mipsnbsd_tdep_h) +mipsnbsd-tdep.o: mipsnbsd-tdep.c $(defs_h) $(gdbcore_h) $(regcache_h) \ + $(target_h) $(value_h) $(osabi_h) $(nbsd_tdep_h) $(mipsnbsd_tdep_h) \ + $(mips_tdep_h) $(solib_svr4_h) +mipsread.o: mipsread.c $(defs_h) $(gdb_string_h) $(bfd_h) $(symtab_h) \ + $(objfiles_h) $(buildsym_h) $(stabsread_h) $(coff_sym_h) \ + $(coff_internal_h) $(coff_ecoff_h) $(libcoff_h) $(libecoff_h) \ + $(elf_common_h) $(elf_mips_h) +mips-tdep.o: mips-tdep.c $(defs_h) $(gdb_string_h) $(gdb_assert_h) \ + $(frame_h) $(inferior_h) $(symtab_h) $(value_h) $(gdbcmd_h) \ + $(language_h) $(gdbcore_h) $(symfile_h) $(objfiles_h) $(gdbtypes_h) \ + $(target_h) $(arch_utils_h) $(regcache_h) $(osabi_h) $(mips_tdep_h) \ + $(block_h) $(reggroups_h) $(opcode_mips_h) $(elf_mips_h) \ + $(elf_bfd_h) $(symcat_h) $(sim_regno_h) $(dis_asm_h) \ + $(frame_unwind_h) $(frame_base_h) $(trad_frame_h) $(infcall_h) +mipsv4-nat.o: mipsv4-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) $(target_h) \ + $(regcache_h) $(gregset_h) +mn10300-tdep.o: mn10300-tdep.c $(defs_h) $(frame_h) $(inferior_h) \ + $(target_h) $(value_h) $(bfd_h) $(gdb_string_h) $(gdbcore_h) \ + $(objfiles_h) $(regcache_h) $(arch_utils_h) $(gdb_assert_h) \ + $(dis_asm_h) +monitor.o: monitor.c $(defs_h) $(gdbcore_h) $(target_h) $(gdb_string_h) \ + $(command_h) $(serial_h) $(monitor_h) $(gdbcmd_h) $(inferior_h) \ + $(gdb_regex_h) $(srec_h) $(regcache_h) +nbsd-tdep.o: nbsd-tdep.c $(defs_h) $(gdb_string_h) $(solib_svr4_h) +nlmread.o: nlmread.c $(defs_h) $(bfd_h) $(symtab_h) $(symfile_h) \ + $(objfiles_h) $(buildsym_h) $(stabsread_h) $(block_h) +ns32knbsd-nat.o: ns32knbsd-nat.c $(defs_h) $(inferior_h) $(target_h) \ + $(gdbcore_h) $(regcache_h) +ns32knbsd-tdep.o: ns32knbsd-tdep.c $(defs_h) $(osabi_h) $(ns32k_tdep_h) \ + $(gdb_string_h) +ns32k-tdep.o: ns32k-tdep.c $(defs_h) $(frame_h) $(gdbtypes_h) $(gdbcore_h) \ + $(inferior_h) $(regcache_h) $(target_h) $(arch_utils_h) $(osabi_h) \ + $(dis_asm_h) $(ns32k_tdep_h) $(gdb_string_h) +nto-procfs.o: nto-procfs.c $(defs_h) $(gdb_dirent_h) $(gdb_string_h) \ + $(gdbcore_h) $(inferior_h) $(target_h) $(objfiles_h) $(gdbthread_h) \ + $(nto_tdep_h) $(command_h) $(regcache_h) +nto-tdep.o: nto-tdep.c $(gdb_stat_h) $(gdb_string_h) $(nto_tdep_h) $(top_h) \ + $(cli_decode_h) $(cli_cmds_h) $(inferior_h) $(gdbarch_h) $(bfd_h) \ + $(elf_bfd_h) $(solib_svr4_h) $(gdbcore_h) +objc-exp.o: objc-exp.c $(defs_h) $(gdb_string_h) $(expression_h) \ + $(objc_lang_h) $(value_h) $(parser_defs_h) $(language_h) $(c_lang_h) \ + $(bfd_h) $(symfile_h) $(objfiles_h) $(top_h) $(completer_h) \ + $(block_h) +objc-lang.o: objc-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \ + $(parser_defs_h) $(language_h) $(c_lang_h) $(objc_lang_h) \ + $(complaints_h) $(value_h) $(symfile_h) $(objfiles_h) \ + $(gdb_string_h) $(target_h) $(gdbcore_h) $(gdbcmd_h) $(frame_h) \ + $(gdb_regex_h) $(regcache_h) $(block_h) $(infcall_h) $(valprint_h) \ + $(gdb_assert_h) +objfiles.o: objfiles.c $(defs_h) $(bfd_h) $(symtab_h) $(symfile_h) \ + $(objfiles_h) $(gdb_stabs_h) $(target_h) $(bcache_h) $(gdb_assert_h) \ + $(gdb_stat_h) $(gdb_obstack_h) $(gdb_string_h) $(hashtab_h) \ + $(breakpoint_h) $(block_h) $(dictionary_h) +observer.o: observer.c $(defs_h) $(observer_h) $(observer_inc) \ + $(command_h) $(gdbcmd_h) +ocd.o: ocd.c $(defs_h) $(gdbcore_h) $(gdb_string_h) $(frame_h) $(inferior_h) \ + $(bfd_h) $(symfile_h) $(target_h) $(gdbcmd_h) $(objfiles_h) \ + $(gdb_stabs_h) $(serial_h) $(ocd_h) $(regcache_h) +osabi.o: osabi.c $(defs_h) $(gdb_assert_h) $(gdb_string_h) $(osabi_h) \ + $(arch_utils_h) $(gdbcmd_h) $(command_h) $(elf_bfd_h) +pa64solib.o: pa64solib.c $(defs_h) $(frame_h) $(bfd_h) $(libhppa_h) \ + $(gdbcore_h) $(symtab_h) $(breakpoint_h) $(symfile_h) $(objfiles_h) \ + $(inferior_h) $(gdb_stabs_h) $(gdb_stat_h) $(gdbcmd_h) $(language_h) \ + $(regcache_h) $(exec_h) $(hppa_tdep_h) +parse.o: parse.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \ + $(frame_h) $(expression_h) $(value_h) $(command_h) $(language_h) \ + $(parser_defs_h) $(gdbcmd_h) $(symfile_h) $(inferior_h) \ + $(doublest_h) $(gdb_assert_h) $(block_h) +p-exp.o: p-exp.c $(defs_h) $(gdb_string_h) $(expression_h) $(value_h) \ + $(parser_defs_h) $(language_h) $(p_lang_h) $(bfd_h) $(symfile_h) \ + $(objfiles_h) $(block_h) +p-lang.o: p-lang.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \ + $(expression_h) $(parser_defs_h) $(language_h) $(p_lang_h) \ + $(valprint_h) $(value_h) +ppc-bdm.o: ppc-bdm.c $(defs_h) $(gdbcore_h) $(gdb_string_h) $(frame_h) \ + $(inferior_h) $(bfd_h) $(symfile_h) $(target_h) $(gdbcmd_h) \ + $(objfiles_h) $(gdb_stabs_h) $(serial_h) $(ocd_h) $(ppc_tdep_h) \ + $(regcache_h) $(gdb_assert_h) +ppcbug-rom.o: ppcbug-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(serial_h) $(regcache_h) +ppc-linux-nat.o: ppc-linux-nat.c $(defs_h) $(gdb_string_h) $(frame_h) \ + $(inferior_h) $(gdbcore_h) $(regcache_h) $(gdb_assert_h) \ + $(gdb_wait_h) $(gregset_h) $(ppc_tdep_h) +ppc-linux-tdep.o: ppc-linux-tdep.c $(defs_h) $(frame_h) $(inferior_h) \ + $(symtab_h) $(target_h) $(gdbcore_h) $(gdbcmd_h) $(symfile_h) \ + $(objfiles_h) $(regcache_h) $(value_h) $(osabi_h) $(regset_h) \ + $(solib_svr4_h) $(ppc_tdep_h) $(trad_frame_h) $(frame_unwind_h) +ppcnbsd-nat.o: ppcnbsd-nat.c $(defs_h) $(inferior_h) $(ppc_tdep_h) \ + $(ppcnbsd_tdep_h) $(gdb_assert_h) +ppcnbsd-tdep.o: ppcnbsd-tdep.c $(defs_h) $(gdbcore_h) $(regcache_h) \ + $(target_h) $(breakpoint_h) $(value_h) $(osabi_h) $(ppc_tdep_h) \ + $(ppcnbsd_tdep_h) $(nbsd_tdep_h) $(solib_svr4_h) $(gdb_assert) +ppcobsd-nat.o: ppcobsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ + $(ppc_tdep_h) $(ppcobsd_tdep_h) +ppcobsd-tdep.o: ppcobsd-tdep.c $(defs_h) $(arch_utils_h) $(osabi_h) \ + $(regcache_h) $(regset_h) $(gdb_assert_h) $(gdb_string_h) \ + $(ppc_tdep_h) $(ppcobsd_tdep_h) $(solib_svr4_h) +ppc-sysv-tdep.o: ppc-sysv-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \ + $(regcache_h) $(value_h) $(gdb_string_h) $(gdb_assert_h) \ + $(ppc_tdep_h) $(target_h) $(objfiles_h) $(infcall_h) +printcmd.o: printcmd.c $(defs_h) $(gdb_string_h) $(frame_h) $(symtab_h) \ + $(gdbtypes_h) $(value_h) $(language_h) $(expression_h) $(gdbcore_h) \ + $(gdbcmd_h) $(target_h) $(breakpoint_h) $(demangle_h) $(valprint_h) \ + $(annotate_h) $(symfile_h) $(objfiles_h) $(completer_h) $(ui_out_h) \ + $(gdb_assert_h) $(block_h) $(disasm_h) $(tui_h) +proc-api.o: proc-api.c $(defs_h) $(gdbcmd_h) $(completer_h) $(gdb_wait_h) \ + $(proc_utils_h) +proc-events.o: proc-events.c $(defs_h) +proc-flags.o: proc-flags.c $(defs_h) +procfs.o: procfs.c $(defs_h) $(inferior_h) $(target_h) $(gdbcore_h) \ + $(elf_bfd_h) $(gdbcmd_h) $(gdbthread_h) $(gdb_wait_h) \ + $(gdb_string_h) $(gdb_assert_h) $(inflow_h) $(auxv_h) \ + $(gdb_dirent_h) $(X_OK) $(gdb_stat_h) $(proc_utils_h) $(gregset_h) +proc-service.o: proc-service.c $(defs_h) $(gdb_proc_service_h) $(inferior_h) \ + $(symtab_h) $(target_h) $(gregset_h) +proc-why.o: proc-why.c $(defs_h) $(proc_utils_h) +p-typeprint.o: p-typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) $(symtab_h) \ + $(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) $(target_h) \ + $(language_h) $(p_lang_h) $(typeprint_h) $(gdb_string_h) +p-valprint.o: p-valprint.c $(defs_h) $(gdb_obstack_h) $(symtab_h) \ + $(gdbtypes_h) $(expression_h) $(value_h) $(command_h) $(gdbcmd_h) \ + $(gdbcore_h) $(demangle_h) $(valprint_h) $(typeprint_h) \ + $(language_h) $(target_h) $(annotate_h) $(p_lang_h) $(cp_abi_h) +regcache.o: regcache.c $(defs_h) $(inferior_h) $(target_h) $(gdbarch_h) \ + $(gdbcmd_h) $(regcache_h) $(reggroups_h) $(gdb_assert_h) \ + $(gdb_string_h) $(gdbcmd_h) $(observer_h) +reggroups.o: reggroups.c $(defs_h) $(reggroups_h) $(gdbtypes_h) \ + $(gdb_assert_h) $(regcache_h) $(command_h) $(gdbcmd_h) +regset.o: regset.c $(defs_h) $(regset_h) $(gdb_assert_h) +remote.o: remote.c $(defs_h) $(gdb_string_h) $(inferior_h) $(bfd_h) \ + $(symfile_h) $(target_h) $(gdbcmd_h) $(objfiles_h) $(gdb_stabs_h) \ + $(gdbthread_h) $(remote_h) $(regcache_h) $(value_h) $(gdb_assert_h) \ + $(event_loop_h) $(event_top_h) $(inf_loop_h) $(serial_h) \ + $(gdbcore_h) $(remote_fileio_h) +remote-e7000.o: remote-e7000.c $(defs_h) $(gdbcore_h) $(gdbarch_h) \ + $(inferior_h) $(target_h) $(value_h) $(command_h) $(gdb_string_h) \ + $(gdbcmd_h) $(serial_h) $(remote_utils_h) $(symfile_h) $(regcache_h) +remote-est.o: remote-est.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(serial_h) $(regcache_h) $(m68k_tdep_h) +remote-fileio.o: remote-fileio.c $(defs_h) $(gdb_string_h) $(gdbcmd_h) \ + $(remote_h) $(gdb_fileio_h) $(gdb_wait_h) $(gdb_stat_h) \ + $(remote_fileio_h) +remote-hms.o: remote-hms.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(serial_h) $(regcache_h) +remote-m32r-sdi.o: remote-m32r-sdi.c $(defs_h) $(gdbcmd_h) $(gdbcore_h) \ + $(inferior_h) $(target_h) $(regcache_h) $(gdb_string_h) $(serial_h) +remote-mips.o: remote-mips.c $(defs_h) $(inferior_h) $(bfd_h) $(symfile_h) \ + $(gdbcmd_h) $(gdbcore_h) $(serial_h) $(target_h) $(remote_utils_h) \ + $(gdb_string_h) $(gdb_stat_h) $(regcache_h) $(mips_tdep_h) +remote-rdi.o: remote-rdi.c $(defs_h) $(gdb_string_h) $(frame_h) \ + $(inferior_h) $(bfd_h) $(symfile_h) $(target_h) $(gdbcmd_h) \ + $(objfiles_h) $(gdb_stabs_h) $(gdbthread_h) $(gdbcore_h) \ + $(breakpoint_h) $(completer_h) $(regcache_h) $(arm_tdep_h) \ + $(rdi_share_ardi_h) $(rdi_share_adp_h) $(rdi_share_hsys_h) +remote-rdp.o: remote-rdp.c $(defs_h) $(inferior_h) $(value_h) \ + $(gdb_callback_h) $(command_h) $(symfile_h) $(remote_utils_h) \ + $(gdb_string_h) $(gdbcore_h) $(regcache_h) $(serial_h) $(arm_tdep_h) +remote-sds.o: remote-sds.c $(defs_h) $(gdb_string_h) $(frame_h) \ + $(inferior_h) $(bfd_h) $(symfile_h) $(target_h) $(gdbcmd_h) \ + $(objfiles_h) $(gdb_stabs_h) $(gdbthread_h) $(gdbcore_h) \ + $(regcache_h) $(serial_h) +remote-sim.o: remote-sim.c $(defs_h) $(inferior_h) $(value_h) \ + $(gdb_string_h) $(terminal_h) $(target_h) $(gdbcore_h) \ + $(gdb_callback_h) $(gdb_remote_sim_h) $(remote_utils_h) $(command_h) \ + $(regcache_h) $(gdb_assert_h) $(sim_regno_h) $(arch_utils_h) +remote-st.o: remote-st.c $(defs_h) $(gdbcore_h) $(target_h) $(gdb_string_h) \ + $(serial_h) $(regcache_h) +remote-utils.o: remote-utils.c $(defs_h) $(gdb_string_h) $(gdbcmd_h) \ + $(target_h) $(serial_h) $(gdbcore_h) $(inferior_h) $(remote_utils_h) \ + $(regcache_h) +remote-vx68.o: remote-vx68.c $(defs_h) $(vx_share_regPacket_h) $(frame_h) \ + $(inferior_h) $(target_h) $(gdbcore_h) $(command_h) $(symtab_h) \ + $(symfile_h) $(regcache_h) $(gdb_string_h) $(vx_share_ptrace_h) \ + $(vx_share_xdr_ptrace_h) $(vx_share_xdr_ld_h) $(vx_share_xdr_rdb_h) \ + $(vx_share_dbgRpcLib_h) +remote-vx.o: remote-vx.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \ + $(gdbcore_h) $(command_h) $(symtab_h) $(complaints_h) $(gdbcmd_h) \ + $(bfd_h) $(symfile_h) $(objfiles_h) $(gdb_stabs_h) $(regcache_h) \ + $(gdb_string_h) $(vx_share_ptrace_h) $(vx_share_xdr_ptrace_h) \ + $(vx_share_xdr_ld_h) $(vx_share_xdr_rdb_h) $(vx_share_dbgRpcLib_h) +remote-vxmips.o: remote-vxmips.c $(defs_h) $(vx_share_regPacket_h) \ + $(frame_h) $(inferior_h) $(target_h) $(gdbcore_h) $(command_h) \ + $(symtab_h) $(symfile_h) $(regcache_h) $(gdb_string_h) \ + $(vx_share_ptrace_h) $(vx_share_xdr_ptrace_h) $(vx_share_xdr_ld_h) \ + $(vx_share_xdr_rdb_h) $(vx_share_dbgRpcLib_h) +remote-vxsparc.o: remote-vxsparc.c $(defs_h) $(regcache_h) $(gdb_string_h) \ + $(sparc_tdep_h) $(vx_share_ptrace_h) $(vx_share_regPacket_h) +rom68k-rom.o: rom68k-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(serial_h) $(regcache_h) $(value_h) $(m68k_tdep_h) +rs6000-nat.o: rs6000-nat.c $(defs_h) $(inferior_h) $(target_h) $(gdbcore_h) \ + $(xcoffsolib_h) $(symfile_h) $(objfiles_h) $(libbfd_h) $(bfd_h) \ + $(gdb_stabs_h) $(regcache_h) $(arch_utils_h) $(language_h) \ + $(ppc_tdep_h) $(exec_h) $(gdb_stat_h) +rs6000-tdep.o: rs6000-tdep.c $(defs_h) $(frame_h) $(inferior_h) $(symtab_h) \ + $(target_h) $(gdbcore_h) $(gdbcmd_h) $(objfiles_h) $(arch_utils_h) \ + $(regcache_h) $(regset_h) $(doublest_h) $(value_h) $(parser_defs_h) \ + $(osabi_h) $(libbfd_h) $(coff_internal_h) $(libcoff_h) \ + $(coff_xcoff_h) $(libxcoff_h) $(elf_bfd_h) $(solib_svr4_h) \ + $(ppc_tdep_h) $(gdb_assert_h) $(dis_asm_h) $(trad_frame_h) \ + $(frame_unwind_h) $(frame_base_h) $(infcall_h) $(sim_regno_h) \ + $(gdb_sim_ppc_h) $(reggroups_h) +s390-nat.o: s390-nat.c $(defs_h) $(tm_h) $(regcache_h) $(inferior_h) \ + $(s390_tdep_h) +s390-tdep.o: s390-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) $(inferior_h) \ + $(symtab_h) $(target_h) $(gdbcore_h) $(gdbcmd_h) $(objfiles_h) \ + $(tm_h) $(__bfd_bfd_h) $(floatformat_h) $(regcache_h) \ + $(trad_frame_h) $(frame_base_h) $(frame_unwind_h) $(dwarf2_frame_h) \ + $(reggroups_h) $(regset_h) $(value_h) $(gdb_assert_h) $(dis_asm_h) \ + $(solib_svr4_h) $(s390_tdep_h) +scm-exp.o: scm-exp.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \ + $(parser_defs_h) $(language_h) $(value_h) $(c_lang_h) $(scm_lang_h) \ + $(scm_tags_h) +scm-lang.o: scm-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \ + $(parser_defs_h) $(language_h) $(value_h) $(c_lang_h) $(scm_lang_h) \ + $(scm_tags_h) $(source_h) $(gdb_string_h) $(gdbcore_h) $(infcall_h) +scm-valprint.o: scm-valprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) \ + $(expression_h) $(parser_defs_h) $(language_h) $(value_h) \ + $(scm_lang_h) $(valprint_h) $(gdbcore_h) +sentinel-frame.o: sentinel-frame.c $(defs_h) $(regcache_h) \ + $(sentinel_frame_h) $(inferior_h) $(frame_unwind_h) +ser-e7kpc.o: ser-e7kpc.c $(defs_h) $(serial_h) $(gdb_string_h) +ser-go32.o: ser-go32.c $(defs_h) $(gdbcmd_h) $(serial_h) $(gdb_string_h) +serial.o: serial.c $(defs_h) $(serial_h) $(gdb_string_h) $(gdbcmd_h) +ser-pipe.o: ser-pipe.c $(defs_h) $(serial_h) $(ser_unix_h) $(gdb_vfork_h) \ + $(gdb_string_h) +ser-tcp.o: ser-tcp.c $(defs_h) $(serial_h) $(ser_unix_h) $(gdb_string_h) +ser-unix.o: ser-unix.c $(defs_h) $(serial_h) $(ser_unix_h) $(terminal_h) \ + $(gdb_string_h) $(event_loop_h) +sh3-rom.o: sh3-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \ + $(serial_h) $(srec_h) $(arch_utils_h) $(regcache_h) $(gdb_string_h) \ + $(sh_tdep_h) +sh64-tdep.o: sh64-tdep.c $(defs_h) $(frame_h) $(symtab_h) $(objfiles_h) \ + $(gdbtypes_h) $(gdbcmd_h) $(gdbcore_h) $(value_h) $(dis_asm_h) \ + $(inferior_h) $(gdb_string_h) $(arch_utils_h) $(floatformat_h) \ + $(regcache_h) $(doublest_h) $(osabi_h) $(elf_bfd_h) $(solib_svr4_h) \ + $(elf_sh_h) $(gdb_sim_sh_h) +shnbsd-nat.o: shnbsd-nat.c $(defs_h) $(inferior_h) $(sh_tdep_h) \ + $(shnbsd_tdep_h) +shnbsd-tdep.o: shnbsd-tdep.c $(defs_h) $(gdbcore_h) $(regcache_h) $(value_h) \ + $(osabi_h) $(solib_svr4_h) $(nbsd_tdep_h) $(sh_tdep_h) \ + $(shnbsd_tdep_h) +sh-stub.o: sh-stub.c +sh-tdep.o: sh-tdep.c $(defs_h) $(frame_h) $(frame_base_h) $(frame_unwind_h) \ + $(dwarf2_frame_h) $(symtab_h) $(gdbtypes_h) $(gdbcmd_h) $(gdbcore_h) \ + $(value_h) $(dis_asm_h) $(inferior_h) $(gdb_string_h) \ + $(gdb_assert_h) $(arch_utils_h) $(floatformat_h) $(regcache_h) \ + $(doublest_h) $(osabi_h) $(sh_tdep_h) $(elf_bfd_h) $(solib_svr4_h) \ + $(elf_sh_h) $(gdb_sim_sh_h) +solib-aix5.o: solib-aix5.c $(defs_h) $(gdb_string_h) $(elf_external_h) \ + $(symtab_h) $(bfd_h) $(symfile_h) $(objfiles_h) $(gdbcore_h) \ + $(command_h) $(target_h) $(frame_h) $(gdb_regex_h) $(inferior_h) \ + $(environ_h) $(language_h) $(gdbcmd_h) $(solist_h) +solib.o: solib.c $(defs_h) $(gdb_string_h) $(symtab_h) $(bfd_h) $(symfile_h) \ + $(objfiles_h) $(gdbcore_h) $(command_h) $(target_h) $(frame_h) \ + $(gdb_regex_h) $(inferior_h) $(environ_h) $(language_h) $(gdbcmd_h) \ + $(completer_h) $(filenames_h) $(exec_h) $(solist_h) $(readline_h) +solib-frv.o: solib-frv.c $(defs_h) $(gdb_string_h) $(inferior_h) \ + $(gdbcore_h) $(solist_h) $(frv_tdep_h) $(objfiles_h) $(symtab_h) \ + $(language_h) $(command_h) $(gdbcmd_h) $(elf_frv_h) +solib-irix.o: solib-irix.c $(defs_h) $(symtab_h) $(bfd_h) $(symfile_h) \ + $(objfiles_h) $(gdbcore_h) $(target_h) $(inferior_h) $(solist_h) +solib-legacy.o: solib-legacy.c $(defs_h) $(gdbcore_h) $(solib_svr4_h) +solib-osf.o: solib-osf.c $(defs_h) $(gdb_string_h) $(bfd_h) $(symtab_h) \ + $(symfile_h) $(objfiles_h) $(target_h) $(inferior_h) $(solist_h) +solib-sunos.o: solib-sunos.c $(defs_h) $(gdb_string_h) $(symtab_h) $(bfd_h) \ + $(symfile_h) $(objfiles_h) $(gdbcore_h) $(inferior_h) $(solist_h) \ + $(bcache_h) $(regcache_h) +solib-svr4.o: solib-svr4.c $(defs_h) $(elf_external_h) $(elf_common_h) \ + $(elf_mips_h) $(symtab_h) $(bfd_h) $(symfile_h) $(objfiles_h) \ + $(gdbcore_h) $(target_h) $(inferior_h) $(solist_h) $(solib_svr4_h) \ + $(bfd_target_h) $(exec_h) +sol-thread.o: sol-thread.c $(defs_h) $(gdbthread_h) $(target_h) \ + $(inferior_h) $(gdb_stat_h) $(gdbcmd_h) $(gdbcore_h) $(regcache_h) \ + $(symfile_h) $(gdb_string_h) $(gregset_h) +somread.o: somread.c $(defs_h) $(bfd_h) $(symtab_h) $(symfile_h) \ + $(objfiles_h) $(buildsym_h) $(stabsread_h) $(gdb_stabs_h) \ + $(complaints_h) $(gdb_string_h) $(demangle_h) $(som_h) $(libhppa_h) +somsolib.o: somsolib.c $(defs_h) $(frame_h) $(bfd_h) $(som_h) $(libhppa_h) \ + $(gdbcore_h) $(symtab_h) $(breakpoint_h) $(symfile_h) $(objfiles_h) \ + $(inferior_h) $(gdb_stabs_h) $(gdb_stat_h) $(gdbcmd_h) $(language_h) \ + $(regcache_h) $(gdb_assert_h) $(exec_h) $(hppa_tdep_h) +source.o: source.c $(defs_h) $(symtab_h) $(expression_h) $(language_h) \ + $(command_h) $(source_h) $(gdbcmd_h) $(frame_h) $(value_h) \ + $(gdb_string_h) $(gdb_stat_h) $(gdbcore_h) $(gdb_regex_h) \ + $(symfile_h) $(objfiles_h) $(annotate_h) $(gdbtypes_h) $(linespec_h) \ + $(filenames_h) $(completer_h) $(ui_out_h) $(readline_h) +sparc64fbsd-nat.o: sparc64fbsd-nat.c $(defs_h) $(sparc64_tdep_h) \ + $(sparc_nat_h) +sparc64fbsd-tdep.o: sparc64fbsd-tdep.c $(defs_h) $(frame_h) \ + $(frame_unwind_h) $(gdbcore_h) $(osabi_h) $(regcache_h) $(regset_h) \ + $(target_h) $(trad_frame_h) $(gdb_assert_h) $(gdb_string_h) \ + $(sparc64_tdep_h) +sparc64-linux-nat.o: sparc64-linux-nat.c $(defs_h) $(sparc64_tdep_h) \ + $(sparc_nat_h) +sparc64-linux-tdep.o: sparc64-linux-tdep.c $(defs_h) $(gdbarch_h) $(osabi_h) \ + $(solib_svr4_h) $(sparc64_tdep_h) +sparc64-nat.o: sparc64-nat.c $(defs_h) $(gdbarch_h) $(sparc64_tdep_h) \ + $(sparc_nat_h) +sparc64nbsd-nat.o: sparc64nbsd-nat.c $(defs_h) $(sparc64_tdep_h) \ + $(sparc_nat_h) +sparc64nbsd-tdep.o: sparc64nbsd-tdep.c $(defs_h) $(frame_h) \ + $(frame_unwind_h) $(gdbcore_h) $(osabi_h) $(regcache_h) $(regset_h) \ + $(symtab_h) $(solib_svr4_h) $(trad_frame_h) $(gdb_assert_h) \ + $(gdb_string_h) $(sparc64_tdep_h) $(nbsd_tdep_h) +sparc64obsd-tdep.o: sparc64obsd-tdep.c $(defs_h) $(frame_h) \ + $(frame_unwind_h) $(osabi_h) $(regset_h) $(symtab_h) $(solib_svr4_h) \ + $(trad_frame_h) $(gdb_assert_h) $(sparc64_tdep_h) $(nbsd_tdep_h) +sparc64-sol2-tdep.o: sparc64-sol2-tdep.c $(defs_h) $(frame_h) \ + $(frame_unwind_h) $(gdbarch_h) $(symtab_h) $(objfiles_h) $(osabi_h) \ + $(trad_frame_h) $(gdb_assert_h) $(sparc64_tdep_h) $(solib_svr4_h) +sparc64-tdep.o: sparc64-tdep.c $(defs_h) $(arch_utils_h) $(floatformat_h) \ + $(frame_h) $(frame_base_h) $(frame_unwind_h) $(gdbcore_h) \ + $(gdbtypes_h) $(inferior_h) $(symtab_h) $(objfiles_h) $(osabi_h) \ + $(regcache_h) $(target_h) $(value_h) $(gdb_assert_h) $(gdb_string_h) \ + $(sparc64_tdep_h) +sparc-linux-tdep.o: sparc-linux-tdep.c $(defs_h) $(floatformat_h) $(frame_h) \ + $(frame_unwind_h) $(gdbarch_h) $(gdbcore_h) $(osabi_h) $(regcache_h) \ + $(solib_svr4_h) $(symtab_h) $(trad_frame_h) $(gdb_assert_h) \ + $(gdb_string_h) $(sparc_tdep_h) +sparc-nat.o: sparc-nat.c $(defs_h) $(inferior_h) $(regcache_h) $(target_h) \ + $(gdb_assert_h) $(gdb_string_h) $(gdb_wait_h) $(sparc_tdep_h) \ + $(sparc_nat_h) +sparcnbsd-nat.o: sparcnbsd-nat.c $(defs_h) $(gdbcore_h) $(regcache_h) \ + $(sparc_tdep_h) $(sparc_nat_h) $(bsd_kvm_h) +sparcnbsd-tdep.o: sparcnbsd-tdep.c $(defs_h) $(floatformat_h) $(frame_h) \ + $(frame_unwind_h) $(gdbcore_h) $(osabi_h) $(regcache_h) $(regset_h) \ + $(solib_svr4_h) $(symtab_h) $(trad_frame_h) $(gdb_assert_h) \ + $(gdb_string_h) $(sparc_tdep_h) $(nbsd_tdep_h) +sparcobsd-tdep.o: sparcobsd-tdep.c $(defs_h) $(floatformat_h) $(frame_h) \ + $(frame_unwind_h) $(osabi_h) $(solib_svr4_h) $(symtab_h) \ + $(trad_frame_h) $(gdb_assert_h) $(sparc_tdep_h) $(nbsd_tdep_h) +sparc-sol2-nat.o: sparc-sol2-nat.c $(defs_h) $(regcache_h) $(gregset_h) \ + $(sparc_tdep_h) $(sparc64_tdep_h) +sparc-sol2-tdep.o: sparc-sol2-tdep.c $(defs_h) $(frame_h) $(frame_unwind_h) \ + $(gdbcore_h) $(symtab_h) $(objfiles_h) $(osabi_h) $(regcache_h) \ + $(target_h) $(trad_frame_h) $(gdb_assert_h) $(gdb_string_h) \ + $(sparc_tdep_h) $(solib_svr4_h) +sparc-stub.o: sparc-stub.c +sparc-tdep.o: sparc-tdep.c $(defs_h) $(arch_utils_h) $(dis_asm_h) \ + $(floatformat_h) $(frame_h) $(frame_base_h) $(frame_unwind_h) \ + $(gdbcore_h) $(gdbtypes_h) $(inferior_h) $(symtab_h) $(objfiles_h) \ + $(osabi_h) $(regcache_h) $(target_h) $(value_h) $(gdb_assert_h) \ + $(gdb_string_h) $(sparc_tdep_h) +stabsread.o: stabsread.c $(defs_h) $(gdb_string_h) $(bfd_h) $(gdb_obstack_h) \ + $(symtab_h) $(gdbtypes_h) $(expression_h) $(symfile_h) $(objfiles_h) \ + $(aout_stab_gnu_h) $(libaout_h) $(aout_aout64_h) $(gdb_stabs_h) \ + $(buildsym_h) $(complaints_h) $(demangle_h) $(language_h) \ + $(doublest_h) $(cp_abi_h) $(cp_support_h) $(stabsread_h) +stack.o: stack.c $(defs_h) $(gdb_string_h) $(value_h) $(symtab_h) \ + $(gdbtypes_h) $(expression_h) $(language_h) $(frame_h) $(gdbcmd_h) \ + $(gdbcore_h) $(target_h) $(source_h) $(breakpoint_h) $(demangle_h) \ + $(inferior_h) $(annotate_h) $(ui_out_h) $(block_h) $(stack_h) \ + $(gdb_assert_h) $(dictionary_h) $(reggroups_h) $(regcache_h) +standalone.o: standalone.c $(gdb_stat_h) $(defs_h) $(symtab_h) $(frame_h) \ + $(inferior_h) $(gdb_wait_h) +std-regs.o: std-regs.c $(defs_h) $(user_regs_h) $(frame_h) $(gdbtypes_h) \ + $(value_h) $(gdb_string_h) +stop-gdb.o: stop-gdb.c $(defs_h) +symfile.o: symfile.c $(defs_h) $(bfdlink_h) $(symtab_h) $(gdbtypes_h) \ + $(gdbcore_h) $(frame_h) $(target_h) $(value_h) $(symfile_h) \ + $(objfiles_h) $(source_h) $(gdbcmd_h) $(breakpoint_h) $(language_h) \ + $(complaints_h) $(demangle_h) $(inferior_h) $(filenames_h) \ + $(gdb_stabs_h) $(gdb_obstack_h) $(completer_h) $(bcache_h) \ + $(hashtab_h) $(readline_h) $(gdb_assert_h) $(block_h) \ + $(gdb_string_h) $(gdb_stat_h) +symfile-mem.o: symfile-mem.c $(defs_h) $(symtab_h) $(gdbcore_h) \ + $(objfiles_h) $(gdbcmd_h) $(target_h) $(value_h) $(symfile_h) +symmisc.o: symmisc.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(bfd_h) \ + $(symfile_h) $(objfiles_h) $(breakpoint_h) $(command_h) \ + $(gdb_obstack_h) $(language_h) $(bcache_h) $(block_h) $(gdb_regex_h) \ + $(dictionary_h) $(gdb_string_h) $(readline_h) +symtab.o: symtab.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(gdbcore_h) \ + $(frame_h) $(target_h) $(value_h) $(symfile_h) $(objfiles_h) \ + $(gdbcmd_h) $(call_cmds_h) $(gdb_regex_h) $(expression_h) \ + $(language_h) $(demangle_h) $(inferior_h) $(linespec_h) $(source_h) \ + $(filenames_h) $(objc_lang_h) $(hashtab_h) $(gdb_obstack_h) \ + $(block_h) $(dictionary_h) $(gdb_string_h) $(gdb_stat_h) $(cp_abi_h) +target.o: target.c $(defs_h) $(gdb_string_h) $(target_h) $(gdbcmd_h) \ + $(symtab_h) $(inferior_h) $(bfd_h) $(symfile_h) $(objfiles_h) \ + $(gdb_wait_h) $(dcache_h) $(regcache_h) $(gdb_assert_h) $(gdbcore_h) +thread.o: thread.c $(defs_h) $(symtab_h) $(frame_h) $(inferior_h) \ + $(environ_h) $(value_h) $(target_h) $(gdbthread_h) $(command_h) \ + $(gdbcmd_h) $(regcache_h) $(gdb_h) $(gdb_string_h) $(ui_out_h) +thread-db.o: thread-db.c $(defs_h) $(gdb_assert_h) $(gdb_proc_service_h) \ + $(gdb_thread_db_h) $(bfd_h) $(gdbthread_h) $(inferior_h) \ + $(symfile_h) $(objfiles_h) $(target_h) $(regcache_h) $(solib_svr4_h) +top.o: top.c $(defs_h) $(gdbcmd_h) $(call_cmds_h) $(cli_cmds_h) \ + $(cli_script_h) $(cli_setshow_h) $(cli_decode_h) $(symtab_h) \ + $(inferior_h) $(target_h) $(breakpoint_h) $(gdbtypes_h) \ + $(expression_h) $(value_h) $(language_h) $(terminal_h) $(annotate_h) \ + $(completer_h) $(top_h) $(version_h) $(serial_h) $(doublest_h) \ + $(gdb_assert_h) $(readline_h) $(readline_history_h) $(event_top_h) \ + $(gdb_string_h) $(gdb_stat_h) $(ui_out_h) $(cli_out_h) +tracepoint.o: tracepoint.c $(defs_h) $(symtab_h) $(frame_h) $(gdbtypes_h) \ + $(expression_h) $(gdbcmd_h) $(value_h) $(target_h) $(language_h) \ + $(gdb_string_h) $(inferior_h) $(tracepoint_h) $(remote_h) \ + $(linespec_h) $(regcache_h) $(completer_h) $(gdb_events_h) \ + $(block_h) $(dictionary_h) $(ax_h) $(ax_gdb_h) $(readline_h) \ + $(readline_history_h) +trad-frame.o: trad-frame.c $(defs_h) $(frame_h) $(trad_frame_h) \ + $(regcache_h) +tramp-frame.o: tramp-frame.c $(defs_h) $(tramp_frame_h) $(frame_unwind_h) \ + $(gdbcore_h) $(symtab_h) $(objfiles_h) $(target_h) $(trad_frame_h) \ + $(frame_base_h) +typeprint.o: typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) $(symtab_h) \ + $(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) $(command_h) \ + $(gdbcmd_h) $(target_h) $(language_h) $(cp_abi_h) $(typeprint_h) \ + $(gdb_string_h) +ui-file.o: ui-file.c $(defs_h) $(ui_file_h) $(gdb_string_h) +ui-out.o: ui-out.c $(defs_h) $(gdb_string_h) $(expression_h) $(language_h) \ + $(ui_out_h) $(gdb_assert_h) +user-regs.o: user-regs.c $(defs_h) $(user_regs_h) $(gdbtypes_h) \ + $(gdb_string_h) $(gdb_assert_h) $(frame_h) +utils.o: utils.c $(defs_h) $(gdb_assert_h) $(gdb_string_h) $(event_top_h) \ + $(tui_h) $(gdbcmd_h) $(serial_h) $(bfd_h) $(target_h) $(demangle_h) \ + $(expression_h) $(language_h) $(charset_h) $(annotate_h) \ + $(filenames_h) $(inferior_h) $(readline_h) +uw-thread.o: uw-thread.c $(defs_h) $(gdbthread_h) $(target_h) $(inferior_h) \ + $(regcache_h) $(gregset_h) +v850ice.o: v850ice.c $(defs_h) $(gdb_string_h) $(frame_h) $(symtab_h) \ + $(inferior_h) $(breakpoint_h) $(symfile_h) $(target_h) $(objfiles_h) \ + $(gdbcore_h) $(value_h) $(command_h) $(regcache_h) +v850-tdep.o: v850-tdep.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \ + $(value_h) $(bfd_h) $(gdb_string_h) $(gdbcore_h) $(objfiles_h) \ + $(arch_utils_h) $(regcache_h) $(symtab_h) $(dis_asm_h) +valarith.o: valarith.c $(defs_h) $(value_h) $(symtab_h) $(gdbtypes_h) \ + $(expression_h) $(target_h) $(language_h) $(gdb_string_h) \ + $(doublest_h) $(infcall_h) +valops.o: valops.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(value_h) $(frame_h) \ + $(inferior_h) $(gdbcore_h) $(target_h) $(demangle_h) $(language_h) \ + $(gdbcmd_h) $(regcache_h) $(cp_abi_h) $(block_h) $(infcall_h) \ + $(dictionary_h) $(cp_support_h) $(gdb_string_h) $(gdb_assert_h) \ + $(cp_support_h) $(observer_h) +valprint.o: valprint.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \ + $(value_h) $(gdbcore_h) $(gdbcmd_h) $(target_h) $(language_h) \ + $(annotate_h) $(valprint_h) $(floatformat_h) $(doublest_h) +values.o: values.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \ + $(value_h) $(gdbcore_h) $(command_h) $(gdbcmd_h) $(target_h) \ + $(language_h) $(scm_lang_h) $(demangle_h) $(doublest_h) \ + $(gdb_assert_h) $(regcache_h) $(block_h) +varobj.o: varobj.c $(defs_h) $(value_h) $(expression_h) $(frame_h) \ + $(language_h) $(wrapper_h) $(gdbcmd_h) $(gdb_string_h) $(varobj_h) +vax-tdep.o: vax-tdep.c $(defs_h) $(arch_utils_h) $(dis_asm_h) $(frame_h) \ + $(frame_base_h) $(frame_unwind_h) $(gdbcore_h) $(osabi_h) \ + $(regcache_h) $(regset_h) $(value_h) $(trad_frame_h) \ + $(gdb_string_h) $(vax_tdep_h) +vaxbsd-nat.o: vaxbsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) $(vax_tdep_h) +vaxnbsd-tdep.o: vaxnbsd-tdep.c $(defs_h) $(arch_utils_h) $(osabi_h) \ + $(vax_tdep_h) $(solib_svr4_h) $(gdb_string_h) +win32-nat.o: win32-nat.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \ + $(gdbcore_h) $(command_h) $(completer_h) $(regcache_h) $(top_h) \ + $(buildsym_h) $(symfile_h) $(objfiles_h) $(gdb_string_h) \ + $(gdbthread_h) $(gdbcmd_h) $(exec_h) $(i386_tdep_h) $(i387_tdep_h) +wince.o: wince.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) $(gdbcore_h) \ + $(command_h) $(buildsym_h) $(symfile_h) $(objfiles_h) \ + $(gdb_string_h) $(gdbthread_h) $(gdbcmd_h) $(wince_stub_h) \ + $(regcache_h) $(mips_tdep_h) +wince-stub.o: wince-stub.c $(wince_stub_h) +wrapper.o: wrapper.c $(defs_h) $(value_h) $(wrapper_h) +xcoffread.o: xcoffread.c $(defs_h) $(bfd_h) $(gdb_string_h) $(gdb_stat_h) \ + $(coff_internal_h) $(libcoff_h) $(coff_xcoff_h) $(libxcoff_h) \ + $(coff_rs6000_h) $(symtab_h) $(gdbtypes_h) $(symfile_h) \ + $(objfiles_h) $(buildsym_h) $(stabsread_h) $(expression_h) \ + $(complaints_h) $(gdb_stabs_h) $(aout_stab_gnu_h) +xcoffsolib.o: xcoffsolib.c $(defs_h) $(bfd_h) $(xcoffsolib_h) $(inferior_h) \ + $(gdbcmd_h) $(symfile_h) $(frame_h) $(gdb_regex_h) +xstormy16-tdep.o: xstormy16-tdep.c $(defs_h) $(value_h) $(inferior_h) \ + $(arch_utils_h) $(regcache_h) $(gdbcore_h) $(objfiles_h) \ + $(dis_asm_h) + +# +# gdb/cli/ dependencies +# +# Need to explicitly specify the compile rule as make will do nothing +# or try to compile the object file into the sub-directory. + +cli-cmds.o: $(srcdir)/cli/cli-cmds.c $(defs_h) $(readline_h) \ + $(readline_tilde_h) $(completer_h) $(target_h) $(gdb_wait_h) \ + $(gdb_regex_h) $(gdb_string_h) $(gdb_vfork_h) $(linespec_h) \ + $(expression_h) $(frame_h) $(value_h) $(language_h) $(filenames_h) \ + $(objfiles_h) $(source_h) $(disasm_h) $(ui_out_h) $(top_h) \ + $(cli_decode_h) $(cli_script_h) $(cli_setshow_h) $(cli_cmds_h) \ + $(tui_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-cmds.c +cli-decode.o: $(srcdir)/cli/cli-decode.c $(defs_h) $(symtab_h) \ + $(gdb_regex_h) $(gdb_string_h) $(ui_out_h) $(cli_cmds_h) \ + $(cli_decode_h) $(tui_h) $(gdb_assert_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-decode.c +cli-dump.o: $(srcdir)/cli/cli-dump.c $(defs_h) $(gdb_string_h) \ + $(cli_decode_h) $(cli_cmds_h) $(value_h) $(completer_h) \ + $(cli_dump_h) $(gdb_assert_h) $(target_h) $(readline_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-dump.c +cli-interp.o: $(srcdir)/cli/cli-interp.c $(defs_h) $(interps_h) $(wrapper_h) \ + $(event_top_h) $(ui_out_h) $(cli_out_h) $(top_h) $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-interp.c +cli-logging.o: $(srcdir)/cli/cli-logging.c $(defs_h) $(gdbcmd_h) $(ui_out_h) \ + $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-logging.c +cli-script.o: $(srcdir)/cli/cli-script.c $(defs_h) $(value_h) $(language_h) \ + $(ui_out_h) $(gdb_string_h) $(top_h) $(cli_cmds_h) $(cli_decode_h) \ + $(cli_script_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-script.c +cli-setshow.o: $(srcdir)/cli/cli-setshow.c $(defs_h) $(readline_tilde_h) \ + $(value_h) $(gdb_string_h) $(ui_out_h) $(cli_decode_h) $(cli_cmds_h) \ + $(cli_setshow_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-setshow.c +cli-utils.o: $(srcdir)/cli/cli-utils.c $(defs_h) $(cli_utils_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-utils.c + +# +# GDBTK sub-directory +# +# Need to explicitly specify the compile rule as make will do nothing +# or try to compile the object file into the mi directory. + +all-gdbtk: insight$(EXEEXT) + +install-gdbtk: + transformed_name=`t='$(program_transform_name)'; \ + echo insight | sed -e $$t` ; \ + if test "x$$transformed_name" = x; then \ + transformed_name=insight ; \ + else \ + true ; \ + fi ; \ + $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir); \ + $(INSTALL_PROGRAM) insight$(EXEEXT) \ + $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \ + $(SHELL) $(srcdir)/../mkinstalldirs \ + $(DESTDIR)$(GDBTK_LIBRARY) ; \ + $(SHELL) $(srcdir)/../mkinstalldirs \ + $(DESTDIR)$(libdir)/insight$(GDBTK_VERSION) ; \ + $(INSTALL_DATA) $(srcdir)/gdbtk/plugins/plugins.tcl \ + $(DESTDIR)$(libdir)/insight$(GDBTK_VERSION)/plugins.tcl ; \ + $(SHELL) $(srcdir)/../mkinstalldirs \ + $(DESTDIR)$(GDBTK_LIBRARY)/images \ + $(DESTDIR)$(GDBTK_LIBRARY)/images2 ; \ + $(SHELL) $(srcdir)/../mkinstalldirs \ + $(DESTDIR)$(GDBTK_LIBRARY)/help \ + $(DESTDIR)$(GDBTK_LIBRARY)/help/images \ + $(DESTDIR)$(GDBTK_LIBRARY)/help/trace ; \ + cd $(srcdir)/gdbtk/library ; \ + for i in *.tcl *.itcl *.ith *.itb images/*.gif images2/*.gif images/icons.txt images2/icons.txt tclIndex help/*.html help/trace/*.html help/trace/index.toc help/images/*.gif help/images/*.png; \ + do \ + $(INSTALL_DATA) $$i $(DESTDIR)$(GDBTK_LIBRARY)/$$i ; \ + done ; + +uninstall-gdbtk: + transformed_name=`t='$(program_transform_name)'; \ + echo insight | sed -e $$t` ; \ + if test "x$$transformed_name" = x; then \ + transformed_name=insight ; \ + else \ + true ; \ + fi ; \ + rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \ + rm -rf $(DESTDIR)$(GDBTK_LIBRARY) + +clean-gdbtk: + rm -f insight$(EXEEXT) + +# Removing the old gdb first works better if it is running, at least on SunOS. +insight$(EXEEXT): gdbtk-main.o libgdb.a $(ADD_DEPS) \ + $(CDEPS) $(TDEPLIBS) + rm -f insight$(EXEEXT) + $(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \ + -o insight$(EXEEXT) gdbtk-main.o libgdb.a \ + $(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES) + +gdbres.o: $(srcdir)/gdbtk/gdb.rc $(srcdir)/gdbtk/gdbtool.ico + $(WINDRES) --include $(srcdir)/gdbtk $(srcdir)/gdbtk/gdb.rc gdbres.o + +gdbtk.o: $(srcdir)/gdbtk/generic/gdbtk.c \ + $(srcdir)/gdbtk/generic/gdbtk.h $(defs_h) \ + $(symtab_h) $(inferior_h) $(command_h) \ + $(bfd_h) $(symfile_h) $(objfiles_h) $(target_h) $(gdb_string_h) \ + $(tracepoint_h) $(top_h) + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(ITCL_CFLAGS) \ + $(ITK_CFLAGS) \ + $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) $(GDBTK_CFLAGS)\ + $(srcdir)/gdbtk/generic/gdbtk.c \ + -DGDBTK_LIBRARY=\"$(GDBTK_LIBRARY)\" -DSRC_DIR=\"$(GDBTK_SRC_DIR)\" + +gdbtk-bp.o: $(srcdir)/gdbtk/generic/gdbtk-bp.c \ + $(srcdir)/gdbtk/generic/gdbtk.h \ + $(srcdir)/gdbtk/generic/gdbtk-cmds.h \ + $(defs_h) $(breakpoint_h) $(tracepoint_h) \ + $(symfile_h) $(symtab_h) $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(ITCL_CFLAGS) \ + $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) \ + $(GDBTK_CFLAGS) $(srcdir)/gdbtk/generic/gdbtk-bp.c \ + -DGDBTK_LIBRARY=\"$(GDBTK_LIBRARY)\" + +gdbtk-cmds.o: $(srcdir)/gdbtk/generic/gdbtk-cmds.c \ + $(srcdir)/gdbtk/generic/gdbtk.h $(srcdir)/gdbtk/generic/gdbtk-cmds.h \ + $(defs_h) $(inferior_h) $(source_h) $(symfile_h) $(objfiles_h) \ + $(gdbcore_h) $(demangle_h) $(linespec_h) $(tui_file_h) $(top_h) \ + $(annotate_h) $(block_h) $(dictionary_h) $(gdb_string_h) \ + $(dis_asm_h) $(gdbcmd_h) + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(ITCL_CFLAGS) \ + $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) \ + $(GDBTK_CFLAGS) $(srcdir)/gdbtk/generic/gdbtk-cmds.c \ + -DGDBTK_LIBRARY=\"$(GDBTK_LIBRARY)\" + +gdbtk-hooks.o: $(srcdir)/gdbtk/generic/gdbtk-hooks.c \ + $(srcdir)/gdbtk/generic/gdbtk.h $(defs_h) \ + $(symtab_h) $(inferior_h) $(command_h) \ + $(bfd_h) $(symfile_h) $(objfiles_h) $(target_h) $(gdb_string_h) \ + $(tracepoint_h) + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(ITCL_CFLAGS) \ + $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) $(GDBTK_CFLAGS)\ + $(srcdir)/gdbtk/generic/gdbtk-hooks.c -DGDBTK_LIBRARY=\"$(GDBTK_LIBRARY)\" + +gdbtk-interp.o: $(srcdir)/gdbtk/generic/gdbtk-interp.c \ + $(defs_h) $(interps_h) $(ui_out_h) $(ui_file_h) \ + $(cli_out_h) $(gdb_string_h) $(cli_cmds_h) $(cli_decode_h) \ + $(srcdir)/gdbtk/generic/gdbtk.h + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(ITCL_CFLAGS) \ + $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) $(GDBTK_CFLAGS) \ + $(srcdir)/gdbtk/generic/gdbtk-interp.c + +gdbtk-main.o: $(srcdir)/gdbtk/generic/gdbtk-main.c $(defs_h) $(main_h) \ + $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(ITCL_CFLAGS) \ + $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) $(GDBTK_CFLAGS)\ + $(srcdir)/gdbtk/generic/gdbtk-main.c -DGDBTK_LIBRARY=\"$(GDBTK_LIBRARY)\" + +gdbtk-register.o: $(srcdir)/gdbtk/generic/gdbtk-register.c \ + $(srcdir)/gdbtk/generic/gdbtk.h \ + $(srcdir)/gdbtk/generic/gdbtk-cmds.h \ + $(defs_h) $(frame_h) $(value_h) $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(ITCL_CFLAGS) \ + $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) \ + $(GDBTK_CFLAGS) $(srcdir)/gdbtk/generic/gdbtk-register.c \ + -DGDBTK_LIBRARY=\"$(GDBTK_LIBRARY)\" + +gdbtk-stack.o: $(srcdir)/gdbtk/generic/gdbtk-stack.c \ + $(srcdir)/gdbtk/generic/gdbtk.h $(srcdir)/gdbtk/generic/gdbtk-cmds.h \ + $(srcdir)/gdbtk/generic/gdbtk-wrapper.h \ + $(defs_h) $(target_h) $(breakpoint_h) $(linespec_h) \ + $(block_h) $(dictionary_h) + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(ITCL_CFLAGS) \ + $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) \ + $(GDBTK_CFLAGS) $(srcdir)/gdbtk/generic/gdbtk-stack.c \ + -DGDBTK_LIBRARY=\"$(GDBTK_LIBRARY)\" + +gdbtk-varobj.o: $(srcdir)/gdbtk/generic/gdbtk-varobj.c \ + $(srcdir)/gdbtk/generic/gdbtk.h \ + $(defs_h) $(value_h) $(varobj_h) $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(ITCL_CFLAGS) \ + $(TCL_CFLAGS) $(TK_CFLAGS) $(X11_CFLAGS) $(GDBTK_CFLAGS)\ + $(srcdir)/gdbtk/generic/gdbtk-varobj.c + +gdbtk-wrapper.o: $(srcdir)/gdbtk/generic/gdbtk-wrapper.c \ + $(srcdir)/gdbtk/generic/gdbtk-wrapper.h \ + $(defs_h) $(frame_h) $(value_h) + $(CC) -c $(INTERNAL_CFLAGS) $(IDE_CFLAGS) $(GDBTK_CFLAGS)\ + $(srcdir)/gdbtk/generic/gdbtk-wrapper.c + +# +# gdb/mi/ dependencies +# +# Need to explicitly specify the compile rule as make will do nothing +# or try to compile the object file into the sub-directory. + +mi-cmd-break.o: $(srcdir)/mi/mi-cmd-break.c $(defs_h) $(mi_cmds_h) \ + $(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \ + $(mi_getopt_h) $(gdb_events_h) $(gdb_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-break.c +mi-cmd-disas.o: $(srcdir)/mi/mi-cmd-disas.c $(defs_h) $(target_h) $(value_h) \ + $(mi_cmds_h) $(mi_getopt_h) $(gdb_string_h) $(ui_out_h) $(disasm_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-disas.c +mi-cmd-env.o: $(srcdir)/mi/mi-cmd-env.c $(defs_h) $(inferior_h) $(value_h) \ + $(mi_out_h) $(mi_cmds_h) $(mi_getopt_h) $(symtab_h) $(target_h) \ + $(environ_h) $(command_h) $(ui_out_h) $(top_h) $(gdb_string_h) \ + $(gdb_stat_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-env.c +mi-cmd-file.o: $(srcdir)/mi/mi-cmd-file.c $(defs_h) $(mi_cmds_h) \ + $(mi_getopt_h) $(ui_out_h) $(symtab_h) $(source_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-file.c +mi-cmds.o: $(srcdir)/mi/mi-cmds.c $(defs_h) $(top_h) $(mi_cmds_h) \ + $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmds.c +mi-cmd-stack.o: $(srcdir)/mi/mi-cmd-stack.c $(defs_h) $(target_h) $(frame_h) \ + $(value_h) $(mi_cmds_h) $(ui_out_h) $(symtab_h) $(block_h) \ + $(stack_h) $(dictionary_h) $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-stack.c +mi-cmd-var.o: $(srcdir)/mi/mi-cmd-var.c $(defs_h) $(mi_cmds_h) $(ui_out_h) \ + $(mi_out_h) $(varobj_h) $(value_h) $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-var.c +mi-console.o: $(srcdir)/mi/mi-console.c $(defs_h) $(mi_console_h) \ + $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-console.c +mi-getopt.o: $(srcdir)/mi/mi-getopt.c $(defs_h) $(mi_getopt_h) \ + $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-getopt.c +mi-interp.o: $(srcdir)/mi/mi-interp.c $(defs_h) $(gdb_string_h) $(interps_h) \ + $(event_top_h) $(event_loop_h) $(inferior_h) $(ui_out_h) $(top_h) \ + $(mi_main_h) $(mi_cmds_h) $(mi_out_h) $(mi_console_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-interp.c +mi-main.o: $(srcdir)/mi/mi-main.c $(defs_h) $(target_h) $(inferior_h) \ + $(gdb_string_h) $(top_h) $(gdbthread_h) $(mi_cmds_h) $(mi_parse_h) \ + $(mi_getopt_h) $(mi_console_h) $(ui_out_h) $(mi_out_h) $(interps_h) \ + $(event_loop_h) $(event_top_h) $(gdbcore_h) $(value_h) $(regcache_h) \ + $(gdb_h) $(frame_h) $(mi_main_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-main.c +mi-out.o: $(srcdir)/mi/mi-out.c $(defs_h) $(ui_out_h) $(mi_out_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-out.c +mi-parse.o: $(srcdir)/mi/mi-parse.c $(defs_h) $(mi_cmds_h) $(mi_parse_h) \ + $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-parse.c +mi-symbol-cmds.o: $(srcdir)/mi/mi-symbol-cmds.c $(defs_h) $(mi_cmds_h) \ + $(symtab_h) $(ui_out_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-symbol-cmds.c + +# +# rdi-share sub-directory +# +# Need to explicitly specify the compile rule as make will do nothing +# or try to compile the object file into the mi directory. + +rdi-share/libangsd.a: force + @dir=rdi-share; \ + if [ -f ./$${dir}/Makefile ] ; then \ + r=`pwd`; export r; \ + srcroot=`cd $(srcdir); pwd`; export srcroot; \ + (cd $${dir}; $(MAKE) $(FLAGS_TO_PASS) all); \ + else \ + true; \ + fi + +# +# gdb/signals/ dependencies +# +# Need to explicitly specify the compile rule as make will do nothing +# or try to compile the object file into the sub-directory. + +signals.o: $(srcdir)/signals/signals.c $(server_h) $(defs_h) $(target_h) \ + $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/signals/signals.c + +# +# gdb/tui/ dependencies +# +# Need to explicitly specify the compile rule as make will do nothing +# or try to compile the object file into the sub-directory. + +tui.o: $(srcdir)/tui/tui.c $(defs_h) $(gdbcmd_h) $(tui_h) $(tui_hooks_h) \ + $(tui_data_h) $(tui_layout_h) $(tui_io_h) $(tui_regs_h) \ + $(tui_stack_h) $(tui_win_h) $(tui_winsource_h) $(tui_windata_h) \ + $(target_h) $(frame_h) $(breakpoint_h) $(inferior_h) $(symtab_h) \ + $(source_h) $(gdb_curses_h) $(readline_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui.c +tui-command.o: $(srcdir)/tui/tui-command.c $(defs_h) $(tui_h) $(tui_data_h) \ + $(tui_win_h) $(tui_io_h) $(gdb_curses_h) $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-command.c +tui-data.o: $(srcdir)/tui/tui-data.c $(defs_h) $(symtab_h) $(tui_h) \ + $(tui_data_h) $(tui_wingeneral_h) $(gdb_string_h) $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-data.c +tui-disasm.o: $(srcdir)/tui/tui-disasm.c $(defs_h) $(symtab_h) \ + $(breakpoint_h) $(frame_h) $(value_h) $(source_h) $(disasm_h) \ + $(gdb_string_h) $(tui_h) $(tui_data_h) $(tui_win_h) $(tui_layout_h) \ + $(tui_winsource_h) $(tui_stack_h) $(tui_file_h) $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-disasm.c +tui-file.o: $(srcdir)/tui/tui-file.c $(defs_h) $(ui_file_h) $(tui_file_h) \ + $(tui_io_h) $(tui_h) $(gdb_string_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-file.c +tui-hooks.o: $(srcdir)/tui/tui-hooks.c $(defs_h) $(symtab_h) $(inferior_h) \ + $(command_h) $(bfd_h) $(symfile_h) $(objfiles_h) $(target_h) \ + $(gdbcore_h) $(event_loop_h) $(event_top_h) $(frame_h) \ + $(breakpoint_h) $(gdb_events_h) $(ui_out_h) $(top_h) $(readline_h) \ + $(tui_h) $(tui_hooks_h) $(tui_data_h) $(tui_layout_h) $(tui_io_h) \ + $(tui_regs_h) $(tui_win_h) $(tui_stack_h) $(tui_windata_h) \ + $(tui_winsource_h) $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-hooks.c +tui-interp.o: $(srcdir)/tui/tui-interp.c $(defs_h) $(interps_h) $(top_h) \ + $(event_top_h) $(event_loop_h) $(ui_out_h) $(cli_out_h) \ + $(tui_data_h) $(readline_h) $(tui_win_h) $(tui_h) $(tui_io_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-interp.c +tui-io.o: $(srcdir)/tui/tui-io.c $(defs_h) $(terminal_h) $(target_h) \ + $(event_loop_h) $(event_top_h) $(command_h) $(top_h) $(readline_h) \ + $(tui_h) $(tui_data_h) $(tui_io_h) $(tui_command_h) $(tui_win_h) \ + $(tui_wingeneral_h) $(tui_file_h) $(ui_out_h) $(cli_out_h) \ + $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-io.c +tui-layout.o: $(srcdir)/tui/tui-layout.c $(defs_h) $(command_h) $(symtab_h) \ + $(frame_h) $(source_h) $(tui_h) $(tui_data_h) $(tui_windata_h) \ + $(tui_wingeneral_h) $(tui_stack_h) $(tui_regs_h) $(tui_win_h) \ + $(tui_winsource_h) $(tui_disasm_h) $(gdb_string_h) $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-layout.c +tui-main.o: $(srcdir)/tui/tui-main.c $(defs_h) $(main_h) $(gdb_string_h) \ + $(interps_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-main.c +tui-out.o: $(srcdir)/tui/tui-out.c $(defs_h) $(ui_out_h) $(tui_h) \ + $(gdb_string_h) $(gdb_assert_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-out.c +tui-regs.o: $(srcdir)/tui/tui-regs.c $(defs_h) $(tui_h) $(tui_data_h) \ + $(symtab_h) $(gdbtypes_h) $(gdbcmd_h) $(frame_h) $(regcache_h) \ + $(inferior_h) $(target_h) $(gdb_string_h) $(tui_layout_h) \ + $(tui_win_h) $(tui_windata_h) $(tui_wingeneral_h) $(tui_file_h) \ + $(reggroups_h) $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-regs.c +tui-source.o: $(srcdir)/tui/tui-source.c $(defs_h) $(symtab_h) $(frame_h) \ + $(breakpoint_h) $(source_h) $(symtab_h) $(tui_h) $(tui_data_h) \ + $(tui_stack_h) $(tui_winsource_h) $(tui_source_h) $(gdb_string_h) \ + $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-source.c +tui-stack.o: $(srcdir)/tui/tui-stack.c $(defs_h) $(symtab_h) $(breakpoint_h) \ + $(frame_h) $(command_h) $(inferior_h) $(target_h) $(top_h) \ + $(gdb_string_h) $(tui_h) $(tui_data_h) $(tui_stack_h) \ + $(tui_wingeneral_h) $(tui_source_h) $(tui_winsource_h) $(tui_file_h) \ + $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-stack.c +tui-win.o: $(srcdir)/tui/tui-win.c $(defs_h) $(command_h) $(symtab_h) \ + $(breakpoint_h) $(frame_h) $(cli_cmds_h) $(top_h) $(source_h) \ + $(tui_h) $(tui_data_h) $(tui_wingeneral_h) $(tui_stack_h) \ + $(tui_regs_h) $(tui_disasm_h) $(tui_source_h) $(tui_winsource_h) \ + $(tui_windata_h) $(gdb_curses_h) $(gdb_string_h) $(readline_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-win.c +tui-windata.o: $(srcdir)/tui/tui-windata.c $(defs_h) $(tui_h) $(tui_data_h) \ + $(tui_wingeneral_h) $(tui_regs_h) $(gdb_string_h) $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-windata.c +tui-wingeneral.o: $(srcdir)/tui/tui-wingeneral.c $(defs_h) $(tui_h) \ + $(tui_data_h) $(tui_wingeneral_h) $(tui_win_h) $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-wingeneral.c +tui-winsource.o: $(srcdir)/tui/tui-winsource.c $(defs_h) $(symtab_h) \ + $(frame_h) $(breakpoint_h) $(value_h) $(source_h) $(tui_h) \ + $(tui_data_h) $(tui_stack_h) $(tui_win_h) $(tui_wingeneral_h) \ + $(tui_winsource_h) $(tui_source_h) $(tui_disasm_h) $(gdb_string_h) \ + $(gdb_curses_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-winsource.c + +# +# vx-share sub-directory +# + +xdr_ld.o: vx-share/xdr_ld.c $(defs_h) vx-share/vxTypes.h \ + vx-share/vxWorks.h vx-share/xdr_ld.h + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/vx-share/xdr_ld.c + +xdr_ptrace.o: vx-share/xdr_ptrace.c $(defs_h) vx-share/vxTypes.h \ + vx-share/vxWorks.h vx-share/xdr_ptrace.h + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/vx-share/xdr_ptrace.c + +xdr_rdb.o: vx-share/xdr_rdb.c $(defs_h) vx-share/vxTypes.h \ + vx-share/vxWorks.h vx-share/xdr_rdb.h + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/vx-share/xdr_rdb.c + +### end of the gdb Makefile.in. diff --git a/gdb/ppc-tdep.h b/gdb/ppc-tdep.h new file mode 100644 index 00000000000..1a5bc6fbf05 --- /dev/null +++ b/gdb/ppc-tdep.h @@ -0,0 +1,376 @@ +/* Target-dependent code for GDB, the GNU debugger. + + Copyright 2000, 2001, 2002, 2003, 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 PPC_TDEP_H +#define PPC_TDEP_H + +struct gdbarch; +struct frame_info; +struct value; +struct regcache; +struct type; + +/* From ppc-linux-tdep.c... */ +enum return_value_convention ppc_sysv_abi_return_value (struct gdbarch *gdbarch, + struct type *valtype, + struct regcache *regcache, + void *readbuf, + const void *writebuf); +enum return_value_convention ppc_sysv_abi_broken_return_value (struct gdbarch *gdbarch, + struct type *valtype, + struct regcache *regcache, + void *readbuf, + const void *writebuf); +CORE_ADDR ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, + struct value *function, + struct regcache *regcache, + CORE_ADDR bp_addr, int nargs, + struct value **args, CORE_ADDR sp, + int struct_return, + CORE_ADDR struct_addr); +CORE_ADDR ppc64_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, + struct value *function, + struct regcache *regcache, + CORE_ADDR bp_addr, int nargs, + struct value **args, CORE_ADDR sp, + int struct_return, + CORE_ADDR struct_addr); +CORE_ADDR ppc64_sysv_abi_adjust_breakpoint_address (struct gdbarch *gdbarch, + CORE_ADDR bpaddr); +int ppc_linux_memory_remove_breakpoint (CORE_ADDR addr, char *contents_cache); +struct link_map_offsets *ppc_linux_svr4_fetch_link_map_offsets (void); +void ppc_linux_supply_gregset (struct regcache *regcache, + int regnum, const void *gregs, size_t size, + int wordsize); +void ppc_linux_supply_fpregset (const struct regset *regset, + struct regcache *regcache, + int regnum, const void *gregs, size_t size); + +enum return_value_convention ppc64_sysv_abi_return_value (struct gdbarch *gdbarch, + struct type *valtype, + struct regcache *regcache, + void *readbuf, + const void *writebuf); + +/* From rs6000-tdep.c... */ +int altivec_register_p (int regno); +int spe_register_p (int regno); + +/* Return non-zero if the architecture described by GDBARCH has + floating-point registers (f0 --- f31 and fpscr). */ +int ppc_floating_point_unit_p (struct gdbarch *gdbarch); + +/* Register set description. */ + +struct ppc_reg_offsets +{ + /* General-purpose registers. */ + int r0_offset; + int pc_offset; + int ps_offset; + int cr_offset; + int lr_offset; + int ctr_offset; + int xer_offset; + int mq_offset; + + /* Floating-point registers. */ + int f0_offset; + int fpscr_offset; + + /* AltiVec registers. */ + int vr0_offset; + int vscr_offset; + int vrsave_offset; +}; + +/* Supply register REGNUM in the general-purpose register set REGSET + from the buffer specified by GREGS and LEN to register cache + REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */ + +extern void ppc_supply_gregset (const struct regset *regset, + struct regcache *regcache, + int regnum, const void *gregs, size_t len); + +/* Supply register REGNUM in the floating-point register set REGSET + from the buffer specified by FPREGS and LEN to register cache + REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */ + +extern void ppc_supply_fpregset (const struct regset *regset, + struct regcache *regcache, + int regnum, const void *fpregs, size_t len); + +/* Collect register REGNUM in the general-purpose register set + REGSET. from register cache REGCACHE into the buffer specified by + GREGS and LEN. If REGNUM is -1, do this for all registers in + REGSET. */ + +extern void ppc_collect_gregset (const struct regset *regset, + const struct regcache *regcache, + int regnum, void *gregs, size_t len); + +/* Collect register REGNUM in the floating-point register set + REGSET. from register cache REGCACHE into the buffer specified by + FPREGS and LEN. If REGNUM is -1, do this for all registers in + REGSET. */ + +extern void ppc_collect_fpregset (const struct regset *regset, + const struct regcache *regcache, + int regnum, void *fpregs, size_t len); + +/* Private data that this module attaches to struct gdbarch. */ + +struct gdbarch_tdep + { + int wordsize; /* size in bytes of fixed-point word */ + const struct reg *regs; /* from current variant */ + int ppc_gp0_regnum; /* GPR register 0 */ + int ppc_toc_regnum; /* TOC register */ + int ppc_ps_regnum; /* Processor (or machine) status (%msr) */ + int ppc_cr_regnum; /* Condition register */ + int ppc_lr_regnum; /* Link register */ + int ppc_ctr_regnum; /* Count register */ + int ppc_xer_regnum; /* Integer exception register */ + + /* On PPC and RS6000 variants that have no floating-point + registers, the next two members will be -1. */ + int ppc_fp0_regnum; /* floating-point register 0 */ + int ppc_fpscr_regnum; /* Floating point status and condition + register */ + + int ppc_sr0_regnum; /* segment register 0, or -1 on + variants that have no segment + registers. */ + + int ppc_mq_regnum; /* Multiply/Divide extension register */ + int ppc_vr0_regnum; /* First AltiVec register */ + int ppc_vrsave_regnum; /* Last AltiVec register */ + int ppc_ev0_upper_regnum; /* First GPR upper half register */ + int ppc_ev0_regnum; /* First ev register */ + int ppc_ev31_regnum; /* Last ev register */ + int ppc_acc_regnum; /* SPE 'acc' register */ + int ppc_spefscr_regnum; /* SPE 'spefscr' register */ + int lr_frame_offset; /* Offset to ABI specific location where + link register is saved. */ + + /* An array of integers, such that sim_regno[I] is the simulator + register number for GDB register number I, or -1 if the + simulator does not implement that register. */ + int *sim_regno; +}; + + +/* Constants for register set sizes. */ +enum + { + ppc_num_gprs = 32, /* 32 general-purpose registers */ + ppc_num_fprs = 32, /* 32 floating-point registers */ + ppc_num_srs = 16, /* 16 segment registers */ + ppc_num_vrs = 32 /* 32 Altivec vector registers */ + }; + + +/* Constants for SPR register numbers. These are *not* GDB register + numbers: they are the numbers used in the PowerPC ISA itself to + refer to these registers. + + This table includes all the SPRs from all the variants I could find + documentation for. + + There may be registers from different PowerPC variants assigned the + same number, but that's fine: GDB and the SIM always use the + numbers in the context of a particular variant, so it's not + ambiguous. + + We need to deviate from the naming pattern when variants have + special-purpose registers of the same name, but with different + numbers. Fortunately, this is rare: look below to see how we + handle the 'tcr' registers on the 403/403GX and 602. */ + +enum + { + ppc_spr_mq = 0, + ppc_spr_xer = 1, + ppc_spr_rtcu = 4, + ppc_spr_rtcl = 5, + ppc_spr_lr = 8, + ppc_spr_ctr = 9, + ppc_spr_cnt = 9, + ppc_spr_dsisr = 18, + ppc_spr_dar = 19, + ppc_spr_dec = 22, + ppc_spr_sdr1 = 25, + ppc_spr_srr0 = 26, + ppc_spr_srr1 = 27, + ppc_spr_eie = 80, + ppc_spr_eid = 81, + ppc_spr_nri = 82, + ppc_spr_sp = 102, + ppc_spr_cmpa = 144, + ppc_spr_cmpb = 145, + ppc_spr_cmpc = 146, + ppc_spr_cmpd = 147, + ppc_spr_icr = 148, + ppc_spr_der = 149, + ppc_spr_counta = 150, + ppc_spr_countb = 151, + ppc_spr_cmpe = 152, + ppc_spr_cmpf = 153, + ppc_spr_cmpg = 154, + ppc_spr_cmph = 155, + ppc_spr_lctrl1 = 156, + ppc_spr_lctrl2 = 157, + ppc_spr_ictrl = 158, + ppc_spr_bar = 159, + ppc_spr_vrsave = 256, + ppc_spr_sprg0 = 272, + ppc_spr_sprg1 = 273, + ppc_spr_sprg2 = 274, + ppc_spr_sprg3 = 275, + ppc_spr_asr = 280, + ppc_spr_ear = 282, + ppc_spr_tbl = 284, + ppc_spr_tbu = 285, + ppc_spr_pvr = 287, + ppc_spr_spefscr = 512, + ppc_spr_ibat0u = 528, + ppc_spr_ibat0l = 529, + ppc_spr_ibat1u = 530, + ppc_spr_ibat1l = 531, + ppc_spr_ibat2u = 532, + ppc_spr_ibat2l = 533, + ppc_spr_ibat3u = 534, + ppc_spr_ibat3l = 535, + ppc_spr_dbat0u = 536, + ppc_spr_dbat0l = 537, + ppc_spr_dbat1u = 538, + ppc_spr_dbat1l = 539, + ppc_spr_dbat2u = 540, + ppc_spr_dbat2l = 541, + ppc_spr_dbat3u = 542, + ppc_spr_dbat3l = 543, + ppc_spr_ic_cst = 560, + ppc_spr_ic_adr = 561, + ppc_spr_ic_dat = 562, + ppc_spr_dc_cst = 568, + ppc_spr_dc_adr = 569, + ppc_spr_dc_dat = 570, + ppc_spr_dpdr = 630, + ppc_spr_dpir = 631, + ppc_spr_immr = 638, + ppc_spr_mi_ctr = 784, + ppc_spr_mi_ap = 786, + ppc_spr_mi_epn = 787, + ppc_spr_mi_twc = 789, + ppc_spr_mi_rpn = 790, + ppc_spr_mi_cam = 816, + ppc_spr_mi_ram0 = 817, + ppc_spr_mi_ram1 = 818, + ppc_spr_md_ctr = 792, + ppc_spr_m_casid = 793, + ppc_spr_md_ap = 794, + ppc_spr_md_epn = 795, + ppc_spr_m_twb = 796, + ppc_spr_md_twc = 797, + ppc_spr_md_rpn = 798, + ppc_spr_m_tw = 799, + ppc_spr_mi_dbcam = 816, + ppc_spr_mi_dbram0 = 817, + ppc_spr_mi_dbram1 = 818, + ppc_spr_md_dbcam = 824, + ppc_spr_md_cam = 824, + ppc_spr_md_dbram0 = 825, + ppc_spr_md_ram0 = 825, + ppc_spr_md_dbram1 = 826, + ppc_spr_md_ram1 = 826, + ppc_spr_ummcr0 = 936, + ppc_spr_upmc1 = 937, + ppc_spr_upmc2 = 938, + ppc_spr_usia = 939, + ppc_spr_ummcr1 = 940, + ppc_spr_upmc3 = 941, + ppc_spr_upmc4 = 942, + ppc_spr_zpr = 944, + ppc_spr_pid = 945, + ppc_spr_mmcr0 = 952, + ppc_spr_pmc1 = 953, + ppc_spr_sgr = 953, + ppc_spr_pmc2 = 954, + ppc_spr_dcwr = 954, + ppc_spr_sia = 955, + ppc_spr_mmcr1 = 956, + ppc_spr_pmc3 = 957, + ppc_spr_pmc4 = 958, + ppc_spr_sda = 959, + ppc_spr_tbhu = 972, + ppc_spr_tblu = 973, + ppc_spr_dmiss = 976, + ppc_spr_dcmp = 977, + ppc_spr_hash1 = 978, + ppc_spr_hash2 = 979, + ppc_spr_icdbdr = 979, + ppc_spr_imiss = 980, + ppc_spr_esr = 980, + ppc_spr_icmp = 981, + ppc_spr_dear = 981, + ppc_spr_rpa = 982, + ppc_spr_evpr = 982, + ppc_spr_cdbcr = 983, + ppc_spr_tsr = 984, + ppc_spr_602_tcr = 984, + ppc_spr_403_tcr = 986, + ppc_spr_ibr = 986, + ppc_spr_pit = 987, + ppc_spr_esasrr = 988, + ppc_spr_tbhi = 988, + ppc_spr_tblo = 989, + ppc_spr_srr2 = 990, + ppc_spr_sebr = 990, + ppc_spr_srr3 = 991, + ppc_spr_ser = 991, + ppc_spr_hid0 = 1008, + ppc_spr_dbsr = 1008, + ppc_spr_hid1 = 1009, + ppc_spr_iabr = 1010, + ppc_spr_dbcr = 1010, + ppc_spr_iac1 = 1012, + ppc_spr_dabr = 1013, + ppc_spr_iac2 = 1013, + ppc_spr_dac1 = 1014, + ppc_spr_dac2 = 1015, + ppc_spr_l2cr = 1017, + ppc_spr_dccr = 1018, + ppc_spr_ictc = 1019, + ppc_spr_iccr = 1019, + ppc_spr_thrm1 = 1020, + ppc_spr_pbl1 = 1020, + ppc_spr_thrm2 = 1021, + ppc_spr_pbu1 = 1021, + ppc_spr_thrm3 = 1022, + ppc_spr_pbl2 = 1022, + ppc_spr_fpecr = 1022, + ppc_spr_lt = 1022, + ppc_spr_pir = 1023, + ppc_spr_pbu2 = 1023 + }; + +#endif diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c new file mode 100644 index 00000000000..61e2ef1794f --- /dev/null +++ b/gdb/rs6000-tdep.c @@ -0,0 +1,3355 @@ +/* Target-dependent code for GDB, the GNU debugger. + + Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, + 1997, 1998, 1999, 2000, 2001, 2002, 2003, 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 "frame.h" +#include "inferior.h" +#include "symtab.h" +#include "target.h" +#include "gdbcore.h" +#include "gdbcmd.h" +#include "objfiles.h" +#include "arch-utils.h" +#include "regcache.h" +#include "regset.h" +#include "doublest.h" +#include "value.h" +#include "parser-defs.h" +#include "osabi.h" +#include "infcall.h" +#include "sim-regno.h" +#include "gdb/sim-ppc.h" +#include "reggroups.h" + +#include "libbfd.h" /* for bfd_default_set_arch_mach */ +#include "coff/internal.h" /* for libcoff.h */ +#include "libcoff.h" /* for xcoff_data */ +#include "coff/xcoff.h" +#include "libxcoff.h" + +#include "elf-bfd.h" + +#include "solib-svr4.h" +#include "ppc-tdep.h" + +#include "gdb_assert.h" +#include "dis-asm.h" + +#include "trad-frame.h" +#include "frame-unwind.h" +#include "frame-base.h" + +/* If the kernel has to deliver a signal, it pushes a sigcontext + structure on the stack and then calls the signal handler, passing + the address of the sigcontext in an argument register. Usually + the signal handler doesn't save this register, so we have to + access the sigcontext structure via an offset from the signal handler + frame. + The following constants were determined by experimentation on AIX 3.2. */ +#define SIG_FRAME_PC_OFFSET 96 +#define SIG_FRAME_LR_OFFSET 108 +#define SIG_FRAME_FP_OFFSET 284 + +/* To be used by skip_prologue. */ + +struct rs6000_framedata + { + int offset; /* total size of frame --- the distance + by which we decrement sp to allocate + the frame */ + int saved_gpr; /* smallest # of saved gpr */ + int saved_fpr; /* smallest # of saved fpr */ + int saved_vr; /* smallest # of saved vr */ + int saved_ev; /* smallest # of saved ev */ + int alloca_reg; /* alloca register number (frame ptr) */ + char frameless; /* true if frameless functions. */ + char nosavedpc; /* true if pc not saved. */ + int gpr_offset; /* offset of saved gprs from prev sp */ + int fpr_offset; /* offset of saved fprs from prev sp */ + int vr_offset; /* offset of saved vrs from prev sp */ + int ev_offset; /* offset of saved evs from prev sp */ + int lr_offset; /* offset of saved lr */ + int cr_offset; /* offset of saved cr */ + int vrsave_offset; /* offset of saved vrsave register */ + }; + +/* Description of a single register. */ + +struct reg + { + char *name; /* name of register */ + unsigned char sz32; /* size on 32-bit arch, 0 if nonextant */ + unsigned char sz64; /* size on 64-bit arch, 0 if nonextant */ + unsigned char fpr; /* whether register is floating-point */ + unsigned char pseudo; /* whether register is pseudo */ + int spr_num; /* PowerPC SPR number, or -1 if not an SPR. + This is an ISA SPR number, not a GDB + register number. */ + }; + +/* Breakpoint shadows for the single step instructions will be kept here. */ + +static struct sstep_breaks + { + /* Address, or 0 if this is not in use. */ + CORE_ADDR address; + /* Shadow contents. */ + char data[4]; + } +stepBreaks[2]; + +/* Hook for determining the TOC address when calling functions in the + inferior under AIX. The initialization code in rs6000-nat.c sets + this hook to point to find_toc_address. */ + +CORE_ADDR (*rs6000_find_toc_address_hook) (CORE_ADDR) = NULL; + +/* Hook to set the current architecture when starting a child process. + rs6000-nat.c sets this. */ + +void (*rs6000_set_host_arch_hook) (int) = NULL; + +/* Static function prototypes */ + +static CORE_ADDR branch_dest (int opcode, int instr, CORE_ADDR pc, + CORE_ADDR safety); +static CORE_ADDR skip_prologue (CORE_ADDR, CORE_ADDR, + struct rs6000_framedata *); + +/* Is REGNO an AltiVec register? Return 1 if so, 0 otherwise. */ +int +altivec_register_p (int regno) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + if (tdep->ppc_vr0_regnum < 0 || tdep->ppc_vrsave_regnum < 0) + return 0; + else + return (regno >= tdep->ppc_vr0_regnum && regno <= tdep->ppc_vrsave_regnum); +} + + +/* Return true if REGNO is an SPE register, false otherwise. */ +int +spe_register_p (int regno) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + + /* Is it a reference to EV0 -- EV31, and do we have those? */ + if (tdep->ppc_ev0_regnum >= 0 + && tdep->ppc_ev31_regnum >= 0 + && tdep->ppc_ev0_regnum <= regno && regno <= tdep->ppc_ev31_regnum) + return 1; + + /* Is it a reference to one of the raw upper GPR halves? */ + if (tdep->ppc_ev0_upper_regnum >= 0 + && tdep->ppc_ev0_upper_regnum <= regno + && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs) + return 1; + + /* Is it a reference to the 64-bit accumulator, and do we have that? */ + if (tdep->ppc_acc_regnum >= 0 + && tdep->ppc_acc_regnum == regno) + return 1; + + /* Is it a reference to the SPE floating-point status and control register, + and do we have that? */ + if (tdep->ppc_spefscr_regnum >= 0 + && tdep->ppc_spefscr_regnum == regno) + return 1; + + return 0; +} + + +/* Return non-zero if the architecture described by GDBARCH has + floating-point registers (f0 --- f31 and fpscr). */ +int +ppc_floating_point_unit_p (struct gdbarch *gdbarch) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + return (tdep->ppc_fp0_regnum >= 0 + && tdep->ppc_fpscr_regnum >= 0); +} + + +/* Check that TABLE[GDB_REGNO] is not already initialized, and then + set it to SIM_REGNO. + + This is a helper function for init_sim_regno_table, constructing + the table mapping GDB register numbers to sim register numbers; we + initialize every element in that table to -1 before we start + filling it in. */ +static void +set_sim_regno (int *table, int gdb_regno, int sim_regno) +{ + /* Make sure we don't try to assign any given GDB register a sim + register number more than once. */ + gdb_assert (table[gdb_regno] == -1); + table[gdb_regno] = sim_regno; +} + + +/* Initialize ARCH->tdep->sim_regno, the table mapping GDB register + numbers to simulator register numbers, based on the values placed + in the ARCH->tdep->ppc_foo_regnum members. */ +static void +init_sim_regno_table (struct gdbarch *arch) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (arch); + int total_regs = gdbarch_num_regs (arch) + gdbarch_num_pseudo_regs (arch); + const struct reg *regs = tdep->regs; + int *sim_regno = GDBARCH_OBSTACK_CALLOC (arch, total_regs, int); + int i; + + /* Presume that all registers not explicitly mentioned below are + unavailable from the sim. */ + for (i = 0; i < total_regs; i++) + sim_regno[i] = -1; + + /* General-purpose registers. */ + for (i = 0; i < ppc_num_gprs; i++) + set_sim_regno (sim_regno, tdep->ppc_gp0_regnum + i, sim_ppc_r0_regnum + i); + + /* Floating-point registers. */ + if (tdep->ppc_fp0_regnum >= 0) + for (i = 0; i < ppc_num_fprs; i++) + set_sim_regno (sim_regno, + tdep->ppc_fp0_regnum + i, + sim_ppc_f0_regnum + i); + if (tdep->ppc_fpscr_regnum >= 0) + set_sim_regno (sim_regno, tdep->ppc_fpscr_regnum, sim_ppc_fpscr_regnum); + + set_sim_regno (sim_regno, gdbarch_pc_regnum (arch), sim_ppc_pc_regnum); + set_sim_regno (sim_regno, tdep->ppc_ps_regnum, sim_ppc_ps_regnum); + set_sim_regno (sim_regno, tdep->ppc_cr_regnum, sim_ppc_cr_regnum); + + /* Segment registers. */ + if (tdep->ppc_sr0_regnum >= 0) + for (i = 0; i < ppc_num_srs; i++) + set_sim_regno (sim_regno, + tdep->ppc_sr0_regnum + i, + sim_ppc_sr0_regnum + i); + + /* Altivec registers. */ + if (tdep->ppc_vr0_regnum >= 0) + { + for (i = 0; i < ppc_num_vrs; i++) + set_sim_regno (sim_regno, + tdep->ppc_vr0_regnum + i, + sim_ppc_vr0_regnum + i); + + /* FIXME: jimb/2004-07-15: when we have tdep->ppc_vscr_regnum, + we can treat this more like the other cases. */ + set_sim_regno (sim_regno, + tdep->ppc_vr0_regnum + ppc_num_vrs, + sim_ppc_vscr_regnum); + } + /* vsave is a special-purpose register, so the code below handles it. */ + + /* SPE APU (E500) registers. */ + if (tdep->ppc_ev0_regnum >= 0) + for (i = 0; i < ppc_num_gprs; i++) + set_sim_regno (sim_regno, + tdep->ppc_ev0_regnum + i, + sim_ppc_ev0_regnum + i); + if (tdep->ppc_ev0_upper_regnum >= 0) + for (i = 0; i < ppc_num_gprs; i++) + set_sim_regno (sim_regno, + tdep->ppc_ev0_upper_regnum + i, + sim_ppc_rh0_regnum + i); + if (tdep->ppc_acc_regnum >= 0) + set_sim_regno (sim_regno, tdep->ppc_acc_regnum, sim_ppc_acc_regnum); + /* spefscr is a special-purpose register, so the code below handles it. */ + + /* Now handle all special-purpose registers. Verify that they + haven't mistakenly been assigned numbers by any of the above + code). */ + for (i = 0; i < total_regs; i++) + if (regs[i].spr_num >= 0) + set_sim_regno (sim_regno, i, regs[i].spr_num + sim_ppc_spr0_regnum); + + /* Drop the initialized array into place. */ + tdep->sim_regno = sim_regno; +} + + +/* Given a GDB register number REG, return the corresponding SIM + register number. */ +static int +rs6000_register_sim_regno (int reg) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + int sim_regno; + + gdb_assert (0 <= reg && reg <= NUM_REGS + NUM_PSEUDO_REGS); + sim_regno = tdep->sim_regno[reg]; + + if (sim_regno >= 0) + return sim_regno; + else + return LEGACY_SIM_REGNO_IGNORE; +} + + + +/* Register set support functions. */ + +static void +ppc_supply_reg (struct regcache *regcache, int regnum, + const char *regs, size_t offset) +{ + if (regnum != -1 && offset != -1) + regcache_raw_supply (regcache, regnum, regs + offset); +} + +static void +ppc_collect_reg (const struct regcache *regcache, int regnum, + char *regs, size_t offset) +{ + if (regnum != -1 && offset != -1) + regcache_raw_collect (regcache, regnum, regs + offset); +} + +/* Supply register REGNUM in the general-purpose register set REGSET + from the buffer specified by GREGS and LEN to register cache + REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */ + +void +ppc_supply_gregset (const struct regset *regset, struct regcache *regcache, + int regnum, const void *gregs, size_t len) +{ + struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + const struct ppc_reg_offsets *offsets = regset->descr; + size_t offset; + int i; + + for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset; + i < tdep->ppc_gp0_regnum + ppc_num_gprs; + i++, offset += 4) + { + if (regnum == -1 || regnum == i) + ppc_supply_reg (regcache, i, gregs, offset); + } + + if (regnum == -1 || regnum == PC_REGNUM) + ppc_supply_reg (regcache, PC_REGNUM, gregs, offsets->pc_offset); + if (regnum == -1 || regnum == tdep->ppc_ps_regnum) + ppc_supply_reg (regcache, tdep->ppc_ps_regnum, + gregs, offsets->ps_offset); + if (regnum == -1 || regnum == tdep->ppc_cr_regnum) + ppc_supply_reg (regcache, tdep->ppc_cr_regnum, + gregs, offsets->cr_offset); + if (regnum == -1 || regnum == tdep->ppc_lr_regnum) + ppc_supply_reg (regcache, tdep->ppc_lr_regnum, + gregs, offsets->lr_offset); + if (regnum == -1 || regnum == tdep->ppc_ctr_regnum) + ppc_supply_reg (regcache, tdep->ppc_ctr_regnum, + gregs, offsets->ctr_offset); + if (regnum == -1 || regnum == tdep->ppc_xer_regnum) + ppc_supply_reg (regcache, tdep->ppc_xer_regnum, + gregs, offsets->cr_offset); + if (regnum == -1 || regnum == tdep->ppc_mq_regnum) + ppc_supply_reg (regcache, tdep->ppc_mq_regnum, gregs, offsets->mq_offset); +} + +/* Supply register REGNUM in the floating-point register set REGSET + from the buffer specified by FPREGS and LEN to register cache + REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */ + +void +ppc_supply_fpregset (const struct regset *regset, struct regcache *regcache, + int regnum, const void *fpregs, size_t len) +{ + struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + const struct ppc_reg_offsets *offsets = regset->descr; + size_t offset; + int i; + + gdb_assert (ppc_floating_point_unit_p (gdbarch)); + + offset = offsets->f0_offset; + for (i = tdep->ppc_fp0_regnum; + i < tdep->ppc_fp0_regnum + ppc_num_fprs; + i++, offset += 4) + { + if (regnum == -1 || regnum == i) + ppc_supply_reg (regcache, i, fpregs, offset); + } + + if (regnum == -1 || regnum == tdep->ppc_fpscr_regnum) + ppc_supply_reg (regcache, tdep->ppc_fpscr_regnum, + fpregs, offsets->fpscr_offset); +} + +/* Collect register REGNUM in the general-purpose register set + REGSET. from register cache REGCACHE into the buffer specified by + GREGS and LEN. If REGNUM is -1, do this for all registers in + REGSET. */ + +void +ppc_collect_gregset (const struct regset *regset, + const struct regcache *regcache, + int regnum, void *gregs, size_t len) +{ + struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + const struct ppc_reg_offsets *offsets = regset->descr; + size_t offset; + int i; + + offset = offsets->r0_offset; + for (i = tdep->ppc_gp0_regnum; + i < tdep->ppc_gp0_regnum + ppc_num_gprs; + i++, offset += 4) + { + if (regnum == -1 || regnum == i) + ppc_collect_reg (regcache, i, gregs, offset); + } + + if (regnum == -1 || regnum == PC_REGNUM) + ppc_collect_reg (regcache, PC_REGNUM, gregs, offsets->pc_offset); + if (regnum == -1 || regnum == tdep->ppc_ps_regnum) + ppc_collect_reg (regcache, tdep->ppc_ps_regnum, + gregs, offsets->ps_offset); + if (regnum == -1 || regnum == tdep->ppc_cr_regnum) + ppc_collect_reg (regcache, tdep->ppc_cr_regnum, + gregs, offsets->cr_offset); + if (regnum == -1 || regnum == tdep->ppc_lr_regnum) + ppc_collect_reg (regcache, tdep->ppc_lr_regnum, + gregs, offsets->lr_offset); + if (regnum == -1 || regnum == tdep->ppc_ctr_regnum) + ppc_collect_reg (regcache, tdep->ppc_ctr_regnum, + gregs, offsets->ctr_offset); + if (regnum == -1 || regnum == tdep->ppc_xer_regnum) + ppc_collect_reg (regcache, tdep->ppc_xer_regnum, + gregs, offsets->xer_offset); + if (regnum == -1 || regnum == tdep->ppc_mq_regnum) + ppc_collect_reg (regcache, tdep->ppc_mq_regnum, + gregs, offsets->mq_offset); +} + +/* Collect register REGNUM in the floating-point register set + REGSET. from register cache REGCACHE into the buffer specified by + FPREGS and LEN. If REGNUM is -1, do this for all registers in + REGSET. */ + +void +ppc_collect_fpregset (const struct regset *regset, + const struct regcache *regcache, + int regnum, void *fpregs, size_t len) +{ + struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + const struct ppc_reg_offsets *offsets = regset->descr; + size_t offset; + int i; + + gdb_assert (ppc_floating_point_unit_p (gdbarch)); + + offset = offsets->f0_offset; + for (i = tdep->ppc_fp0_regnum; + i <= tdep->ppc_fp0_regnum + ppc_num_fprs; + i++, offset += 4) + { + if (regnum == -1 || regnum == i) + ppc_collect_reg (regcache, regnum, fpregs, offset); + } + + if (regnum == -1 || regnum == tdep->ppc_fpscr_regnum) + ppc_collect_reg (regcache, tdep->ppc_fpscr_regnum, + fpregs, offsets->fpscr_offset); +} + + +/* Read a LEN-byte address from debugged memory address MEMADDR. */ + +static CORE_ADDR +read_memory_addr (CORE_ADDR memaddr, int len) +{ + return read_memory_unsigned_integer (memaddr, len); +} + +static CORE_ADDR +rs6000_skip_prologue (CORE_ADDR pc) +{ + struct rs6000_framedata frame; + pc = skip_prologue (pc, 0, &frame); + return pc; +} + + +/* Fill in fi->saved_regs */ + +struct frame_extra_info +{ + /* Functions calling alloca() change the value of the stack + pointer. We need to use initial stack pointer (which is saved in + r31 by gcc) in such cases. If a compiler emits traceback table, + then we should use the alloca register specified in traceback + table. FIXME. */ + CORE_ADDR initial_sp; /* initial stack pointer. */ +}; + +/* Get the ith function argument for the current function. */ +static CORE_ADDR +rs6000_fetch_pointer_argument (struct frame_info *frame, int argi, + struct type *type) +{ + CORE_ADDR addr; + get_frame_register (frame, 3 + argi, &addr); + return addr; +} + +/* Calculate the destination of a branch/jump. Return -1 if not a branch. */ + +static CORE_ADDR +branch_dest (int opcode, int instr, CORE_ADDR pc, CORE_ADDR safety) +{ + CORE_ADDR dest; + int immediate; + int absolute; + int ext_op; + + absolute = (int) ((instr >> 1) & 1); + + switch (opcode) + { + case 18: + immediate = ((instr & ~3) << 6) >> 6; /* br unconditional */ + if (absolute) + dest = immediate; + else + dest = pc + immediate; + break; + + case 16: + immediate = ((instr & ~3) << 16) >> 16; /* br conditional */ + if (absolute) + dest = immediate; + else + dest = pc + immediate; + break; + + case 19: + ext_op = (instr >> 1) & 0x3ff; + + if (ext_op == 16) /* br conditional register */ + { + dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3; + + /* If we are about to return from a signal handler, dest is + something like 0x3c90. The current frame is a signal handler + caller frame, upon completion of the sigreturn system call + execution will return to the saved PC in the frame. */ + if (dest < TEXT_SEGMENT_BASE) + { + struct frame_info *fi; + + fi = get_current_frame (); + if (fi != NULL) + dest = read_memory_addr (get_frame_base (fi) + SIG_FRAME_PC_OFFSET, + gdbarch_tdep (current_gdbarch)->wordsize); + } + } + + else if (ext_op == 528) /* br cond to count reg */ + { + dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_ctr_regnum) & ~3; + + /* If we are about to execute a system call, dest is something + like 0x22fc or 0x3b00. Upon completion the system call + will return to the address in the link register. */ + if (dest < TEXT_SEGMENT_BASE) + dest = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum) & ~3; + } + else + return -1; + break; + + default: + return -1; + } + return (dest < TEXT_SEGMENT_BASE) ? safety : dest; +} + + +/* Sequence of bytes for breakpoint instruction. */ + +const static unsigned char * +rs6000_breakpoint_from_pc (CORE_ADDR *bp_addr, int *bp_size) +{ + static unsigned char big_breakpoint[] = { 0x7d, 0x82, 0x10, 0x08 }; + static unsigned char little_breakpoint[] = { 0x08, 0x10, 0x82, 0x7d }; + *bp_size = 4; + if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) + return big_breakpoint; + else + return little_breakpoint; +} + + +/* AIX does not support PT_STEP. Simulate it. */ + +void +rs6000_software_single_step (enum target_signal signal, + int insert_breakpoints_p) +{ + CORE_ADDR dummy; + int breakp_sz; + const char *breakp = rs6000_breakpoint_from_pc (&dummy, &breakp_sz); + int ii, insn; + CORE_ADDR loc; + CORE_ADDR breaks[2]; + int opcode; + + if (insert_breakpoints_p) + { + + loc = read_pc (); + + insn = read_memory_integer (loc, 4); + + breaks[0] = loc + breakp_sz; + opcode = insn >> 26; + breaks[1] = branch_dest (opcode, insn, loc, breaks[0]); + + /* Don't put two breakpoints on the same address. */ + if (breaks[1] == breaks[0]) + breaks[1] = -1; + + stepBreaks[1].address = 0; + + for (ii = 0; ii < 2; ++ii) + { + + /* ignore invalid breakpoint. */ + if (breaks[ii] == -1) + continue; + target_insert_breakpoint (breaks[ii], stepBreaks[ii].data); + stepBreaks[ii].address = breaks[ii]; + } + + } + else + { + + /* remove step breakpoints. */ + for (ii = 0; ii < 2; ++ii) + if (stepBreaks[ii].address != 0) + target_remove_breakpoint (stepBreaks[ii].address, + stepBreaks[ii].data); + } + errno = 0; /* FIXME, don't ignore errors! */ + /* What errors? {read,write}_memory call error(). */ +} + + +/* return pc value after skipping a function prologue and also return + information about a function frame. + + in struct rs6000_framedata fdata: + - frameless is TRUE, if function does not have a frame. + - nosavedpc is TRUE, if function does not save %pc value in its frame. + - offset is the initial size of this stack frame --- the amount by + which we decrement the sp to allocate the frame. + - saved_gpr is the number of the first saved gpr. + - saved_fpr is the number of the first saved fpr. + - saved_vr is the number of the first saved vr. + - saved_ev is the number of the first saved ev. + - alloca_reg is the number of the register used for alloca() handling. + Otherwise -1. + - gpr_offset is the offset of the first saved gpr from the previous frame. + - fpr_offset is the offset of the first saved fpr from the previous frame. + - vr_offset is the offset of the first saved vr from the previous frame. + - ev_offset is the offset of the first saved ev from the previous frame. + - lr_offset is the offset of the saved lr + - cr_offset is the offset of the saved cr + - vrsave_offset is the offset of the saved vrsave register + */ + +#define SIGNED_SHORT(x) \ + ((sizeof (short) == 2) \ + ? ((int)(short)(x)) \ + : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000))) + +#define GET_SRC_REG(x) (((x) >> 21) & 0x1f) + +/* Limit the number of skipped non-prologue instructions, as the examining + of the prologue is expensive. */ +static int max_skip_non_prologue_insns = 10; + +/* Given PC representing the starting address of a function, and + LIM_PC which is the (sloppy) limit to which to scan when looking + for a prologue, attempt to further refine this limit by using + the line data in the symbol table. If successful, a better guess + on where the prologue ends is returned, otherwise the previous + value of lim_pc is returned. */ + +/* FIXME: cagney/2004-02-14: This function and logic have largely been + superseded by skip_prologue_using_sal. */ + +static CORE_ADDR +refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc) +{ + struct symtab_and_line prologue_sal; + + prologue_sal = find_pc_line (pc, 0); + if (prologue_sal.line != 0) + { + int i; + CORE_ADDR addr = prologue_sal.end; + + /* Handle the case in which compiler's optimizer/scheduler + has moved instructions into the prologue. We scan ahead + in the function looking for address ranges whose corresponding + line number is less than or equal to the first one that we + found for the function. (It can be less than when the + scheduler puts a body instruction before the first prologue + instruction.) */ + for (i = 2 * max_skip_non_prologue_insns; + i > 0 && (lim_pc == 0 || addr < lim_pc); + i--) + { + struct symtab_and_line sal; + + sal = find_pc_line (addr, 0); + if (sal.line == 0) + break; + if (sal.line <= prologue_sal.line + && sal.symtab == prologue_sal.symtab) + { + prologue_sal = sal; + } + addr = sal.end; + } + + if (lim_pc == 0 || prologue_sal.end < lim_pc) + lim_pc = prologue_sal.end; + } + return lim_pc; +} + +/* Return nonzero if the given instruction OP can be part of the prologue + of a function and saves a parameter on the stack. FRAMEP should be + set if one of the previous instructions in the function has set the + Frame Pointer. */ + +static int +store_param_on_stack_p (unsigned long op, int framep, int *r0_contains_arg) +{ + /* Move parameters from argument registers to temporary register. */ + if ((op & 0xfc0007fe) == 0x7c000378) /* mr(.) Rx,Ry */ + { + /* Rx must be scratch register r0. */ + const int rx_regno = (op >> 16) & 31; + /* Ry: Only r3 - r10 are used for parameter passing. */ + const int ry_regno = GET_SRC_REG (op); + + if (rx_regno == 0 && ry_regno >= 3 && ry_regno <= 10) + { + *r0_contains_arg = 1; + return 1; + } + else + return 0; + } + + /* Save a General Purpose Register on stack. */ + + if ((op & 0xfc1f0003) == 0xf8010000 || /* std Rx,NUM(r1) */ + (op & 0xfc1f0000) == 0xd8010000) /* stfd Rx,NUM(r1) */ + { + /* Rx: Only r3 - r10 are used for parameter passing. */ + const int rx_regno = GET_SRC_REG (op); + + return (rx_regno >= 3 && rx_regno <= 10); + } + + /* Save a General Purpose Register on stack via the Frame Pointer. */ + + if (framep && + ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r31) */ + (op & 0xfc1f0000) == 0x981f0000 || /* stb Rx,NUM(r31) */ + (op & 0xfc1f0000) == 0xd81f0000)) /* stfd Rx,NUM(r31) */ + { + /* Rx: Usually, only r3 - r10 are used for parameter passing. + However, the compiler sometimes uses r0 to hold an argument. */ + const int rx_regno = GET_SRC_REG (op); + + return ((rx_regno >= 3 && rx_regno <= 10) + || (rx_regno == 0 && *r0_contains_arg)); + } + + if ((op & 0xfc1f0000) == 0xfc010000) /* frsp, fp?,NUM(r1) */ + { + /* Only f2 - f8 are used for parameter passing. */ + const int src_regno = GET_SRC_REG (op); + + return (src_regno >= 2 && src_regno <= 8); + } + + if (framep && ((op & 0xfc1f0000) == 0xfc1f0000)) /* frsp, fp?,NUM(r31) */ + { + /* Only f2 - f8 are used for parameter passing. */ + const int src_regno = GET_SRC_REG (op); + + return (src_regno >= 2 && src_regno <= 8); + } + + /* Not an insn that saves a parameter on stack. */ + return 0; +} + +static CORE_ADDR +skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata) +{ + CORE_ADDR orig_pc = pc; + CORE_ADDR last_prologue_pc = pc; + CORE_ADDR li_found_pc = 0; + char buf[4]; + unsigned long op; + long offset = 0; + long vr_saved_offset = 0; + int lr_reg = -1; + int cr_reg = -1; + int vr_reg = -1; + int ev_reg = -1; + long ev_offset = 0; + int vrsave_reg = -1; + int reg; + int framep = 0; + int minimal_toc_loaded = 0; + int prev_insn_was_prologue_insn = 1; + int num_skip_non_prologue_insns = 0; + int r0_contains_arg = 0; + const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (current_gdbarch); + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + + /* Attempt to find the end of the prologue when no limit is specified. + Note that refine_prologue_limit() has been written so that it may + be used to "refine" the limits of non-zero PC values too, but this + is only safe if we 1) trust the line information provided by the + compiler and 2) iterate enough to actually find the end of the + prologue. + + It may become a good idea at some point (for both performance and + accuracy) to unconditionally call refine_prologue_limit(). But, + until we can make a clear determination that this is beneficial, + we'll play it safe and only use it to obtain a limit when none + has been specified. */ + if (lim_pc == 0) + lim_pc = refine_prologue_limit (pc, lim_pc); + + memset (fdata, 0, sizeof (struct rs6000_framedata)); + fdata->saved_gpr = -1; + fdata->saved_fpr = -1; + fdata->saved_vr = -1; + fdata->saved_ev = -1; + fdata->alloca_reg = -1; + fdata->frameless = 1; + fdata->nosavedpc = 1; + + for (;; pc += 4) + { + /* Sometimes it isn't clear if an instruction is a prologue + instruction or not. When we encounter one of these ambiguous + cases, we'll set prev_insn_was_prologue_insn to 0 (false). + Otherwise, we'll assume that it really is a prologue instruction. */ + if (prev_insn_was_prologue_insn) + last_prologue_pc = pc; + + /* Stop scanning if we've hit the limit. */ + if (lim_pc != 0 && pc >= lim_pc) + break; + + prev_insn_was_prologue_insn = 1; + + /* Fetch the instruction and convert it to an integer. */ + if (target_read_memory (pc, buf, 4)) + break; + op = extract_signed_integer (buf, 4); + + if ((op & 0xfc1fffff) == 0x7c0802a6) + { /* mflr Rx */ + /* Since shared library / PIC code, which needs to get its + address at runtime, can appear to save more than one link + register vis: + + *INDENT-OFF* + stwu r1,-304(r1) + mflr r3 + bl 0xff570d0 (blrl) + stw r30,296(r1) + mflr r30 + stw r31,300(r1) + stw r3,308(r1); + ... + *INDENT-ON* + + remember just the first one, but skip over additional + ones. */ + if (lr_reg < 0) + lr_reg = (op & 0x03e00000); + if (lr_reg == 0) + r0_contains_arg = 0; + continue; + } + else if ((op & 0xfc1fffff) == 0x7c000026) + { /* mfcr Rx */ + cr_reg = (op & 0x03e00000); + if (cr_reg == 0) + r0_contains_arg = 0; + continue; + + } + else if ((op & 0xfc1f0000) == 0xd8010000) + { /* stfd Rx,NUM(r1) */ + reg = GET_SRC_REG (op); + if (fdata->saved_fpr == -1 || fdata->saved_fpr > reg) + { + fdata->saved_fpr = reg; + fdata->fpr_offset = SIGNED_SHORT (op) + offset; + } + continue; + + } + else if (((op & 0xfc1f0000) == 0xbc010000) || /* stm Rx, NUM(r1) */ + (((op & 0xfc1f0000) == 0x90010000 || /* st rx,NUM(r1) */ + (op & 0xfc1f0003) == 0xf8010000) && /* std rx,NUM(r1) */ + (op & 0x03e00000) >= 0x01a00000)) /* rx >= r13 */ + { + + reg = GET_SRC_REG (op); + if (fdata->saved_gpr == -1 || fdata->saved_gpr > reg) + { + fdata->saved_gpr = reg; + if ((op & 0xfc1f0003) == 0xf8010000) + op &= ~3UL; + fdata->gpr_offset = SIGNED_SHORT (op) + offset; + } + continue; + + } + else if ((op & 0xffff0000) == 0x60000000) + { + /* nop */ + /* Allow nops in the prologue, but do not consider them to + be part of the prologue unless followed by other prologue + instructions. */ + prev_insn_was_prologue_insn = 0; + continue; + + } + else if ((op & 0xffff0000) == 0x3c000000) + { /* addis 0,0,NUM, used + for >= 32k frames */ + fdata->offset = (op & 0x0000ffff) << 16; + fdata->frameless = 0; + r0_contains_arg = 0; + continue; + + } + else if ((op & 0xffff0000) == 0x60000000) + { /* ori 0,0,NUM, 2nd ha + lf of >= 32k frames */ + fdata->offset |= (op & 0x0000ffff); + fdata->frameless = 0; + r0_contains_arg = 0; + continue; + + } + else if (lr_reg != -1 && + /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */ + (((op & 0xffff0000) == (lr_reg | 0xf8010000)) || + /* stw Rx, NUM(r1) */ + ((op & 0xffff0000) == (lr_reg | 0x90010000)) || + /* stwu Rx, NUM(r1) */ + ((op & 0xffff0000) == (lr_reg | 0x94010000)))) + { /* where Rx == lr */ + fdata->lr_offset = offset; + fdata->nosavedpc = 0; + lr_reg = 0; + if ((op & 0xfc000003) == 0xf8000000 || /* std */ + (op & 0xfc000000) == 0x90000000) /* stw */ + { + /* Does not update r1, so add displacement to lr_offset. */ + fdata->lr_offset += SIGNED_SHORT (op); + } + continue; + + } + else if (cr_reg != -1 && + /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */ + (((op & 0xffff0000) == (cr_reg | 0xf8010000)) || + /* stw Rx, NUM(r1) */ + ((op & 0xffff0000) == (cr_reg | 0x90010000)) || + /* stwu Rx, NUM(r1) */ + ((op & 0xffff0000) == (cr_reg | 0x94010000)))) + { /* where Rx == cr */ + fdata->cr_offset = offset; + cr_reg = 0; + if ((op & 0xfc000003) == 0xf8000000 || + (op & 0xfc000000) == 0x90000000) + { + /* Does not update r1, so add displacement to cr_offset. */ + fdata->cr_offset += SIGNED_SHORT (op); + } + continue; + + } + else if (op == 0x48000005) + { /* bl .+4 used in + -mrelocatable */ + continue; + + } + else if (op == 0x48000004) + { /* b .+4 (xlc) */ + break; + + } + else if ((op & 0xffff0000) == 0x3fc00000 || /* addis 30,0,foo@ha, used + in V.4 -mminimal-toc */ + (op & 0xffff0000) == 0x3bde0000) + { /* addi 30,30,foo@l */ + continue; + + } + else if ((op & 0xfc000001) == 0x48000001) + { /* bl foo, + to save fprs??? */ + + fdata->frameless = 0; + /* Don't skip over the subroutine call if it is not within + the first three instructions of the prologue. */ + if ((pc - orig_pc) > 8) + break; + + op = read_memory_integer (pc + 4, 4); + + /* At this point, make sure this is not a trampoline + function (a function that simply calls another functions, + and nothing else). If the next is not a nop, this branch + was part of the function prologue. */ + + if (op == 0x4def7b82 || op == 0) /* crorc 15, 15, 15 */ + break; /* don't skip over + this branch */ + continue; + + } + /* update stack pointer */ + else if ((op & 0xfc1f0000) == 0x94010000) + { /* stu rX,NUM(r1) || stwu rX,NUM(r1) */ + fdata->frameless = 0; + fdata->offset = SIGNED_SHORT (op); + offset = fdata->offset; + continue; + } + else if ((op & 0xfc1f016a) == 0x7c01016e) + { /* stwux rX,r1,rY */ + /* no way to figure out what r1 is going to be */ + fdata->frameless = 0; + offset = fdata->offset; + continue; + } + else if ((op & 0xfc1f0003) == 0xf8010001) + { /* stdu rX,NUM(r1) */ + fdata->frameless = 0; + fdata->offset = SIGNED_SHORT (op & ~3UL); + offset = fdata->offset; + continue; + } + else if ((op & 0xfc1f016a) == 0x7c01016a) + { /* stdux rX,r1,rY */ + /* no way to figure out what r1 is going to be */ + fdata->frameless = 0; + offset = fdata->offset; + continue; + } + /* Load up minimal toc pointer */ + else if (((op >> 22) == 0x20f || /* l r31,... or l r30,... */ + (op >> 22) == 0x3af) /* ld r31,... or ld r30,... */ + && !minimal_toc_loaded) + { + minimal_toc_loaded = 1; + continue; + + /* move parameters from argument registers to local variable + registers */ + } + else if ((op & 0xfc0007fe) == 0x7c000378 && /* mr(.) Rx,Ry */ + (((op >> 21) & 31) >= 3) && /* R3 >= Ry >= R10 */ + (((op >> 21) & 31) <= 10) && + ((long) ((op >> 16) & 31) >= fdata->saved_gpr)) /* Rx: local var reg */ + { + continue; + + /* store parameters in stack */ + } + /* Move parameters from argument registers to temporary register. */ + else if (store_param_on_stack_p (op, framep, &r0_contains_arg)) + { + continue; + + /* Set up frame pointer */ + } + else if (op == 0x603f0000 /* oril r31, r1, 0x0 */ + || op == 0x7c3f0b78) + { /* mr r31, r1 */ + fdata->frameless = 0; + framep = 1; + fdata->alloca_reg = (tdep->ppc_gp0_regnum + 31); + continue; + + /* Another way to set up the frame pointer. */ + } + else if ((op & 0xfc1fffff) == 0x38010000) + { /* addi rX, r1, 0x0 */ + fdata->frameless = 0; + framep = 1; + fdata->alloca_reg = (tdep->ppc_gp0_regnum + + ((op & ~0x38010000) >> 21)); + continue; + } + /* AltiVec related instructions. */ + /* Store the vrsave register (spr 256) in another register for + later manipulation, or load a register into the vrsave + register. 2 instructions are used: mfvrsave and + mtvrsave. They are shorthand notation for mfspr Rn, SPR256 + and mtspr SPR256, Rn. */ + /* mfspr Rn SPR256 == 011111 nnnnn 0000001000 01010100110 + mtspr SPR256 Rn == 011111 nnnnn 0000001000 01110100110 */ + else if ((op & 0xfc1fffff) == 0x7c0042a6) /* mfvrsave Rn */ + { + vrsave_reg = GET_SRC_REG (op); + continue; + } + else if ((op & 0xfc1fffff) == 0x7c0043a6) /* mtvrsave Rn */ + { + continue; + } + /* Store the register where vrsave was saved to onto the stack: + rS is the register where vrsave was stored in a previous + instruction. */ + /* 100100 sssss 00001 dddddddd dddddddd */ + else if ((op & 0xfc1f0000) == 0x90010000) /* stw rS, d(r1) */ + { + if (vrsave_reg == GET_SRC_REG (op)) + { + fdata->vrsave_offset = SIGNED_SHORT (op) + offset; + vrsave_reg = -1; + } + continue; + } + /* Compute the new value of vrsave, by modifying the register + where vrsave was saved to. */ + else if (((op & 0xfc000000) == 0x64000000) /* oris Ra, Rs, UIMM */ + || ((op & 0xfc000000) == 0x60000000))/* ori Ra, Rs, UIMM */ + { + continue; + } + /* li r0, SIMM (short for addi r0, 0, SIMM). This is the first + in a pair of insns to save the vector registers on the + stack. */ + /* 001110 00000 00000 iiii iiii iiii iiii */ + /* 001110 01110 00000 iiii iiii iiii iiii */ + else if ((op & 0xffff0000) == 0x38000000 /* li r0, SIMM */ + || (op & 0xffff0000) == 0x39c00000) /* li r14, SIMM */ + { + if ((op & 0xffff0000) == 0x38000000) + r0_contains_arg = 0; + li_found_pc = pc; + vr_saved_offset = SIGNED_SHORT (op); + + /* This insn by itself is not part of the prologue, unless + if part of the pair of insns mentioned above. So do not + record this insn as part of the prologue yet. */ + prev_insn_was_prologue_insn = 0; + } + /* Store vector register S at (r31+r0) aligned to 16 bytes. */ + /* 011111 sssss 11111 00000 00111001110 */ + else if ((op & 0xfc1fffff) == 0x7c1f01ce) /* stvx Vs, R31, R0 */ + { + if (pc == (li_found_pc + 4)) + { + vr_reg = GET_SRC_REG (op); + /* If this is the first vector reg to be saved, or if + it has a lower number than others previously seen, + reupdate the frame info. */ + if (fdata->saved_vr == -1 || fdata->saved_vr > vr_reg) + { + fdata->saved_vr = vr_reg; + fdata->vr_offset = vr_saved_offset + offset; + } + vr_saved_offset = -1; + vr_reg = -1; + li_found_pc = 0; + } + } + /* End AltiVec related instructions. */ + + /* Start BookE related instructions. */ + /* Store gen register S at (r31+uimm). + Any register less than r13 is volatile, so we don't care. */ + /* 000100 sssss 11111 iiiii 01100100001 */ + else if (arch_info->mach == bfd_mach_ppc_e500 + && (op & 0xfc1f07ff) == 0x101f0321) /* evstdd Rs,uimm(R31) */ + { + if ((op & 0x03e00000) >= 0x01a00000) /* Rs >= r13 */ + { + unsigned int imm; + ev_reg = GET_SRC_REG (op); + imm = (op >> 11) & 0x1f; + ev_offset = imm * 8; + /* If this is the first vector reg to be saved, or if + it has a lower number than others previously seen, + reupdate the frame info. */ + if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg) + { + fdata->saved_ev = ev_reg; + fdata->ev_offset = ev_offset + offset; + } + } + continue; + } + /* Store gen register rS at (r1+rB). */ + /* 000100 sssss 00001 bbbbb 01100100000 */ + else if (arch_info->mach == bfd_mach_ppc_e500 + && (op & 0xffe007ff) == 0x13e00320) /* evstddx RS,R1,Rb */ + { + if (pc == (li_found_pc + 4)) + { + ev_reg = GET_SRC_REG (op); + /* If this is the first vector reg to be saved, or if + it has a lower number than others previously seen, + reupdate the frame info. */ + /* We know the contents of rB from the previous instruction. */ + if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg) + { + fdata->saved_ev = ev_reg; + fdata->ev_offset = vr_saved_offset + offset; + } + vr_saved_offset = -1; + ev_reg = -1; + li_found_pc = 0; + } + continue; + } + /* Store gen register r31 at (rA+uimm). */ + /* 000100 11111 aaaaa iiiii 01100100001 */ + else if (arch_info->mach == bfd_mach_ppc_e500 + && (op & 0xffe007ff) == 0x13e00321) /* evstdd R31,Ra,UIMM */ + { + /* Wwe know that the source register is 31 already, but + it can't hurt to compute it. */ + ev_reg = GET_SRC_REG (op); + ev_offset = ((op >> 11) & 0x1f) * 8; + /* If this is the first vector reg to be saved, or if + it has a lower number than others previously seen, + reupdate the frame info. */ + if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg) + { + fdata->saved_ev = ev_reg; + fdata->ev_offset = ev_offset + offset; + } + + continue; + } + /* Store gen register S at (r31+r0). + Store param on stack when offset from SP bigger than 4 bytes. */ + /* 000100 sssss 11111 00000 01100100000 */ + else if (arch_info->mach == bfd_mach_ppc_e500 + && (op & 0xfc1fffff) == 0x101f0320) /* evstddx Rs,R31,R0 */ + { + if (pc == (li_found_pc + 4)) + { + if ((op & 0x03e00000) >= 0x01a00000) + { + ev_reg = GET_SRC_REG (op); + /* If this is the first vector reg to be saved, or if + it has a lower number than others previously seen, + reupdate the frame info. */ + /* We know the contents of r0 from the previous + instruction. */ + if (fdata->saved_ev == -1 || fdata->saved_ev > ev_reg) + { + fdata->saved_ev = ev_reg; + fdata->ev_offset = vr_saved_offset + offset; + } + ev_reg = -1; + } + vr_saved_offset = -1; + li_found_pc = 0; + continue; + } + } + /* End BookE related instructions. */ + + else + { + /* Not a recognized prologue instruction. + Handle optimizer code motions into the prologue by continuing + the search if we have no valid frame yet or if the return + address is not yet saved in the frame. */ + if (fdata->frameless == 0 + && (lr_reg == -1 || fdata->nosavedpc == 0)) + break; + + if (op == 0x4e800020 /* blr */ + || op == 0x4e800420) /* bctr */ + /* Do not scan past epilogue in frameless functions or + trampolines. */ + break; + if ((op & 0xf4000000) == 0x40000000) /* bxx */ + /* Never skip branches. */ + break; + + if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns) + /* Do not scan too many insns, scanning insns is expensive with + remote targets. */ + break; + + /* Continue scanning. */ + prev_insn_was_prologue_insn = 0; + continue; + } + } + +#if 0 +/* I have problems with skipping over __main() that I need to address + * sometime. Previously, I used to use misc_function_vector which + * didn't work as well as I wanted to be. -MGO */ + + /* If the first thing after skipping a prolog is a branch to a function, + this might be a call to an initializer in main(), introduced by gcc2. + We'd like to skip over it as well. Fortunately, xlc does some extra + work before calling a function right after a prologue, thus we can + single out such gcc2 behaviour. */ + + + if ((op & 0xfc000001) == 0x48000001) + { /* bl foo, an initializer function? */ + op = read_memory_integer (pc + 4, 4); + + if (op == 0x4def7b82) + { /* cror 0xf, 0xf, 0xf (nop) */ + + /* Check and see if we are in main. If so, skip over this + initializer function as well. */ + + tmp = find_pc_misc_function (pc); + if (tmp >= 0 + && strcmp (misc_function_vector[tmp].name, main_name ()) == 0) + return pc + 8; + } + } +#endif /* 0 */ + + fdata->offset = -fdata->offset; + return last_prologue_pc; +} + + +/************************************************************************* + Support for creating pushing a dummy frame into the stack, and popping + frames, etc. +*************************************************************************/ + + +/* All the ABI's require 16 byte alignment. */ +static CORE_ADDR +rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr) +{ + return (addr & -16); +} + +/* Pass the arguments in either registers, or in the stack. In RS/6000, + the first eight words of the argument list (that might be less than + eight parameters if some parameters occupy more than one word) are + passed in r3..r10 registers. float and double parameters are + passed in fpr's, in addition to that. Rest of the parameters if any + are passed in user stack. There might be cases in which half of the + parameter is copied into registers, the other half is pushed into + stack. + + Stack must be aligned on 64-bit boundaries when synthesizing + function calls. + + If the function is returning a structure, then the return address is passed + in r3, then the first 7 words of the parameters can be passed in registers, + starting from r4. */ + +static CORE_ADDR +rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function, + struct regcache *regcache, CORE_ADDR bp_addr, + int nargs, struct value **args, CORE_ADDR sp, + int struct_return, CORE_ADDR struct_addr) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + int ii; + int len = 0; + int argno; /* current argument number */ + int argbytes; /* current argument byte */ + char tmp_buffer[50]; + int f_argno = 0; /* current floating point argno */ + int wordsize = gdbarch_tdep (current_gdbarch)->wordsize; + CORE_ADDR func_addr = find_function_addr (function, NULL); + + struct value *arg = 0; + struct type *type; + + CORE_ADDR saved_sp; + + /* The calling convention this function implements assumes the + processor has floating-point registers. We shouldn't be using it + on PPC variants that lack them. */ + gdb_assert (ppc_floating_point_unit_p (current_gdbarch)); + + /* The first eight words of ther arguments are passed in registers. + Copy them appropriately. */ + ii = 0; + + /* If the function is returning a `struct', then the first word + (which will be passed in r3) is used for struct return address. + In that case we should advance one word and start from r4 + register to copy parameters. */ + if (struct_return) + { + regcache_raw_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3, + struct_addr); + ii++; + } + +/* + effectively indirect call... gcc does... + + return_val example( float, int); + + eabi: + float in fp0, int in r3 + offset of stack on overflow 8/16 + for varargs, must go by type. + power open: + float in r3&r4, int in r5 + offset of stack on overflow different + both: + return in r3 or f0. If no float, must study how gcc emulates floats; + pay attention to arg promotion. + User may have to cast\args to handle promotion correctly + since gdb won't know if prototype supplied or not. + */ + + for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii) + { + int reg_size = register_size (current_gdbarch, ii + 3); + + arg = args[argno]; + type = check_typedef (VALUE_TYPE (arg)); + len = TYPE_LENGTH (type); + + if (TYPE_CODE (type) == TYPE_CODE_FLT) + { + + /* Floating point arguments are passed in fpr's, as well as gpr's. + There are 13 fpr's reserved for passing parameters. At this point + there is no way we would run out of them. */ + + if (len > 8) + printf_unfiltered ("Fatal Error: a floating point parameter " + "#%d with a size > 8 is found!\n", argno); + + memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE + (tdep->ppc_fp0_regnum + 1 + f_argno)], + VALUE_CONTENTS (arg), + len); + ++f_argno; + } + + if (len > reg_size) + { + + /* Argument takes more than one register. */ + while (argbytes < len) + { + memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0, + reg_size); + memcpy (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], + ((char *) VALUE_CONTENTS (arg)) + argbytes, + (len - argbytes) > reg_size + ? reg_size : len - argbytes); + ++ii, argbytes += reg_size; + + if (ii >= 8) + goto ran_out_of_registers_for_arguments; + } + argbytes = 0; + --ii; + } + else + { + /* Argument can fit in one register. No problem. */ + int adj = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? reg_size - len : 0; + memset (&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)], 0, reg_size); + memcpy ((char *)&deprecated_registers[DEPRECATED_REGISTER_BYTE (ii + 3)] + adj, + VALUE_CONTENTS (arg), len); + } + ++argno; + } + +ran_out_of_registers_for_arguments: + + saved_sp = read_sp (); + + /* Location for 8 parameters are always reserved. */ + sp -= wordsize * 8; + + /* Another six words for back chain, TOC register, link register, etc. */ + sp -= wordsize * 6; + + /* Stack pointer must be quadword aligned. */ + sp &= -16; + + /* If there are more arguments, allocate space for them in + the stack, then push them starting from the ninth one. */ + + if ((argno < nargs) || argbytes) + { + int space = 0, jj; + + if (argbytes) + { + space += ((len - argbytes + 3) & -4); + jj = argno + 1; + } + else + jj = argno; + + for (; jj < nargs; ++jj) + { + struct value *val = args[jj]; + space += ((TYPE_LENGTH (VALUE_TYPE (val))) + 3) & -4; + } + + /* Add location required for the rest of the parameters. */ + space = (space + 15) & -16; + sp -= space; + + /* This is another instance we need to be concerned about + securing our stack space. If we write anything underneath %sp + (r1), we might conflict with the kernel who thinks he is free + to use this area. So, update %sp first before doing anything + else. */ + + regcache_raw_write_signed (regcache, SP_REGNUM, sp); + + /* If the last argument copied into the registers didn't fit there + completely, push the rest of it into stack. */ + + if (argbytes) + { + write_memory (sp + 24 + (ii * 4), + ((char *) VALUE_CONTENTS (arg)) + argbytes, + len - argbytes); + ++argno; + ii += ((len - argbytes + 3) & -4) / 4; + } + + /* Push the rest of the arguments into stack. */ + for (; argno < nargs; ++argno) + { + + arg = args[argno]; + type = check_typedef (VALUE_TYPE (arg)); + len = TYPE_LENGTH (type); + + + /* Float types should be passed in fpr's, as well as in the + stack. */ + if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13) + { + + if (len > 8) + printf_unfiltered ("Fatal Error: a floating point parameter" + " #%d with a size > 8 is found!\n", argno); + + memcpy (&(deprecated_registers + [DEPRECATED_REGISTER_BYTE + (tdep->ppc_fp0_regnum + 1 + f_argno)]), + VALUE_CONTENTS (arg), + len); + ++f_argno; + } + + write_memory (sp + 24 + (ii * 4), + (char *) VALUE_CONTENTS (arg), + len); + ii += ((len + 3) & -4) / 4; + } + } + + /* Set the stack pointer. According to the ABI, the SP is meant to + be set _before_ the corresponding stack space is used. On AIX, + this even applies when the target has been completely stopped! + Not doing this can lead to conflicts with the kernel which thinks + that it still has control over this not-yet-allocated stack + region. */ + regcache_raw_write_signed (regcache, SP_REGNUM, sp); + + /* Set back chain properly. */ + store_unsigned_integer (tmp_buffer, 4, saved_sp); + write_memory (sp, tmp_buffer, 4); + + /* Point the inferior function call's return address at the dummy's + breakpoint. */ + regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr); + + /* Set the TOC register, get the value from the objfile reader + which, in turn, gets it from the VMAP table. */ + if (rs6000_find_toc_address_hook != NULL) + { + CORE_ADDR tocvalue = (*rs6000_find_toc_address_hook) (func_addr); + regcache_raw_write_signed (regcache, tdep->ppc_toc_regnum, tocvalue); + } + + target_store_registers (-1); + return sp; +} + +/* PowerOpen always puts structures in memory. Vectors, which were + added later, do get returned in a register though. */ + +static int +rs6000_use_struct_convention (int gcc_p, struct type *value_type) +{ + if ((TYPE_LENGTH (value_type) == 16 || TYPE_LENGTH (value_type) == 8) + && TYPE_VECTOR (value_type)) + return 0; + return 1; +} + +static void +rs6000_extract_return_value (struct type *valtype, char *regbuf, char *valbuf) +{ + int offset = 0; + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + + /* The calling convention this function implements assumes the + processor has floating-point registers. We shouldn't be using it + on PPC variants that lack them. */ + gdb_assert (ppc_floating_point_unit_p (current_gdbarch)); + + if (TYPE_CODE (valtype) == TYPE_CODE_FLT) + { + + /* floats and doubles are returned in fpr1. fpr's have a size of 8 bytes. + We need to truncate the return value into float size (4 byte) if + necessary. */ + + convert_typed_floating (®buf[DEPRECATED_REGISTER_BYTE + (tdep->ppc_fp0_regnum + 1)], + builtin_type_double, + valbuf, + valtype); + } + else if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY + && TYPE_LENGTH (valtype) == 16 + && TYPE_VECTOR (valtype)) + { + memcpy (valbuf, regbuf + DEPRECATED_REGISTER_BYTE (tdep->ppc_vr0_regnum + 2), + TYPE_LENGTH (valtype)); + } + else + { + /* return value is copied starting from r3. */ + if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG + && TYPE_LENGTH (valtype) < register_size (current_gdbarch, 3)) + offset = register_size (current_gdbarch, 3) - TYPE_LENGTH (valtype); + + memcpy (valbuf, + regbuf + DEPRECATED_REGISTER_BYTE (3) + offset, + TYPE_LENGTH (valtype)); + } +} + +/* Return whether handle_inferior_event() should proceed through code + starting at PC in function NAME when stepping. + + The AIX -bbigtoc linker option generates functions @FIX0, @FIX1, etc. to + handle memory references that are too distant to fit in instructions + generated by the compiler. For example, if 'foo' in the following + instruction: + + lwz r9,foo(r2) + + is greater than 32767, the linker might replace the lwz with a branch to + somewhere in @FIX1 that does the load in 2 instructions and then branches + back to where execution should continue. + + GDB should silently step over @FIX code, just like AIX dbx does. + Unfortunately, the linker uses the "b" instruction for the branches, + meaning that the link register doesn't get set. Therefore, GDB's usual + step_over_function() mechanism won't work. + + Instead, use the IN_SOLIB_RETURN_TRAMPOLINE and SKIP_TRAMPOLINE_CODE hooks + in handle_inferior_event() to skip past @FIX code. */ + +int +rs6000_in_solib_return_trampoline (CORE_ADDR pc, char *name) +{ + return name && !strncmp (name, "@FIX", 4); +} + +/* Skip code that the user doesn't want to see when stepping: + + 1. Indirect function calls use a piece of trampoline code to do context + switching, i.e. to set the new TOC table. Skip such code if we are on + its first instruction (as when we have single-stepped to here). + + 2. Skip shared library trampoline code (which is different from + indirect function call trampolines). + + 3. Skip bigtoc fixup code. + + Result is desired PC to step until, or NULL if we are not in + code that should be skipped. */ + +CORE_ADDR +rs6000_skip_trampoline_code (CORE_ADDR pc) +{ + unsigned int ii, op; + int rel; + CORE_ADDR solib_target_pc; + struct minimal_symbol *msymbol; + + static unsigned trampoline_code[] = + { + 0x800b0000, /* l r0,0x0(r11) */ + 0x90410014, /* st r2,0x14(r1) */ + 0x7c0903a6, /* mtctr r0 */ + 0x804b0004, /* l r2,0x4(r11) */ + 0x816b0008, /* l r11,0x8(r11) */ + 0x4e800420, /* bctr */ + 0x4e800020, /* br */ + 0 + }; + + /* Check for bigtoc fixup code. */ + msymbol = lookup_minimal_symbol_by_pc (pc); + if (msymbol && rs6000_in_solib_return_trampoline (pc, DEPRECATED_SYMBOL_NAME (msymbol))) + { + /* Double-check that the third instruction from PC is relative "b". */ + op = read_memory_integer (pc + 8, 4); + if ((op & 0xfc000003) == 0x48000000) + { + /* Extract bits 6-29 as a signed 24-bit relative word address and + add it to the containing PC. */ + rel = ((int)(op << 6) >> 6); + return pc + 8 + rel; + } + } + + /* If pc is in a shared library trampoline, return its target. */ + solib_target_pc = find_solib_trampoline_target (pc); + if (solib_target_pc) + return solib_target_pc; + + for (ii = 0; trampoline_code[ii]; ++ii) + { + op = read_memory_integer (pc + (ii * 4), 4); + if (op != trampoline_code[ii]) + return 0; + } + ii = read_register (11); /* r11 holds destination addr */ + pc = read_memory_addr (ii, gdbarch_tdep (current_gdbarch)->wordsize); /* (r11) value */ + return pc; +} + +/* Return the size of register REG when words are WORDSIZE bytes long. If REG + isn't available with that word size, return 0. */ + +static int +regsize (const struct reg *reg, int wordsize) +{ + return wordsize == 8 ? reg->sz64 : reg->sz32; +} + +/* Return the name of register number N, or null if no such register exists + in the current architecture. */ + +static const char * +rs6000_register_name (int n) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + const struct reg *reg = tdep->regs + n; + + if (!regsize (reg, tdep->wordsize)) + return NULL; + return reg->name; +} + +/* Return the GDB type object for the "standard" data type + of data in register N. */ + +static struct type * +rs6000_register_type (struct gdbarch *gdbarch, int n) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + const struct reg *reg = tdep->regs + n; + + if (reg->fpr) + return builtin_type_double; + else + { + int size = regsize (reg, tdep->wordsize); + switch (size) + { + case 0: + return builtin_type_int0; + case 4: + return builtin_type_uint32; + case 8: + if (tdep->ppc_ev0_regnum <= n && n <= tdep->ppc_ev31_regnum) + return builtin_type_vec64; + else + return builtin_type_uint64; + break; + case 16: + return builtin_type_vec128; + break; + default: + internal_error (__FILE__, __LINE__, "Register %d size %d unknown", + n, size); + } + } +} + +/* The register format for RS/6000 floating point registers is always + double, we need a conversion if the memory format is float. */ + +static int +rs6000_convert_register_p (int regnum, struct type *type) +{ + const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + regnum; + + return (reg->fpr + && TYPE_CODE (type) == TYPE_CODE_FLT + && TYPE_LENGTH (type) != TYPE_LENGTH (builtin_type_double)); +} + +static void +rs6000_register_to_value (struct frame_info *frame, + int regnum, + struct type *type, + void *to) +{ + const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + regnum; + char from[MAX_REGISTER_SIZE]; + + gdb_assert (reg->fpr); + gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); + + get_frame_register (frame, regnum, from); + convert_typed_floating (from, builtin_type_double, to, type); +} + +static void +rs6000_value_to_register (struct frame_info *frame, + int regnum, + struct type *type, + const void *from) +{ + const struct reg *reg = gdbarch_tdep (current_gdbarch)->regs + regnum; + char to[MAX_REGISTER_SIZE]; + + gdb_assert (reg->fpr); + gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); + + convert_typed_floating (from, type, to, builtin_type_double); + put_frame_register (frame, regnum, to); +} + +/* Move SPE vector register values between a 64-bit buffer and the two + 32-bit raw register halves in a regcache. This function handles + both splitting a 64-bit value into two 32-bit halves, and joining + two halves into a whole 64-bit value, depending on the function + passed as the MOVE argument. + + EV_REG must be the number of an SPE evN vector register --- a + pseudoregister. REGCACHE must be a regcache, and BUFFER must be a + 64-bit buffer. + + Call MOVE once for each 32-bit half of that register, passing + REGCACHE, the number of the raw register corresponding to that + half, and the address of the appropriate half of BUFFER. + + For example, passing 'regcache_raw_read' as the MOVE function will + fill BUFFER with the full 64-bit contents of EV_REG. Or, passing + 'regcache_raw_supply' will supply the contents of BUFFER to the + appropriate pair of raw registers in REGCACHE. + + You may need to cast away some 'const' qualifiers when passing + MOVE, since this function can't tell at compile-time which of + REGCACHE or BUFFER is acting as the source of the data. If C had + co-variant type qualifiers, ... */ +static void +e500_move_ev_register (void (*move) (struct regcache *regcache, + int regnum, void *buf), + struct regcache *regcache, int ev_reg, + void *buffer) +{ + struct gdbarch *arch = get_regcache_arch (regcache); + struct gdbarch_tdep *tdep = gdbarch_tdep (arch); + int reg_index; + char *byte_buffer = buffer; + + gdb_assert (tdep->ppc_ev0_regnum <= ev_reg + && ev_reg < tdep->ppc_ev0_regnum + ppc_num_gprs); + + reg_index = ev_reg - tdep->ppc_ev0_regnum; + + if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) + { + move (regcache, tdep->ppc_ev0_upper_regnum + reg_index, byte_buffer); + move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer + 4); + } + else + { + move (regcache, tdep->ppc_gp0_regnum + reg_index, byte_buffer); + move (regcache, tdep->ppc_ev0_upper_regnum + reg_index, byte_buffer + 4); + } +} + +static void +e500_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, + int reg_nr, void *buffer) +{ + struct gdbarch *regcache_arch = get_regcache_arch (regcache); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + gdb_assert (regcache_arch == gdbarch); + + if (tdep->ppc_ev0_regnum <= reg_nr + && reg_nr < tdep->ppc_ev0_regnum + ppc_num_gprs) + e500_move_ev_register (regcache_raw_read, regcache, reg_nr, buffer); + else + internal_error (__FILE__, __LINE__, + "e500_pseudo_register_read: " + "called on unexpected register '%s' (%d)", + gdbarch_register_name (gdbarch, reg_nr), reg_nr); +} + +static void +e500_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, + int reg_nr, const void *buffer) +{ + struct gdbarch *regcache_arch = get_regcache_arch (regcache); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + gdb_assert (regcache_arch == gdbarch); + + if (tdep->ppc_ev0_regnum <= reg_nr + && reg_nr < tdep->ppc_ev0_regnum + ppc_num_gprs) + e500_move_ev_register ((void (*) (struct regcache *, int, void *)) + regcache_raw_write, + regcache, reg_nr, (void *) buffer); + else + internal_error (__FILE__, __LINE__, + "e500_pseudo_register_read: " + "called on unexpected register '%s' (%d)", + gdbarch_register_name (gdbarch, reg_nr), reg_nr); +} + +/* The E500 needs a custom reggroup function: it has anonymous raw + registers, and default_register_reggroup_p assumes that anonymous + registers are not members of any reggroup. */ +static int +e500_register_reggroup_p (struct gdbarch *gdbarch, + int regnum, + struct reggroup *group) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + /* The save and restore register groups need to include the + upper-half registers, even though they're anonymous. */ + if ((group == save_reggroup + || group == restore_reggroup) + && (tdep->ppc_ev0_upper_regnum <= regnum + && regnum < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)) + return 1; + + /* In all other regards, the default reggroup definition is fine. */ + return default_register_reggroup_p (gdbarch, regnum, group); +} + +/* Convert a DBX STABS register number to a GDB register number. */ +static int +rs6000_stab_reg_to_regnum (int num) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + + if (0 <= num && num <= 31) + return tdep->ppc_gp0_regnum + num; + else if (32 <= num && num <= 63) + /* FIXME: jimb/2004-05-05: What should we do when the debug info + specifies registers the architecture doesn't have? Our + callers don't check the value we return. */ + return tdep->ppc_fp0_regnum + (num - 32); + else if (77 <= num && num <= 108) + return tdep->ppc_vr0_regnum + (num - 77); + else if (1200 <= num && num < 1200 + 32) + return tdep->ppc_ev0_regnum + (num - 1200); + else + switch (num) + { + case 64: + return tdep->ppc_mq_regnum; + case 65: + return tdep->ppc_lr_regnum; + case 66: + return tdep->ppc_ctr_regnum; + case 76: + return tdep->ppc_xer_regnum; + case 109: + return tdep->ppc_vrsave_regnum; + case 110: + return tdep->ppc_vrsave_regnum - 1; /* vscr */ + case 111: + return tdep->ppc_acc_regnum; + case 112: + return tdep->ppc_spefscr_regnum; + default: + return num; + } +} + + +/* Convert a Dwarf 2 register number to a GDB register number. */ +static int +rs6000_dwarf2_reg_to_regnum (int num) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + + if (0 <= num && num <= 31) + return tdep->ppc_gp0_regnum + num; + else if (32 <= num && num <= 63) + /* FIXME: jimb/2004-05-05: What should we do when the debug info + specifies registers the architecture doesn't have? Our + callers don't check the value we return. */ + return tdep->ppc_fp0_regnum + (num - 32); + else if (1124 <= num && num < 1124 + 32) + return tdep->ppc_vr0_regnum + (num - 1124); + else if (1200 <= num && num < 1200 + 32) + return tdep->ppc_ev0_regnum + (num - 1200); + else + switch (num) + { + case 67: + return tdep->ppc_vrsave_regnum - 1; /* vscr */ + case 99: + return tdep->ppc_acc_regnum; + case 100: + return tdep->ppc_mq_regnum; + case 101: + return tdep->ppc_xer_regnum; + case 108: + return tdep->ppc_lr_regnum; + case 109: + return tdep->ppc_ctr_regnum; + case 356: + return tdep->ppc_vrsave_regnum; + case 612: + return tdep->ppc_spefscr_regnum; + default: + return num; + } +} + + +static void +rs6000_store_return_value (struct type *type, + struct regcache *regcache, + const void *valbuf) +{ + struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + int regnum = -1; + + /* The calling convention this function implements assumes the + processor has floating-point registers. We shouldn't be using it + on PPC variants that lack them. */ + gdb_assert (ppc_floating_point_unit_p (gdbarch)); + + if (TYPE_CODE (type) == TYPE_CODE_FLT) + /* Floating point values are returned starting from FPR1 and up. + Say a double_double_double type could be returned in + FPR1/FPR2/FPR3 triple. */ + regnum = tdep->ppc_fp0_regnum + 1; + else if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + { + if (TYPE_LENGTH (type) == 16 + && TYPE_VECTOR (type)) + regnum = tdep->ppc_vr0_regnum + 2; + else + internal_error (__FILE__, __LINE__, + "rs6000_store_return_value: " + "unexpected array return type"); + } + else + /* Everything else is returned in GPR3 and up. */ + regnum = tdep->ppc_gp0_regnum + 3; + + { + size_t bytes_written = 0; + + while (bytes_written < TYPE_LENGTH (type)) + { + /* How much of this value can we write to this register? */ + size_t bytes_to_write = min (TYPE_LENGTH (type) - bytes_written, + register_size (gdbarch, regnum)); + regcache_cooked_write_part (regcache, regnum, + 0, bytes_to_write, + (char *) valbuf + bytes_written); + regnum++; + bytes_written += bytes_to_write; + } + } +} + + +/* 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). */ + +static CORE_ADDR +rs6000_extract_struct_value_address (struct regcache *regcache) +{ + /* FIXME: cagney/2002-09-26: PR gdb/724: When making an inferior + function call GDB knows the address of the struct return value + and hence, should not need to call this function. Unfortunately, + the current call_function_by_hand() code only saves the most + recent struct address leading to occasional calls. The code + should instead maintain a stack of such addresses (in the dummy + frame object). */ + /* NOTE: cagney/2002-09-26: Return 0 which indicates that we've + really got no idea where the return value is being stored. While + r3, on function entry, contained the address it will have since + been reused (scratch) and hence wouldn't be valid */ + return 0; +} + +/* Hook called when a new child process is started. */ + +void +rs6000_create_inferior (int pid) +{ + if (rs6000_set_host_arch_hook) + rs6000_set_host_arch_hook (pid); +} + +/* Support for CONVERT_FROM_FUNC_PTR_ADDR (ARCH, ADDR, TARG). + + Usually a function pointer's representation is simply the address + of the function. On the RS/6000 however, a function pointer is + represented by a pointer to a TOC entry. This TOC entry contains + three words, the first word is the address of the function, the + second word is the TOC pointer (r2), and the third word is the + static chain value. Throughout GDB it is currently assumed that a + function pointer contains the address of the function, which is not + easy to fix. In addition, the conversion of a function address to + a function pointer would require allocation of a TOC entry in the + inferior's memory space, with all its drawbacks. To be able to + call C++ virtual methods in the inferior (which are called via + function pointers), find_function_addr uses this function to get the + function address from a function pointer. */ + +/* Return real function address if ADDR (a function pointer) is in the data + space and is therefore a special function pointer. */ + +static CORE_ADDR +rs6000_convert_from_func_ptr_addr (struct gdbarch *gdbarch, + CORE_ADDR addr, + struct target_ops *targ) +{ + struct obj_section *s; + + s = find_pc_section (addr); + if (s && s->the_bfd_section->flags & SEC_CODE) + return addr; + + /* ADDR is in the data space, so it's a special function pointer. */ + return read_memory_addr (addr, gdbarch_tdep (current_gdbarch)->wordsize); +} + + +/* Handling the various POWER/PowerPC variants. */ + + +/* The arrays here called registers_MUMBLE hold information about available + registers. + + For each family of PPC variants, I've tried to isolate out the + common registers and put them up front, so that as long as you get + the general family right, GDB will correctly identify the registers + common to that family. The common register sets are: + + For the 60x family: hid0 hid1 iabr dabr pir + + For the 505 and 860 family: eie eid nri + + For the 403 and 403GC: icdbdr esr dear evpr cdbcr tsr tcr pit tbhi + tblo srr2 srr3 dbsr dbcr iac1 iac2 dac1 dac2 dccr iccr pbl1 + pbu1 pbl2 pbu2 + + Most of these register groups aren't anything formal. I arrived at + them by looking at the registers that occurred in more than one + processor. + + Note: kevinb/2002-04-30: Support for the fpscr register was added + during April, 2002. Slot 70 is being used for PowerPC and slot 71 + for Power. For PowerPC, slot 70 was unused and was already in the + PPC_UISA_SPRS which is ideally where fpscr should go. For Power, + slot 70 was being used for "mq", so the next available slot (71) + was chosen. It would have been nice to be able to make the + register numbers the same across processor cores, but this wasn't + possible without either 1) renumbering some registers for some + processors or 2) assigning fpscr to a really high slot that's + larger than any current register number. Doing (1) is bad because + existing stubs would break. Doing (2) is undesirable because it + would introduce a really large gap between fpscr and the rest of + the registers for most processors. */ + +/* Convenience macros for populating register arrays. */ + +/* Within another macro, convert S to a string. */ + +#define STR(s) #s + +/* Return a struct reg defining register NAME that's 32 bits on 32-bit systems + and 64 bits on 64-bit systems. */ +#define R(name) { STR(name), 4, 8, 0, 0, -1 } + +/* Return a struct reg defining register NAME that's 32 bits on all + systems. */ +#define R4(name) { STR(name), 4, 4, 0, 0, -1 } + +/* Return a struct reg defining register NAME that's 64 bits on all + systems. */ +#define R8(name) { STR(name), 8, 8, 0, 0, -1 } + +/* Return a struct reg defining register NAME that's 128 bits on all + systems. */ +#define R16(name) { STR(name), 16, 16, 0, 0, -1 } + +/* Return a struct reg defining floating-point register NAME. */ +#define F(name) { STR(name), 8, 8, 1, 0, -1 } + +/* Return a struct reg defining a pseudo register NAME that is 64 bits + long on all systems. */ +#define P8(name) { STR(name), 8, 8, 0, 1, -1 } + +/* Return a struct reg defining register NAME that's 32 bits on 32-bit + systems and that doesn't exist on 64-bit systems. */ +#define R32(name) { STR(name), 4, 0, 0, 0, -1 } + +/* Return a struct reg defining register NAME that's 64 bits on 64-bit + systems and that doesn't exist on 32-bit systems. */ +#define R64(name) { STR(name), 0, 8, 0, 0, -1 } + +/* Return a struct reg placeholder for a register that doesn't exist. */ +#define R0 { 0, 0, 0, 0, 0, -1 } + +/* Return a struct reg defining an anonymous raw register that's 32 + bits on all systems. */ +#define A4 { 0, 4, 4, 0, 0, -1 } + +/* Return a struct reg defining an SPR named NAME that is 32 bits on + 32-bit systems and 64 bits on 64-bit systems. */ +#define S(name) { STR(name), 4, 8, 0, 0, ppc_spr_ ## name } + +/* Return a struct reg defining an SPR named NAME that is 32 bits on + all systems. */ +#define S4(name) { STR(name), 4, 4, 0, 0, ppc_spr_ ## name } + +/* Return a struct reg defining an SPR named NAME that is 32 bits on + all systems, and whose SPR number is NUMBER. */ +#define SN4(name, number) { STR(name), 4, 4, 0, 0, (number) } + +/* Return a struct reg defining an SPR named NAME that's 64 bits on + 64-bit systems and that doesn't exist on 32-bit systems. */ +#define S64(name) { STR(name), 0, 8, 0, 0, ppc_spr_ ## name } + +/* UISA registers common across all architectures, including POWER. */ + +#define COMMON_UISA_REGS \ + /* 0 */ R(r0), R(r1), R(r2), R(r3), R(r4), R(r5), R(r6), R(r7), \ + /* 8 */ R(r8), R(r9), R(r10),R(r11),R(r12),R(r13),R(r14),R(r15), \ + /* 16 */ R(r16),R(r17),R(r18),R(r19),R(r20),R(r21),R(r22),R(r23), \ + /* 24 */ R(r24),R(r25),R(r26),R(r27),R(r28),R(r29),R(r30),R(r31), \ + /* 32 */ F(f0), F(f1), F(f2), F(f3), F(f4), F(f5), F(f6), F(f7), \ + /* 40 */ F(f8), F(f9), F(f10),F(f11),F(f12),F(f13),F(f14),F(f15), \ + /* 48 */ F(f16),F(f17),F(f18),F(f19),F(f20),F(f21),F(f22),F(f23), \ + /* 56 */ F(f24),F(f25),F(f26),F(f27),F(f28),F(f29),F(f30),F(f31), \ + /* 64 */ R(pc), R(ps) + +/* UISA-level SPRs for PowerPC. */ +#define PPC_UISA_SPRS \ + /* 66 */ R4(cr), S(lr), S(ctr), S4(xer), R4(fpscr) + +/* UISA-level SPRs for PowerPC without floating point support. */ +#define PPC_UISA_NOFP_SPRS \ + /* 66 */ R4(cr), S(lr), S(ctr), S4(xer), R0 + +/* Segment registers, for PowerPC. */ +#define PPC_SEGMENT_REGS \ + /* 71 */ R32(sr0), R32(sr1), R32(sr2), R32(sr3), \ + /* 75 */ R32(sr4), R32(sr5), R32(sr6), R32(sr7), \ + /* 79 */ R32(sr8), R32(sr9), R32(sr10), R32(sr11), \ + /* 83 */ R32(sr12), R32(sr13), R32(sr14), R32(sr15) + +/* OEA SPRs for PowerPC. */ +#define PPC_OEA_SPRS \ + /* 87 */ S4(pvr), \ + /* 88 */ S(ibat0u), S(ibat0l), S(ibat1u), S(ibat1l), \ + /* 92 */ S(ibat2u), S(ibat2l), S(ibat3u), S(ibat3l), \ + /* 96 */ S(dbat0u), S(dbat0l), S(dbat1u), S(dbat1l), \ + /* 100 */ S(dbat2u), S(dbat2l), S(dbat3u), S(dbat3l), \ + /* 104 */ S(sdr1), S64(asr), S(dar), S4(dsisr), \ + /* 108 */ S(sprg0), S(sprg1), S(sprg2), S(sprg3), \ + /* 112 */ S(srr0), S(srr1), S(tbl), S(tbu), \ + /* 116 */ S4(dec), S(dabr), S4(ear) + +/* AltiVec registers. */ +#define PPC_ALTIVEC_REGS \ + /*119*/R16(vr0), R16(vr1), R16(vr2), R16(vr3), R16(vr4), R16(vr5), R16(vr6), R16(vr7), \ + /*127*/R16(vr8), R16(vr9), R16(vr10),R16(vr11),R16(vr12),R16(vr13),R16(vr14),R16(vr15), \ + /*135*/R16(vr16),R16(vr17),R16(vr18),R16(vr19),R16(vr20),R16(vr21),R16(vr22),R16(vr23), \ + /*143*/R16(vr24),R16(vr25),R16(vr26),R16(vr27),R16(vr28),R16(vr29),R16(vr30),R16(vr31), \ + /*151*/R4(vscr), R4(vrsave) + + +/* On machines supporting the SPE APU, the general-purpose registers + are 64 bits long. There are SIMD vector instructions to treat them + as pairs of floats, but the rest of the instruction set treats them + as 32-bit registers, and only operates on their lower halves. + + In the GDB regcache, we treat their high and low halves as separate + registers. The low halves we present as the general-purpose + registers, and then we have pseudo-registers that stitch together + the upper and lower halves and present them as pseudo-registers. */ + +/* SPE GPR lower halves --- raw registers. */ +#define PPC_SPE_GP_REGS \ + /* 0 */ R4(r0), R4(r1), R4(r2), R4(r3), R4(r4), R4(r5), R4(r6), R4(r7), \ + /* 8 */ R4(r8), R4(r9), R4(r10),R4(r11),R4(r12),R4(r13),R4(r14),R4(r15), \ + /* 16 */ R4(r16),R4(r17),R4(r18),R4(r19),R4(r20),R4(r21),R4(r22),R4(r23), \ + /* 24 */ R4(r24),R4(r25),R4(r26),R4(r27),R4(r28),R4(r29),R4(r30),R4(r31) + +/* SPE GPR upper halves --- anonymous raw registers. */ +#define PPC_SPE_UPPER_GP_REGS \ + /* 0 */ A4, A4, A4, A4, A4, A4, A4, A4, \ + /* 8 */ A4, A4, A4, A4, A4, A4, A4, A4, \ + /* 16 */ A4, A4, A4, A4, A4, A4, A4, A4, \ + /* 24 */ A4, A4, A4, A4, A4, A4, A4, A4 + +/* SPE GPR vector registers --- pseudo registers based on underlying + gprs and the anonymous upper half raw registers. */ +#define PPC_EV_PSEUDO_REGS \ +/* 0*/P8(ev0), P8(ev1), P8(ev2), P8(ev3), P8(ev4), P8(ev5), P8(ev6), P8(ev7), \ +/* 8*/P8(ev8), P8(ev9), P8(ev10),P8(ev11),P8(ev12),P8(ev13),P8(ev14),P8(ev15),\ +/*16*/P8(ev16),P8(ev17),P8(ev18),P8(ev19),P8(ev20),P8(ev21),P8(ev22),P8(ev23),\ +/*24*/P8(ev24),P8(ev25),P8(ev26),P8(ev27),P8(ev28),P8(ev29),P8(ev30),P8(ev31) + +/* IBM POWER (pre-PowerPC) architecture, user-level view. We only cover + user-level SPR's. */ +static const struct reg registers_power[] = +{ + COMMON_UISA_REGS, + /* 66 */ R4(cnd), S(lr), S(cnt), S4(xer), S4(mq), + /* 71 */ R4(fpscr) +}; + +/* PowerPC UISA - a PPC processor as viewed by user-level code. A UISA-only + view of the PowerPC. */ +static const struct reg registers_powerpc[] = +{ + COMMON_UISA_REGS, + PPC_UISA_SPRS, + PPC_ALTIVEC_REGS +}; + +/* IBM PowerPC 403. + + Some notes about the "tcr" special-purpose register: + - On the 403 and 403GC, SPR 986 is named "tcr", and it controls the + 403's programmable interval timer, fixed interval timer, and + watchdog timer. + - On the 602, SPR 984 is named "tcr", and it controls the 602's + watchdog timer, and nothing else. + + Some of the fields are similar between the two, but they're not + compatible with each other. Since the two variants have different + registers, with different numbers, but the same name, we can't + splice the register name to get the SPR number. */ +static const struct reg registers_403[] = +{ + COMMON_UISA_REGS, + PPC_UISA_SPRS, + PPC_SEGMENT_REGS, + PPC_OEA_SPRS, + /* 119 */ S(icdbdr), S(esr), S(dear), S(evpr), + /* 123 */ S(cdbcr), S(tsr), SN4(tcr, ppc_spr_403_tcr), S(pit), + /* 127 */ S(tbhi), S(tblo), S(srr2), S(srr3), + /* 131 */ S(dbsr), S(dbcr), S(iac1), S(iac2), + /* 135 */ S(dac1), S(dac2), S(dccr), S(iccr), + /* 139 */ S(pbl1), S(pbu1), S(pbl2), S(pbu2) +}; + +/* IBM PowerPC 403GC. + See the comments about 'tcr' for the 403, above. */ +static const struct reg registers_403GC[] = +{ + COMMON_UISA_REGS, + PPC_UISA_SPRS, + PPC_SEGMENT_REGS, + PPC_OEA_SPRS, + /* 119 */ S(icdbdr), S(esr), S(dear), S(evpr), + /* 123 */ S(cdbcr), S(tsr), SN4(tcr, ppc_spr_403_tcr), S(pit), + /* 127 */ S(tbhi), S(tblo), S(srr2), S(srr3), + /* 131 */ S(dbsr), S(dbcr), S(iac1), S(iac2), + /* 135 */ S(dac1), S(dac2), S(dccr), S(iccr), + /* 139 */ S(pbl1), S(pbu1), S(pbl2), S(pbu2), + /* 143 */ S(zpr), S(pid), S(sgr), S(dcwr), + /* 147 */ S(tbhu), S(tblu) +}; + +/* Motorola PowerPC 505. */ +static const struct reg registers_505[] = +{ + COMMON_UISA_REGS, + PPC_UISA_SPRS, + PPC_SEGMENT_REGS, + PPC_OEA_SPRS, + /* 119 */ S(eie), S(eid), S(nri) +}; + +/* Motorola PowerPC 860 or 850. */ +static const struct reg registers_860[] = +{ + COMMON_UISA_REGS, + PPC_UISA_SPRS, + PPC_SEGMENT_REGS, + PPC_OEA_SPRS, + /* 119 */ S(eie), S(eid), S(nri), S(cmpa), + /* 123 */ S(cmpb), S(cmpc), S(cmpd), S(icr), + /* 127 */ S(der), S(counta), S(countb), S(cmpe), + /* 131 */ S(cmpf), S(cmpg), S(cmph), S(lctrl1), + /* 135 */ S(lctrl2), S(ictrl), S(bar), S(ic_cst), + /* 139 */ S(ic_adr), S(ic_dat), S(dc_cst), S(dc_adr), + /* 143 */ S(dc_dat), S(dpdr), S(dpir), S(immr), + /* 147 */ S(mi_ctr), S(mi_ap), S(mi_epn), S(mi_twc), + /* 151 */ S(mi_rpn), S(md_ctr), S(m_casid), S(md_ap), + /* 155 */ S(md_epn), S(m_twb), S(md_twc), S(md_rpn), + /* 159 */ S(m_tw), S(mi_dbcam), S(mi_dbram0), S(mi_dbram1), + /* 163 */ S(md_dbcam), S(md_dbram0), S(md_dbram1) +}; + +/* Motorola PowerPC 601. Note that the 601 has different register numbers + for reading and writing RTCU and RTCL. However, how one reads and writes a + register is the stub's problem. */ +static const struct reg registers_601[] = +{ + COMMON_UISA_REGS, + PPC_UISA_SPRS, + PPC_SEGMENT_REGS, + PPC_OEA_SPRS, + /* 119 */ S(hid0), S(hid1), S(iabr), S(dabr), + /* 123 */ S(pir), S(mq), S(rtcu), S(rtcl) +}; + +/* Motorola PowerPC 602. + See the notes under the 403 about 'tcr'. */ +static const struct reg registers_602[] = +{ + COMMON_UISA_REGS, + PPC_UISA_SPRS, + PPC_SEGMENT_REGS, + PPC_OEA_SPRS, + /* 119 */ S(hid0), S(hid1), S(iabr), R0, + /* 123 */ R0, SN4(tcr, ppc_spr_602_tcr), S(ibr), S(esasrr), + /* 127 */ S(sebr), S(ser), S(sp), S(lt) +}; + +/* Motorola/IBM PowerPC 603 or 603e. */ +static const struct reg registers_603[] = +{ + COMMON_UISA_REGS, + PPC_UISA_SPRS, + PPC_SEGMENT_REGS, + PPC_OEA_SPRS, + /* 119 */ S(hid0), S(hid1), S(iabr), R0, + /* 123 */ R0, S(dmiss), S(dcmp), S(hash1), + /* 127 */ S(hash2), S(imiss), S(icmp), S(rpa) +}; + +/* Motorola PowerPC 604 or 604e. */ +static const struct reg registers_604[] = +{ + COMMON_UISA_REGS, + PPC_UISA_SPRS, + PPC_SEGMENT_REGS, + PPC_OEA_SPRS, + /* 119 */ S(hid0), S(hid1), S(iabr), S(dabr), + /* 123 */ S(pir), S(mmcr0), S(pmc1), S(pmc2), + /* 127 */ S(sia), S(sda) +}; + +/* Motorola/IBM PowerPC 750 or 740. */ +static const struct reg registers_750[] = +{ + COMMON_UISA_REGS, + PPC_UISA_SPRS, + PPC_SEGMENT_REGS, + PPC_OEA_SPRS, + /* 119 */ S(hid0), S(hid1), S(iabr), S(dabr), + /* 123 */ R0, S(ummcr0), S(upmc1), S(upmc2), + /* 127 */ S(usia), S(ummcr1), S(upmc3), S(upmc4), + /* 131 */ S(mmcr0), S(pmc1), S(pmc2), S(sia), + /* 135 */ S(mmcr1), S(pmc3), S(pmc4), S(l2cr), + /* 139 */ S(ictc), S(thrm1), S(thrm2), S(thrm3) +}; + + +/* Motorola PowerPC 7400. */ +static const struct reg registers_7400[] = +{ + /* gpr0-gpr31, fpr0-fpr31 */ + COMMON_UISA_REGS, + /* cr, lr, ctr, xer, fpscr */ + PPC_UISA_SPRS, + /* sr0-sr15 */ + PPC_SEGMENT_REGS, + PPC_OEA_SPRS, + /* vr0-vr31, vrsave, vscr */ + PPC_ALTIVEC_REGS + /* FIXME? Add more registers? */ +}; + +/* Motorola e500. */ +static const struct reg registers_e500[] = +{ + /* 0 .. 31 */ PPC_SPE_GP_REGS, + /* 32 .. 63 */ PPC_SPE_UPPER_GP_REGS, + /* 64 .. 65 */ R(pc), R(ps), + /* 66 .. 70 */ PPC_UISA_NOFP_SPRS, + /* 71 .. 72 */ R8(acc), S4(spefscr), + /* NOTE: Add new registers here the end of the raw register + list and just before the first pseudo register. */ + /* 73 .. 104 */ PPC_EV_PSEUDO_REGS +}; + +/* Information about a particular processor variant. */ + +struct variant + { + /* Name of this variant. */ + char *name; + + /* English description of the variant. */ + char *description; + + /* bfd_arch_info.arch corresponding to variant. */ + enum bfd_architecture arch; + + /* bfd_arch_info.mach corresponding to variant. */ + unsigned long mach; + + /* Number of real registers. */ + int nregs; + + /* Number of pseudo registers. */ + int npregs; + + /* Number of total registers (the sum of nregs and npregs). */ + int num_tot_regs; + + /* Table of register names; registers[R] is the name of the register + number R. */ + const struct reg *regs; + }; + +#define tot_num_registers(list) (sizeof (list) / sizeof((list)[0])) + +static int +num_registers (const struct reg *reg_list, int num_tot_regs) +{ + int i; + int nregs = 0; + + for (i = 0; i < num_tot_regs; i++) + if (!reg_list[i].pseudo) + nregs++; + + return nregs; +} + +static int +num_pseudo_registers (const struct reg *reg_list, int num_tot_regs) +{ + int i; + int npregs = 0; + + for (i = 0; i < num_tot_regs; i++) + if (reg_list[i].pseudo) + npregs ++; + + return npregs; +} + +/* Information in this table comes from the following web sites: + IBM: http://www.chips.ibm.com:80/products/embedded/ + Motorola: http://www.mot.com/SPS/PowerPC/ + + I'm sure I've got some of the variant descriptions not quite right. + Please report any inaccuracies you find to GDB's maintainer. + + If you add entries to this table, please be sure to allow the new + value as an argument to the --with-cpu flag, in configure.in. */ + +static struct variant variants[] = +{ + + {"powerpc", "PowerPC user-level", bfd_arch_powerpc, + bfd_mach_ppc, -1, -1, tot_num_registers (registers_powerpc), + registers_powerpc}, + {"power", "POWER user-level", bfd_arch_rs6000, + bfd_mach_rs6k, -1, -1, tot_num_registers (registers_power), + registers_power}, + {"403", "IBM PowerPC 403", bfd_arch_powerpc, + bfd_mach_ppc_403, -1, -1, tot_num_registers (registers_403), + registers_403}, + {"601", "Motorola PowerPC 601", bfd_arch_powerpc, + bfd_mach_ppc_601, -1, -1, tot_num_registers (registers_601), + registers_601}, + {"602", "Motorola PowerPC 602", bfd_arch_powerpc, + bfd_mach_ppc_602, -1, -1, tot_num_registers (registers_602), + registers_602}, + {"603", "Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc, + bfd_mach_ppc_603, -1, -1, tot_num_registers (registers_603), + registers_603}, + {"604", "Motorola PowerPC 604 or 604e", bfd_arch_powerpc, + 604, -1, -1, tot_num_registers (registers_604), + registers_604}, + {"403GC", "IBM PowerPC 403GC", bfd_arch_powerpc, + bfd_mach_ppc_403gc, -1, -1, tot_num_registers (registers_403GC), + registers_403GC}, + {"505", "Motorola PowerPC 505", bfd_arch_powerpc, + bfd_mach_ppc_505, -1, -1, tot_num_registers (registers_505), + registers_505}, + {"860", "Motorola PowerPC 860 or 850", bfd_arch_powerpc, + bfd_mach_ppc_860, -1, -1, tot_num_registers (registers_860), + registers_860}, + {"750", "Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc, + bfd_mach_ppc_750, -1, -1, tot_num_registers (registers_750), + registers_750}, + {"7400", "Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc, + bfd_mach_ppc_7400, -1, -1, tot_num_registers (registers_7400), + registers_7400}, + {"e500", "Motorola PowerPC e500", bfd_arch_powerpc, + bfd_mach_ppc_e500, -1, -1, tot_num_registers (registers_e500), + registers_e500}, + + /* 64-bit */ + {"powerpc64", "PowerPC 64-bit user-level", bfd_arch_powerpc, + bfd_mach_ppc64, -1, -1, tot_num_registers (registers_powerpc), + registers_powerpc}, + {"620", "Motorola PowerPC 620", bfd_arch_powerpc, + bfd_mach_ppc_620, -1, -1, tot_num_registers (registers_powerpc), + registers_powerpc}, + {"630", "Motorola PowerPC 630", bfd_arch_powerpc, + bfd_mach_ppc_630, -1, -1, tot_num_registers (registers_powerpc), + registers_powerpc}, + {"a35", "PowerPC A35", bfd_arch_powerpc, + bfd_mach_ppc_a35, -1, -1, tot_num_registers (registers_powerpc), + registers_powerpc}, + {"rs64ii", "PowerPC rs64ii", bfd_arch_powerpc, + bfd_mach_ppc_rs64ii, -1, -1, tot_num_registers (registers_powerpc), + registers_powerpc}, + {"rs64iii", "PowerPC rs64iii", bfd_arch_powerpc, + bfd_mach_ppc_rs64iii, -1, -1, tot_num_registers (registers_powerpc), + registers_powerpc}, + + /* FIXME: I haven't checked the register sets of the following. */ + {"rs1", "IBM POWER RS1", bfd_arch_rs6000, + bfd_mach_rs6k_rs1, -1, -1, tot_num_registers (registers_power), + registers_power}, + {"rsc", "IBM POWER RSC", bfd_arch_rs6000, + bfd_mach_rs6k_rsc, -1, -1, tot_num_registers (registers_power), + registers_power}, + {"rs2", "IBM POWER RS2", bfd_arch_rs6000, + bfd_mach_rs6k_rs2, -1, -1, tot_num_registers (registers_power), + registers_power}, + + {0, 0, 0, 0, 0, 0, 0, 0} +}; + +/* Initialize the number of registers and pseudo registers in each variant. */ + +static void +init_variants (void) +{ + struct variant *v; + + for (v = variants; v->name; v++) + { + if (v->nregs == -1) + v->nregs = num_registers (v->regs, v->num_tot_regs); + if (v->npregs == -1) + v->npregs = num_pseudo_registers (v->regs, v->num_tot_regs); + } +} + +/* Return the variant corresponding to architecture ARCH and machine number + MACH. If no such variant exists, return null. */ + +static const struct variant * +find_variant_by_arch (enum bfd_architecture arch, unsigned long mach) +{ + const struct variant *v; + + for (v = variants; v->name; v++) + if (arch == v->arch && mach == v->mach) + return v; + + return NULL; +} + +static int +gdb_print_insn_powerpc (bfd_vma memaddr, disassemble_info *info) +{ + if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) + return print_insn_big_powerpc (memaddr, info); + else + return print_insn_little_powerpc (memaddr, info); +} + +static CORE_ADDR +rs6000_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame) +{ + return frame_unwind_register_unsigned (next_frame, PC_REGNUM); +} + +static struct frame_id +rs6000_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame) +{ + return frame_id_build (frame_unwind_register_unsigned (next_frame, + SP_REGNUM), + frame_pc_unwind (next_frame)); +} + +struct rs6000_frame_cache +{ + CORE_ADDR base; + CORE_ADDR initial_sp; + struct trad_frame_saved_reg *saved_regs; +}; + +static struct rs6000_frame_cache * +rs6000_frame_cache (struct frame_info *next_frame, void **this_cache) +{ + struct rs6000_frame_cache *cache; + struct gdbarch *gdbarch = get_frame_arch (next_frame); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + struct rs6000_framedata fdata; + int wordsize = tdep->wordsize; + + if ((*this_cache) != NULL) + return (*this_cache); + cache = FRAME_OBSTACK_ZALLOC (struct rs6000_frame_cache); + (*this_cache) = cache; + cache->saved_regs = trad_frame_alloc_saved_regs (next_frame); + + skip_prologue (frame_func_unwind (next_frame), frame_pc_unwind (next_frame), + &fdata); + + /* If there were any saved registers, figure out parent's stack + pointer. */ + /* The following is true only if the frame doesn't have a call to + alloca(), FIXME. */ + + if (fdata.saved_fpr == 0 + && fdata.saved_gpr == 0 + && fdata.saved_vr == 0 + && fdata.saved_ev == 0 + && fdata.lr_offset == 0 + && fdata.cr_offset == 0 + && fdata.vr_offset == 0 + && fdata.ev_offset == 0) + cache->base = frame_unwind_register_unsigned (next_frame, SP_REGNUM); + else + { + /* NOTE: cagney/2002-04-14: The ->frame points to the inner-most + address of the current frame. Things might be easier if the + ->frame pointed to the outer-most address of the frame. In + the mean time, the address of the prev frame is used as the + base address of this frame. */ + cache->base = frame_unwind_register_unsigned (next_frame, SP_REGNUM); + if (!fdata.frameless) + /* Frameless really means stackless. */ + cache->base = read_memory_addr (cache->base, wordsize); + } + trad_frame_set_value (cache->saved_regs, SP_REGNUM, cache->base); + + /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr. + All fpr's from saved_fpr to fp31 are saved. */ + + if (fdata.saved_fpr >= 0) + { + int i; + CORE_ADDR fpr_addr = cache->base + fdata.fpr_offset; + + /* If skip_prologue says floating-point registers were saved, + but the current architecture has no floating-point registers, + then that's strange. But we have no indices to even record + the addresses under, so we just ignore it. */ + if (ppc_floating_point_unit_p (gdbarch)) + for (i = fdata.saved_fpr; i < ppc_num_fprs; i++) + { + cache->saved_regs[tdep->ppc_fp0_regnum + i].addr = fpr_addr; + fpr_addr += 8; + } + } + + /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr. + All gpr's from saved_gpr to gpr31 are saved. */ + + if (fdata.saved_gpr >= 0) + { + int i; + CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset; + for (i = fdata.saved_gpr; i < ppc_num_gprs; i++) + { + cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr; + gpr_addr += wordsize; + } + } + + /* if != -1, fdata.saved_vr is the smallest number of saved_vr. + All vr's from saved_vr to vr31 are saved. */ + if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1) + { + if (fdata.saved_vr >= 0) + { + int i; + CORE_ADDR vr_addr = cache->base + fdata.vr_offset; + for (i = fdata.saved_vr; i < 32; i++) + { + cache->saved_regs[tdep->ppc_vr0_regnum + i].addr = vr_addr; + vr_addr += register_size (gdbarch, tdep->ppc_vr0_regnum); + } + } + } + + /* if != -1, fdata.saved_ev is the smallest number of saved_ev. + All vr's from saved_ev to ev31 are saved. ????? */ + if (tdep->ppc_ev0_regnum != -1 && tdep->ppc_ev31_regnum != -1) + { + if (fdata.saved_ev >= 0) + { + int i; + CORE_ADDR ev_addr = cache->base + fdata.ev_offset; + for (i = fdata.saved_ev; i < ppc_num_gprs; i++) + { + cache->saved_regs[tdep->ppc_ev0_regnum + i].addr = ev_addr; + cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = ev_addr + 4; + ev_addr += register_size (gdbarch, tdep->ppc_ev0_regnum); + } + } + } + + /* If != 0, fdata.cr_offset is the offset from the frame that + holds the CR. */ + if (fdata.cr_offset != 0) + cache->saved_regs[tdep->ppc_cr_regnum].addr = cache->base + fdata.cr_offset; + + /* If != 0, fdata.lr_offset is the offset from the frame that + holds the LR. */ + if (fdata.lr_offset != 0) + cache->saved_regs[tdep->ppc_lr_regnum].addr = cache->base + fdata.lr_offset; + /* The PC is found in the link register. */ + cache->saved_regs[PC_REGNUM] = cache->saved_regs[tdep->ppc_lr_regnum]; + + /* If != 0, fdata.vrsave_offset is the offset from the frame that + holds the VRSAVE. */ + if (fdata.vrsave_offset != 0) + cache->saved_regs[tdep->ppc_vrsave_regnum].addr = cache->base + fdata.vrsave_offset; + + if (fdata.alloca_reg < 0) + /* If no alloca register used, then fi->frame is the value of the + %sp for this frame, and it is good enough. */ + cache->initial_sp = frame_unwind_register_unsigned (next_frame, SP_REGNUM); + else + cache->initial_sp = frame_unwind_register_unsigned (next_frame, + fdata.alloca_reg); + + return cache; +} + +static void +rs6000_frame_this_id (struct frame_info *next_frame, void **this_cache, + struct frame_id *this_id) +{ + struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame, + this_cache); + (*this_id) = frame_id_build (info->base, frame_func_unwind (next_frame)); +} + +static void +rs6000_frame_prev_register (struct frame_info *next_frame, + void **this_cache, + int regnum, int *optimizedp, + enum lval_type *lvalp, CORE_ADDR *addrp, + int *realnump, void *valuep) +{ + struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame, + this_cache); + trad_frame_prev_register (next_frame, info->saved_regs, regnum, + optimizedp, lvalp, addrp, realnump, valuep); +} + +static const struct frame_unwind rs6000_frame_unwind = +{ + NORMAL_FRAME, + rs6000_frame_this_id, + rs6000_frame_prev_register +}; + +static const struct frame_unwind * +rs6000_frame_sniffer (struct frame_info *next_frame) +{ + return &rs6000_frame_unwind; +} + + + +static CORE_ADDR +rs6000_frame_base_address (struct frame_info *next_frame, + void **this_cache) +{ + struct rs6000_frame_cache *info = rs6000_frame_cache (next_frame, + this_cache); + return info->initial_sp; +} + +static const struct frame_base rs6000_frame_base = { + &rs6000_frame_unwind, + rs6000_frame_base_address, + rs6000_frame_base_address, + rs6000_frame_base_address +}; + +static const struct frame_base * +rs6000_frame_base_sniffer (struct frame_info *next_frame) +{ + return &rs6000_frame_base; +} + +/* Initialize the current architecture based on INFO. If possible, re-use an + architecture from ARCHES, which is a list of architectures already created + during this debugging session. + + Called e.g. at program startup, when reading a core file, and when reading + a binary file. */ + +static struct gdbarch * +rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) +{ + struct gdbarch *gdbarch; + struct gdbarch_tdep *tdep; + int wordsize, from_xcoff_exec, from_elf_exec, i, off; + struct reg *regs; + const struct variant *v; + enum bfd_architecture arch; + unsigned long mach; + bfd abfd; + int sysv_abi; + asection *sect; + + from_xcoff_exec = info.abfd && info.abfd->format == bfd_object && + bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour; + + from_elf_exec = info.abfd && info.abfd->format == bfd_object && + bfd_get_flavour (info.abfd) == bfd_target_elf_flavour; + + sysv_abi = info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour; + + /* Check word size. If INFO is from a binary file, infer it from + that, else choose a likely default. */ + if (from_xcoff_exec) + { + if (bfd_xcoff_is_xcoff64 (info.abfd)) + wordsize = 8; + else + wordsize = 4; + } + else if (from_elf_exec) + { + if (elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64) + wordsize = 8; + else + wordsize = 4; + } + else + { + if (info.bfd_arch_info != NULL && info.bfd_arch_info->bits_per_word != 0) + wordsize = info.bfd_arch_info->bits_per_word / + info.bfd_arch_info->bits_per_byte; + else + wordsize = 4; + } + + /* Find a candidate among extant architectures. */ + for (arches = gdbarch_list_lookup_by_info (arches, &info); + arches != NULL; + arches = gdbarch_list_lookup_by_info (arches->next, &info)) + { + /* Word size in the various PowerPC bfd_arch_info structs isn't + meaningful, because 64-bit CPUs can run in 32-bit mode. So, perform + separate word size check. */ + tdep = gdbarch_tdep (arches->gdbarch); + if (tdep && tdep->wordsize == wordsize) + return arches->gdbarch; + } + + /* None found, create a new architecture from INFO, whose bfd_arch_info + validity depends on the source: + - executable useless + - rs6000_host_arch() good + - core file good + - "set arch" trust blindly + - GDB startup useless but harmless */ + + if (!from_xcoff_exec) + { + arch = info.bfd_arch_info->arch; + mach = info.bfd_arch_info->mach; + } + else + { + arch = bfd_arch_powerpc; + bfd_default_set_arch_mach (&abfd, arch, 0); + info.bfd_arch_info = bfd_get_arch_info (&abfd); + mach = info.bfd_arch_info->mach; + } + tdep = xmalloc (sizeof (struct gdbarch_tdep)); + tdep->wordsize = wordsize; + + /* For e500 executables, the apuinfo section is of help here. Such + section contains the identifier and revision number of each + Application-specific Processing Unit that is present on the + chip. The content of the section is determined by the assembler + which looks at each instruction and determines which unit (and + which version of it) can execute it. In our case we just look for + the existance of the section. */ + + if (info.abfd) + { + sect = bfd_get_section_by_name (info.abfd, ".PPC.EMB.apuinfo"); + if (sect) + { + arch = info.bfd_arch_info->arch; + mach = bfd_mach_ppc_e500; + bfd_default_set_arch_mach (&abfd, arch, mach); + info.bfd_arch_info = bfd_get_arch_info (&abfd); + } + } + + gdbarch = gdbarch_alloc (&info, tdep); + + /* Initialize the number of real and pseudo registers in each variant. */ + init_variants (); + + /* Choose variant. */ + v = find_variant_by_arch (arch, mach); + if (!v) + return NULL; + + tdep->regs = v->regs; + + tdep->ppc_gp0_regnum = 0; + tdep->ppc_toc_regnum = 2; + tdep->ppc_ps_regnum = 65; + tdep->ppc_cr_regnum = 66; + tdep->ppc_lr_regnum = 67; + tdep->ppc_ctr_regnum = 68; + tdep->ppc_xer_regnum = 69; + if (v->mach == bfd_mach_ppc_601) + tdep->ppc_mq_regnum = 124; + else if (arch == bfd_arch_rs6000) + tdep->ppc_mq_regnum = 70; + else + tdep->ppc_mq_regnum = -1; + tdep->ppc_fp0_regnum = 32; + tdep->ppc_fpscr_regnum = (arch == bfd_arch_rs6000) ? 71 : 70; + tdep->ppc_sr0_regnum = 71; + tdep->ppc_vr0_regnum = -1; + tdep->ppc_vrsave_regnum = -1; + tdep->ppc_ev0_upper_regnum = -1; + tdep->ppc_ev0_regnum = -1; + tdep->ppc_ev31_regnum = -1; + tdep->ppc_acc_regnum = -1; + tdep->ppc_spefscr_regnum = -1; + + set_gdbarch_pc_regnum (gdbarch, 64); + set_gdbarch_sp_regnum (gdbarch, 1); + set_gdbarch_deprecated_fp_regnum (gdbarch, 1); + set_gdbarch_register_sim_regno (gdbarch, rs6000_register_sim_regno); + if (sysv_abi && wordsize == 8) + set_gdbarch_return_value (gdbarch, ppc64_sysv_abi_return_value); + else if (sysv_abi && wordsize == 4) + set_gdbarch_return_value (gdbarch, ppc_sysv_abi_return_value); + else + { + set_gdbarch_deprecated_extract_return_value (gdbarch, rs6000_extract_return_value); + set_gdbarch_store_return_value (gdbarch, rs6000_store_return_value); + } + + /* Set lr_frame_offset. */ + if (wordsize == 8) + tdep->lr_frame_offset = 16; + else if (sysv_abi) + tdep->lr_frame_offset = 4; + else + tdep->lr_frame_offset = 8; + + if (v->arch == bfd_arch_rs6000) + tdep->ppc_sr0_regnum = -1; + else if (v->arch == bfd_arch_powerpc) + switch (v->mach) + { + case bfd_mach_ppc: + tdep->ppc_sr0_regnum = -1; + tdep->ppc_vr0_regnum = 71; + tdep->ppc_vrsave_regnum = 104; + break; + case bfd_mach_ppc_7400: + tdep->ppc_vr0_regnum = 119; + tdep->ppc_vrsave_regnum = 152; + break; + case bfd_mach_ppc_e500: + tdep->ppc_toc_regnum = -1; + tdep->ppc_ev0_upper_regnum = 32; + tdep->ppc_ev0_regnum = 73; + tdep->ppc_ev31_regnum = 104; + tdep->ppc_acc_regnum = 71; + tdep->ppc_spefscr_regnum = 72; + tdep->ppc_fp0_regnum = -1; + tdep->ppc_fpscr_regnum = -1; + tdep->ppc_sr0_regnum = -1; + set_gdbarch_pseudo_register_read (gdbarch, e500_pseudo_register_read); + set_gdbarch_pseudo_register_write (gdbarch, e500_pseudo_register_write); + set_gdbarch_register_reggroup_p (gdbarch, e500_register_reggroup_p); + break; + + case bfd_mach_ppc64: + case bfd_mach_ppc_620: + case bfd_mach_ppc_630: + case bfd_mach_ppc_a35: + case bfd_mach_ppc_rs64ii: + case bfd_mach_ppc_rs64iii: + /* These processor's register sets don't have segment registers. */ + tdep->ppc_sr0_regnum = -1; + break; + } + else + internal_error (__FILE__, __LINE__, + "rs6000_gdbarch_init: " + "received unexpected BFD 'arch' value"); + + /* Sanity check on registers. */ + gdb_assert (strcmp (tdep->regs[tdep->ppc_gp0_regnum].name, "r0") == 0); + + /* Select instruction printer. */ + if (arch == bfd_arch_rs6000) + set_gdbarch_print_insn (gdbarch, print_insn_rs6000); + else + set_gdbarch_print_insn (gdbarch, gdb_print_insn_powerpc); + + set_gdbarch_write_pc (gdbarch, generic_target_write_pc); + + set_gdbarch_num_regs (gdbarch, v->nregs); + set_gdbarch_num_pseudo_regs (gdbarch, v->npregs); + set_gdbarch_register_name (gdbarch, rs6000_register_name); + set_gdbarch_register_type (gdbarch, rs6000_register_type); + + set_gdbarch_ptr_bit (gdbarch, wordsize * TARGET_CHAR_BIT); + set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT); + set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT); + set_gdbarch_long_bit (gdbarch, wordsize * TARGET_CHAR_BIT); + set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT); + set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT); + set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT); + if (sysv_abi) + set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT); + else + set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT); + set_gdbarch_char_signed (gdbarch, 0); + + set_gdbarch_frame_align (gdbarch, rs6000_frame_align); + if (sysv_abi && wordsize == 8) + /* PPC64 SYSV. */ + set_gdbarch_frame_red_zone_size (gdbarch, 288); + else if (!sysv_abi && wordsize == 4) + /* PowerOpen / AIX 32 bit. The saved area or red zone consists of + 19 4 byte GPRS + 18 8 byte FPRs giving a total of 220 bytes. + Problem is, 220 isn't frame (16 byte) aligned. Round it up to + 224. */ + set_gdbarch_frame_red_zone_size (gdbarch, 224); + + set_gdbarch_convert_register_p (gdbarch, rs6000_convert_register_p); + set_gdbarch_register_to_value (gdbarch, rs6000_register_to_value); + set_gdbarch_value_to_register (gdbarch, rs6000_value_to_register); + + set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum); + set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum); + /* Note: kevinb/2002-04-12: I'm not convinced that rs6000_push_arguments() + is correct for the SysV ABI when the wordsize is 8, but I'm also + fairly certain that ppc_sysv_abi_push_arguments() will give even + worse results since it only works for 32-bit code. So, for the moment, + we're better off calling rs6000_push_arguments() since it works for + 64-bit code. At some point in the future, this matter needs to be + revisited. */ + if (sysv_abi && wordsize == 4) + set_gdbarch_push_dummy_call (gdbarch, ppc_sysv_abi_push_dummy_call); + else if (sysv_abi && wordsize == 8) + set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call); + else + set_gdbarch_push_dummy_call (gdbarch, rs6000_push_dummy_call); + + set_gdbarch_deprecated_extract_struct_value_address (gdbarch, rs6000_extract_struct_value_address); + + set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue); + set_gdbarch_inner_than (gdbarch, core_addr_lessthan); + set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc); + + /* Handle the 64-bit SVR4 minimal-symbol convention of using "FN" + for the descriptor and ".FN" for the entry-point -- a user + specifying "break FN" will unexpectedly end up with a breakpoint + on the descriptor and not the function. This architecture method + transforms any breakpoints on descriptors into breakpoints on the + corresponding entry point. */ + if (sysv_abi && wordsize == 8) + set_gdbarch_adjust_breakpoint_address (gdbarch, ppc64_sysv_abi_adjust_breakpoint_address); + + /* Not sure on this. FIXMEmgo */ + set_gdbarch_frame_args_skip (gdbarch, 8); + + if (!sysv_abi) + set_gdbarch_deprecated_use_struct_convention (gdbarch, rs6000_use_struct_convention); + + if (!sysv_abi) + { + /* Handle RS/6000 function pointers (which are really function + descriptors). */ + set_gdbarch_convert_from_func_ptr_addr (gdbarch, + rs6000_convert_from_func_ptr_addr); + } + + /* Helpers for function argument information. */ + set_gdbarch_fetch_pointer_argument (gdbarch, rs6000_fetch_pointer_argument); + + /* Hook in ABI-specific overrides, if they have been registered. */ + gdbarch_init_osabi (info, gdbarch); + + switch (info.osabi) + { + case GDB_OSABI_NETBSD_AOUT: + case GDB_OSABI_NETBSD_ELF: + case GDB_OSABI_UNKNOWN: + case GDB_OSABI_LINUX: + set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc); + frame_unwind_append_sniffer (gdbarch, rs6000_frame_sniffer); + set_gdbarch_unwind_dummy_id (gdbarch, rs6000_unwind_dummy_id); + frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer); + break; + default: + set_gdbarch_believe_pcc_promotion (gdbarch, 1); + + set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc); + frame_unwind_append_sniffer (gdbarch, rs6000_frame_sniffer); + set_gdbarch_unwind_dummy_id (gdbarch, rs6000_unwind_dummy_id); + frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer); + } + + if (from_xcoff_exec) + { + /* NOTE: jimix/2003-06-09: This test should really check for + GDB_OSABI_AIX when that is defined and becomes + available. (Actually, once things are properly split apart, + the test goes away.) */ + /* RS6000/AIX does not support PT_STEP. Has to be simulated. */ + set_gdbarch_software_single_step (gdbarch, rs6000_software_single_step); + } + + init_sim_regno_table (gdbarch); + + return gdbarch; +} + +static void +rs6000_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + + if (tdep == NULL) + return; + + /* FIXME: Dump gdbarch_tdep. */ +} + +static struct cmd_list_element *info_powerpc_cmdlist = NULL; + +static void +rs6000_info_powerpc_command (char *args, int from_tty) +{ + help_list (info_powerpc_cmdlist, "info powerpc ", class_info, gdb_stdout); +} + +/* Initialization code. */ + +extern initialize_file_ftype _initialize_rs6000_tdep; /* -Wmissing-prototypes */ + +void +_initialize_rs6000_tdep (void) +{ + gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep); + gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep); + + /* Add root prefix command for "info powerpc" commands */ + add_prefix_cmd ("powerpc", class_info, rs6000_info_powerpc_command, + "Various POWERPC info specific commands.", + &info_powerpc_cmdlist, "info powerpc ", 0, &infolist); +} diff --git a/include/gdb/ChangeLog b/include/gdb/ChangeLog new file mode 100644 index 00000000000..41fc44be43c --- /dev/null +++ b/include/gdb/ChangeLog @@ -0,0 +1,125 @@ +2004-08-04 Andrew Cagney <cagney@gnu.org> + + * sim-ppc.h: Add extern "C" wrapper. + (enum sim_ppc_regnum): Add full list of SPRs. + +2004-08-04 Jim Blandy <jimb@redhat.com> + + * sim-ppc.h: New file. + +2004-06-25 J"orn Rennecke <joern.rennecke@superh.com> + + * callback.h (host_callback_struct): Replace members fdopen and + alwaysopen with fd_buddy. + [sim/common: * callback.c: Changed all users. ] + +2003-10-31 Kevin Buettner <kevin@redhat.com> + + * sim-frv.h: New file. + +2003-10-15 J"orn Rennecke <joern.rennecke@superh.com> + + * callback.h (struct host_callback_struct): New members ftruncate + and truncate. + +2003-06-10 Corinna Vinschen <vinschen@redhat.com> + + * gdb/fileio.h: New file. + +2003-05-07 Andrew Cagney <cagney@redhat.com> + + * sim-d10v.h (sim_d10v_translate_addr): Add regcache parameter. + (sim_d10v_translate_imap_addr): Add regcache parameter. + (sim_d10v_translate_dmap_addr): Ditto. + +2003-03-27 Nick Clifton <nickc@redhat.com> + + * sim-arm.h (sim_arm_regs): Add iWMMXt registers. + +2003-03-20 Nick Clifton <nickc@redhat.com> + + * sim-arm.h (sim_arm_regs): Add Maverick co-processor + registers. + +2003-02-27 Andrew Cagney <cagney@redhat.com> + + * remote-sim.h (sim_open, sim_load, sim_create_inferior): Rename + _bfd to bfd. + +2003-02-20 Andrew Cagney <ac131313@redhat.com> + + * remote-sim.h (SIM_RC): Delete unused SIM_RC_UNKNOWN_BREAKPOINT, + SIM_RC_INSUFFICIENT_RESOURCES and SIM_RC_DUPLICATE_BREAKPOINT. + (sim_set_breakpoint, sim_clear_breakpoint): Delete declarations. + (sim_clear_all_breakpoints, sim_enable_breakpoint): Ditto. + (sim_enable_all_breakpoints, sim_disable_breakpoint): Ditto. + (sim_disable_all_breakpoints): Ditto. + +2002-12-26 Kazu Hirata <kazu@cs.umass.edu> + + * sim-h8300.h: Remove ^M. + +2002-07-29 Andrey Volkov <avolkov@transas.com> + + * sim-h8300.h: Rename all enums from H8300_ to SIM_H8300_ + prefix. + +2002-07-23 Andrey Volkov <avolkov@transas.com> + + * sim-h8300.h: New file. + +2002-07-17 Andrew Cagney <cagney@redhat.com> + + * remote-sim.h: Update copyright. + (sim_set_callbacks, sim_size, sim_trace) + (sim_set_trace, sim_set_profile_size, sim_kill): Delete. Moved to + "sim/common/run-sim.h". + +Wed Jul 17 19:36:38 2002 J"orn Rennecke <joern.rennecke@superh.com> + + * sim-sh.h: Add enum constants for sh[1-4], sh3e, sh3?-dsp, + renumbering the sh-dsp registers to use distinct numbers. + +2002-06-15 Andrew Cagney <ac131313@redhat.com> + + * sim-arm.h (enum sim_arm_regs): Rename sim_arm_regnum. + +2002-06-12 Andrew Cagney <ac131313@redhat.com> + + * sim-arm.h: New file. + +2002-06-08 Andrew Cagney <cagney@redhat.com> + + * callback.h: Copy to here from directory above. + * remote-sim.h: Copy to here from directory above. + +2002-06-01 Andrew Cagney <ac131313@redhat.com> + + * sim-d10v.h (sim_d10v_regs): Expand to include all registers. + Update copyright. + +2002-05-23 Andrew Cagney <ac131313@redhat.com> + + * sim-d10v.h: New file. Moved from include/sim-d10v.h. + +2002-05-10 Elena Zannoni <ezannoni@redhat.com> + + * sim-sh.h: New file, for sh gdb<->sim interface. + +2002-05-09 Daniel Jacobowitz <drow@mvista.com> + + * signals.h: Update comments. + (enum target_signal): Remove conditional compilation around + Mach-specific signals. Move them to after TARGET_SIGNAL_DEFAULT. + +2002-03-10 Daniel Jacobowitz <drow@mvista.com> + + * signals.h: New file, from gdb/defs.h. + + +Local Variables: +mode: change-log +left-margin: 8 +fill-column: 74 +version-control: never +End: diff --git a/include/gdb/sim-ppc.h b/include/gdb/sim-ppc.h new file mode 100644 index 00000000000..e31a6711292 --- /dev/null +++ b/include/gdb/sim-ppc.h @@ -0,0 +1,771 @@ +/* sim-ppc.h --- interface between PowerPC simulator and GDB. + + Copyright 2004 Free Software Foundation, Inc. + + Contributed by Red Hat. + + 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 (SIM_PPC_H) +#define SIM_PPC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* The register access functions, sim_fetch_register and + sim_store_register, use the following numbering for PowerPC + registers. */ + +enum sim_ppc_regnum + { + /* General-purpose registers, r0 -- r31. */ + sim_ppc_r0_regnum, + sim_ppc_r1_regnum, + sim_ppc_r2_regnum, + sim_ppc_r3_regnum, + sim_ppc_r4_regnum, + sim_ppc_r5_regnum, + sim_ppc_r6_regnum, + sim_ppc_r7_regnum, + sim_ppc_r8_regnum, + sim_ppc_r9_regnum, + sim_ppc_r10_regnum, + sim_ppc_r11_regnum, + sim_ppc_r12_regnum, + sim_ppc_r13_regnum, + sim_ppc_r14_regnum, + sim_ppc_r15_regnum, + sim_ppc_r16_regnum, + sim_ppc_r17_regnum, + sim_ppc_r18_regnum, + sim_ppc_r19_regnum, + sim_ppc_r20_regnum, + sim_ppc_r21_regnum, + sim_ppc_r22_regnum, + sim_ppc_r23_regnum, + sim_ppc_r24_regnum, + sim_ppc_r25_regnum, + sim_ppc_r26_regnum, + sim_ppc_r27_regnum, + sim_ppc_r28_regnum, + sim_ppc_r29_regnum, + sim_ppc_r30_regnum, + sim_ppc_r31_regnum, + + /* Floating-point registers, f0 -- f31. */ + sim_ppc_f0_regnum, + sim_ppc_f1_regnum, + sim_ppc_f2_regnum, + sim_ppc_f3_regnum, + sim_ppc_f4_regnum, + sim_ppc_f5_regnum, + sim_ppc_f6_regnum, + sim_ppc_f7_regnum, + sim_ppc_f8_regnum, + sim_ppc_f9_regnum, + sim_ppc_f10_regnum, + sim_ppc_f11_regnum, + sim_ppc_f12_regnum, + sim_ppc_f13_regnum, + sim_ppc_f14_regnum, + sim_ppc_f15_regnum, + sim_ppc_f16_regnum, + sim_ppc_f17_regnum, + sim_ppc_f18_regnum, + sim_ppc_f19_regnum, + sim_ppc_f20_regnum, + sim_ppc_f21_regnum, + sim_ppc_f22_regnum, + sim_ppc_f23_regnum, + sim_ppc_f24_regnum, + sim_ppc_f25_regnum, + sim_ppc_f26_regnum, + sim_ppc_f27_regnum, + sim_ppc_f28_regnum, + sim_ppc_f29_regnum, + sim_ppc_f30_regnum, + sim_ppc_f31_regnum, + + /* Altivec vector registers, vr0 -- vr31. */ + sim_ppc_vr0_regnum, + sim_ppc_vr1_regnum, + sim_ppc_vr2_regnum, + sim_ppc_vr3_regnum, + sim_ppc_vr4_regnum, + sim_ppc_vr5_regnum, + sim_ppc_vr6_regnum, + sim_ppc_vr7_regnum, + sim_ppc_vr8_regnum, + sim_ppc_vr9_regnum, + sim_ppc_vr10_regnum, + sim_ppc_vr11_regnum, + sim_ppc_vr12_regnum, + sim_ppc_vr13_regnum, + sim_ppc_vr14_regnum, + sim_ppc_vr15_regnum, + sim_ppc_vr16_regnum, + sim_ppc_vr17_regnum, + sim_ppc_vr18_regnum, + sim_ppc_vr19_regnum, + sim_ppc_vr20_regnum, + sim_ppc_vr21_regnum, + sim_ppc_vr22_regnum, + sim_ppc_vr23_regnum, + sim_ppc_vr24_regnum, + sim_ppc_vr25_regnum, + sim_ppc_vr26_regnum, + sim_ppc_vr27_regnum, + sim_ppc_vr28_regnum, + sim_ppc_vr29_regnum, + sim_ppc_vr30_regnum, + sim_ppc_vr31_regnum, + + /* SPE APU GPR upper halves. These are the upper 32 bits of the + gprs; there is one upper-half register for each gpr, so it is + appropriate to use sim_ppc_num_gprs for iterating through + these. */ + sim_ppc_rh0_regnum, + sim_ppc_rh1_regnum, + sim_ppc_rh2_regnum, + sim_ppc_rh3_regnum, + sim_ppc_rh4_regnum, + sim_ppc_rh5_regnum, + sim_ppc_rh6_regnum, + sim_ppc_rh7_regnum, + sim_ppc_rh8_regnum, + sim_ppc_rh9_regnum, + sim_ppc_rh10_regnum, + sim_ppc_rh11_regnum, + sim_ppc_rh12_regnum, + sim_ppc_rh13_regnum, + sim_ppc_rh14_regnum, + sim_ppc_rh15_regnum, + sim_ppc_rh16_regnum, + sim_ppc_rh17_regnum, + sim_ppc_rh18_regnum, + sim_ppc_rh19_regnum, + sim_ppc_rh20_regnum, + sim_ppc_rh21_regnum, + sim_ppc_rh22_regnum, + sim_ppc_rh23_regnum, + sim_ppc_rh24_regnum, + sim_ppc_rh25_regnum, + sim_ppc_rh26_regnum, + sim_ppc_rh27_regnum, + sim_ppc_rh28_regnum, + sim_ppc_rh29_regnum, + sim_ppc_rh30_regnum, + sim_ppc_rh31_regnum, + + /* SPE APU GPR full registers. Each of these registers is the + 64-bit concatenation of a 32-bit GPR (providing the lower bits) + and a 32-bit upper-half register (providing the higher bits). + As for the upper-half registers, it is appropriate to use + sim_ppc_num_gprs with these. */ + sim_ppc_ev0_regnum, + sim_ppc_ev1_regnum, + sim_ppc_ev2_regnum, + sim_ppc_ev3_regnum, + sim_ppc_ev4_regnum, + sim_ppc_ev5_regnum, + sim_ppc_ev6_regnum, + sim_ppc_ev7_regnum, + sim_ppc_ev8_regnum, + sim_ppc_ev9_regnum, + sim_ppc_ev10_regnum, + sim_ppc_ev11_regnum, + sim_ppc_ev12_regnum, + sim_ppc_ev13_regnum, + sim_ppc_ev14_regnum, + sim_ppc_ev15_regnum, + sim_ppc_ev16_regnum, + sim_ppc_ev17_regnum, + sim_ppc_ev18_regnum, + sim_ppc_ev19_regnum, + sim_ppc_ev20_regnum, + sim_ppc_ev21_regnum, + sim_ppc_ev22_regnum, + sim_ppc_ev23_regnum, + sim_ppc_ev24_regnum, + sim_ppc_ev25_regnum, + sim_ppc_ev26_regnum, + sim_ppc_ev27_regnum, + sim_ppc_ev28_regnum, + sim_ppc_ev29_regnum, + sim_ppc_ev30_regnum, + sim_ppc_ev31_regnum, + + /* Segment registers, sr0 -- sr15. */ + sim_ppc_sr0_regnum, + sim_ppc_sr1_regnum, + sim_ppc_sr2_regnum, + sim_ppc_sr3_regnum, + sim_ppc_sr4_regnum, + sim_ppc_sr5_regnum, + sim_ppc_sr6_regnum, + sim_ppc_sr7_regnum, + sim_ppc_sr8_regnum, + sim_ppc_sr9_regnum, + sim_ppc_sr10_regnum, + sim_ppc_sr11_regnum, + sim_ppc_sr12_regnum, + sim_ppc_sr13_regnum, + sim_ppc_sr14_regnum, + sim_ppc_sr15_regnum, + + /* Miscellaneous --- but non-SPR --- registers. */ + sim_ppc_pc_regnum, + sim_ppc_ps_regnum, + sim_ppc_cr_regnum, + sim_ppc_fpscr_regnum, + sim_ppc_acc_regnum, + sim_ppc_vscr_regnum, + + /* Special-purpose registers. */ + sim_ppc_spr0_regnum, sim_ppc_spr1_regnum, + sim_ppc_spr2_regnum, sim_ppc_spr3_regnum, + sim_ppc_spr4_regnum, sim_ppc_spr5_regnum, + sim_ppc_spr6_regnum, sim_ppc_spr7_regnum, + sim_ppc_spr8_regnum, sim_ppc_spr9_regnum, + sim_ppc_spr10_regnum, sim_ppc_spr11_regnum, + sim_ppc_spr12_regnum, sim_ppc_spr13_regnum, + sim_ppc_spr14_regnum, sim_ppc_spr15_regnum, + sim_ppc_spr16_regnum, sim_ppc_spr17_regnum, + sim_ppc_spr18_regnum, sim_ppc_spr19_regnum, + sim_ppc_spr20_regnum, sim_ppc_spr21_regnum, + sim_ppc_spr22_regnum, sim_ppc_spr23_regnum, + sim_ppc_spr24_regnum, sim_ppc_spr25_regnum, + sim_ppc_spr26_regnum, sim_ppc_spr27_regnum, + sim_ppc_spr28_regnum, sim_ppc_spr29_regnum, + sim_ppc_spr30_regnum, sim_ppc_spr31_regnum, + sim_ppc_spr32_regnum, sim_ppc_spr33_regnum, + sim_ppc_spr34_regnum, sim_ppc_spr35_regnum, + sim_ppc_spr36_regnum, sim_ppc_spr37_regnum, + sim_ppc_spr38_regnum, sim_ppc_spr39_regnum, + sim_ppc_spr40_regnum, sim_ppc_spr41_regnum, + sim_ppc_spr42_regnum, sim_ppc_spr43_regnum, + sim_ppc_spr44_regnum, sim_ppc_spr45_regnum, + sim_ppc_spr46_regnum, sim_ppc_spr47_regnum, + sim_ppc_spr48_regnum, sim_ppc_spr49_regnum, + sim_ppc_spr50_regnum, sim_ppc_spr51_regnum, + sim_ppc_spr52_regnum, sim_ppc_spr53_regnum, + sim_ppc_spr54_regnum, sim_ppc_spr55_regnum, + sim_ppc_spr56_regnum, sim_ppc_spr57_regnum, + sim_ppc_spr58_regnum, sim_ppc_spr59_regnum, + sim_ppc_spr60_regnum, sim_ppc_spr61_regnum, + sim_ppc_spr62_regnum, sim_ppc_spr63_regnum, + sim_ppc_spr64_regnum, sim_ppc_spr65_regnum, + sim_ppc_spr66_regnum, sim_ppc_spr67_regnum, + sim_ppc_spr68_regnum, sim_ppc_spr69_regnum, + sim_ppc_spr70_regnum, sim_ppc_spr71_regnum, + sim_ppc_spr72_regnum, sim_ppc_spr73_regnum, + sim_ppc_spr74_regnum, sim_ppc_spr75_regnum, + sim_ppc_spr76_regnum, sim_ppc_spr77_regnum, + sim_ppc_spr78_regnum, sim_ppc_spr79_regnum, + sim_ppc_spr80_regnum, sim_ppc_spr81_regnum, + sim_ppc_spr82_regnum, sim_ppc_spr83_regnum, + sim_ppc_spr84_regnum, sim_ppc_spr85_regnum, + sim_ppc_spr86_regnum, sim_ppc_spr87_regnum, + sim_ppc_spr88_regnum, sim_ppc_spr89_regnum, + sim_ppc_spr90_regnum, sim_ppc_spr91_regnum, + sim_ppc_spr92_regnum, sim_ppc_spr93_regnum, + sim_ppc_spr94_regnum, sim_ppc_spr95_regnum, + sim_ppc_spr96_regnum, sim_ppc_spr97_regnum, + sim_ppc_spr98_regnum, sim_ppc_spr99_regnum, + sim_ppc_spr100_regnum, sim_ppc_spr101_regnum, + sim_ppc_spr102_regnum, sim_ppc_spr103_regnum, + sim_ppc_spr104_regnum, sim_ppc_spr105_regnum, + sim_ppc_spr106_regnum, sim_ppc_spr107_regnum, + sim_ppc_spr108_regnum, sim_ppc_spr109_regnum, + sim_ppc_spr110_regnum, sim_ppc_spr111_regnum, + sim_ppc_spr112_regnum, sim_ppc_spr113_regnum, + sim_ppc_spr114_regnum, sim_ppc_spr115_regnum, + sim_ppc_spr116_regnum, sim_ppc_spr117_regnum, + sim_ppc_spr118_regnum, sim_ppc_spr119_regnum, + sim_ppc_spr120_regnum, sim_ppc_spr121_regnum, + sim_ppc_spr122_regnum, sim_ppc_spr123_regnum, + sim_ppc_spr124_regnum, sim_ppc_spr125_regnum, + sim_ppc_spr126_regnum, sim_ppc_spr127_regnum, + sim_ppc_spr128_regnum, sim_ppc_spr129_regnum, + sim_ppc_spr130_regnum, sim_ppc_spr131_regnum, + sim_ppc_spr132_regnum, sim_ppc_spr133_regnum, + sim_ppc_spr134_regnum, sim_ppc_spr135_regnum, + sim_ppc_spr136_regnum, sim_ppc_spr137_regnum, + sim_ppc_spr138_regnum, sim_ppc_spr139_regnum, + sim_ppc_spr140_regnum, sim_ppc_spr141_regnum, + sim_ppc_spr142_regnum, sim_ppc_spr143_regnum, + sim_ppc_spr144_regnum, sim_ppc_spr145_regnum, + sim_ppc_spr146_regnum, sim_ppc_spr147_regnum, + sim_ppc_spr148_regnum, sim_ppc_spr149_regnum, + sim_ppc_spr150_regnum, sim_ppc_spr151_regnum, + sim_ppc_spr152_regnum, sim_ppc_spr153_regnum, + sim_ppc_spr154_regnum, sim_ppc_spr155_regnum, + sim_ppc_spr156_regnum, sim_ppc_spr157_regnum, + sim_ppc_spr158_regnum, sim_ppc_spr159_regnum, + sim_ppc_spr160_regnum, sim_ppc_spr161_regnum, + sim_ppc_spr162_regnum, sim_ppc_spr163_regnum, + sim_ppc_spr164_regnum, sim_ppc_spr165_regnum, + sim_ppc_spr166_regnum, sim_ppc_spr167_regnum, + sim_ppc_spr168_regnum, sim_ppc_spr169_regnum, + sim_ppc_spr170_regnum, sim_ppc_spr171_regnum, + sim_ppc_spr172_regnum, sim_ppc_spr173_regnum, + sim_ppc_spr174_regnum, sim_ppc_spr175_regnum, + sim_ppc_spr176_regnum, sim_ppc_spr177_regnum, + sim_ppc_spr178_regnum, sim_ppc_spr179_regnum, + sim_ppc_spr180_regnum, sim_ppc_spr181_regnum, + sim_ppc_spr182_regnum, sim_ppc_spr183_regnum, + sim_ppc_spr184_regnum, sim_ppc_spr185_regnum, + sim_ppc_spr186_regnum, sim_ppc_spr187_regnum, + sim_ppc_spr188_regnum, sim_ppc_spr189_regnum, + sim_ppc_spr190_regnum, sim_ppc_spr191_regnum, + sim_ppc_spr192_regnum, sim_ppc_spr193_regnum, + sim_ppc_spr194_regnum, sim_ppc_spr195_regnum, + sim_ppc_spr196_regnum, sim_ppc_spr197_regnum, + sim_ppc_spr198_regnum, sim_ppc_spr199_regnum, + sim_ppc_spr200_regnum, sim_ppc_spr201_regnum, + sim_ppc_spr202_regnum, sim_ppc_spr203_regnum, + sim_ppc_spr204_regnum, sim_ppc_spr205_regnum, + sim_ppc_spr206_regnum, sim_ppc_spr207_regnum, + sim_ppc_spr208_regnum, sim_ppc_spr209_regnum, + sim_ppc_spr210_regnum, sim_ppc_spr211_regnum, + sim_ppc_spr212_regnum, sim_ppc_spr213_regnum, + sim_ppc_spr214_regnum, sim_ppc_spr215_regnum, + sim_ppc_spr216_regnum, sim_ppc_spr217_regnum, + sim_ppc_spr218_regnum, sim_ppc_spr219_regnum, + sim_ppc_spr220_regnum, sim_ppc_spr221_regnum, + sim_ppc_spr222_regnum, sim_ppc_spr223_regnum, + sim_ppc_spr224_regnum, sim_ppc_spr225_regnum, + sim_ppc_spr226_regnum, sim_ppc_spr227_regnum, + sim_ppc_spr228_regnum, sim_ppc_spr229_regnum, + sim_ppc_spr230_regnum, sim_ppc_spr231_regnum, + sim_ppc_spr232_regnum, sim_ppc_spr233_regnum, + sim_ppc_spr234_regnum, sim_ppc_spr235_regnum, + sim_ppc_spr236_regnum, sim_ppc_spr237_regnum, + sim_ppc_spr238_regnum, sim_ppc_spr239_regnum, + sim_ppc_spr240_regnum, sim_ppc_spr241_regnum, + sim_ppc_spr242_regnum, sim_ppc_spr243_regnum, + sim_ppc_spr244_regnum, sim_ppc_spr245_regnum, + sim_ppc_spr246_regnum, sim_ppc_spr247_regnum, + sim_ppc_spr248_regnum, sim_ppc_spr249_regnum, + sim_ppc_spr250_regnum, sim_ppc_spr251_regnum, + sim_ppc_spr252_regnum, sim_ppc_spr253_regnum, + sim_ppc_spr254_regnum, sim_ppc_spr255_regnum, + sim_ppc_spr256_regnum, sim_ppc_spr257_regnum, + sim_ppc_spr258_regnum, sim_ppc_spr259_regnum, + sim_ppc_spr260_regnum, sim_ppc_spr261_regnum, + sim_ppc_spr262_regnum, sim_ppc_spr263_regnum, + sim_ppc_spr264_regnum, sim_ppc_spr265_regnum, + sim_ppc_spr266_regnum, sim_ppc_spr267_regnum, + sim_ppc_spr268_regnum, sim_ppc_spr269_regnum, + sim_ppc_spr270_regnum, sim_ppc_spr271_regnum, + sim_ppc_spr272_regnum, sim_ppc_spr273_regnum, + sim_ppc_spr274_regnum, sim_ppc_spr275_regnum, + sim_ppc_spr276_regnum, sim_ppc_spr277_regnum, + sim_ppc_spr278_regnum, sim_ppc_spr279_regnum, + sim_ppc_spr280_regnum, sim_ppc_spr281_regnum, + sim_ppc_spr282_regnum, sim_ppc_spr283_regnum, + sim_ppc_spr284_regnum, sim_ppc_spr285_regnum, + sim_ppc_spr286_regnum, sim_ppc_spr287_regnum, + sim_ppc_spr288_regnum, sim_ppc_spr289_regnum, + sim_ppc_spr290_regnum, sim_ppc_spr291_regnum, + sim_ppc_spr292_regnum, sim_ppc_spr293_regnum, + sim_ppc_spr294_regnum, sim_ppc_spr295_regnum, + sim_ppc_spr296_regnum, sim_ppc_spr297_regnum, + sim_ppc_spr298_regnum, sim_ppc_spr299_regnum, + sim_ppc_spr300_regnum, sim_ppc_spr301_regnum, + sim_ppc_spr302_regnum, sim_ppc_spr303_regnum, + sim_ppc_spr304_regnum, sim_ppc_spr305_regnum, + sim_ppc_spr306_regnum, sim_ppc_spr307_regnum, + sim_ppc_spr308_regnum, sim_ppc_spr309_regnum, + sim_ppc_spr310_regnum, sim_ppc_spr311_regnum, + sim_ppc_spr312_regnum, sim_ppc_spr313_regnum, + sim_ppc_spr314_regnum, sim_ppc_spr315_regnum, + sim_ppc_spr316_regnum, sim_ppc_spr317_regnum, + sim_ppc_spr318_regnum, sim_ppc_spr319_regnum, + sim_ppc_spr320_regnum, sim_ppc_spr321_regnum, + sim_ppc_spr322_regnum, sim_ppc_spr323_regnum, + sim_ppc_spr324_regnum, sim_ppc_spr325_regnum, + sim_ppc_spr326_regnum, sim_ppc_spr327_regnum, + sim_ppc_spr328_regnum, sim_ppc_spr329_regnum, + sim_ppc_spr330_regnum, sim_ppc_spr331_regnum, + sim_ppc_spr332_regnum, sim_ppc_spr333_regnum, + sim_ppc_spr334_regnum, sim_ppc_spr335_regnum, + sim_ppc_spr336_regnum, sim_ppc_spr337_regnum, + sim_ppc_spr338_regnum, sim_ppc_spr339_regnum, + sim_ppc_spr340_regnum, sim_ppc_spr341_regnum, + sim_ppc_spr342_regnum, sim_ppc_spr343_regnum, + sim_ppc_spr344_regnum, sim_ppc_spr345_regnum, + sim_ppc_spr346_regnum, sim_ppc_spr347_regnum, + sim_ppc_spr348_regnum, sim_ppc_spr349_regnum, + sim_ppc_spr350_regnum, sim_ppc_spr351_regnum, + sim_ppc_spr352_regnum, sim_ppc_spr353_regnum, + sim_ppc_spr354_regnum, sim_ppc_spr355_regnum, + sim_ppc_spr356_regnum, sim_ppc_spr357_regnum, + sim_ppc_spr358_regnum, sim_ppc_spr359_regnum, + sim_ppc_spr360_regnum, sim_ppc_spr361_regnum, + sim_ppc_spr362_regnum, sim_ppc_spr363_regnum, + sim_ppc_spr364_regnum, sim_ppc_spr365_regnum, + sim_ppc_spr366_regnum, sim_ppc_spr367_regnum, + sim_ppc_spr368_regnum, sim_ppc_spr369_regnum, + sim_ppc_spr370_regnum, sim_ppc_spr371_regnum, + sim_ppc_spr372_regnum, sim_ppc_spr373_regnum, + sim_ppc_spr374_regnum, sim_ppc_spr375_regnum, + sim_ppc_spr376_regnum, sim_ppc_spr377_regnum, + sim_ppc_spr378_regnum, sim_ppc_spr379_regnum, + sim_ppc_spr380_regnum, sim_ppc_spr381_regnum, + sim_ppc_spr382_regnum, sim_ppc_spr383_regnum, + sim_ppc_spr384_regnum, sim_ppc_spr385_regnum, + sim_ppc_spr386_regnum, sim_ppc_spr387_regnum, + sim_ppc_spr388_regnum, sim_ppc_spr389_regnum, + sim_ppc_spr390_regnum, sim_ppc_spr391_regnum, + sim_ppc_spr392_regnum, sim_ppc_spr393_regnum, + sim_ppc_spr394_regnum, sim_ppc_spr395_regnum, + sim_ppc_spr396_regnum, sim_ppc_spr397_regnum, + sim_ppc_spr398_regnum, sim_ppc_spr399_regnum, + sim_ppc_spr400_regnum, sim_ppc_spr401_regnum, + sim_ppc_spr402_regnum, sim_ppc_spr403_regnum, + sim_ppc_spr404_regnum, sim_ppc_spr405_regnum, + sim_ppc_spr406_regnum, sim_ppc_spr407_regnum, + sim_ppc_spr408_regnum, sim_ppc_spr409_regnum, + sim_ppc_spr410_regnum, sim_ppc_spr411_regnum, + sim_ppc_spr412_regnum, sim_ppc_spr413_regnum, + sim_ppc_spr414_regnum, sim_ppc_spr415_regnum, + sim_ppc_spr416_regnum, sim_ppc_spr417_regnum, + sim_ppc_spr418_regnum, sim_ppc_spr419_regnum, + sim_ppc_spr420_regnum, sim_ppc_spr421_regnum, + sim_ppc_spr422_regnum, sim_ppc_spr423_regnum, + sim_ppc_spr424_regnum, sim_ppc_spr425_regnum, + sim_ppc_spr426_regnum, sim_ppc_spr427_regnum, + sim_ppc_spr428_regnum, sim_ppc_spr429_regnum, + sim_ppc_spr430_regnum, sim_ppc_spr431_regnum, + sim_ppc_spr432_regnum, sim_ppc_spr433_regnum, + sim_ppc_spr434_regnum, sim_ppc_spr435_regnum, + sim_ppc_spr436_regnum, sim_ppc_spr437_regnum, + sim_ppc_spr438_regnum, sim_ppc_spr439_regnum, + sim_ppc_spr440_regnum, sim_ppc_spr441_regnum, + sim_ppc_spr442_regnum, sim_ppc_spr443_regnum, + sim_ppc_spr444_regnum, sim_ppc_spr445_regnum, + sim_ppc_spr446_regnum, sim_ppc_spr447_regnum, + sim_ppc_spr448_regnum, sim_ppc_spr449_regnum, + sim_ppc_spr450_regnum, sim_ppc_spr451_regnum, + sim_ppc_spr452_regnum, sim_ppc_spr453_regnum, + sim_ppc_spr454_regnum, sim_ppc_spr455_regnum, + sim_ppc_spr456_regnum, sim_ppc_spr457_regnum, + sim_ppc_spr458_regnum, sim_ppc_spr459_regnum, + sim_ppc_spr460_regnum, sim_ppc_spr461_regnum, + sim_ppc_spr462_regnum, sim_ppc_spr463_regnum, + sim_ppc_spr464_regnum, sim_ppc_spr465_regnum, + sim_ppc_spr466_regnum, sim_ppc_spr467_regnum, + sim_ppc_spr468_regnum, sim_ppc_spr469_regnum, + sim_ppc_spr470_regnum, sim_ppc_spr471_regnum, + sim_ppc_spr472_regnum, sim_ppc_spr473_regnum, + sim_ppc_spr474_regnum, sim_ppc_spr475_regnum, + sim_ppc_spr476_regnum, sim_ppc_spr477_regnum, + sim_ppc_spr478_regnum, sim_ppc_spr479_regnum, + sim_ppc_spr480_regnum, sim_ppc_spr481_regnum, + sim_ppc_spr482_regnum, sim_ppc_spr483_regnum, + sim_ppc_spr484_regnum, sim_ppc_spr485_regnum, + sim_ppc_spr486_regnum, sim_ppc_spr487_regnum, + sim_ppc_spr488_regnum, sim_ppc_spr489_regnum, + sim_ppc_spr490_regnum, sim_ppc_spr491_regnum, + sim_ppc_spr492_regnum, sim_ppc_spr493_regnum, + sim_ppc_spr494_regnum, sim_ppc_spr495_regnum, + sim_ppc_spr496_regnum, sim_ppc_spr497_regnum, + sim_ppc_spr498_regnum, sim_ppc_spr499_regnum, + sim_ppc_spr500_regnum, sim_ppc_spr501_regnum, + sim_ppc_spr502_regnum, sim_ppc_spr503_regnum, + sim_ppc_spr504_regnum, sim_ppc_spr505_regnum, + sim_ppc_spr506_regnum, sim_ppc_spr507_regnum, + sim_ppc_spr508_regnum, sim_ppc_spr509_regnum, + sim_ppc_spr510_regnum, sim_ppc_spr511_regnum, + sim_ppc_spr512_regnum, sim_ppc_spr513_regnum, + sim_ppc_spr514_regnum, sim_ppc_spr515_regnum, + sim_ppc_spr516_regnum, sim_ppc_spr517_regnum, + sim_ppc_spr518_regnum, sim_ppc_spr519_regnum, + sim_ppc_spr520_regnum, sim_ppc_spr521_regnum, + sim_ppc_spr522_regnum, sim_ppc_spr523_regnum, + sim_ppc_spr524_regnum, sim_ppc_spr525_regnum, + sim_ppc_spr526_regnum, sim_ppc_spr527_regnum, + sim_ppc_spr528_regnum, sim_ppc_spr529_regnum, + sim_ppc_spr530_regnum, sim_ppc_spr531_regnum, + sim_ppc_spr532_regnum, sim_ppc_spr533_regnum, + sim_ppc_spr534_regnum, sim_ppc_spr535_regnum, + sim_ppc_spr536_regnum, sim_ppc_spr537_regnum, + sim_ppc_spr538_regnum, sim_ppc_spr539_regnum, + sim_ppc_spr540_regnum, sim_ppc_spr541_regnum, + sim_ppc_spr542_regnum, sim_ppc_spr543_regnum, + sim_ppc_spr544_regnum, sim_ppc_spr545_regnum, + sim_ppc_spr546_regnum, sim_ppc_spr547_regnum, + sim_ppc_spr548_regnum, sim_ppc_spr549_regnum, + sim_ppc_spr550_regnum, sim_ppc_spr551_regnum, + sim_ppc_spr552_regnum, sim_ppc_spr553_regnum, + sim_ppc_spr554_regnum, sim_ppc_spr555_regnum, + sim_ppc_spr556_regnum, sim_ppc_spr557_regnum, + sim_ppc_spr558_regnum, sim_ppc_spr559_regnum, + sim_ppc_spr560_regnum, sim_ppc_spr561_regnum, + sim_ppc_spr562_regnum, sim_ppc_spr563_regnum, + sim_ppc_spr564_regnum, sim_ppc_spr565_regnum, + sim_ppc_spr566_regnum, sim_ppc_spr567_regnum, + sim_ppc_spr568_regnum, sim_ppc_spr569_regnum, + sim_ppc_spr570_regnum, sim_ppc_spr571_regnum, + sim_ppc_spr572_regnum, sim_ppc_spr573_regnum, + sim_ppc_spr574_regnum, sim_ppc_spr575_regnum, + sim_ppc_spr576_regnum, sim_ppc_spr577_regnum, + sim_ppc_spr578_regnum, sim_ppc_spr579_regnum, + sim_ppc_spr580_regnum, sim_ppc_spr581_regnum, + sim_ppc_spr582_regnum, sim_ppc_spr583_regnum, + sim_ppc_spr584_regnum, sim_ppc_spr585_regnum, + sim_ppc_spr586_regnum, sim_ppc_spr587_regnum, + sim_ppc_spr588_regnum, sim_ppc_spr589_regnum, + sim_ppc_spr590_regnum, sim_ppc_spr591_regnum, + sim_ppc_spr592_regnum, sim_ppc_spr593_regnum, + sim_ppc_spr594_regnum, sim_ppc_spr595_regnum, + sim_ppc_spr596_regnum, sim_ppc_spr597_regnum, + sim_ppc_spr598_regnum, sim_ppc_spr599_regnum, + sim_ppc_spr600_regnum, sim_ppc_spr601_regnum, + sim_ppc_spr602_regnum, sim_ppc_spr603_regnum, + sim_ppc_spr604_regnum, sim_ppc_spr605_regnum, + sim_ppc_spr606_regnum, sim_ppc_spr607_regnum, + sim_ppc_spr608_regnum, sim_ppc_spr609_regnum, + sim_ppc_spr610_regnum, sim_ppc_spr611_regnum, + sim_ppc_spr612_regnum, sim_ppc_spr613_regnum, + sim_ppc_spr614_regnum, sim_ppc_spr615_regnum, + sim_ppc_spr616_regnum, sim_ppc_spr617_regnum, + sim_ppc_spr618_regnum, sim_ppc_spr619_regnum, + sim_ppc_spr620_regnum, sim_ppc_spr621_regnum, + sim_ppc_spr622_regnum, sim_ppc_spr623_regnum, + sim_ppc_spr624_regnum, sim_ppc_spr625_regnum, + sim_ppc_spr626_regnum, sim_ppc_spr627_regnum, + sim_ppc_spr628_regnum, sim_ppc_spr629_regnum, + sim_ppc_spr630_regnum, sim_ppc_spr631_regnum, + sim_ppc_spr632_regnum, sim_ppc_spr633_regnum, + sim_ppc_spr634_regnum, sim_ppc_spr635_regnum, + sim_ppc_spr636_regnum, sim_ppc_spr637_regnum, + sim_ppc_spr638_regnum, sim_ppc_spr639_regnum, + sim_ppc_spr640_regnum, sim_ppc_spr641_regnum, + sim_ppc_spr642_regnum, sim_ppc_spr643_regnum, + sim_ppc_spr644_regnum, sim_ppc_spr645_regnum, + sim_ppc_spr646_regnum, sim_ppc_spr647_regnum, + sim_ppc_spr648_regnum, sim_ppc_spr649_regnum, + sim_ppc_spr650_regnum, sim_ppc_spr651_regnum, + sim_ppc_spr652_regnum, sim_ppc_spr653_regnum, + sim_ppc_spr654_regnum, sim_ppc_spr655_regnum, + sim_ppc_spr656_regnum, sim_ppc_spr657_regnum, + sim_ppc_spr658_regnum, sim_ppc_spr659_regnum, + sim_ppc_spr660_regnum, sim_ppc_spr661_regnum, + sim_ppc_spr662_regnum, sim_ppc_spr663_regnum, + sim_ppc_spr664_regnum, sim_ppc_spr665_regnum, + sim_ppc_spr666_regnum, sim_ppc_spr667_regnum, + sim_ppc_spr668_regnum, sim_ppc_spr669_regnum, + sim_ppc_spr670_regnum, sim_ppc_spr671_regnum, + sim_ppc_spr672_regnum, sim_ppc_spr673_regnum, + sim_ppc_spr674_regnum, sim_ppc_spr675_regnum, + sim_ppc_spr676_regnum, sim_ppc_spr677_regnum, + sim_ppc_spr678_regnum, sim_ppc_spr679_regnum, + sim_ppc_spr680_regnum, sim_ppc_spr681_regnum, + sim_ppc_spr682_regnum, sim_ppc_spr683_regnum, + sim_ppc_spr684_regnum, sim_ppc_spr685_regnum, + sim_ppc_spr686_regnum, sim_ppc_spr687_regnum, + sim_ppc_spr688_regnum, sim_ppc_spr689_regnum, + sim_ppc_spr690_regnum, sim_ppc_spr691_regnum, + sim_ppc_spr692_regnum, sim_ppc_spr693_regnum, + sim_ppc_spr694_regnum, sim_ppc_spr695_regnum, + sim_ppc_spr696_regnum, sim_ppc_spr697_regnum, + sim_ppc_spr698_regnum, sim_ppc_spr699_regnum, + sim_ppc_spr700_regnum, sim_ppc_spr701_regnum, + sim_ppc_spr702_regnum, sim_ppc_spr703_regnum, + sim_ppc_spr704_regnum, sim_ppc_spr705_regnum, + sim_ppc_spr706_regnum, sim_ppc_spr707_regnum, + sim_ppc_spr708_regnum, sim_ppc_spr709_regnum, + sim_ppc_spr710_regnum, sim_ppc_spr711_regnum, + sim_ppc_spr712_regnum, sim_ppc_spr713_regnum, + sim_ppc_spr714_regnum, sim_ppc_spr715_regnum, + sim_ppc_spr716_regnum, sim_ppc_spr717_regnum, + sim_ppc_spr718_regnum, sim_ppc_spr719_regnum, + sim_ppc_spr720_regnum, sim_ppc_spr721_regnum, + sim_ppc_spr722_regnum, sim_ppc_spr723_regnum, + sim_ppc_spr724_regnum, sim_ppc_spr725_regnum, + sim_ppc_spr726_regnum, sim_ppc_spr727_regnum, + sim_ppc_spr728_regnum, sim_ppc_spr729_regnum, + sim_ppc_spr730_regnum, sim_ppc_spr731_regnum, + sim_ppc_spr732_regnum, sim_ppc_spr733_regnum, + sim_ppc_spr734_regnum, sim_ppc_spr735_regnum, + sim_ppc_spr736_regnum, sim_ppc_spr737_regnum, + sim_ppc_spr738_regnum, sim_ppc_spr739_regnum, + sim_ppc_spr740_regnum, sim_ppc_spr741_regnum, + sim_ppc_spr742_regnum, sim_ppc_spr743_regnum, + sim_ppc_spr744_regnum, sim_ppc_spr745_regnum, + sim_ppc_spr746_regnum, sim_ppc_spr747_regnum, + sim_ppc_spr748_regnum, sim_ppc_spr749_regnum, + sim_ppc_spr750_regnum, sim_ppc_spr751_regnum, + sim_ppc_spr752_regnum, sim_ppc_spr753_regnum, + sim_ppc_spr754_regnum, sim_ppc_spr755_regnum, + sim_ppc_spr756_regnum, sim_ppc_spr757_regnum, + sim_ppc_spr758_regnum, sim_ppc_spr759_regnum, + sim_ppc_spr760_regnum, sim_ppc_spr761_regnum, + sim_ppc_spr762_regnum, sim_ppc_spr763_regnum, + sim_ppc_spr764_regnum, sim_ppc_spr765_regnum, + sim_ppc_spr766_regnum, sim_ppc_spr767_regnum, + sim_ppc_spr768_regnum, sim_ppc_spr769_regnum, + sim_ppc_spr770_regnum, sim_ppc_spr771_regnum, + sim_ppc_spr772_regnum, sim_ppc_spr773_regnum, + sim_ppc_spr774_regnum, sim_ppc_spr775_regnum, + sim_ppc_spr776_regnum, sim_ppc_spr777_regnum, + sim_ppc_spr778_regnum, sim_ppc_spr779_regnum, + sim_ppc_spr780_regnum, sim_ppc_spr781_regnum, + sim_ppc_spr782_regnum, sim_ppc_spr783_regnum, + sim_ppc_spr784_regnum, sim_ppc_spr785_regnum, + sim_ppc_spr786_regnum, sim_ppc_spr787_regnum, + sim_ppc_spr788_regnum, sim_ppc_spr789_regnum, + sim_ppc_spr790_regnum, sim_ppc_spr791_regnum, + sim_ppc_spr792_regnum, sim_ppc_spr793_regnum, + sim_ppc_spr794_regnum, sim_ppc_spr795_regnum, + sim_ppc_spr796_regnum, sim_ppc_spr797_regnum, + sim_ppc_spr798_regnum, sim_ppc_spr799_regnum, + sim_ppc_spr800_regnum, sim_ppc_spr801_regnum, + sim_ppc_spr802_regnum, sim_ppc_spr803_regnum, + sim_ppc_spr804_regnum, sim_ppc_spr805_regnum, + sim_ppc_spr806_regnum, sim_ppc_spr807_regnum, + sim_ppc_spr808_regnum, sim_ppc_spr809_regnum, + sim_ppc_spr810_regnum, sim_ppc_spr811_regnum, + sim_ppc_spr812_regnum, sim_ppc_spr813_regnum, + sim_ppc_spr814_regnum, sim_ppc_spr815_regnum, + sim_ppc_spr816_regnum, sim_ppc_spr817_regnum, + sim_ppc_spr818_regnum, sim_ppc_spr819_regnum, + sim_ppc_spr820_regnum, sim_ppc_spr821_regnum, + sim_ppc_spr822_regnum, sim_ppc_spr823_regnum, + sim_ppc_spr824_regnum, sim_ppc_spr825_regnum, + sim_ppc_spr826_regnum, sim_ppc_spr827_regnum, + sim_ppc_spr828_regnum, sim_ppc_spr829_regnum, + sim_ppc_spr830_regnum, sim_ppc_spr831_regnum, + sim_ppc_spr832_regnum, sim_ppc_spr833_regnum, + sim_ppc_spr834_regnum, sim_ppc_spr835_regnum, + sim_ppc_spr836_regnum, sim_ppc_spr837_regnum, + sim_ppc_spr838_regnum, sim_ppc_spr839_regnum, + sim_ppc_spr840_regnum, sim_ppc_spr841_regnum, + sim_ppc_spr842_regnum, sim_ppc_spr843_regnum, + sim_ppc_spr844_regnum, sim_ppc_spr845_regnum, + sim_ppc_spr846_regnum, sim_ppc_spr847_regnum, + sim_ppc_spr848_regnum, sim_ppc_spr849_regnum, + sim_ppc_spr850_regnum, sim_ppc_spr851_regnum, + sim_ppc_spr852_regnum, sim_ppc_spr853_regnum, + sim_ppc_spr854_regnum, sim_ppc_spr855_regnum, + sim_ppc_spr856_regnum, sim_ppc_spr857_regnum, + sim_ppc_spr858_regnum, sim_ppc_spr859_regnum, + sim_ppc_spr860_regnum, sim_ppc_spr861_regnum, + sim_ppc_spr862_regnum, sim_ppc_spr863_regnum, + sim_ppc_spr864_regnum, sim_ppc_spr865_regnum, + sim_ppc_spr866_regnum, sim_ppc_spr867_regnum, + sim_ppc_spr868_regnum, sim_ppc_spr869_regnum, + sim_ppc_spr870_regnum, sim_ppc_spr871_regnum, + sim_ppc_spr872_regnum, sim_ppc_spr873_regnum, + sim_ppc_spr874_regnum, sim_ppc_spr875_regnum, + sim_ppc_spr876_regnum, sim_ppc_spr877_regnum, + sim_ppc_spr878_regnum, sim_ppc_spr879_regnum, + sim_ppc_spr880_regnum, sim_ppc_spr881_regnum, + sim_ppc_spr882_regnum, sim_ppc_spr883_regnum, + sim_ppc_spr884_regnum, sim_ppc_spr885_regnum, + sim_ppc_spr886_regnum, sim_ppc_spr887_regnum, + sim_ppc_spr888_regnum, sim_ppc_spr889_regnum, + sim_ppc_spr890_regnum, sim_ppc_spr891_regnum, + sim_ppc_spr892_regnum, sim_ppc_spr893_regnum, + sim_ppc_spr894_regnum, sim_ppc_spr895_regnum, + sim_ppc_spr896_regnum, sim_ppc_spr897_regnum, + sim_ppc_spr898_regnum, sim_ppc_spr899_regnum, + sim_ppc_spr900_regnum, sim_ppc_spr901_regnum, + sim_ppc_spr902_regnum, sim_ppc_spr903_regnum, + sim_ppc_spr904_regnum, sim_ppc_spr905_regnum, + sim_ppc_spr906_regnum, sim_ppc_spr907_regnum, + sim_ppc_spr908_regnum, sim_ppc_spr909_regnum, + sim_ppc_spr910_regnum, sim_ppc_spr911_regnum, + sim_ppc_spr912_regnum, sim_ppc_spr913_regnum, + sim_ppc_spr914_regnum, sim_ppc_spr915_regnum, + sim_ppc_spr916_regnum, sim_ppc_spr917_regnum, + sim_ppc_spr918_regnum, sim_ppc_spr919_regnum, + sim_ppc_spr920_regnum, sim_ppc_spr921_regnum, + sim_ppc_spr922_regnum, sim_ppc_spr923_regnum, + sim_ppc_spr924_regnum, sim_ppc_spr925_regnum, + sim_ppc_spr926_regnum, sim_ppc_spr927_regnum, + sim_ppc_spr928_regnum, sim_ppc_spr929_regnum, + sim_ppc_spr930_regnum, sim_ppc_spr931_regnum, + sim_ppc_spr932_regnum, sim_ppc_spr933_regnum, + sim_ppc_spr934_regnum, sim_ppc_spr935_regnum, + sim_ppc_spr936_regnum, sim_ppc_spr937_regnum, + sim_ppc_spr938_regnum, sim_ppc_spr939_regnum, + sim_ppc_spr940_regnum, sim_ppc_spr941_regnum, + sim_ppc_spr942_regnum, sim_ppc_spr943_regnum, + sim_ppc_spr944_regnum, sim_ppc_spr945_regnum, + sim_ppc_spr946_regnum, sim_ppc_spr947_regnum, + sim_ppc_spr948_regnum, sim_ppc_spr949_regnum, + sim_ppc_spr950_regnum, sim_ppc_spr951_regnum, + sim_ppc_spr952_regnum, sim_ppc_spr953_regnum, + sim_ppc_spr954_regnum, sim_ppc_spr955_regnum, + sim_ppc_spr956_regnum, sim_ppc_spr957_regnum, + sim_ppc_spr958_regnum, sim_ppc_spr959_regnum, + sim_ppc_spr960_regnum, sim_ppc_spr961_regnum, + sim_ppc_spr962_regnum, sim_ppc_spr963_regnum, + sim_ppc_spr964_regnum, sim_ppc_spr965_regnum, + sim_ppc_spr966_regnum, sim_ppc_spr967_regnum, + sim_ppc_spr968_regnum, sim_ppc_spr969_regnum, + sim_ppc_spr970_regnum, sim_ppc_spr971_regnum, + sim_ppc_spr972_regnum, sim_ppc_spr973_regnum, + sim_ppc_spr974_regnum, sim_ppc_spr975_regnum, + sim_ppc_spr976_regnum, sim_ppc_spr977_regnum, + sim_ppc_spr978_regnum, sim_ppc_spr979_regnum, + sim_ppc_spr980_regnum, sim_ppc_spr981_regnum, + sim_ppc_spr982_regnum, sim_ppc_spr983_regnum, + sim_ppc_spr984_regnum, sim_ppc_spr985_regnum, + sim_ppc_spr986_regnum, sim_ppc_spr987_regnum, + sim_ppc_spr988_regnum, sim_ppc_spr989_regnum, + sim_ppc_spr990_regnum, sim_ppc_spr991_regnum, + sim_ppc_spr992_regnum, sim_ppc_spr993_regnum, + sim_ppc_spr994_regnum, sim_ppc_spr995_regnum, + sim_ppc_spr996_regnum, sim_ppc_spr997_regnum, + sim_ppc_spr998_regnum, sim_ppc_spr999_regnum, + sim_ppc_spr1000_regnum, sim_ppc_spr1001_regnum, + sim_ppc_spr1002_regnum, sim_ppc_spr1003_regnum, + sim_ppc_spr1004_regnum, sim_ppc_spr1005_regnum, + sim_ppc_spr1006_regnum, sim_ppc_spr1007_regnum, + sim_ppc_spr1008_regnum, sim_ppc_spr1009_regnum, + sim_ppc_spr1010_regnum, sim_ppc_spr1011_regnum, + sim_ppc_spr1012_regnum, sim_ppc_spr1013_regnum, + sim_ppc_spr1014_regnum, sim_ppc_spr1015_regnum, + sim_ppc_spr1016_regnum, sim_ppc_spr1017_regnum, + sim_ppc_spr1018_regnum, sim_ppc_spr1019_regnum, + sim_ppc_spr1020_regnum, sim_ppc_spr1021_regnum, + sim_ppc_spr1022_regnum, sim_ppc_spr1023_regnum + }; + + +/* Sizes of various register sets. */ +enum + { + sim_ppc_num_gprs = 32, + sim_ppc_num_fprs = 32, + sim_ppc_num_vrs = 32, + sim_ppc_num_srs = 16, + sim_ppc_num_sprs = 1024, + }; + + +#ifdef __cplusplus +} +#endif + +#endif /* SIM_PPC_H */ diff --git a/sim/ppc/gdb-sim.c b/sim/ppc/gdb-sim.c new file mode 100644 index 00000000000..648d8ef1285 --- /dev/null +++ b/sim/ppc/gdb-sim.c @@ -0,0 +1,1295 @@ +/* This file is part of GDB. + + Copyright 2004 Free Software Foundation, Inc. + + 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 "psim.h" +#include "options.h" +#include "registers.h" + +#include "ansidecl.h" +#include "sim_callbacks.h" +#include "gdb/callback.h" +#include "gdb/remote-sim.h" +#include "gdb/sim-ppc.h" + +/* Return the name of the register whose number is REGNUM, or zero if + REGNUM is an invalid register number. */ + +static const char * +regnum2spr (int spr) +{ + if (spr_is_valid (spr)) + return spr_name (spr); + else + return NULL; +} + +static const char * +regnum2name (int regnum) +{ + switch (regnum) + { + case sim_ppc_r0_regnum: return "r0"; + case sim_ppc_r1_regnum: return "r1"; + case sim_ppc_r2_regnum: return "r2"; + case sim_ppc_r3_regnum: return "r3"; + case sim_ppc_r4_regnum: return "r4"; + case sim_ppc_r5_regnum: return "r5"; + case sim_ppc_r6_regnum: return "r6"; + case sim_ppc_r7_regnum: return "r7"; + case sim_ppc_r8_regnum: return "r8"; + case sim_ppc_r9_regnum: return "r9"; + case sim_ppc_r10_regnum: return "r10"; + case sim_ppc_r11_regnum: return "r11"; + case sim_ppc_r12_regnum: return "r12"; + case sim_ppc_r13_regnum: return "r13"; + case sim_ppc_r14_regnum: return "r14"; + case sim_ppc_r15_regnum: return "r15"; + case sim_ppc_r16_regnum: return "r16"; + case sim_ppc_r17_regnum: return "r17"; + case sim_ppc_r18_regnum: return "r18"; + case sim_ppc_r19_regnum: return "r19"; + case sim_ppc_r20_regnum: return "r20"; + case sim_ppc_r21_regnum: return "r21"; + case sim_ppc_r22_regnum: return "r22"; + case sim_ppc_r23_regnum: return "r23"; + case sim_ppc_r24_regnum: return "r24"; + case sim_ppc_r25_regnum: return "r25"; + case sim_ppc_r26_regnum: return "r26"; + case sim_ppc_r27_regnum: return "r27"; + case sim_ppc_r28_regnum: return "r28"; + case sim_ppc_r29_regnum: return "r29"; + case sim_ppc_r30_regnum: return "r30"; + case sim_ppc_r31_regnum: return "r31"; + + case sim_ppc_f0_regnum: return "f0"; + case sim_ppc_f1_regnum: return "f1"; + case sim_ppc_f2_regnum: return "f2"; + case sim_ppc_f3_regnum: return "f3"; + case sim_ppc_f4_regnum: return "f4"; + case sim_ppc_f5_regnum: return "f5"; + case sim_ppc_f6_regnum: return "f6"; + case sim_ppc_f7_regnum: return "f7"; + case sim_ppc_f8_regnum: return "f8"; + case sim_ppc_f9_regnum: return "f9"; + case sim_ppc_f10_regnum: return "f10"; + case sim_ppc_f11_regnum: return "f11"; + case sim_ppc_f12_regnum: return "f12"; + case sim_ppc_f13_regnum: return "f13"; + case sim_ppc_f14_regnum: return "f14"; + case sim_ppc_f15_regnum: return "f15"; + case sim_ppc_f16_regnum: return "f16"; + case sim_ppc_f17_regnum: return "f17"; + case sim_ppc_f18_regnum: return "f18"; + case sim_ppc_f19_regnum: return "f19"; + case sim_ppc_f20_regnum: return "f20"; + case sim_ppc_f21_regnum: return "f21"; + case sim_ppc_f22_regnum: return "f22"; + case sim_ppc_f23_regnum: return "f23"; + case sim_ppc_f24_regnum: return "f24"; + case sim_ppc_f25_regnum: return "f25"; + case sim_ppc_f26_regnum: return "f26"; + case sim_ppc_f27_regnum: return "f27"; + case sim_ppc_f28_regnum: return "f28"; + case sim_ppc_f29_regnum: return "f29"; + case sim_ppc_f30_regnum: return "f30"; + case sim_ppc_f31_regnum: return "f31"; + + case sim_ppc_vr0_regnum: return "vr0"; + case sim_ppc_vr1_regnum: return "vr1"; + case sim_ppc_vr2_regnum: return "vr2"; + case sim_ppc_vr3_regnum: return "vr3"; + case sim_ppc_vr4_regnum: return "vr4"; + case sim_ppc_vr5_regnum: return "vr5"; + case sim_ppc_vr6_regnum: return "vr6"; + case sim_ppc_vr7_regnum: return "vr7"; + case sim_ppc_vr8_regnum: return "vr8"; + case sim_ppc_vr9_regnum: return "vr9"; + case sim_ppc_vr10_regnum: return "vr10"; + case sim_ppc_vr11_regnum: return "vr11"; + case sim_ppc_vr12_regnum: return "vr12"; + case sim_ppc_vr13_regnum: return "vr13"; + case sim_ppc_vr14_regnum: return "vr14"; + case sim_ppc_vr15_regnum: return "vr15"; + case sim_ppc_vr16_regnum: return "vr16"; + case sim_ppc_vr17_regnum: return "vr17"; + case sim_ppc_vr18_regnum: return "vr18"; + case sim_ppc_vr19_regnum: return "vr19"; + case sim_ppc_vr20_regnum: return "vr20"; + case sim_ppc_vr21_regnum: return "vr21"; + case sim_ppc_vr22_regnum: return "vr22"; + case sim_ppc_vr23_regnum: return "vr23"; + case sim_ppc_vr24_regnum: return "vr24"; + case sim_ppc_vr25_regnum: return "vr25"; + case sim_ppc_vr26_regnum: return "vr26"; + case sim_ppc_vr27_regnum: return "vr27"; + case sim_ppc_vr28_regnum: return "vr28"; + case sim_ppc_vr29_regnum: return "vr29"; + case sim_ppc_vr30_regnum: return "vr30"; + case sim_ppc_vr31_regnum: return "vr31"; + case sim_ppc_rh0_regnum: return "rh0"; + case sim_ppc_rh1_regnum: return "rh1"; + case sim_ppc_rh2_regnum: return "rh2"; + case sim_ppc_rh3_regnum: return "rh3"; + case sim_ppc_rh4_regnum: return "rh4"; + case sim_ppc_rh5_regnum: return "rh5"; + case sim_ppc_rh6_regnum: return "rh6"; + case sim_ppc_rh7_regnum: return "rh7"; + case sim_ppc_rh8_regnum: return "rh8"; + case sim_ppc_rh9_regnum: return "rh9"; + case sim_ppc_rh10_regnum: return "rh10"; + case sim_ppc_rh11_regnum: return "rh11"; + case sim_ppc_rh12_regnum: return "rh12"; + case sim_ppc_rh13_regnum: return "rh13"; + case sim_ppc_rh14_regnum: return "rh14"; + case sim_ppc_rh15_regnum: return "rh15"; + case sim_ppc_rh16_regnum: return "rh16"; + case sim_ppc_rh17_regnum: return "rh17"; + case sim_ppc_rh18_regnum: return "rh18"; + case sim_ppc_rh19_regnum: return "rh19"; + case sim_ppc_rh20_regnum: return "rh20"; + case sim_ppc_rh21_regnum: return "rh21"; + case sim_ppc_rh22_regnum: return "rh22"; + case sim_ppc_rh23_regnum: return "rh23"; + case sim_ppc_rh24_regnum: return "rh24"; + case sim_ppc_rh25_regnum: return "rh25"; + case sim_ppc_rh26_regnum: return "rh26"; + case sim_ppc_rh27_regnum: return "rh27"; + case sim_ppc_rh28_regnum: return "rh28"; + case sim_ppc_rh29_regnum: return "rh29"; + case sim_ppc_rh30_regnum: return "rh30"; + case sim_ppc_rh31_regnum: return "rh31"; + + case sim_ppc_ev0_regnum: return "ev0"; + case sim_ppc_ev1_regnum: return "ev1"; + case sim_ppc_ev2_regnum: return "ev2"; + case sim_ppc_ev3_regnum: return "ev3"; + case sim_ppc_ev4_regnum: return "ev4"; + case sim_ppc_ev5_regnum: return "ev5"; + case sim_ppc_ev6_regnum: return "ev6"; + case sim_ppc_ev7_regnum: return "ev7"; + case sim_ppc_ev8_regnum: return "ev8"; + case sim_ppc_ev9_regnum: return "ev9"; + case sim_ppc_ev10_regnum: return "ev10"; + case sim_ppc_ev11_regnum: return "ev11"; + case sim_ppc_ev12_regnum: return "ev12"; + case sim_ppc_ev13_regnum: return "ev13"; + case sim_ppc_ev14_regnum: return "ev14"; + case sim_ppc_ev15_regnum: return "ev15"; + case sim_ppc_ev16_regnum: return "ev16"; + case sim_ppc_ev17_regnum: return "ev17"; + case sim_ppc_ev18_regnum: return "ev18"; + case sim_ppc_ev19_regnum: return "ev19"; + case sim_ppc_ev20_regnum: return "ev20"; + case sim_ppc_ev21_regnum: return "ev21"; + case sim_ppc_ev22_regnum: return "ev22"; + case sim_ppc_ev23_regnum: return "ev23"; + case sim_ppc_ev24_regnum: return "ev24"; + case sim_ppc_ev25_regnum: return "ev25"; + case sim_ppc_ev26_regnum: return "ev26"; + case sim_ppc_ev27_regnum: return "ev27"; + case sim_ppc_ev28_regnum: return "ev28"; + case sim_ppc_ev29_regnum: return "ev29"; + case sim_ppc_ev30_regnum: return "ev30"; + case sim_ppc_ev31_regnum: return "ev31"; + + case sim_ppc_sr0_regnum: return "sr0"; + case sim_ppc_sr1_regnum: return "sr1"; + case sim_ppc_sr2_regnum: return "sr2"; + case sim_ppc_sr3_regnum: return "sr3"; + case sim_ppc_sr4_regnum: return "sr4"; + case sim_ppc_sr5_regnum: return "sr5"; + case sim_ppc_sr6_regnum: return "sr6"; + case sim_ppc_sr7_regnum: return "sr7"; + case sim_ppc_sr8_regnum: return "sr8"; + case sim_ppc_sr9_regnum: return "sr9"; + case sim_ppc_sr10_regnum: return "sr10"; + case sim_ppc_sr11_regnum: return "sr11"; + case sim_ppc_sr12_regnum: return "sr12"; + case sim_ppc_sr13_regnum: return "sr13"; + case sim_ppc_sr14_regnum: return "sr14"; + case sim_ppc_sr15_regnum: return "sr15"; + + case sim_ppc_pc_regnum: return "pc"; + case sim_ppc_ps_regnum: return "ps"; + case sim_ppc_cr_regnum: return "cr"; + case sim_ppc_fpscr_regnum: return "fpscr"; + case sim_ppc_acc_regnum: return "acc"; + case sim_ppc_vscr_regnum: return "vscr"; + + case sim_ppc_spr0_regnum: return regnum2spr (0); + case sim_ppc_spr1_regnum: return regnum2spr (1); + case sim_ppc_spr2_regnum: return regnum2spr (2); + case sim_ppc_spr3_regnum: return regnum2spr (3); + case sim_ppc_spr4_regnum: return regnum2spr (4); + case sim_ppc_spr5_regnum: return regnum2spr (5); + case sim_ppc_spr6_regnum: return regnum2spr (6); + case sim_ppc_spr7_regnum: return regnum2spr (7); + case sim_ppc_spr8_regnum: return regnum2spr (8); + case sim_ppc_spr9_regnum: return regnum2spr (9); + case sim_ppc_spr10_regnum: return regnum2spr (10); + case sim_ppc_spr11_regnum: return regnum2spr (11); + case sim_ppc_spr12_regnum: return regnum2spr (12); + case sim_ppc_spr13_regnum: return regnum2spr (13); + case sim_ppc_spr14_regnum: return regnum2spr (14); + case sim_ppc_spr15_regnum: return regnum2spr (15); + case sim_ppc_spr16_regnum: return regnum2spr (16); + case sim_ppc_spr17_regnum: return regnum2spr (17); + case sim_ppc_spr18_regnum: return regnum2spr (18); + case sim_ppc_spr19_regnum: return regnum2spr (19); + case sim_ppc_spr20_regnum: return regnum2spr (20); + case sim_ppc_spr21_regnum: return regnum2spr (21); + case sim_ppc_spr22_regnum: return regnum2spr (22); + case sim_ppc_spr23_regnum: return regnum2spr (23); + case sim_ppc_spr24_regnum: return regnum2spr (24); + case sim_ppc_spr25_regnum: return regnum2spr (25); + case sim_ppc_spr26_regnum: return regnum2spr (26); + case sim_ppc_spr27_regnum: return regnum2spr (27); + case sim_ppc_spr28_regnum: return regnum2spr (28); + case sim_ppc_spr29_regnum: return regnum2spr (29); + case sim_ppc_spr30_regnum: return regnum2spr (30); + case sim_ppc_spr31_regnum: return regnum2spr (31); + case sim_ppc_spr32_regnum: return regnum2spr (32); + case sim_ppc_spr33_regnum: return regnum2spr (33); + case sim_ppc_spr34_regnum: return regnum2spr (34); + case sim_ppc_spr35_regnum: return regnum2spr (35); + case sim_ppc_spr36_regnum: return regnum2spr (36); + case sim_ppc_spr37_regnum: return regnum2spr (37); + case sim_ppc_spr38_regnum: return regnum2spr (38); + case sim_ppc_spr39_regnum: return regnum2spr (39); + case sim_ppc_spr40_regnum: return regnum2spr (40); + case sim_ppc_spr41_regnum: return regnum2spr (41); + case sim_ppc_spr42_regnum: return regnum2spr (42); + case sim_ppc_spr43_regnum: return regnum2spr (43); + case sim_ppc_spr44_regnum: return regnum2spr (44); + case sim_ppc_spr45_regnum: return regnum2spr (45); + case sim_ppc_spr46_regnum: return regnum2spr (46); + case sim_ppc_spr47_regnum: return regnum2spr (47); + case sim_ppc_spr48_regnum: return regnum2spr (48); + case sim_ppc_spr49_regnum: return regnum2spr (49); + case sim_ppc_spr50_regnum: return regnum2spr (50); + case sim_ppc_spr51_regnum: return regnum2spr (51); + case sim_ppc_spr52_regnum: return regnum2spr (52); + case sim_ppc_spr53_regnum: return regnum2spr (53); + case sim_ppc_spr54_regnum: return regnum2spr (54); + case sim_ppc_spr55_regnum: return regnum2spr (55); + case sim_ppc_spr56_regnum: return regnum2spr (56); + case sim_ppc_spr57_regnum: return regnum2spr (57); + case sim_ppc_spr58_regnum: return regnum2spr (58); + case sim_ppc_spr59_regnum: return regnum2spr (59); + case sim_ppc_spr60_regnum: return regnum2spr (60); + case sim_ppc_spr61_regnum: return regnum2spr (61); + case sim_ppc_spr62_regnum: return regnum2spr (62); + case sim_ppc_spr63_regnum: return regnum2spr (63); + case sim_ppc_spr64_regnum: return regnum2spr (64); + case sim_ppc_spr65_regnum: return regnum2spr (65); + case sim_ppc_spr66_regnum: return regnum2spr (66); + case sim_ppc_spr67_regnum: return regnum2spr (67); + case sim_ppc_spr68_regnum: return regnum2spr (68); + case sim_ppc_spr69_regnum: return regnum2spr (69); + case sim_ppc_spr70_regnum: return regnum2spr (70); + case sim_ppc_spr71_regnum: return regnum2spr (71); + case sim_ppc_spr72_regnum: return regnum2spr (72); + case sim_ppc_spr73_regnum: return regnum2spr (73); + case sim_ppc_spr74_regnum: return regnum2spr (74); + case sim_ppc_spr75_regnum: return regnum2spr (75); + case sim_ppc_spr76_regnum: return regnum2spr (76); + case sim_ppc_spr77_regnum: return regnum2spr (77); + case sim_ppc_spr78_regnum: return regnum2spr (78); + case sim_ppc_spr79_regnum: return regnum2spr (79); + case sim_ppc_spr80_regnum: return regnum2spr (80); + case sim_ppc_spr81_regnum: return regnum2spr (81); + case sim_ppc_spr82_regnum: return regnum2spr (82); + case sim_ppc_spr83_regnum: return regnum2spr (83); + case sim_ppc_spr84_regnum: return regnum2spr (84); + case sim_ppc_spr85_regnum: return regnum2spr (85); + case sim_ppc_spr86_regnum: return regnum2spr (86); + case sim_ppc_spr87_regnum: return regnum2spr (87); + case sim_ppc_spr88_regnum: return regnum2spr (88); + case sim_ppc_spr89_regnum: return regnum2spr (89); + case sim_ppc_spr90_regnum: return regnum2spr (90); + case sim_ppc_spr91_regnum: return regnum2spr (91); + case sim_ppc_spr92_regnum: return regnum2spr (92); + case sim_ppc_spr93_regnum: return regnum2spr (93); + case sim_ppc_spr94_regnum: return regnum2spr (94); + case sim_ppc_spr95_regnum: return regnum2spr (95); + case sim_ppc_spr96_regnum: return regnum2spr (96); + case sim_ppc_spr97_regnum: return regnum2spr (97); + case sim_ppc_spr98_regnum: return regnum2spr (98); + case sim_ppc_spr99_regnum: return regnum2spr (99); + case sim_ppc_spr100_regnum: return regnum2spr (100); + case sim_ppc_spr101_regnum: return regnum2spr (101); + case sim_ppc_spr102_regnum: return regnum2spr (102); + case sim_ppc_spr103_regnum: return regnum2spr (103); + case sim_ppc_spr104_regnum: return regnum2spr (104); + case sim_ppc_spr105_regnum: return regnum2spr (105); + case sim_ppc_spr106_regnum: return regnum2spr (106); + case sim_ppc_spr107_regnum: return regnum2spr (107); + case sim_ppc_spr108_regnum: return regnum2spr (108); + case sim_ppc_spr109_regnum: return regnum2spr (109); + case sim_ppc_spr110_regnum: return regnum2spr (110); + case sim_ppc_spr111_regnum: return regnum2spr (111); + case sim_ppc_spr112_regnum: return regnum2spr (112); + case sim_ppc_spr113_regnum: return regnum2spr (113); + case sim_ppc_spr114_regnum: return regnum2spr (114); + case sim_ppc_spr115_regnum: return regnum2spr (115); + case sim_ppc_spr116_regnum: return regnum2spr (116); + case sim_ppc_spr117_regnum: return regnum2spr (117); + case sim_ppc_spr118_regnum: return regnum2spr (118); + case sim_ppc_spr119_regnum: return regnum2spr (119); + case sim_ppc_spr120_regnum: return regnum2spr (120); + case sim_ppc_spr121_regnum: return regnum2spr (121); + case sim_ppc_spr122_regnum: return regnum2spr (122); + case sim_ppc_spr123_regnum: return regnum2spr (123); + case sim_ppc_spr124_regnum: return regnum2spr (124); + case sim_ppc_spr125_regnum: return regnum2spr (125); + case sim_ppc_spr126_regnum: return regnum2spr (126); + case sim_ppc_spr127_regnum: return regnum2spr (127); + case sim_ppc_spr128_regnum: return regnum2spr (128); + case sim_ppc_spr129_regnum: return regnum2spr (129); + case sim_ppc_spr130_regnum: return regnum2spr (130); + case sim_ppc_spr131_regnum: return regnum2spr (131); + case sim_ppc_spr132_regnum: return regnum2spr (132); + case sim_ppc_spr133_regnum: return regnum2spr (133); + case sim_ppc_spr134_regnum: return regnum2spr (134); + case sim_ppc_spr135_regnum: return regnum2spr (135); + case sim_ppc_spr136_regnum: return regnum2spr (136); + case sim_ppc_spr137_regnum: return regnum2spr (137); + case sim_ppc_spr138_regnum: return regnum2spr (138); + case sim_ppc_spr139_regnum: return regnum2spr (139); + case sim_ppc_spr140_regnum: return regnum2spr (140); + case sim_ppc_spr141_regnum: return regnum2spr (141); + case sim_ppc_spr142_regnum: return regnum2spr (142); + case sim_ppc_spr143_regnum: return regnum2spr (143); + case sim_ppc_spr144_regnum: return regnum2spr (144); + case sim_ppc_spr145_regnum: return regnum2spr (145); + case sim_ppc_spr146_regnum: return regnum2spr (146); + case sim_ppc_spr147_regnum: return regnum2spr (147); + case sim_ppc_spr148_regnum: return regnum2spr (148); + case sim_ppc_spr149_regnum: return regnum2spr (149); + case sim_ppc_spr150_regnum: return regnum2spr (150); + case sim_ppc_spr151_regnum: return regnum2spr (151); + case sim_ppc_spr152_regnum: return regnum2spr (152); + case sim_ppc_spr153_regnum: return regnum2spr (153); + case sim_ppc_spr154_regnum: return regnum2spr (154); + case sim_ppc_spr155_regnum: return regnum2spr (155); + case sim_ppc_spr156_regnum: return regnum2spr (156); + case sim_ppc_spr157_regnum: return regnum2spr (157); + case sim_ppc_spr158_regnum: return regnum2spr (158); + case sim_ppc_spr159_regnum: return regnum2spr (159); + case sim_ppc_spr160_regnum: return regnum2spr (160); + case sim_ppc_spr161_regnum: return regnum2spr (161); + case sim_ppc_spr162_regnum: return regnum2spr (162); + case sim_ppc_spr163_regnum: return regnum2spr (163); + case sim_ppc_spr164_regnum: return regnum2spr (164); + case sim_ppc_spr165_regnum: return regnum2spr (165); + case sim_ppc_spr166_regnum: return regnum2spr (166); + case sim_ppc_spr167_regnum: return regnum2spr (167); + case sim_ppc_spr168_regnum: return regnum2spr (168); + case sim_ppc_spr169_regnum: return regnum2spr (169); + case sim_ppc_spr170_regnum: return regnum2spr (170); + case sim_ppc_spr171_regnum: return regnum2spr (171); + case sim_ppc_spr172_regnum: return regnum2spr (172); + case sim_ppc_spr173_regnum: return regnum2spr (173); + case sim_ppc_spr174_regnum: return regnum2spr (174); + case sim_ppc_spr175_regnum: return regnum2spr (175); + case sim_ppc_spr176_regnum: return regnum2spr (176); + case sim_ppc_spr177_regnum: return regnum2spr (177); + case sim_ppc_spr178_regnum: return regnum2spr (178); + case sim_ppc_spr179_regnum: return regnum2spr (179); + case sim_ppc_spr180_regnum: return regnum2spr (180); + case sim_ppc_spr181_regnum: return regnum2spr (181); + case sim_ppc_spr182_regnum: return regnum2spr (182); + case sim_ppc_spr183_regnum: return regnum2spr (183); + case sim_ppc_spr184_regnum: return regnum2spr (184); + case sim_ppc_spr185_regnum: return regnum2spr (185); + case sim_ppc_spr186_regnum: return regnum2spr (186); + case sim_ppc_spr187_regnum: return regnum2spr (187); + case sim_ppc_spr188_regnum: return regnum2spr (188); + case sim_ppc_spr189_regnum: return regnum2spr (189); + case sim_ppc_spr190_regnum: return regnum2spr (190); + case sim_ppc_spr191_regnum: return regnum2spr (191); + case sim_ppc_spr192_regnum: return regnum2spr (192); + case sim_ppc_spr193_regnum: return regnum2spr (193); + case sim_ppc_spr194_regnum: return regnum2spr (194); + case sim_ppc_spr195_regnum: return regnum2spr (195); + case sim_ppc_spr196_regnum: return regnum2spr (196); + case sim_ppc_spr197_regnum: return regnum2spr (197); + case sim_ppc_spr198_regnum: return regnum2spr (198); + case sim_ppc_spr199_regnum: return regnum2spr (199); + case sim_ppc_spr200_regnum: return regnum2spr (200); + case sim_ppc_spr201_regnum: return regnum2spr (201); + case sim_ppc_spr202_regnum: return regnum2spr (202); + case sim_ppc_spr203_regnum: return regnum2spr (203); + case sim_ppc_spr204_regnum: return regnum2spr (204); + case sim_ppc_spr205_regnum: return regnum2spr (205); + case sim_ppc_spr206_regnum: return regnum2spr (206); + case sim_ppc_spr207_regnum: return regnum2spr (207); + case sim_ppc_spr208_regnum: return regnum2spr (208); + case sim_ppc_spr209_regnum: return regnum2spr (209); + case sim_ppc_spr210_regnum: return regnum2spr (210); + case sim_ppc_spr211_regnum: return regnum2spr (211); + case sim_ppc_spr212_regnum: return regnum2spr (212); + case sim_ppc_spr213_regnum: return regnum2spr (213); + case sim_ppc_spr214_regnum: return regnum2spr (214); + case sim_ppc_spr215_regnum: return regnum2spr (215); + case sim_ppc_spr216_regnum: return regnum2spr (216); + case sim_ppc_spr217_regnum: return regnum2spr (217); + case sim_ppc_spr218_regnum: return regnum2spr (218); + case sim_ppc_spr219_regnum: return regnum2spr (219); + case sim_ppc_spr220_regnum: return regnum2spr (220); + case sim_ppc_spr221_regnum: return regnum2spr (221); + case sim_ppc_spr222_regnum: return regnum2spr (222); + case sim_ppc_spr223_regnum: return regnum2spr (223); + case sim_ppc_spr224_regnum: return regnum2spr (224); + case sim_ppc_spr225_regnum: return regnum2spr (225); + case sim_ppc_spr226_regnum: return regnum2spr (226); + case sim_ppc_spr227_regnum: return regnum2spr (227); + case sim_ppc_spr228_regnum: return regnum2spr (228); + case sim_ppc_spr229_regnum: return regnum2spr (229); + case sim_ppc_spr230_regnum: return regnum2spr (230); + case sim_ppc_spr231_regnum: return regnum2spr (231); + case sim_ppc_spr232_regnum: return regnum2spr (232); + case sim_ppc_spr233_regnum: return regnum2spr (233); + case sim_ppc_spr234_regnum: return regnum2spr (234); + case sim_ppc_spr235_regnum: return regnum2spr (235); + case sim_ppc_spr236_regnum: return regnum2spr (236); + case sim_ppc_spr237_regnum: return regnum2spr (237); + case sim_ppc_spr238_regnum: return regnum2spr (238); + case sim_ppc_spr239_regnum: return regnum2spr (239); + case sim_ppc_spr240_regnum: return regnum2spr (240); + case sim_ppc_spr241_regnum: return regnum2spr (241); + case sim_ppc_spr242_regnum: return regnum2spr (242); + case sim_ppc_spr243_regnum: return regnum2spr (243); + case sim_ppc_spr244_regnum: return regnum2spr (244); + case sim_ppc_spr245_regnum: return regnum2spr (245); + case sim_ppc_spr246_regnum: return regnum2spr (246); + case sim_ppc_spr247_regnum: return regnum2spr (247); + case sim_ppc_spr248_regnum: return regnum2spr (248); + case sim_ppc_spr249_regnum: return regnum2spr (249); + case sim_ppc_spr250_regnum: return regnum2spr (250); + case sim_ppc_spr251_regnum: return regnum2spr (251); + case sim_ppc_spr252_regnum: return regnum2spr (252); + case sim_ppc_spr253_regnum: return regnum2spr (253); + case sim_ppc_spr254_regnum: return regnum2spr (254); + case sim_ppc_spr255_regnum: return regnum2spr (255); + case sim_ppc_spr256_regnum: return regnum2spr (256); + case sim_ppc_spr257_regnum: return regnum2spr (257); + case sim_ppc_spr258_regnum: return regnum2spr (258); + case sim_ppc_spr259_regnum: return regnum2spr (259); + case sim_ppc_spr260_regnum: return regnum2spr (260); + case sim_ppc_spr261_regnum: return regnum2spr (261); + case sim_ppc_spr262_regnum: return regnum2spr (262); + case sim_ppc_spr263_regnum: return regnum2spr (263); + case sim_ppc_spr264_regnum: return regnum2spr (264); + case sim_ppc_spr265_regnum: return regnum2spr (265); + case sim_ppc_spr266_regnum: return regnum2spr (266); + case sim_ppc_spr267_regnum: return regnum2spr (267); + case sim_ppc_spr268_regnum: return regnum2spr (268); + case sim_ppc_spr269_regnum: return regnum2spr (269); + case sim_ppc_spr270_regnum: return regnum2spr (270); + case sim_ppc_spr271_regnum: return regnum2spr (271); + case sim_ppc_spr272_regnum: return regnum2spr (272); + case sim_ppc_spr273_regnum: return regnum2spr (273); + case sim_ppc_spr274_regnum: return regnum2spr (274); + case sim_ppc_spr275_regnum: return regnum2spr (275); + case sim_ppc_spr276_regnum: return regnum2spr (276); + case sim_ppc_spr277_regnum: return regnum2spr (277); + case sim_ppc_spr278_regnum: return regnum2spr (278); + case sim_ppc_spr279_regnum: return regnum2spr (279); + case sim_ppc_spr280_regnum: return regnum2spr (280); + case sim_ppc_spr281_regnum: return regnum2spr (281); + case sim_ppc_spr282_regnum: return regnum2spr (282); + case sim_ppc_spr283_regnum: return regnum2spr (283); + case sim_ppc_spr284_regnum: return regnum2spr (284); + case sim_ppc_spr285_regnum: return regnum2spr (285); + case sim_ppc_spr286_regnum: return regnum2spr (286); + case sim_ppc_spr287_regnum: return regnum2spr (287); + case sim_ppc_spr288_regnum: return regnum2spr (288); + case sim_ppc_spr289_regnum: return regnum2spr (289); + case sim_ppc_spr290_regnum: return regnum2spr (290); + case sim_ppc_spr291_regnum: return regnum2spr (291); + case sim_ppc_spr292_regnum: return regnum2spr (292); + case sim_ppc_spr293_regnum: return regnum2spr (293); + case sim_ppc_spr294_regnum: return regnum2spr (294); + case sim_ppc_spr295_regnum: return regnum2spr (295); + case sim_ppc_spr296_regnum: return regnum2spr (296); + case sim_ppc_spr297_regnum: return regnum2spr (297); + case sim_ppc_spr298_regnum: return regnum2spr (298); + case sim_ppc_spr299_regnum: return regnum2spr (299); + case sim_ppc_spr300_regnum: return regnum2spr (300); + case sim_ppc_spr301_regnum: return regnum2spr (301); + case sim_ppc_spr302_regnum: return regnum2spr (302); + case sim_ppc_spr303_regnum: return regnum2spr (303); + case sim_ppc_spr304_regnum: return regnum2spr (304); + case sim_ppc_spr305_regnum: return regnum2spr (305); + case sim_ppc_spr306_regnum: return regnum2spr (306); + case sim_ppc_spr307_regnum: return regnum2spr (307); + case sim_ppc_spr308_regnum: return regnum2spr (308); + case sim_ppc_spr309_regnum: return regnum2spr (309); + case sim_ppc_spr310_regnum: return regnum2spr (310); + case sim_ppc_spr311_regnum: return regnum2spr (311); + case sim_ppc_spr312_regnum: return regnum2spr (312); + case sim_ppc_spr313_regnum: return regnum2spr (313); + case sim_ppc_spr314_regnum: return regnum2spr (314); + case sim_ppc_spr315_regnum: return regnum2spr (315); + case sim_ppc_spr316_regnum: return regnum2spr (316); + case sim_ppc_spr317_regnum: return regnum2spr (317); + case sim_ppc_spr318_regnum: return regnum2spr (318); + case sim_ppc_spr319_regnum: return regnum2spr (319); + case sim_ppc_spr320_regnum: return regnum2spr (320); + case sim_ppc_spr321_regnum: return regnum2spr (321); + case sim_ppc_spr322_regnum: return regnum2spr (322); + case sim_ppc_spr323_regnum: return regnum2spr (323); + case sim_ppc_spr324_regnum: return regnum2spr (324); + case sim_ppc_spr325_regnum: return regnum2spr (325); + case sim_ppc_spr326_regnum: return regnum2spr (326); + case sim_ppc_spr327_regnum: return regnum2spr (327); + case sim_ppc_spr328_regnum: return regnum2spr (328); + case sim_ppc_spr329_regnum: return regnum2spr (329); + case sim_ppc_spr330_regnum: return regnum2spr (330); + case sim_ppc_spr331_regnum: return regnum2spr (331); + case sim_ppc_spr332_regnum: return regnum2spr (332); + case sim_ppc_spr333_regnum: return regnum2spr (333); + case sim_ppc_spr334_regnum: return regnum2spr (334); + case sim_ppc_spr335_regnum: return regnum2spr (335); + case sim_ppc_spr336_regnum: return regnum2spr (336); + case sim_ppc_spr337_regnum: return regnum2spr (337); + case sim_ppc_spr338_regnum: return regnum2spr (338); + case sim_ppc_spr339_regnum: return regnum2spr (339); + case sim_ppc_spr340_regnum: return regnum2spr (340); + case sim_ppc_spr341_regnum: return regnum2spr (341); + case sim_ppc_spr342_regnum: return regnum2spr (342); + case sim_ppc_spr343_regnum: return regnum2spr (343); + case sim_ppc_spr344_regnum: return regnum2spr (344); + case sim_ppc_spr345_regnum: return regnum2spr (345); + case sim_ppc_spr346_regnum: return regnum2spr (346); + case sim_ppc_spr347_regnum: return regnum2spr (347); + case sim_ppc_spr348_regnum: return regnum2spr (348); + case sim_ppc_spr349_regnum: return regnum2spr (349); + case sim_ppc_spr350_regnum: return regnum2spr (350); + case sim_ppc_spr351_regnum: return regnum2spr (351); + case sim_ppc_spr352_regnum: return regnum2spr (352); + case sim_ppc_spr353_regnum: return regnum2spr (353); + case sim_ppc_spr354_regnum: return regnum2spr (354); + case sim_ppc_spr355_regnum: return regnum2spr (355); + case sim_ppc_spr356_regnum: return regnum2spr (356); + case sim_ppc_spr357_regnum: return regnum2spr (357); + case sim_ppc_spr358_regnum: return regnum2spr (358); + case sim_ppc_spr359_regnum: return regnum2spr (359); + case sim_ppc_spr360_regnum: return regnum2spr (360); + case sim_ppc_spr361_regnum: return regnum2spr (361); + case sim_ppc_spr362_regnum: return regnum2spr (362); + case sim_ppc_spr363_regnum: return regnum2spr (363); + case sim_ppc_spr364_regnum: return regnum2spr (364); + case sim_ppc_spr365_regnum: return regnum2spr (365); + case sim_ppc_spr366_regnum: return regnum2spr (366); + case sim_ppc_spr367_regnum: return regnum2spr (367); + case sim_ppc_spr368_regnum: return regnum2spr (368); + case sim_ppc_spr369_regnum: return regnum2spr (369); + case sim_ppc_spr370_regnum: return regnum2spr (370); + case sim_ppc_spr371_regnum: return regnum2spr (371); + case sim_ppc_spr372_regnum: return regnum2spr (372); + case sim_ppc_spr373_regnum: return regnum2spr (373); + case sim_ppc_spr374_regnum: return regnum2spr (374); + case sim_ppc_spr375_regnum: return regnum2spr (375); + case sim_ppc_spr376_regnum: return regnum2spr (376); + case sim_ppc_spr377_regnum: return regnum2spr (377); + case sim_ppc_spr378_regnum: return regnum2spr (378); + case sim_ppc_spr379_regnum: return regnum2spr (379); + case sim_ppc_spr380_regnum: return regnum2spr (380); + case sim_ppc_spr381_regnum: return regnum2spr (381); + case sim_ppc_spr382_regnum: return regnum2spr (382); + case sim_ppc_spr383_regnum: return regnum2spr (383); + case sim_ppc_spr384_regnum: return regnum2spr (384); + case sim_ppc_spr385_regnum: return regnum2spr (385); + case sim_ppc_spr386_regnum: return regnum2spr (386); + case sim_ppc_spr387_regnum: return regnum2spr (387); + case sim_ppc_spr388_regnum: return regnum2spr (388); + case sim_ppc_spr389_regnum: return regnum2spr (389); + case sim_ppc_spr390_regnum: return regnum2spr (390); + case sim_ppc_spr391_regnum: return regnum2spr (391); + case sim_ppc_spr392_regnum: return regnum2spr (392); + case sim_ppc_spr393_regnum: return regnum2spr (393); + case sim_ppc_spr394_regnum: return regnum2spr (394); + case sim_ppc_spr395_regnum: return regnum2spr (395); + case sim_ppc_spr396_regnum: return regnum2spr (396); + case sim_ppc_spr397_regnum: return regnum2spr (397); + case sim_ppc_spr398_regnum: return regnum2spr (398); + case sim_ppc_spr399_regnum: return regnum2spr (399); + case sim_ppc_spr400_regnum: return regnum2spr (400); + case sim_ppc_spr401_regnum: return regnum2spr (401); + case sim_ppc_spr402_regnum: return regnum2spr (402); + case sim_ppc_spr403_regnum: return regnum2spr (403); + case sim_ppc_spr404_regnum: return regnum2spr (404); + case sim_ppc_spr405_regnum: return regnum2spr (405); + case sim_ppc_spr406_regnum: return regnum2spr (406); + case sim_ppc_spr407_regnum: return regnum2spr (407); + case sim_ppc_spr408_regnum: return regnum2spr (408); + case sim_ppc_spr409_regnum: return regnum2spr (409); + case sim_ppc_spr410_regnum: return regnum2spr (410); + case sim_ppc_spr411_regnum: return regnum2spr (411); + case sim_ppc_spr412_regnum: return regnum2spr (412); + case sim_ppc_spr413_regnum: return regnum2spr (413); + case sim_ppc_spr414_regnum: return regnum2spr (414); + case sim_ppc_spr415_regnum: return regnum2spr (415); + case sim_ppc_spr416_regnum: return regnum2spr (416); + case sim_ppc_spr417_regnum: return regnum2spr (417); + case sim_ppc_spr418_regnum: return regnum2spr (418); + case sim_ppc_spr419_regnum: return regnum2spr (419); + case sim_ppc_spr420_regnum: return regnum2spr (420); + case sim_ppc_spr421_regnum: return regnum2spr (421); + case sim_ppc_spr422_regnum: return regnum2spr (422); + case sim_ppc_spr423_regnum: return regnum2spr (423); + case sim_ppc_spr424_regnum: return regnum2spr (424); + case sim_ppc_spr425_regnum: return regnum2spr (425); + case sim_ppc_spr426_regnum: return regnum2spr (426); + case sim_ppc_spr427_regnum: return regnum2spr (427); + case sim_ppc_spr428_regnum: return regnum2spr (428); + case sim_ppc_spr429_regnum: return regnum2spr (429); + case sim_ppc_spr430_regnum: return regnum2spr (430); + case sim_ppc_spr431_regnum: return regnum2spr (431); + case sim_ppc_spr432_regnum: return regnum2spr (432); + case sim_ppc_spr433_regnum: return regnum2spr (433); + case sim_ppc_spr434_regnum: return regnum2spr (434); + case sim_ppc_spr435_regnum: return regnum2spr (435); + case sim_ppc_spr436_regnum: return regnum2spr (436); + case sim_ppc_spr437_regnum: return regnum2spr (437); + case sim_ppc_spr438_regnum: return regnum2spr (438); + case sim_ppc_spr439_regnum: return regnum2spr (439); + case sim_ppc_spr440_regnum: return regnum2spr (440); + case sim_ppc_spr441_regnum: return regnum2spr (441); + case sim_ppc_spr442_regnum: return regnum2spr (442); + case sim_ppc_spr443_regnum: return regnum2spr (443); + case sim_ppc_spr444_regnum: return regnum2spr (444); + case sim_ppc_spr445_regnum: return regnum2spr (445); + case sim_ppc_spr446_regnum: return regnum2spr (446); + case sim_ppc_spr447_regnum: return regnum2spr (447); + case sim_ppc_spr448_regnum: return regnum2spr (448); + case sim_ppc_spr449_regnum: return regnum2spr (449); + case sim_ppc_spr450_regnum: return regnum2spr (450); + case sim_ppc_spr451_regnum: return regnum2spr (451); + case sim_ppc_spr452_regnum: return regnum2spr (452); + case sim_ppc_spr453_regnum: return regnum2spr (453); + case sim_ppc_spr454_regnum: return regnum2spr (454); + case sim_ppc_spr455_regnum: return regnum2spr (455); + case sim_ppc_spr456_regnum: return regnum2spr (456); + case sim_ppc_spr457_regnum: return regnum2spr (457); + case sim_ppc_spr458_regnum: return regnum2spr (458); + case sim_ppc_spr459_regnum: return regnum2spr (459); + case sim_ppc_spr460_regnum: return regnum2spr (460); + case sim_ppc_spr461_regnum: return regnum2spr (461); + case sim_ppc_spr462_regnum: return regnum2spr (462); + case sim_ppc_spr463_regnum: return regnum2spr (463); + case sim_ppc_spr464_regnum: return regnum2spr (464); + case sim_ppc_spr465_regnum: return regnum2spr (465); + case sim_ppc_spr466_regnum: return regnum2spr (466); + case sim_ppc_spr467_regnum: return regnum2spr (467); + case sim_ppc_spr468_regnum: return regnum2spr (468); + case sim_ppc_spr469_regnum: return regnum2spr (469); + case sim_ppc_spr470_regnum: return regnum2spr (470); + case sim_ppc_spr471_regnum: return regnum2spr (471); + case sim_ppc_spr472_regnum: return regnum2spr (472); + case sim_ppc_spr473_regnum: return regnum2spr (473); + case sim_ppc_spr474_regnum: return regnum2spr (474); + case sim_ppc_spr475_regnum: return regnum2spr (475); + case sim_ppc_spr476_regnum: return regnum2spr (476); + case sim_ppc_spr477_regnum: return regnum2spr (477); + case sim_ppc_spr478_regnum: return regnum2spr (478); + case sim_ppc_spr479_regnum: return regnum2spr (479); + case sim_ppc_spr480_regnum: return regnum2spr (480); + case sim_ppc_spr481_regnum: return regnum2spr (481); + case sim_ppc_spr482_regnum: return regnum2spr (482); + case sim_ppc_spr483_regnum: return regnum2spr (483); + case sim_ppc_spr484_regnum: return regnum2spr (484); + case sim_ppc_spr485_regnum: return regnum2spr (485); + case sim_ppc_spr486_regnum: return regnum2spr (486); + case sim_ppc_spr487_regnum: return regnum2spr (487); + case sim_ppc_spr488_regnum: return regnum2spr (488); + case sim_ppc_spr489_regnum: return regnum2spr (489); + case sim_ppc_spr490_regnum: return regnum2spr (490); + case sim_ppc_spr491_regnum: return regnum2spr (491); + case sim_ppc_spr492_regnum: return regnum2spr (492); + case sim_ppc_spr493_regnum: return regnum2spr (493); + case sim_ppc_spr494_regnum: return regnum2spr (494); + case sim_ppc_spr495_regnum: return regnum2spr (495); + case sim_ppc_spr496_regnum: return regnum2spr (496); + case sim_ppc_spr497_regnum: return regnum2spr (497); + case sim_ppc_spr498_regnum: return regnum2spr (498); + case sim_ppc_spr499_regnum: return regnum2spr (499); + case sim_ppc_spr500_regnum: return regnum2spr (500); + case sim_ppc_spr501_regnum: return regnum2spr (501); + case sim_ppc_spr502_regnum: return regnum2spr (502); + case sim_ppc_spr503_regnum: return regnum2spr (503); + case sim_ppc_spr504_regnum: return regnum2spr (504); + case sim_ppc_spr505_regnum: return regnum2spr (505); + case sim_ppc_spr506_regnum: return regnum2spr (506); + case sim_ppc_spr507_regnum: return regnum2spr (507); + case sim_ppc_spr508_regnum: return regnum2spr (508); + case sim_ppc_spr509_regnum: return regnum2spr (509); + case sim_ppc_spr510_regnum: return regnum2spr (510); + case sim_ppc_spr511_regnum: return regnum2spr (511); + case sim_ppc_spr512_regnum: return regnum2spr (512); + case sim_ppc_spr513_regnum: return regnum2spr (513); + case sim_ppc_spr514_regnum: return regnum2spr (514); + case sim_ppc_spr515_regnum: return regnum2spr (515); + case sim_ppc_spr516_regnum: return regnum2spr (516); + case sim_ppc_spr517_regnum: return regnum2spr (517); + case sim_ppc_spr518_regnum: return regnum2spr (518); + case sim_ppc_spr519_regnum: return regnum2spr (519); + case sim_ppc_spr520_regnum: return regnum2spr (520); + case sim_ppc_spr521_regnum: return regnum2spr (521); + case sim_ppc_spr522_regnum: return regnum2spr (522); + case sim_ppc_spr523_regnum: return regnum2spr (523); + case sim_ppc_spr524_regnum: return regnum2spr (524); + case sim_ppc_spr525_regnum: return regnum2spr (525); + case sim_ppc_spr526_regnum: return regnum2spr (526); + case sim_ppc_spr527_regnum: return regnum2spr (527); + case sim_ppc_spr528_regnum: return regnum2spr (528); + case sim_ppc_spr529_regnum: return regnum2spr (529); + case sim_ppc_spr530_regnum: return regnum2spr (530); + case sim_ppc_spr531_regnum: return regnum2spr (531); + case sim_ppc_spr532_regnum: return regnum2spr (532); + case sim_ppc_spr533_regnum: return regnum2spr (533); + case sim_ppc_spr534_regnum: return regnum2spr (534); + case sim_ppc_spr535_regnum: return regnum2spr (535); + case sim_ppc_spr536_regnum: return regnum2spr (536); + case sim_ppc_spr537_regnum: return regnum2spr (537); + case sim_ppc_spr538_regnum: return regnum2spr (538); + case sim_ppc_spr539_regnum: return regnum2spr (539); + case sim_ppc_spr540_regnum: return regnum2spr (540); + case sim_ppc_spr541_regnum: return regnum2spr (541); + case sim_ppc_spr542_regnum: return regnum2spr (542); + case sim_ppc_spr543_regnum: return regnum2spr (543); + case sim_ppc_spr544_regnum: return regnum2spr (544); + case sim_ppc_spr545_regnum: return regnum2spr (545); + case sim_ppc_spr546_regnum: return regnum2spr (546); + case sim_ppc_spr547_regnum: return regnum2spr (547); + case sim_ppc_spr548_regnum: return regnum2spr (548); + case sim_ppc_spr549_regnum: return regnum2spr (549); + case sim_ppc_spr550_regnum: return regnum2spr (550); + case sim_ppc_spr551_regnum: return regnum2spr (551); + case sim_ppc_spr552_regnum: return regnum2spr (552); + case sim_ppc_spr553_regnum: return regnum2spr (553); + case sim_ppc_spr554_regnum: return regnum2spr (554); + case sim_ppc_spr555_regnum: return regnum2spr (555); + case sim_ppc_spr556_regnum: return regnum2spr (556); + case sim_ppc_spr557_regnum: return regnum2spr (557); + case sim_ppc_spr558_regnum: return regnum2spr (558); + case sim_ppc_spr559_regnum: return regnum2spr (559); + case sim_ppc_spr560_regnum: return regnum2spr (560); + case sim_ppc_spr561_regnum: return regnum2spr (561); + case sim_ppc_spr562_regnum: return regnum2spr (562); + case sim_ppc_spr563_regnum: return regnum2spr (563); + case sim_ppc_spr564_regnum: return regnum2spr (564); + case sim_ppc_spr565_regnum: return regnum2spr (565); + case sim_ppc_spr566_regnum: return regnum2spr (566); + case sim_ppc_spr567_regnum: return regnum2spr (567); + case sim_ppc_spr568_regnum: return regnum2spr (568); + case sim_ppc_spr569_regnum: return regnum2spr (569); + case sim_ppc_spr570_regnum: return regnum2spr (570); + case sim_ppc_spr571_regnum: return regnum2spr (571); + case sim_ppc_spr572_regnum: return regnum2spr (572); + case sim_ppc_spr573_regnum: return regnum2spr (573); + case sim_ppc_spr574_regnum: return regnum2spr (574); + case sim_ppc_spr575_regnum: return regnum2spr (575); + case sim_ppc_spr576_regnum: return regnum2spr (576); + case sim_ppc_spr577_regnum: return regnum2spr (577); + case sim_ppc_spr578_regnum: return regnum2spr (578); + case sim_ppc_spr579_regnum: return regnum2spr (579); + case sim_ppc_spr580_regnum: return regnum2spr (580); + case sim_ppc_spr581_regnum: return regnum2spr (581); + case sim_ppc_spr582_regnum: return regnum2spr (582); + case sim_ppc_spr583_regnum: return regnum2spr (583); + case sim_ppc_spr584_regnum: return regnum2spr (584); + case sim_ppc_spr585_regnum: return regnum2spr (585); + case sim_ppc_spr586_regnum: return regnum2spr (586); + case sim_ppc_spr587_regnum: return regnum2spr (587); + case sim_ppc_spr588_regnum: return regnum2spr (588); + case sim_ppc_spr589_regnum: return regnum2spr (589); + case sim_ppc_spr590_regnum: return regnum2spr (590); + case sim_ppc_spr591_regnum: return regnum2spr (591); + case sim_ppc_spr592_regnum: return regnum2spr (592); + case sim_ppc_spr593_regnum: return regnum2spr (593); + case sim_ppc_spr594_regnum: return regnum2spr (594); + case sim_ppc_spr595_regnum: return regnum2spr (595); + case sim_ppc_spr596_regnum: return regnum2spr (596); + case sim_ppc_spr597_regnum: return regnum2spr (597); + case sim_ppc_spr598_regnum: return regnum2spr (598); + case sim_ppc_spr599_regnum: return regnum2spr (599); + case sim_ppc_spr600_regnum: return regnum2spr (600); + case sim_ppc_spr601_regnum: return regnum2spr (601); + case sim_ppc_spr602_regnum: return regnum2spr (602); + case sim_ppc_spr603_regnum: return regnum2spr (603); + case sim_ppc_spr604_regnum: return regnum2spr (604); + case sim_ppc_spr605_regnum: return regnum2spr (605); + case sim_ppc_spr606_regnum: return regnum2spr (606); + case sim_ppc_spr607_regnum: return regnum2spr (607); + case sim_ppc_spr608_regnum: return regnum2spr (608); + case sim_ppc_spr609_regnum: return regnum2spr (609); + case sim_ppc_spr610_regnum: return regnum2spr (610); + case sim_ppc_spr611_regnum: return regnum2spr (611); + case sim_ppc_spr612_regnum: return regnum2spr (612); + case sim_ppc_spr613_regnum: return regnum2spr (613); + case sim_ppc_spr614_regnum: return regnum2spr (614); + case sim_ppc_spr615_regnum: return regnum2spr (615); + case sim_ppc_spr616_regnum: return regnum2spr (616); + case sim_ppc_spr617_regnum: return regnum2spr (617); + case sim_ppc_spr618_regnum: return regnum2spr (618); + case sim_ppc_spr619_regnum: return regnum2spr (619); + case sim_ppc_spr620_regnum: return regnum2spr (620); + case sim_ppc_spr621_regnum: return regnum2spr (621); + case sim_ppc_spr622_regnum: return regnum2spr (622); + case sim_ppc_spr623_regnum: return regnum2spr (623); + case sim_ppc_spr624_regnum: return regnum2spr (624); + case sim_ppc_spr625_regnum: return regnum2spr (625); + case sim_ppc_spr626_regnum: return regnum2spr (626); + case sim_ppc_spr627_regnum: return regnum2spr (627); + case sim_ppc_spr628_regnum: return regnum2spr (628); + case sim_ppc_spr629_regnum: return regnum2spr (629); + case sim_ppc_spr630_regnum: return regnum2spr (630); + case sim_ppc_spr631_regnum: return regnum2spr (631); + case sim_ppc_spr632_regnum: return regnum2spr (632); + case sim_ppc_spr633_regnum: return regnum2spr (633); + case sim_ppc_spr634_regnum: return regnum2spr (634); + case sim_ppc_spr635_regnum: return regnum2spr (635); + case sim_ppc_spr636_regnum: return regnum2spr (636); + case sim_ppc_spr637_regnum: return regnum2spr (637); + case sim_ppc_spr638_regnum: return regnum2spr (638); + case sim_ppc_spr639_regnum: return regnum2spr (639); + case sim_ppc_spr640_regnum: return regnum2spr (640); + case sim_ppc_spr641_regnum: return regnum2spr (641); + case sim_ppc_spr642_regnum: return regnum2spr (642); + case sim_ppc_spr643_regnum: return regnum2spr (643); + case sim_ppc_spr644_regnum: return regnum2spr (644); + case sim_ppc_spr645_regnum: return regnum2spr (645); + case sim_ppc_spr646_regnum: return regnum2spr (646); + case sim_ppc_spr647_regnum: return regnum2spr (647); + case sim_ppc_spr648_regnum: return regnum2spr (648); + case sim_ppc_spr649_regnum: return regnum2spr (649); + case sim_ppc_spr650_regnum: return regnum2spr (650); + case sim_ppc_spr651_regnum: return regnum2spr (651); + case sim_ppc_spr652_regnum: return regnum2spr (652); + case sim_ppc_spr653_regnum: return regnum2spr (653); + case sim_ppc_spr654_regnum: return regnum2spr (654); + case sim_ppc_spr655_regnum: return regnum2spr (655); + case sim_ppc_spr656_regnum: return regnum2spr (656); + case sim_ppc_spr657_regnum: return regnum2spr (657); + case sim_ppc_spr658_regnum: return regnum2spr (658); + case sim_ppc_spr659_regnum: return regnum2spr (659); + case sim_ppc_spr660_regnum: return regnum2spr (660); + case sim_ppc_spr661_regnum: return regnum2spr (661); + case sim_ppc_spr662_regnum: return regnum2spr (662); + case sim_ppc_spr663_regnum: return regnum2spr (663); + case sim_ppc_spr664_regnum: return regnum2spr (664); + case sim_ppc_spr665_regnum: return regnum2spr (665); + case sim_ppc_spr666_regnum: return regnum2spr (666); + case sim_ppc_spr667_regnum: return regnum2spr (667); + case sim_ppc_spr668_regnum: return regnum2spr (668); + case sim_ppc_spr669_regnum: return regnum2spr (669); + case sim_ppc_spr670_regnum: return regnum2spr (670); + case sim_ppc_spr671_regnum: return regnum2spr (671); + case sim_ppc_spr672_regnum: return regnum2spr (672); + case sim_ppc_spr673_regnum: return regnum2spr (673); + case sim_ppc_spr674_regnum: return regnum2spr (674); + case sim_ppc_spr675_regnum: return regnum2spr (675); + case sim_ppc_spr676_regnum: return regnum2spr (676); + case sim_ppc_spr677_regnum: return regnum2spr (677); + case sim_ppc_spr678_regnum: return regnum2spr (678); + case sim_ppc_spr679_regnum: return regnum2spr (679); + case sim_ppc_spr680_regnum: return regnum2spr (680); + case sim_ppc_spr681_regnum: return regnum2spr (681); + case sim_ppc_spr682_regnum: return regnum2spr (682); + case sim_ppc_spr683_regnum: return regnum2spr (683); + case sim_ppc_spr684_regnum: return regnum2spr (684); + case sim_ppc_spr685_regnum: return regnum2spr (685); + case sim_ppc_spr686_regnum: return regnum2spr (686); + case sim_ppc_spr687_regnum: return regnum2spr (687); + case sim_ppc_spr688_regnum: return regnum2spr (688); + case sim_ppc_spr689_regnum: return regnum2spr (689); + case sim_ppc_spr690_regnum: return regnum2spr (690); + case sim_ppc_spr691_regnum: return regnum2spr (691); + case sim_ppc_spr692_regnum: return regnum2spr (692); + case sim_ppc_spr693_regnum: return regnum2spr (693); + case sim_ppc_spr694_regnum: return regnum2spr (694); + case sim_ppc_spr695_regnum: return regnum2spr (695); + case sim_ppc_spr696_regnum: return regnum2spr (696); + case sim_ppc_spr697_regnum: return regnum2spr (697); + case sim_ppc_spr698_regnum: return regnum2spr (698); + case sim_ppc_spr699_regnum: return regnum2spr (699); + case sim_ppc_spr700_regnum: return regnum2spr (700); + case sim_ppc_spr701_regnum: return regnum2spr (701); + case sim_ppc_spr702_regnum: return regnum2spr (702); + case sim_ppc_spr703_regnum: return regnum2spr (703); + case sim_ppc_spr704_regnum: return regnum2spr (704); + case sim_ppc_spr705_regnum: return regnum2spr (705); + case sim_ppc_spr706_regnum: return regnum2spr (706); + case sim_ppc_spr707_regnum: return regnum2spr (707); + case sim_ppc_spr708_regnum: return regnum2spr (708); + case sim_ppc_spr709_regnum: return regnum2spr (709); + case sim_ppc_spr710_regnum: return regnum2spr (710); + case sim_ppc_spr711_regnum: return regnum2spr (711); + case sim_ppc_spr712_regnum: return regnum2spr (712); + case sim_ppc_spr713_regnum: return regnum2spr (713); + case sim_ppc_spr714_regnum: return regnum2spr (714); + case sim_ppc_spr715_regnum: return regnum2spr (715); + case sim_ppc_spr716_regnum: return regnum2spr (716); + case sim_ppc_spr717_regnum: return regnum2spr (717); + case sim_ppc_spr718_regnum: return regnum2spr (718); + case sim_ppc_spr719_regnum: return regnum2spr (719); + case sim_ppc_spr720_regnum: return regnum2spr (720); + case sim_ppc_spr721_regnum: return regnum2spr (721); + case sim_ppc_spr722_regnum: return regnum2spr (722); + case sim_ppc_spr723_regnum: return regnum2spr (723); + case sim_ppc_spr724_regnum: return regnum2spr (724); + case sim_ppc_spr725_regnum: return regnum2spr (725); + case sim_ppc_spr726_regnum: return regnum2spr (726); + case sim_ppc_spr727_regnum: return regnum2spr (727); + case sim_ppc_spr728_regnum: return regnum2spr (728); + case sim_ppc_spr729_regnum: return regnum2spr (729); + case sim_ppc_spr730_regnum: return regnum2spr (730); + case sim_ppc_spr731_regnum: return regnum2spr (731); + case sim_ppc_spr732_regnum: return regnum2spr (732); + case sim_ppc_spr733_regnum: return regnum2spr (733); + case sim_ppc_spr734_regnum: return regnum2spr (734); + case sim_ppc_spr735_regnum: return regnum2spr (735); + case sim_ppc_spr736_regnum: return regnum2spr (736); + case sim_ppc_spr737_regnum: return regnum2spr (737); + case sim_ppc_spr738_regnum: return regnum2spr (738); + case sim_ppc_spr739_regnum: return regnum2spr (739); + case sim_ppc_spr740_regnum: return regnum2spr (740); + case sim_ppc_spr741_regnum: return regnum2spr (741); + case sim_ppc_spr742_regnum: return regnum2spr (742); + case sim_ppc_spr743_regnum: return regnum2spr (743); + case sim_ppc_spr744_regnum: return regnum2spr (744); + case sim_ppc_spr745_regnum: return regnum2spr (745); + case sim_ppc_spr746_regnum: return regnum2spr (746); + case sim_ppc_spr747_regnum: return regnum2spr (747); + case sim_ppc_spr748_regnum: return regnum2spr (748); + case sim_ppc_spr749_regnum: return regnum2spr (749); + case sim_ppc_spr750_regnum: return regnum2spr (750); + case sim_ppc_spr751_regnum: return regnum2spr (751); + case sim_ppc_spr752_regnum: return regnum2spr (752); + case sim_ppc_spr753_regnum: return regnum2spr (753); + case sim_ppc_spr754_regnum: return regnum2spr (754); + case sim_ppc_spr755_regnum: return regnum2spr (755); + case sim_ppc_spr756_regnum: return regnum2spr (756); + case sim_ppc_spr757_regnum: return regnum2spr (757); + case sim_ppc_spr758_regnum: return regnum2spr (758); + case sim_ppc_spr759_regnum: return regnum2spr (759); + case sim_ppc_spr760_regnum: return regnum2spr (760); + case sim_ppc_spr761_regnum: return regnum2spr (761); + case sim_ppc_spr762_regnum: return regnum2spr (762); + case sim_ppc_spr763_regnum: return regnum2spr (763); + case sim_ppc_spr764_regnum: return regnum2spr (764); + case sim_ppc_spr765_regnum: return regnum2spr (765); + case sim_ppc_spr766_regnum: return regnum2spr (766); + case sim_ppc_spr767_regnum: return regnum2spr (767); + case sim_ppc_spr768_regnum: return regnum2spr (768); + case sim_ppc_spr769_regnum: return regnum2spr (769); + case sim_ppc_spr770_regnum: return regnum2spr (770); + case sim_ppc_spr771_regnum: return regnum2spr (771); + case sim_ppc_spr772_regnum: return regnum2spr (772); + case sim_ppc_spr773_regnum: return regnum2spr (773); + case sim_ppc_spr774_regnum: return regnum2spr (774); + case sim_ppc_spr775_regnum: return regnum2spr (775); + case sim_ppc_spr776_regnum: return regnum2spr (776); + case sim_ppc_spr777_regnum: return regnum2spr (777); + case sim_ppc_spr778_regnum: return regnum2spr (778); + case sim_ppc_spr779_regnum: return regnum2spr (779); + case sim_ppc_spr780_regnum: return regnum2spr (780); + case sim_ppc_spr781_regnum: return regnum2spr (781); + case sim_ppc_spr782_regnum: return regnum2spr (782); + case sim_ppc_spr783_regnum: return regnum2spr (783); + case sim_ppc_spr784_regnum: return regnum2spr (784); + case sim_ppc_spr785_regnum: return regnum2spr (785); + case sim_ppc_spr786_regnum: return regnum2spr (786); + case sim_ppc_spr787_regnum: return regnum2spr (787); + case sim_ppc_spr788_regnum: return regnum2spr (788); + case sim_ppc_spr789_regnum: return regnum2spr (789); + case sim_ppc_spr790_regnum: return regnum2spr (790); + case sim_ppc_spr791_regnum: return regnum2spr (791); + case sim_ppc_spr792_regnum: return regnum2spr (792); + case sim_ppc_spr793_regnum: return regnum2spr (793); + case sim_ppc_spr794_regnum: return regnum2spr (794); + case sim_ppc_spr795_regnum: return regnum2spr (795); + case sim_ppc_spr796_regnum: return regnum2spr (796); + case sim_ppc_spr797_regnum: return regnum2spr (797); + case sim_ppc_spr798_regnum: return regnum2spr (798); + case sim_ppc_spr799_regnum: return regnum2spr (799); + case sim_ppc_spr800_regnum: return regnum2spr (800); + case sim_ppc_spr801_regnum: return regnum2spr (801); + case sim_ppc_spr802_regnum: return regnum2spr (802); + case sim_ppc_spr803_regnum: return regnum2spr (803); + case sim_ppc_spr804_regnum: return regnum2spr (804); + case sim_ppc_spr805_regnum: return regnum2spr (805); + case sim_ppc_spr806_regnum: return regnum2spr (806); + case sim_ppc_spr807_regnum: return regnum2spr (807); + case sim_ppc_spr808_regnum: return regnum2spr (808); + case sim_ppc_spr809_regnum: return regnum2spr (809); + case sim_ppc_spr810_regnum: return regnum2spr (810); + case sim_ppc_spr811_regnum: return regnum2spr (811); + case sim_ppc_spr812_regnum: return regnum2spr (812); + case sim_ppc_spr813_regnum: return regnum2spr (813); + case sim_ppc_spr814_regnum: return regnum2spr (814); + case sim_ppc_spr815_regnum: return regnum2spr (815); + case sim_ppc_spr816_regnum: return regnum2spr (816); + case sim_ppc_spr817_regnum: return regnum2spr (817); + case sim_ppc_spr818_regnum: return regnum2spr (818); + case sim_ppc_spr819_regnum: return regnum2spr (819); + case sim_ppc_spr820_regnum: return regnum2spr (820); + case sim_ppc_spr821_regnum: return regnum2spr (821); + case sim_ppc_spr822_regnum: return regnum2spr (822); + case sim_ppc_spr823_regnum: return regnum2spr (823); + case sim_ppc_spr824_regnum: return regnum2spr (824); + case sim_ppc_spr825_regnum: return regnum2spr (825); + case sim_ppc_spr826_regnum: return regnum2spr (826); + case sim_ppc_spr827_regnum: return regnum2spr (827); + case sim_ppc_spr828_regnum: return regnum2spr (828); + case sim_ppc_spr829_regnum: return regnum2spr (829); + case sim_ppc_spr830_regnum: return regnum2spr (830); + case sim_ppc_spr831_regnum: return regnum2spr (831); + case sim_ppc_spr832_regnum: return regnum2spr (832); + case sim_ppc_spr833_regnum: return regnum2spr (833); + case sim_ppc_spr834_regnum: return regnum2spr (834); + case sim_ppc_spr835_regnum: return regnum2spr (835); + case sim_ppc_spr836_regnum: return regnum2spr (836); + case sim_ppc_spr837_regnum: return regnum2spr (837); + case sim_ppc_spr838_regnum: return regnum2spr (838); + case sim_ppc_spr839_regnum: return regnum2spr (839); + case sim_ppc_spr840_regnum: return regnum2spr (840); + case sim_ppc_spr841_regnum: return regnum2spr (841); + case sim_ppc_spr842_regnum: return regnum2spr (842); + case sim_ppc_spr843_regnum: return regnum2spr (843); + case sim_ppc_spr844_regnum: return regnum2spr (844); + case sim_ppc_spr845_regnum: return regnum2spr (845); + case sim_ppc_spr846_regnum: return regnum2spr (846); + case sim_ppc_spr847_regnum: return regnum2spr (847); + case sim_ppc_spr848_regnum: return regnum2spr (848); + case sim_ppc_spr849_regnum: return regnum2spr (849); + case sim_ppc_spr850_regnum: return regnum2spr (850); + case sim_ppc_spr851_regnum: return regnum2spr (851); + case sim_ppc_spr852_regnum: return regnum2spr (852); + case sim_ppc_spr853_regnum: return regnum2spr (853); + case sim_ppc_spr854_regnum: return regnum2spr (854); + case sim_ppc_spr855_regnum: return regnum2spr (855); + case sim_ppc_spr856_regnum: return regnum2spr (856); + case sim_ppc_spr857_regnum: return regnum2spr (857); + case sim_ppc_spr858_regnum: return regnum2spr (858); + case sim_ppc_spr859_regnum: return regnum2spr (859); + case sim_ppc_spr860_regnum: return regnum2spr (860); + case sim_ppc_spr861_regnum: return regnum2spr (861); + case sim_ppc_spr862_regnum: return regnum2spr (862); + case sim_ppc_spr863_regnum: return regnum2spr (863); + case sim_ppc_spr864_regnum: return regnum2spr (864); + case sim_ppc_spr865_regnum: return regnum2spr (865); + case sim_ppc_spr866_regnum: return regnum2spr (866); + case sim_ppc_spr867_regnum: return regnum2spr (867); + case sim_ppc_spr868_regnum: return regnum2spr (868); + case sim_ppc_spr869_regnum: return regnum2spr (869); + case sim_ppc_spr870_regnum: return regnum2spr (870); + case sim_ppc_spr871_regnum: return regnum2spr (871); + case sim_ppc_spr872_regnum: return regnum2spr (872); + case sim_ppc_spr873_regnum: return regnum2spr (873); + case sim_ppc_spr874_regnum: return regnum2spr (874); + case sim_ppc_spr875_regnum: return regnum2spr (875); + case sim_ppc_spr876_regnum: return regnum2spr (876); + case sim_ppc_spr877_regnum: return regnum2spr (877); + case sim_ppc_spr878_regnum: return regnum2spr (878); + case sim_ppc_spr879_regnum: return regnum2spr (879); + case sim_ppc_spr880_regnum: return regnum2spr (880); + case sim_ppc_spr881_regnum: return regnum2spr (881); + case sim_ppc_spr882_regnum: return regnum2spr (882); + case sim_ppc_spr883_regnum: return regnum2spr (883); + case sim_ppc_spr884_regnum: return regnum2spr (884); + case sim_ppc_spr885_regnum: return regnum2spr (885); + case sim_ppc_spr886_regnum: return regnum2spr (886); + case sim_ppc_spr887_regnum: return regnum2spr (887); + case sim_ppc_spr888_regnum: return regnum2spr (888); + case sim_ppc_spr889_regnum: return regnum2spr (889); + case sim_ppc_spr890_regnum: return regnum2spr (890); + case sim_ppc_spr891_regnum: return regnum2spr (891); + case sim_ppc_spr892_regnum: return regnum2spr (892); + case sim_ppc_spr893_regnum: return regnum2spr (893); + case sim_ppc_spr894_regnum: return regnum2spr (894); + case sim_ppc_spr895_regnum: return regnum2spr (895); + case sim_ppc_spr896_regnum: return regnum2spr (896); + case sim_ppc_spr897_regnum: return regnum2spr (897); + case sim_ppc_spr898_regnum: return regnum2spr (898); + case sim_ppc_spr899_regnum: return regnum2spr (899); + case sim_ppc_spr900_regnum: return regnum2spr (900); + case sim_ppc_spr901_regnum: return regnum2spr (901); + case sim_ppc_spr902_regnum: return regnum2spr (902); + case sim_ppc_spr903_regnum: return regnum2spr (903); + case sim_ppc_spr904_regnum: return regnum2spr (904); + case sim_ppc_spr905_regnum: return regnum2spr (905); + case sim_ppc_spr906_regnum: return regnum2spr (906); + case sim_ppc_spr907_regnum: return regnum2spr (907); + case sim_ppc_spr908_regnum: return regnum2spr (908); + case sim_ppc_spr909_regnum: return regnum2spr (909); + case sim_ppc_spr910_regnum: return regnum2spr (910); + case sim_ppc_spr911_regnum: return regnum2spr (911); + case sim_ppc_spr912_regnum: return regnum2spr (912); + case sim_ppc_spr913_regnum: return regnum2spr (913); + case sim_ppc_spr914_regnum: return regnum2spr (914); + case sim_ppc_spr915_regnum: return regnum2spr (915); + case sim_ppc_spr916_regnum: return regnum2spr (916); + case sim_ppc_spr917_regnum: return regnum2spr (917); + case sim_ppc_spr918_regnum: return regnum2spr (918); + case sim_ppc_spr919_regnum: return regnum2spr (919); + case sim_ppc_spr920_regnum: return regnum2spr (920); + case sim_ppc_spr921_regnum: return regnum2spr (921); + case sim_ppc_spr922_regnum: return regnum2spr (922); + case sim_ppc_spr923_regnum: return regnum2spr (923); + case sim_ppc_spr924_regnum: return regnum2spr (924); + case sim_ppc_spr925_regnum: return regnum2spr (925); + case sim_ppc_spr926_regnum: return regnum2spr (926); + case sim_ppc_spr927_regnum: return regnum2spr (927); + case sim_ppc_spr928_regnum: return regnum2spr (928); + case sim_ppc_spr929_regnum: return regnum2spr (929); + case sim_ppc_spr930_regnum: return regnum2spr (930); + case sim_ppc_spr931_regnum: return regnum2spr (931); + case sim_ppc_spr932_regnum: return regnum2spr (932); + case sim_ppc_spr933_regnum: return regnum2spr (933); + case sim_ppc_spr934_regnum: return regnum2spr (934); + case sim_ppc_spr935_regnum: return regnum2spr (935); + case sim_ppc_spr936_regnum: return regnum2spr (936); + case sim_ppc_spr937_regnum: return regnum2spr (937); + case sim_ppc_spr938_regnum: return regnum2spr (938); + case sim_ppc_spr939_regnum: return regnum2spr (939); + case sim_ppc_spr940_regnum: return regnum2spr (940); + case sim_ppc_spr941_regnum: return regnum2spr (941); + case sim_ppc_spr942_regnum: return regnum2spr (942); + case sim_ppc_spr943_regnum: return regnum2spr (943); + case sim_ppc_spr944_regnum: return regnum2spr (944); + case sim_ppc_spr945_regnum: return regnum2spr (945); + case sim_ppc_spr946_regnum: return regnum2spr (946); + case sim_ppc_spr947_regnum: return regnum2spr (947); + case sim_ppc_spr948_regnum: return regnum2spr (948); + case sim_ppc_spr949_regnum: return regnum2spr (949); + case sim_ppc_spr950_regnum: return regnum2spr (950); + case sim_ppc_spr951_regnum: return regnum2spr (951); + case sim_ppc_spr952_regnum: return regnum2spr (952); + case sim_ppc_spr953_regnum: return regnum2spr (953); + case sim_ppc_spr954_regnum: return regnum2spr (954); + case sim_ppc_spr955_regnum: return regnum2spr (955); + case sim_ppc_spr956_regnum: return regnum2spr (956); + case sim_ppc_spr957_regnum: return regnum2spr (957); + case sim_ppc_spr958_regnum: return regnum2spr (958); + case sim_ppc_spr959_regnum: return regnum2spr (959); + case sim_ppc_spr960_regnum: return regnum2spr (960); + case sim_ppc_spr961_regnum: return regnum2spr (961); + case sim_ppc_spr962_regnum: return regnum2spr (962); + case sim_ppc_spr963_regnum: return regnum2spr (963); + case sim_ppc_spr964_regnum: return regnum2spr (964); + case sim_ppc_spr965_regnum: return regnum2spr (965); + case sim_ppc_spr966_regnum: return regnum2spr (966); + case sim_ppc_spr967_regnum: return regnum2spr (967); + case sim_ppc_spr968_regnum: return regnum2spr (968); + case sim_ppc_spr969_regnum: return regnum2spr (969); + case sim_ppc_spr970_regnum: return regnum2spr (970); + case sim_ppc_spr971_regnum: return regnum2spr (971); + case sim_ppc_spr972_regnum: return regnum2spr (972); + case sim_ppc_spr973_regnum: return regnum2spr (973); + case sim_ppc_spr974_regnum: return regnum2spr (974); + case sim_ppc_spr975_regnum: return regnum2spr (975); + case sim_ppc_spr976_regnum: return regnum2spr (976); + case sim_ppc_spr977_regnum: return regnum2spr (977); + case sim_ppc_spr978_regnum: return regnum2spr (978); + case sim_ppc_spr979_regnum: return regnum2spr (979); + case sim_ppc_spr980_regnum: return regnum2spr (980); + case sim_ppc_spr981_regnum: return regnum2spr (981); + case sim_ppc_spr982_regnum: return regnum2spr (982); + case sim_ppc_spr983_regnum: return regnum2spr (983); + case sim_ppc_spr984_regnum: return regnum2spr (984); + case sim_ppc_spr985_regnum: return regnum2spr (985); + case sim_ppc_spr986_regnum: return regnum2spr (986); + case sim_ppc_spr987_regnum: return regnum2spr (987); + case sim_ppc_spr988_regnum: return regnum2spr (988); + case sim_ppc_spr989_regnum: return regnum2spr (989); + case sim_ppc_spr990_regnum: return regnum2spr (990); + case sim_ppc_spr991_regnum: return regnum2spr (991); + case sim_ppc_spr992_regnum: return regnum2spr (992); + case sim_ppc_spr993_regnum: return regnum2spr (993); + case sim_ppc_spr994_regnum: return regnum2spr (994); + case sim_ppc_spr995_regnum: return regnum2spr (995); + case sim_ppc_spr996_regnum: return regnum2spr (996); + case sim_ppc_spr997_regnum: return regnum2spr (997); + case sim_ppc_spr998_regnum: return regnum2spr (998); + case sim_ppc_spr999_regnum: return regnum2spr (999); + case sim_ppc_spr1000_regnum: return regnum2spr (1000); + case sim_ppc_spr1001_regnum: return regnum2spr (1001); + case sim_ppc_spr1002_regnum: return regnum2spr (1002); + case sim_ppc_spr1003_regnum: return regnum2spr (1003); + case sim_ppc_spr1004_regnum: return regnum2spr (1004); + case sim_ppc_spr1005_regnum: return regnum2spr (1005); + case sim_ppc_spr1006_regnum: return regnum2spr (1006); + case sim_ppc_spr1007_regnum: return regnum2spr (1007); + case sim_ppc_spr1008_regnum: return regnum2spr (1008); + case sim_ppc_spr1009_regnum: return regnum2spr (1009); + case sim_ppc_spr1010_regnum: return regnum2spr (1010); + case sim_ppc_spr1011_regnum: return regnum2spr (1011); + case sim_ppc_spr1012_regnum: return regnum2spr (1012); + case sim_ppc_spr1013_regnum: return regnum2spr (1013); + case sim_ppc_spr1014_regnum: return regnum2spr (1014); + case sim_ppc_spr1015_regnum: return regnum2spr (1015); + case sim_ppc_spr1016_regnum: return regnum2spr (1016); + case sim_ppc_spr1017_regnum: return regnum2spr (1017); + case sim_ppc_spr1018_regnum: return regnum2spr (1018); + case sim_ppc_spr1019_regnum: return regnum2spr (1019); + case sim_ppc_spr1020_regnum: return regnum2spr (1020); + case sim_ppc_spr1021_regnum: return regnum2spr (1021); + case sim_ppc_spr1022_regnum: return regnum2spr (1022); + case sim_ppc_spr1023_regnum: return regnum2spr (1023); + default: + /* Not a valid register number at all. */ + return NULL; + } +} + + +int +sim_fetch_register (SIM_DESC sd, int regno, unsigned char *buf, int length) +{ + const char *regname = regnum2name (regno); + + if (simulator == NULL || regname == NULL) + return -1; + + TRACE(trace_gdb, ("sim_fetch_register(regno=%d(%s), buf=0x%lx)\n", + regno, regname, (long)buf)); + return psim_read_register(simulator, MAX_NR_PROCESSORS, + buf, regname, raw_transfer); +} + + +int +sim_store_register (SIM_DESC sd, int regno, unsigned char *buf, int length) +{ + const char *regname = regnum2name (regno); + + if (simulator == NULL || regname == NULL) + return -1; + + TRACE(trace_gdb, ("sim_store_register(regno=%d(%s), buf=0x%lx)\n", + regno, regname, (long)buf)); + return psim_write_register(simulator, MAX_NR_PROCESSORS, + buf, regname, raw_transfer); +} diff --git a/sim/ppc/sim_callbacks.h b/sim/ppc/sim_callbacks.h index 322af9de8a1..9fb815b4682 100644 --- a/sim/ppc/sim_callbacks.h +++ b/sim/ppc/sim_callbacks.h @@ -103,6 +103,10 @@ void sim_io_flush_stdoutput (void); +/* Simulator instance. */ +extern psim *simulator; + + /* Memory management with an allocator that clears memory before use. */ void *zalloc diff --git a/sim/ppc/sim_calls.c b/sim/ppc/sim_calls.c index 040ce833202..ae74593dd69 100644 --- a/sim/ppc/sim_calls.c +++ b/sim/ppc/sim_calls.c @@ -40,7 +40,6 @@ #endif #endif -#include "defs.h" #include "bfd.h" #include "gdb/callback.h" #include "gdb/remote-sim.h" @@ -55,33 +54,10 @@ static int poll_quit_count = POLL_QUIT_INTERVAL; /* Structures used by the simulator, for gdb just have static structures */ -static psim *simulator; +psim *simulator; static device *root_device; static host_callback *callbacks; -/* We use GDB's gdbarch_register_name function to map GDB register - numbers onto names, which we can then look up in the register - table. Since the `set architecture' command can select a new - processor variant at run-time, the meanings of the register numbers - can change, so we need to make sure the sim uses the same - name/number mapping that GDB uses. - - (We don't use the REGISTER_NAME macro, which is a wrapper for - gdbarch_register_name. We #include GDB's "defs.h", which tries to - #include GDB's "config.h", but gets ours instead, and REGISTER_NAME - ends up not getting defined. Simpler to just use - gdbarch_register_name directly.) - - We used to just use the REGISTER_NAMES macro from GDB's - target-dependent header files, which expanded into an initializer - for an array of strings. That was kind of nice, because it meant - that libsim.a had only a compile-time dependency on GDB; using - gdbarch_register_name directly means that there are now link-time - and run-time dependencies too. - - Perhaps the host_callback structure could provide a function for - retrieving register names; that would be cleaner. */ - SIM_DESC sim_open (SIM_OPEN_KIND kind, host_callback *callback, @@ -176,54 +152,6 @@ sim_write (SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length) return result; } - -int -sim_fetch_register (SIM_DESC sd, int regno, unsigned char *buf, int length) -{ - const char *regname; - - if (simulator == NULL) { - return 0; - } - - /* GDB will sometimes ask for the contents of a register named ""; - we ignore such requests, and leave garbage in *BUF. In GDB - terms, the empty string means "the register with this number is - not present in the currently selected architecture variant." - That's following the kludge we're using for the MIPS processors. - But there are loops that just walk through the entire list of - names and try to get everything. */ - regname = gdbarch_register_name (current_gdbarch, regno); - if (! regname || regname[0] == '\0') - return -1; - - TRACE(trace_gdb, ("sim_fetch_register(regno=%d(%s), buf=0x%lx)\n", - regno, regname, (long)buf)); - return psim_read_register(simulator, MAX_NR_PROCESSORS, - buf, regname, raw_transfer); -} - - -int -sim_store_register (SIM_DESC sd, int regno, unsigned char *buf, int length) -{ - const char *regname; - - if (simulator == NULL) - return 0; - - /* See comments in sim_fetch_register, above. */ - regname = gdbarch_register_name (current_gdbarch, regno); - if (! regname || regname[0] == '\0') - return -1; - - TRACE(trace_gdb, ("sim_store_register(regno=%d(%s), buf=0x%lx)\n", - regno, regname, (long)buf)); - return psim_write_register(simulator, MAX_NR_PROCESSORS, - buf, regname, raw_transfer); -} - - void sim_info (SIM_DESC sd, int verbose) { |