X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fns32km3-nat.c;h=0d1897587758b508220653578493d3c1c006d0e7;hb=56e2d25ab5b69584198204090fe049e920cd57db;hp=087bb72b2429fddab9e19db2807aea322911970f;hpb=c2d751d5e51893b95c86ada0899d8ed74f4ba9a7;p=binutils-gdb.git diff --git a/gdb/ns32km3-nat.c b/gdb/ns32km3-nat.c index 087bb72b242..0d189758775 100644 --- a/gdb/ns32km3-nat.c +++ b/gdb/ns32km3-nat.c @@ -1,193 +1,183 @@ -/* Low level interface to ns532 running mach 3.0. - Copyright (C) 1992 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include "defs.h" -#include "inferior.h" - -#include - -#include -#include -#include -#include - -#define private static - - -/* Find offsets to thread states at compile time. - * If your compiler does not grok this, calculate offsets - * offsets yourself and use them (or get a compatible compiler :-) - */ - -#define REG_N_OFFSET(reg) (int)(&((struct ns532_combined_state *)0)->ts.reg) -#define REG_F_OFFSET(reg) (int)(&((struct ns532_combined_state *)0)->fs.reg) - -/* at reg_offset[i] is the offset to the ns532_combined_state - * location where the gdb registers[i] is stored. - */ - -static int reg_offset[] = -{ - REG_N_OFFSET(r0), REG_N_OFFSET(r1), REG_N_OFFSET(r2), REG_N_OFFSET(r3), - REG_N_OFFSET(r4), REG_N_OFFSET(r5), REG_N_OFFSET(r6), REG_N_OFFSET(r7), - REG_F_OFFSET(l0a), REG_F_OFFSET(l1a),REG_F_OFFSET(l2a),REG_F_OFFSET(l3a), - REG_F_OFFSET(l4a), REG_F_OFFSET(l5a),REG_F_OFFSET(l6a),REG_F_OFFSET(l7a), - REG_N_OFFSET(sp), REG_N_OFFSET(fp), REG_N_OFFSET(pc), REG_N_OFFSET(psr), - REG_F_OFFSET(fsr), - REG_F_OFFSET(l0a), REG_F_OFFSET(l2a),REG_F_OFFSET(l4a),REG_F_OFFSET(l6a) - /* @@@ 532 has more double length floating point regs, not accessed currently */ -}; - -/* Fetch COUNT contiguous registers from thread STATE starting from REGNUM - * Caller knows that the regs handled in one transaction are of same size. - */ -#define FETCH_REGS(state, regnum, count) \ - bcopy ((char *)state+reg_offset[ regnum ], \ - ®isters[REGISTER_BYTE (regnum)], \ - count*sizeof (REGISTER_TYPE)) - -/* Store COUNT contiguous registers to thread STATE starting from REGNUM */ -#define STORE_REGS(state, regnum, count) \ - bcopy (®isters[REGISTER_BYTE (regnum)], \ - (char *)state+reg_offset[ regnum ], \ - count*sizeof (REGISTER_TYPE)) - -/* 4.4 bfd support function */ -/* jtv@hut.fi: UNIMPLEMENTED!!!!! */ - -void -fetch_core_registers (core_regs, core_reg_size, which) - char *core_regs; - unsigned int core_reg_size; - int which; -{ - error ("Unimplemented routine fetch_core_registers called"); -} - -/* - * Fetch inferiors registers for gdb. - * REGNO specifies which (as gdb views it) register, -1 for all. - */ - -void -fetch_inferior_registers (regno) - int regno; -{ - kern_return_t ret; - thread_state_data_t state; - unsigned int stateCnt = NS532_COMBINED_STATE_COUNT; - int index; - - if (! MACH_PORT_VALID (current_thread)) - error ("fetch inferior registers: Invalid thread"); - - if (must_suspend_thread) - setup_thread (current_thread, 1); - - ret = thread_get_state (current_thread, - NS532_COMBINED_STATE, - state, - &stateCnt); - - if (ret != KERN_SUCCESS) - message ("fetch_inferior_registers: %s ", - mach_error_string (ret)); -#if 0 - /* It may be more effective to store validate all of them, - * since we fetched them all anyway - */ - else if (regno != -1) - supply_register (regno, (char *)state+reg_offset[regno]); -#endif - else - { - for (index = 0; index < NUM_REGS; index++) - supply_register (index, (char *)state+reg_offset[index]); - } - - if (must_suspend_thread) - setup_thread (current_thread, 0); -} - -/* Store our register values back into the inferior. - * If REGNO is -1, do this for all registers. - * Otherwise, REGNO specifies which register - * - * On mach3 all registers are always saved in one call. - */ -void -store_inferior_registers (regno) - int regno; -{ - kern_return_t ret; - thread_state_data_t state; - unsigned int stateCnt = NS532_COMBINED_STATE_COUNT; - register int index; - - if (! MACH_PORT_VALID (current_thread)) - error ("store inferior registers: Invalid thread"); - - if (must_suspend_thread) - setup_thread (current_thread, 1); - - /* Fetch the state of the current thread */ - ret = thread_get_state (current_thread, - NS532_COMBINED_STATE, - state, - &stateCnt); - - if (ret != KERN_SUCCESS) - { - message ("store_inferior_registers (get): %s", - mach_error_string (ret)); - if (must_suspend_thread) - setup_thread (current_thread, 0); - return; - } - - /* move gdb's registers to thread's state - * - * Since we save all registers anyway, save the ones - * that gdb thinks are valid (e.g. ignore the regno - * parameter) - */ -#if 0 - if (regno != -1) - STORE_REGS (state, regno, 1); - else -#endif - { - for (index = 0; index < NUM_REGS; index++) - STORE_REGS (state, index, 1); - } - - /* Write gdb's current view of register to the thread - */ - ret = thread_set_state (current_thread, - NS532_COMBINED_STATE, - state, - NS532_COMBINED_STATE_COUNT); - - if (ret != KERN_SUCCESS) - message ("store_inferior_registers (set): %s", - mach_error_string (ret)); - - if (must_suspend_thread) - setup_thread (current_thread, 0); -} +/* OBSOLETE /* Low level interface to ns532 running mach 3.0. */ +/* OBSOLETE Copyright 1992, 1993, 1998, 2000, 2001 Free Software Foundation, Inc. */ +/* OBSOLETE */ +/* OBSOLETE This file is part of GDB. */ +/* OBSOLETE */ +/* OBSOLETE This program is free software; you can redistribute it and/or modify */ +/* OBSOLETE it under the terms of the GNU General Public License as published by */ +/* OBSOLETE the Free Software Foundation; either version 2 of the License, or */ +/* OBSOLETE (at your option) any later version. */ +/* OBSOLETE */ +/* OBSOLETE This program is distributed in the hope that it will be useful, */ +/* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* OBSOLETE GNU General Public License for more details. */ +/* OBSOLETE */ +/* OBSOLETE You should have received a copy of the GNU General Public License */ +/* OBSOLETE along with this program; if not, write to the Free Software */ +/* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, */ +/* OBSOLETE Boston, MA 02111-1307, USA. */ */ +/* OBSOLETE */ +/* OBSOLETE#include "defs.h" */ +/* OBSOLETE#include "inferior.h" */ +/* OBSOLETE#include "regcache.h" */ +/* OBSOLETE */ +/* OBSOLETE#include */ +/* OBSOLETE */ +/* OBSOLETE#include */ +/* OBSOLETE#include */ +/* OBSOLETE#include */ +/* OBSOLETE#include */ +/* OBSOLETE */ +/* OBSOLETE#define private static */ +/* OBSOLETE */ +/* OBSOLETE */ +/* OBSOLETE/* Find offsets to thread states at compile time. */ +/* OBSOLETE * If your compiler does not grok this, calculate offsets */ +/* OBSOLETE * offsets yourself and use them (or get a compatible compiler :-) */ +/* OBSOLETE */ */ +/* OBSOLETE */ +/* OBSOLETE#define REG_N_OFFSET(reg) (int)(&((struct ns532_combined_state *)0)->ts.reg) */ +/* OBSOLETE#define REG_F_OFFSET(reg) (int)(&((struct ns532_combined_state *)0)->fs.reg) */ +/* OBSOLETE */ +/* OBSOLETE/* at reg_offset[i] is the offset to the ns532_combined_state */ +/* OBSOLETE * location where the gdb registers[i] is stored. */ +/* OBSOLETE */ */ +/* OBSOLETE */ +/* OBSOLETEstatic int reg_offset[] = */ +/* OBSOLETE{ */ +/* OBSOLETE REG_N_OFFSET (r0), REG_N_OFFSET (r1), REG_N_OFFSET (r2), REG_N_OFFSET (r3), */ +/* OBSOLETE REG_N_OFFSET (r4), REG_N_OFFSET (r5), REG_N_OFFSET (r6), REG_N_OFFSET (r7), */ +/* OBSOLETE REG_F_OFFSET (l0a), REG_F_OFFSET (l0b), REG_F_OFFSET (l2a), REG_F_OFFSET (l2b), */ +/* OBSOLETE REG_F_OFFSET (l4a), REG_F_OFFSET (l4b), REG_F_OFFSET (l6a), REG_F_OFFSET (l6b), */ +/* OBSOLETEREG_N_OFFSET (sp), REG_N_OFFSET (fp), REG_N_OFFSET (pc), REG_N_OFFSET (psr), */ +/* OBSOLETE REG_F_OFFSET (fsr), */ +/* OBSOLETE REG_F_OFFSET (l0a), REG_F_OFFSET (l1a), REG_F_OFFSET (l2a), REG_F_OFFSET (l3a), */ +/* OBSOLETE REG_F_OFFSET (l4a), REG_F_OFFSET (l5a), REG_F_OFFSET (l6a), REG_F_OFFSET (l7a), */ +/* OBSOLETE}; */ +/* OBSOLETE */ +/* OBSOLETE#define REG_ADDRESS(state,regnum) ((char *)(state)+reg_offset[regnum]) */ +/* OBSOLETE */ +/* OBSOLETE/* Fetch COUNT contiguous registers from thread STATE starting from REGNUM */ +/* OBSOLETE * Caller knows that the regs handled in one transaction are of same size. */ +/* OBSOLETE */ */ +/* OBSOLETE#define FETCH_REGS(state, regnum, count) \ */ +/* OBSOLETE memcpy (®isters[REGISTER_BYTE (regnum)], \ */ +/* OBSOLETE (char *)state+reg_offset[ regnum ], \ */ +/* OBSOLETE count*REGISTER_SIZE) */ +/* OBSOLETE */ +/* OBSOLETE/* Store COUNT contiguous registers to thread STATE starting from REGNUM */ */ +/* OBSOLETE#define STORE_REGS(state, regnum, count) \ */ +/* OBSOLETE memcpy ((char *)state+reg_offset[ regnum ], \ */ +/* OBSOLETE ®isters[REGISTER_BYTE (regnum)], \ */ +/* OBSOLETE count*REGISTER_SIZE) */ +/* OBSOLETE */ +/* OBSOLETE/* */ +/* OBSOLETE * Fetch inferiors registers for gdb. */ +/* OBSOLETE * REGNO specifies which (as gdb views it) register, -1 for all. */ +/* OBSOLETE */ */ +/* OBSOLETE */ +/* OBSOLETEvoid */ +/* OBSOLETEfetch_inferior_registers (int regno) */ +/* OBSOLETE{ */ +/* OBSOLETE kern_return_t ret; */ +/* OBSOLETE thread_state_data_t state; */ +/* OBSOLETE unsigned int stateCnt = NS532_COMBINED_STATE_COUNT; */ +/* OBSOLETE int index; */ +/* OBSOLETE */ +/* OBSOLETE if (!MACH_PORT_VALID (current_thread)) */ +/* OBSOLETE error ("fetch inferior registers: Invalid thread"); */ +/* OBSOLETE */ +/* OBSOLETE if (must_suspend_thread) */ +/* OBSOLETE setup_thread (current_thread, 1); */ +/* OBSOLETE */ +/* OBSOLETE ret = thread_get_state (current_thread, */ +/* OBSOLETE NS532_COMBINED_STATE, */ +/* OBSOLETE state, */ +/* OBSOLETE &stateCnt); */ +/* OBSOLETE */ +/* OBSOLETE if (ret != KERN_SUCCESS) */ +/* OBSOLETE warning ("fetch_inferior_registers: %s ", */ +/* OBSOLETE mach_error_string (ret)); */ +/* OBSOLETE#if 0 */ +/* OBSOLETE /* It may be more effective to store validate all of them, */ +/* OBSOLETE * since we fetched them all anyway */ +/* OBSOLETE */ */ +/* OBSOLETE else if (regno != -1) */ +/* OBSOLETE supply_register (regno, (char *) state + reg_offset[regno]); */ +/* OBSOLETE#endif */ +/* OBSOLETE else */ +/* OBSOLETE { */ +/* OBSOLETE for (index = 0; index < NUM_REGS; index++) */ +/* OBSOLETE supply_register (index, (char *) state + reg_offset[index]); */ +/* OBSOLETE } */ +/* OBSOLETE */ +/* OBSOLETE if (must_suspend_thread) */ +/* OBSOLETE setup_thread (current_thread, 0); */ +/* OBSOLETE} */ +/* OBSOLETE */ +/* OBSOLETE/* Store our register values back into the inferior. */ +/* OBSOLETE * If REGNO is -1, do this for all registers. */ +/* OBSOLETE * Otherwise, REGNO specifies which register */ +/* OBSOLETE * */ +/* OBSOLETE * On mach3 all registers are always saved in one call. */ +/* OBSOLETE */ */ +/* OBSOLETEvoid */ +/* OBSOLETEstore_inferior_registers (int regno) */ +/* OBSOLETE{ */ +/* OBSOLETE kern_return_t ret; */ +/* OBSOLETE thread_state_data_t state; */ +/* OBSOLETE unsigned int stateCnt = NS532_COMBINED_STATE_COUNT; */ +/* OBSOLETE register int index; */ +/* OBSOLETE */ +/* OBSOLETE if (!MACH_PORT_VALID (current_thread)) */ +/* OBSOLETE error ("store inferior registers: Invalid thread"); */ +/* OBSOLETE */ +/* OBSOLETE if (must_suspend_thread) */ +/* OBSOLETE setup_thread (current_thread, 1); */ +/* OBSOLETE */ +/* OBSOLETE /* Fetch the state of the current thread */ */ +/* OBSOLETE ret = thread_get_state (current_thread, */ +/* OBSOLETE NS532_COMBINED_STATE, */ +/* OBSOLETE state, */ +/* OBSOLETE &stateCnt); */ +/* OBSOLETE */ +/* OBSOLETE if (ret != KERN_SUCCESS) */ +/* OBSOLETE { */ +/* OBSOLETE warning ("store_inferior_registers (get): %s", */ +/* OBSOLETE mach_error_string (ret)); */ +/* OBSOLETE if (must_suspend_thread) */ +/* OBSOLETE setup_thread (current_thread, 0); */ +/* OBSOLETE return; */ +/* OBSOLETE } */ +/* OBSOLETE */ +/* OBSOLETE /* move gdb's registers to thread's state */ +/* OBSOLETE */ +/* OBSOLETE * Since we save all registers anyway, save the ones */ +/* OBSOLETE * that gdb thinks are valid (e.g. ignore the regno */ +/* OBSOLETE * parameter) */ +/* OBSOLETE */ */ +/* OBSOLETE#if 0 */ +/* OBSOLETE if (regno != -1) */ +/* OBSOLETE STORE_REGS (state, regno, 1); */ +/* OBSOLETE else */ +/* OBSOLETE#endif */ +/* OBSOLETE { */ +/* OBSOLETE for (index = 0; index < NUM_REGS; index++) */ +/* OBSOLETE STORE_REGS (state, index, 1); */ +/* OBSOLETE } */ +/* OBSOLETE */ +/* OBSOLETE /* Write gdb's current view of register to the thread */ +/* OBSOLETE */ */ +/* OBSOLETE ret = thread_set_state (current_thread, */ +/* OBSOLETE NS532_COMBINED_STATE, */ +/* OBSOLETE state, */ +/* OBSOLETE NS532_COMBINED_STATE_COUNT); */ +/* OBSOLETE */ +/* OBSOLETE if (ret != KERN_SUCCESS) */ +/* OBSOLETE warning ("store_inferior_registers (set): %s", */ +/* OBSOLETE mach_error_string (ret)); */ +/* OBSOLETE */ +/* OBSOLETE if (must_suspend_thread) */ +/* OBSOLETE setup_thread (current_thread, 0); */ +/* OBSOLETE} */