2002-07-13 00:29:37 +00:00
|
|
|
/* Low level interface for debugging AIX 4.3+ pthreads.
|
|
|
|
|
2014-01-01 03:54:24 +00:00
|
|
|
Copyright (C) 1999-2014 Free Software Foundation, Inc.
|
2002-07-13 00:29:37 +00:00
|
|
|
Written by Nick Duffek <nsd@redhat.com>.
|
|
|
|
|
|
|
|
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
|
2007-08-23 18:08:50 +00:00
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
2002-07-13 00:29:37 +00:00
|
|
|
(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
|
2007-08-23 18:08:50 +00:00
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* This module uses the libpthdebug.a library provided by AIX 4.3+ for
|
|
|
|
debugging pthread applications.
|
|
|
|
|
|
|
|
Some name prefix conventions:
|
|
|
|
pthdb_ provided by libpthdebug.a
|
|
|
|
pdc_ callbacks that this module provides to libpthdebug.a
|
|
|
|
pd_ variables or functions interfacing with libpthdebug.a
|
|
|
|
|
|
|
|
libpthdebug peculiarities:
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
- pthdb_ptid_pthread() is prototyped in <sys/pthdebug.h>, but
|
|
|
|
it's not documented, and after several calls it stops working
|
|
|
|
and causes other libpthdebug functions to fail.
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
- pthdb_tid_pthread() doesn't always work after
|
|
|
|
pthdb_session_update(), but it does work after cycling through
|
|
|
|
all threads using pthdb_pthread().
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "defs.h"
|
2002-07-22 19:20:21 +00:00
|
|
|
#include "gdb_assert.h"
|
2002-07-13 00:29:37 +00:00
|
|
|
#include "gdbthread.h"
|
|
|
|
#include "target.h"
|
|
|
|
#include "inferior.h"
|
|
|
|
#include "regcache.h"
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
#include "gdbcmd.h"
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
#include "ppc-tdep.h"
|
remove gdb_string.h
This removes gdb_string.h. This patch is purely mechanical. I
created it by running the two commands:
git rm common/gdb_string.h
perl -pi -e's/"gdb_string.h"/<string.h>/;' *.[chyl] */*.[chyl]
2013-11-18 Tom Tromey <tromey@redhat.com>
* common/gdb_string.h: Remove.
* aarch64-tdep.c: Use string.h, not gdb_string.h.
* ada-exp.y: Use string.h, not gdb_string.h.
* ada-lang.c: Use string.h, not gdb_string.h.
* ada-lex.l: Use string.h, not gdb_string.h.
* ada-typeprint.c: Use string.h, not gdb_string.h.
* ada-valprint.c: Use string.h, not gdb_string.h.
* aix-thread.c: Use string.h, not gdb_string.h.
* alpha-linux-tdep.c: Use string.h, not gdb_string.h.
* alpha-mdebug-tdep.c: Use string.h, not gdb_string.h.
* alpha-nat.c: Use string.h, not gdb_string.h.
* alpha-osf1-tdep.c: Use string.h, not gdb_string.h.
* alpha-tdep.c: Use string.h, not gdb_string.h.
* alphanbsd-tdep.c: Use string.h, not gdb_string.h.
* amd64-dicos-tdep.c: Use string.h, not gdb_string.h.
* amd64-linux-nat.c: Use string.h, not gdb_string.h.
* amd64-linux-tdep.c: Use string.h, not gdb_string.h.
* amd64-nat.c: Use string.h, not gdb_string.h.
* amd64-sol2-tdep.c: Use string.h, not gdb_string.h.
* amd64fbsd-tdep.c: Use string.h, not gdb_string.h.
* amd64obsd-tdep.c: Use string.h, not gdb_string.h.
* arch-utils.c: Use string.h, not gdb_string.h.
* arm-linux-nat.c: Use string.h, not gdb_string.h.
* arm-linux-tdep.c: Use string.h, not gdb_string.h.
* arm-tdep.c: Use string.h, not gdb_string.h.
* arm-wince-tdep.c: Use string.h, not gdb_string.h.
* armbsd-tdep.c: Use string.h, not gdb_string.h.
* armnbsd-nat.c: Use string.h, not gdb_string.h.
* armnbsd-tdep.c: Use string.h, not gdb_string.h.
* armobsd-tdep.c: Use string.h, not gdb_string.h.
* avr-tdep.c: Use string.h, not gdb_string.h.
* ax-gdb.c: Use string.h, not gdb_string.h.
* ax-general.c: Use string.h, not gdb_string.h.
* bcache.c: Use string.h, not gdb_string.h.
* bfin-tdep.c: Use string.h, not gdb_string.h.
* breakpoint.c: Use string.h, not gdb_string.h.
* build-id.c: Use string.h, not gdb_string.h.
* buildsym.c: Use string.h, not gdb_string.h.
* c-exp.y: Use string.h, not gdb_string.h.
* c-lang.c: Use string.h, not gdb_string.h.
* c-typeprint.c: Use string.h, not gdb_string.h.
* c-valprint.c: Use string.h, not gdb_string.h.
* charset.c: Use string.h, not gdb_string.h.
* cli-out.c: Use string.h, not gdb_string.h.
* cli/cli-cmds.c: Use string.h, not gdb_string.h.
* cli/cli-decode.c: Use string.h, not gdb_string.h.
* cli/cli-dump.c: Use string.h, not gdb_string.h.
* cli/cli-interp.c: Use string.h, not gdb_string.h.
* cli/cli-logging.c: Use string.h, not gdb_string.h.
* cli/cli-script.c: Use string.h, not gdb_string.h.
* cli/cli-setshow.c: Use string.h, not gdb_string.h.
* cli/cli-utils.c: Use string.h, not gdb_string.h.
* coffread.c: Use string.h, not gdb_string.h.
* common/common-utils.c: Use string.h, not gdb_string.h.
* common/filestuff.c: Use string.h, not gdb_string.h.
* common/linux-procfs.c: Use string.h, not gdb_string.h.
* common/linux-ptrace.c: Use string.h, not gdb_string.h.
* common/signals.c: Use string.h, not gdb_string.h.
* common/vec.h: Use string.h, not gdb_string.h.
* core-regset.c: Use string.h, not gdb_string.h.
* corefile.c: Use string.h, not gdb_string.h.
* corelow.c: Use string.h, not gdb_string.h.
* cp-abi.c: Use string.h, not gdb_string.h.
* cp-support.c: Use string.h, not gdb_string.h.
* cp-valprint.c: Use string.h, not gdb_string.h.
* cris-tdep.c: Use string.h, not gdb_string.h.
* d-lang.c: Use string.h, not gdb_string.h.
* dbxread.c: Use string.h, not gdb_string.h.
* dcache.c: Use string.h, not gdb_string.h.
* demangle.c: Use string.h, not gdb_string.h.
* dicos-tdep.c: Use string.h, not gdb_string.h.
* disasm.c: Use string.h, not gdb_string.h.
* doublest.c: Use string.h, not gdb_string.h.
* dsrec.c: Use string.h, not gdb_string.h.
* dummy-frame.c: Use string.h, not gdb_string.h.
* dwarf2-frame.c: Use string.h, not gdb_string.h.
* dwarf2loc.c: Use string.h, not gdb_string.h.
* dwarf2read.c: Use string.h, not gdb_string.h.
* elfread.c: Use string.h, not gdb_string.h.
* environ.c: Use string.h, not gdb_string.h.
* eval.c: Use string.h, not gdb_string.h.
* event-loop.c: Use string.h, not gdb_string.h.
* exceptions.c: Use string.h, not gdb_string.h.
* exec.c: Use string.h, not gdb_string.h.
* expprint.c: Use string.h, not gdb_string.h.
* f-exp.y: Use string.h, not gdb_string.h.
* f-lang.c: Use string.h, not gdb_string.h.
* f-typeprint.c: Use string.h, not gdb_string.h.
* f-valprint.c: Use string.h, not gdb_string.h.
* fbsd-nat.c: Use string.h, not gdb_string.h.
* findcmd.c: Use string.h, not gdb_string.h.
* findvar.c: Use string.h, not gdb_string.h.
* fork-child.c: Use string.h, not gdb_string.h.
* frame.c: Use string.h, not gdb_string.h.
* frv-linux-tdep.c: Use string.h, not gdb_string.h.
* frv-tdep.c: Use string.h, not gdb_string.h.
* gdb.c: Use string.h, not gdb_string.h.
* gdb_bfd.c: Use string.h, not gdb_string.h.
* gdbarch.c: Use string.h, not gdb_string.h.
* gdbtypes.c: Use string.h, not gdb_string.h.
* gnu-nat.c: Use string.h, not gdb_string.h.
* gnu-v2-abi.c: Use string.h, not gdb_string.h.
* gnu-v3-abi.c: Use string.h, not gdb_string.h.
* go-exp.y: Use string.h, not gdb_string.h.
* go-lang.c: Use string.h, not gdb_string.h.
* go32-nat.c: Use string.h, not gdb_string.h.
* hppa-hpux-tdep.c: Use string.h, not gdb_string.h.
* hppa-linux-nat.c: Use string.h, not gdb_string.h.
* hppanbsd-tdep.c: Use string.h, not gdb_string.h.
* hppaobsd-tdep.c: Use string.h, not gdb_string.h.
* i386-cygwin-tdep.c: Use string.h, not gdb_string.h.
* i386-dicos-tdep.c: Use string.h, not gdb_string.h.
* i386-linux-nat.c: Use string.h, not gdb_string.h.
* i386-linux-tdep.c: Use string.h, not gdb_string.h.
* i386-nto-tdep.c: Use string.h, not gdb_string.h.
* i386-sol2-tdep.c: Use string.h, not gdb_string.h.
* i386-tdep.c: Use string.h, not gdb_string.h.
* i386bsd-tdep.c: Use string.h, not gdb_string.h.
* i386gnu-nat.c: Use string.h, not gdb_string.h.
* i386nbsd-tdep.c: Use string.h, not gdb_string.h.
* i386obsd-tdep.c: Use string.h, not gdb_string.h.
* i387-tdep.c: Use string.h, not gdb_string.h.
* ia64-libunwind-tdep.c: Use string.h, not gdb_string.h.
* ia64-linux-nat.c: Use string.h, not gdb_string.h.
* inf-child.c: Use string.h, not gdb_string.h.
* inf-ptrace.c: Use string.h, not gdb_string.h.
* inf-ttrace.c: Use string.h, not gdb_string.h.
* infcall.c: Use string.h, not gdb_string.h.
* infcmd.c: Use string.h, not gdb_string.h.
* inflow.c: Use string.h, not gdb_string.h.
* infrun.c: Use string.h, not gdb_string.h.
* interps.c: Use string.h, not gdb_string.h.
* iq2000-tdep.c: Use string.h, not gdb_string.h.
* irix5-nat.c: Use string.h, not gdb_string.h.
* jv-exp.y: Use string.h, not gdb_string.h.
* jv-lang.c: Use string.h, not gdb_string.h.
* jv-typeprint.c: Use string.h, not gdb_string.h.
* jv-valprint.c: Use string.h, not gdb_string.h.
* language.c: Use string.h, not gdb_string.h.
* linux-fork.c: Use string.h, not gdb_string.h.
* linux-nat.c: Use string.h, not gdb_string.h.
* lm32-tdep.c: Use string.h, not gdb_string.h.
* m2-exp.y: Use string.h, not gdb_string.h.
* m2-typeprint.c: Use string.h, not gdb_string.h.
* m32c-tdep.c: Use string.h, not gdb_string.h.
* m32r-linux-nat.c: Use string.h, not gdb_string.h.
* m32r-linux-tdep.c: Use string.h, not gdb_string.h.
* m32r-rom.c: Use string.h, not gdb_string.h.
* m32r-tdep.c: Use string.h, not gdb_string.h.
* m68hc11-tdep.c: Use string.h, not gdb_string.h.
* m68k-tdep.c: Use string.h, not gdb_string.h.
* m68kbsd-tdep.c: Use string.h, not gdb_string.h.
* m68klinux-nat.c: Use string.h, not gdb_string.h.
* m68klinux-tdep.c: Use string.h, not gdb_string.h.
* m88k-tdep.c: Use string.h, not gdb_string.h.
* macrocmd.c: Use string.h, not gdb_string.h.
* main.c: Use string.h, not gdb_string.h.
* mdebugread.c: Use string.h, not gdb_string.h.
* mem-break.c: Use string.h, not gdb_string.h.
* memattr.c: Use string.h, not gdb_string.h.
* memory-map.c: Use string.h, not gdb_string.h.
* mep-tdep.c: Use string.h, not gdb_string.h.
* mi/mi-cmd-break.c: Use string.h, not gdb_string.h.
* mi/mi-cmd-disas.c: Use string.h, not gdb_string.h.
* mi/mi-cmd-env.c: Use string.h, not gdb_string.h.
* mi/mi-cmd-stack.c: Use string.h, not gdb_string.h.
* mi/mi-cmd-var.c: Use string.h, not gdb_string.h.
* mi/mi-cmds.c: Use string.h, not gdb_string.h.
* mi/mi-console.c: Use string.h, not gdb_string.h.
* mi/mi-getopt.c: Use string.h, not gdb_string.h.
* mi/mi-interp.c: Use string.h, not gdb_string.h.
* mi/mi-main.c: Use string.h, not gdb_string.h.
* mi/mi-parse.c: Use string.h, not gdb_string.h.
* microblaze-rom.c: Use string.h, not gdb_string.h.
* microblaze-tdep.c: Use string.h, not gdb_string.h.
* mingw-hdep.c: Use string.h, not gdb_string.h.
* minidebug.c: Use string.h, not gdb_string.h.
* minsyms.c: Use string.h, not gdb_string.h.
* mips-irix-tdep.c: Use string.h, not gdb_string.h.
* mips-linux-tdep.c: Use string.h, not gdb_string.h.
* mips-tdep.c: Use string.h, not gdb_string.h.
* mips64obsd-tdep.c: Use string.h, not gdb_string.h.
* mipsnbsd-tdep.c: Use string.h, not gdb_string.h.
* mipsread.c: Use string.h, not gdb_string.h.
* mn10300-linux-tdep.c: Use string.h, not gdb_string.h.
* mn10300-tdep.c: Use string.h, not gdb_string.h.
* monitor.c: Use string.h, not gdb_string.h.
* moxie-tdep.c: Use string.h, not gdb_string.h.
* mt-tdep.c: Use string.h, not gdb_string.h.
* nbsd-tdep.c: Use string.h, not gdb_string.h.
* nios2-linux-tdep.c: Use string.h, not gdb_string.h.
* nto-procfs.c: Use string.h, not gdb_string.h.
* nto-tdep.c: Use string.h, not gdb_string.h.
* objc-lang.c: Use string.h, not gdb_string.h.
* objfiles.c: Use string.h, not gdb_string.h.
* opencl-lang.c: Use string.h, not gdb_string.h.
* osabi.c: Use string.h, not gdb_string.h.
* osdata.c: Use string.h, not gdb_string.h.
* p-exp.y: Use string.h, not gdb_string.h.
* p-lang.c: Use string.h, not gdb_string.h.
* p-typeprint.c: Use string.h, not gdb_string.h.
* parse.c: Use string.h, not gdb_string.h.
* posix-hdep.c: Use string.h, not gdb_string.h.
* ppc-linux-nat.c: Use string.h, not gdb_string.h.
* ppc-sysv-tdep.c: Use string.h, not gdb_string.h.
* ppcfbsd-tdep.c: Use string.h, not gdb_string.h.
* ppcnbsd-tdep.c: Use string.h, not gdb_string.h.
* ppcobsd-tdep.c: Use string.h, not gdb_string.h.
* printcmd.c: Use string.h, not gdb_string.h.
* procfs.c: Use string.h, not gdb_string.h.
* prologue-value.c: Use string.h, not gdb_string.h.
* python/py-auto-load.c: Use string.h, not gdb_string.h.
* python/py-gdb-readline.c: Use string.h, not gdb_string.h.
* ravenscar-thread.c: Use string.h, not gdb_string.h.
* regcache.c: Use string.h, not gdb_string.h.
* registry.c: Use string.h, not gdb_string.h.
* remote-fileio.c: Use string.h, not gdb_string.h.
* remote-m32r-sdi.c: Use string.h, not gdb_string.h.
* remote-mips.c: Use string.h, not gdb_string.h.
* remote-sim.c: Use string.h, not gdb_string.h.
* remote.c: Use string.h, not gdb_string.h.
* reverse.c: Use string.h, not gdb_string.h.
* rs6000-aix-tdep.c: Use string.h, not gdb_string.h.
* ser-base.c: Use string.h, not gdb_string.h.
* ser-go32.c: Use string.h, not gdb_string.h.
* ser-mingw.c: Use string.h, not gdb_string.h.
* ser-pipe.c: Use string.h, not gdb_string.h.
* ser-tcp.c: Use string.h, not gdb_string.h.
* ser-unix.c: Use string.h, not gdb_string.h.
* serial.c: Use string.h, not gdb_string.h.
* sh-tdep.c: Use string.h, not gdb_string.h.
* sh64-tdep.c: Use string.h, not gdb_string.h.
* shnbsd-tdep.c: Use string.h, not gdb_string.h.
* skip.c: Use string.h, not gdb_string.h.
* sol-thread.c: Use string.h, not gdb_string.h.
* solib-dsbt.c: Use string.h, not gdb_string.h.
* solib-frv.c: Use string.h, not gdb_string.h.
* solib-osf.c: Use string.h, not gdb_string.h.
* solib-spu.c: Use string.h, not gdb_string.h.
* solib-target.c: Use string.h, not gdb_string.h.
* solib.c: Use string.h, not gdb_string.h.
* somread.c: Use string.h, not gdb_string.h.
* source.c: Use string.h, not gdb_string.h.
* sparc-nat.c: Use string.h, not gdb_string.h.
* sparc-sol2-tdep.c: Use string.h, not gdb_string.h.
* sparc-tdep.c: Use string.h, not gdb_string.h.
* sparc64-tdep.c: Use string.h, not gdb_string.h.
* sparc64fbsd-tdep.c: Use string.h, not gdb_string.h.
* sparc64nbsd-tdep.c: Use string.h, not gdb_string.h.
* sparcnbsd-tdep.c: Use string.h, not gdb_string.h.
* spu-linux-nat.c: Use string.h, not gdb_string.h.
* spu-multiarch.c: Use string.h, not gdb_string.h.
* spu-tdep.c: Use string.h, not gdb_string.h.
* stabsread.c: Use string.h, not gdb_string.h.
* stack.c: Use string.h, not gdb_string.h.
* std-regs.c: Use string.h, not gdb_string.h.
* symfile.c: Use string.h, not gdb_string.h.
* symmisc.c: Use string.h, not gdb_string.h.
* symtab.c: Use string.h, not gdb_string.h.
* target.c: Use string.h, not gdb_string.h.
* thread.c: Use string.h, not gdb_string.h.
* tilegx-linux-nat.c: Use string.h, not gdb_string.h.
* tilegx-tdep.c: Use string.h, not gdb_string.h.
* top.c: Use string.h, not gdb_string.h.
* tracepoint.c: Use string.h, not gdb_string.h.
* tui/tui-command.c: Use string.h, not gdb_string.h.
* tui/tui-data.c: Use string.h, not gdb_string.h.
* tui/tui-disasm.c: Use string.h, not gdb_string.h.
* tui/tui-file.c: Use string.h, not gdb_string.h.
* tui/tui-layout.c: Use string.h, not gdb_string.h.
* tui/tui-out.c: Use string.h, not gdb_string.h.
* tui/tui-regs.c: Use string.h, not gdb_string.h.
* tui/tui-source.c: Use string.h, not gdb_string.h.
* tui/tui-stack.c: Use string.h, not gdb_string.h.
* tui/tui-win.c: Use string.h, not gdb_string.h.
* tui/tui-windata.c: Use string.h, not gdb_string.h.
* tui/tui-winsource.c: Use string.h, not gdb_string.h.
* typeprint.c: Use string.h, not gdb_string.h.
* ui-file.c: Use string.h, not gdb_string.h.
* ui-out.c: Use string.h, not gdb_string.h.
* user-regs.c: Use string.h, not gdb_string.h.
* utils.c: Use string.h, not gdb_string.h.
* v850-tdep.c: Use string.h, not gdb_string.h.
* valarith.c: Use string.h, not gdb_string.h.
* valops.c: Use string.h, not gdb_string.h.
* valprint.c: Use string.h, not gdb_string.h.
* value.c: Use string.h, not gdb_string.h.
* varobj.c: Use string.h, not gdb_string.h.
* vax-tdep.c: Use string.h, not gdb_string.h.
* vaxnbsd-tdep.c: Use string.h, not gdb_string.h.
* vaxobsd-tdep.c: Use string.h, not gdb_string.h.
* windows-nat.c: Use string.h, not gdb_string.h.
* xcoffread.c: Use string.h, not gdb_string.h.
* xml-support.c: Use string.h, not gdb_string.h.
* xstormy16-tdep.c: Use string.h, not gdb_string.h.
* xtensa-linux-nat.c: Use string.h, not gdb_string.h.
2013-11-06 14:14:23 +00:00
|
|
|
#include <string.h>
|
2007-05-11 19:55:20 +00:00
|
|
|
#include "observer.h"
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
#include <procinfo.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/ptrace.h>
|
|
|
|
#include <sys/reg.h>
|
|
|
|
#include <sched.h>
|
|
|
|
#include <sys/pthdebug.h>
|
|
|
|
|
2011-03-17 13:19:10 +00:00
|
|
|
#if !HAVE_DECL_GETTHRDS
|
2012-12-06 04:57:09 +00:00
|
|
|
extern int getthrds (pid_t, struct thrdsinfo64 *, int, tid_t *, int);
|
2011-03-17 13:19:10 +00:00
|
|
|
#endif
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Whether to emit debugging output. */
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
static int debug_aix_thread;
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* In AIX 5.1, functions use pthdb_tid_t instead of tid_t. */
|
2002-07-13 00:29:37 +00:00
|
|
|
#ifndef PTHDB_VERSION_3
|
|
|
|
#define pthdb_tid_t tid_t
|
|
|
|
#endif
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Return whether to treat PID as a debuggable thread id. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
#define PD_TID(ptid) (pd_active && ptid_get_tid (ptid) != 0)
|
|
|
|
|
|
|
|
/* pthdb_user_t value that we pass to pthdb functions. 0 causes
|
2002-07-18 19:26:14 +00:00
|
|
|
PTHDB_BAD_USER errors, so use 1. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
#define PD_USER 1
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Success and failure values returned by pthdb callbacks. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
#define PDC_SUCCESS PTHDB_SUCCESS
|
|
|
|
#define PDC_FAILURE PTHDB_CALLBACK
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Private data attached to each element in GDB's thread list. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
struct private_thread_info {
|
2002-07-18 19:26:14 +00:00
|
|
|
pthdb_pthread_t pdtid; /* thread's libpthdebug id */
|
2002-07-13 00:29:37 +00:00
|
|
|
pthdb_tid_t tid; /* kernel thread id */
|
|
|
|
};
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Information about a thread of which libpthdebug is aware. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
struct pd_thread {
|
|
|
|
pthdb_pthread_t pdtid;
|
|
|
|
pthread_t pthid;
|
|
|
|
pthdb_tid_t tid;
|
|
|
|
};
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* This module's target-specific operations, active while pd_able is true. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-22 22:11:03 +00:00
|
|
|
static struct target_ops aix_thread_ops;
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Address of the function that libpthread will call when libpthdebug
|
|
|
|
is ready to be initialized. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static CORE_ADDR pd_brk_addr;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Whether the current application is debuggable by pthdb. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int pd_able = 0;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Whether a threaded application is being debugged. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int pd_active = 0;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Whether the current architecture is 64-bit.
|
|
|
|
Only valid when pd_able is true. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int arch64;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Forward declarations for pthdb callbacks. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int pdc_symbol_addrs (pthdb_user_t, pthdb_symbol_t *, int);
|
|
|
|
static int pdc_read_data (pthdb_user_t, void *, pthdb_addr_t, size_t);
|
|
|
|
static int pdc_write_data (pthdb_user_t, void *, pthdb_addr_t, size_t);
|
|
|
|
static int pdc_read_regs (pthdb_user_t user, pthdb_tid_t tid,
|
2002-07-18 19:26:14 +00:00
|
|
|
unsigned long long flags,
|
|
|
|
pthdb_context_t *context);
|
2002-07-13 00:29:37 +00:00
|
|
|
static int pdc_write_regs (pthdb_user_t user, pthdb_tid_t tid,
|
2002-07-18 19:26:14 +00:00
|
|
|
unsigned long long flags,
|
|
|
|
pthdb_context_t *context);
|
2002-07-13 00:29:37 +00:00
|
|
|
static int pdc_alloc (pthdb_user_t, size_t, void **);
|
|
|
|
static int pdc_realloc (pthdb_user_t, void *, size_t, void **);
|
|
|
|
static int pdc_dealloc (pthdb_user_t, void *);
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* pthdb callbacks. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static pthdb_callbacks_t pd_callbacks = {
|
|
|
|
pdc_symbol_addrs,
|
|
|
|
pdc_read_data,
|
|
|
|
pdc_write_data,
|
|
|
|
pdc_read_regs,
|
|
|
|
pdc_write_regs,
|
|
|
|
pdc_alloc,
|
|
|
|
pdc_realloc,
|
|
|
|
pdc_dealloc,
|
|
|
|
NULL
|
|
|
|
};
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Current pthdb session. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static pthdb_session_t pd_session;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Return a printable representation of pthdebug function return
|
|
|
|
STATUS. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static char *
|
|
|
|
pd_status2str (int status)
|
|
|
|
{
|
|
|
|
switch (status)
|
|
|
|
{
|
|
|
|
case PTHDB_SUCCESS: return "SUCCESS";
|
|
|
|
case PTHDB_NOSYS: return "NOSYS";
|
|
|
|
case PTHDB_NOTSUP: return "NOTSUP";
|
|
|
|
case PTHDB_BAD_VERSION: return "BAD_VERSION";
|
|
|
|
case PTHDB_BAD_USER: return "BAD_USER";
|
|
|
|
case PTHDB_BAD_SESSION: return "BAD_SESSION";
|
|
|
|
case PTHDB_BAD_MODE: return "BAD_MODE";
|
|
|
|
case PTHDB_BAD_FLAGS: return "BAD_FLAGS";
|
|
|
|
case PTHDB_BAD_CALLBACK: return "BAD_CALLBACK";
|
|
|
|
case PTHDB_BAD_POINTER: return "BAD_POINTER";
|
|
|
|
case PTHDB_BAD_CMD: return "BAD_CMD";
|
|
|
|
case PTHDB_BAD_PTHREAD: return "BAD_PTHREAD";
|
|
|
|
case PTHDB_BAD_ATTR: return "BAD_ATTR";
|
|
|
|
case PTHDB_BAD_MUTEX: return "BAD_MUTEX";
|
|
|
|
case PTHDB_BAD_MUTEXATTR: return "BAD_MUTEXATTR";
|
|
|
|
case PTHDB_BAD_COND: return "BAD_COND";
|
|
|
|
case PTHDB_BAD_CONDATTR: return "BAD_CONDATTR";
|
|
|
|
case PTHDB_BAD_RWLOCK: return "BAD_RWLOCK";
|
|
|
|
case PTHDB_BAD_RWLOCKATTR: return "BAD_RWLOCKATTR";
|
|
|
|
case PTHDB_BAD_KEY: return "BAD_KEY";
|
|
|
|
case PTHDB_BAD_PTID: return "BAD_PTID";
|
|
|
|
case PTHDB_BAD_TID: return "BAD_TID";
|
|
|
|
case PTHDB_CALLBACK: return "CALLBACK";
|
|
|
|
case PTHDB_CONTEXT: return "CONTEXT";
|
|
|
|
case PTHDB_HELD: return "HELD";
|
|
|
|
case PTHDB_NOT_HELD: return "NOT_HELD";
|
|
|
|
case PTHDB_MEMORY: return "MEMORY";
|
|
|
|
case PTHDB_NOT_PTHREADED: return "NOT_PTHREADED";
|
|
|
|
case PTHDB_SYMBOL: return "SYMBOL";
|
|
|
|
case PTHDB_NOT_AVAIL: return "NOT_AVAIL";
|
|
|
|
case PTHDB_INTERNAL: return "INTERNAL";
|
|
|
|
default: return "UNKNOWN";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* A call to ptrace(REQ, ID, ...) just returned RET. Check for
|
|
|
|
exceptional conditions and either return nonlocally or else return
|
|
|
|
1 for success and 0 for failure. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
ptrace_check (int req, int id, int ret)
|
|
|
|
{
|
|
|
|
if (ret == 0 && !errno)
|
|
|
|
return 1;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* According to ptrace(2), ptrace may fail with EPERM if "the
|
|
|
|
Identifier parameter corresponds to a kernel thread which is
|
|
|
|
stopped in kernel mode and whose computational state cannot be
|
|
|
|
read or written." This happens quite often with register reads. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
switch (req)
|
|
|
|
{
|
|
|
|
case PTT_READ_GPRS:
|
|
|
|
case PTT_READ_FPRS:
|
|
|
|
case PTT_READ_SPRS:
|
|
|
|
if (ret == -1 && errno == EPERM)
|
2002-07-15 20:06:12 +00:00
|
|
|
{
|
|
|
|
if (debug_aix_thread)
|
2002-07-18 19:26:14 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
"ptrace (%d, %d) = %d (errno = %d)\n",
|
2002-07-15 20:06:12 +00:00
|
|
|
req, id, ret, errno);
|
|
|
|
return ret == -1 ? 0 : 1;
|
|
|
|
}
|
2002-07-13 00:29:37 +00:00
|
|
|
break;
|
|
|
|
}
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
error (_("aix-thread: ptrace (%d, %d) returned %d (errno = %d %s)"),
|
2002-07-16 00:22:45 +00:00
|
|
|
req, id, ret, errno, safe_strerror (errno));
|
2002-07-18 19:26:14 +00:00
|
|
|
return 0; /* Not reached. */
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2013-08-07 13:24:26 +00:00
|
|
|
/* Call ptracex (REQ, ID, ADDR, DATA, BUF) or
|
|
|
|
ptrace64 (REQ, ID, ADDR, DATA, BUF) if HAVE_PTRACE64.
|
|
|
|
Return success. */
|
|
|
|
|
|
|
|
#ifdef HAVE_PTRACE64
|
|
|
|
# define ptracex(request, pid, addr, data, buf) \
|
|
|
|
ptrace64 (request, pid, addr, data, buf)
|
|
|
|
#endif
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
ptrace64aix (int req, int id, long long addr, int data, int *buf)
|
|
|
|
{
|
|
|
|
errno = 0;
|
|
|
|
return ptrace_check (req, id, ptracex (req, id, addr, data, buf));
|
|
|
|
}
|
|
|
|
|
2013-08-07 13:24:26 +00:00
|
|
|
/* Call ptrace (REQ, ID, ADDR, DATA, BUF) or
|
|
|
|
ptrace64 (REQ, ID, ADDR, DATA, BUF) if HAVE_PTRACE64.
|
|
|
|
Return success. */
|
|
|
|
|
|
|
|
#ifdef HAVE_PTRACE64
|
|
|
|
# define ptrace(request, pid, addr, data, buf) \
|
|
|
|
ptrace64 (request, pid, addr, data, buf)
|
|
|
|
# define addr_ptr long long
|
|
|
|
#else
|
|
|
|
# define addr_ptr int *
|
|
|
|
#endif
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
2013-08-07 13:24:26 +00:00
|
|
|
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
errno = 0;
|
2002-07-18 19:26:14 +00:00
|
|
|
return ptrace_check (req, id,
|
2013-10-04 08:52:24 +00:00
|
|
|
ptrace (req, id, addr, data, buf));
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* If *PIDP is a composite process/thread id, convert it to a
|
|
|
|
process id. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
|
|
|
pid_to_prc (ptid_t *ptidp)
|
|
|
|
{
|
|
|
|
ptid_t ptid;
|
|
|
|
|
|
|
|
ptid = *ptidp;
|
|
|
|
if (PD_TID (ptid))
|
2013-09-30 11:50:12 +00:00
|
|
|
*ptidp = pid_to_ptid (ptid_get_pid (ptid));
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* pthdb callback: for <i> from 0 to COUNT, set SYMBOLS[<i>].addr to
|
|
|
|
the address of SYMBOLS[<i>].name. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
pdc_symbol_addrs (pthdb_user_t user, pthdb_symbol_t *symbols, int count)
|
|
|
|
{
|
|
|
|
struct minimal_symbol *ms;
|
|
|
|
int i;
|
|
|
|
char *name;
|
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
"pdc_symbol_addrs (user = %ld, symbols = 0x%lx, count = %d)\n",
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
user, (long) symbols, count);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
{
|
|
|
|
name = symbols[i].name;
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
2002-07-18 19:26:14 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
" symbols[%d].name = \"%s\"\n", i, name);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
if (!*name)
|
|
|
|
symbols[i].addr = 0;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!(ms = lookup_minimal_symbol (name, NULL, NULL)))
|
|
|
|
{
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog, " returning PDC_FAILURE\n");
|
2002-07-13 00:29:37 +00:00
|
|
|
return PDC_FAILURE;
|
|
|
|
}
|
|
|
|
symbols[i].addr = SYMBOL_VALUE_ADDRESS (ms);
|
|
|
|
}
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog, " symbols[%d].addr = %s\n",
|
2004-09-11 10:24:53 +00:00
|
|
|
i, hex_string (symbols[i].addr));
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog, " returning PDC_SUCCESS\n");
|
2002-07-13 00:29:37 +00:00
|
|
|
return PDC_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Read registers call back function should be able to read the
|
|
|
|
context information of a debuggee kernel thread from an active
|
|
|
|
process or from a core file. The information should be formatted
|
|
|
|
in context64 form for both 32-bit and 64-bit process.
|
|
|
|
If successful return 0, else non-zero is returned. */
|
|
|
|
|
2002-07-13 00:29:37 +00:00
|
|
|
static int
|
|
|
|
pdc_read_regs (pthdb_user_t user,
|
|
|
|
pthdb_tid_t tid,
|
|
|
|
unsigned long long flags,
|
|
|
|
pthdb_context_t *context)
|
|
|
|
{
|
2002-07-18 19:26:14 +00:00
|
|
|
/* This function doesn't appear to be used, so we could probably
|
|
|
|
just return 0 here. HOWEVER, if it is not defined, the OS will
|
|
|
|
complain and several thread debug functions will fail. In case
|
|
|
|
this is needed, I have implemented what I think it should do,
|
|
|
|
however this code is untested. */
|
|
|
|
|
2004-05-13 19:36:05 +00:00
|
|
|
uint64_t gprs64[ppc_num_gprs];
|
|
|
|
uint32_t gprs32[ppc_num_gprs];
|
|
|
|
double fprs[ppc_num_fprs];
|
2002-07-13 00:29:37 +00:00
|
|
|
struct ptxsprs sprs64;
|
|
|
|
struct ptsprs sprs32;
|
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog, "pdc_read_regs tid=%d flags=%s\n",
|
2004-09-11 10:24:53 +00:00
|
|
|
(int) tid, hex_string (flags));
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* General-purpose registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
if (flags & PTHDB_FLAG_GPRS)
|
|
|
|
{
|
|
|
|
if (arch64)
|
|
|
|
{
|
2002-07-18 19:26:14 +00:00
|
|
|
if (!ptrace64aix (PTT_READ_GPRS, tid,
|
|
|
|
(unsigned long) gprs64, 0, NULL))
|
2002-07-13 00:29:37 +00:00
|
|
|
memset (gprs64, 0, sizeof (gprs64));
|
|
|
|
memcpy (context->gpr, gprs64, sizeof(gprs64));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
if (!ptrace32 (PTT_READ_GPRS, tid, (uintptr_t) gprs32, 0, NULL))
|
2002-07-13 00:29:37 +00:00
|
|
|
memset (gprs32, 0, sizeof (gprs32));
|
|
|
|
memcpy (context->gpr, gprs32, sizeof(gprs32));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Floating-point registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
if (flags & PTHDB_FLAG_FPRS)
|
|
|
|
{
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
if (!ptrace32 (PTT_READ_FPRS, tid, (uintptr_t) fprs, 0, NULL))
|
2002-07-13 00:29:37 +00:00
|
|
|
memset (fprs, 0, sizeof (fprs));
|
2008-03-17 19:00:31 +00:00
|
|
|
memcpy (context->fpr, fprs, sizeof(fprs));
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Special-purpose registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
if (flags & PTHDB_FLAG_SPRS)
|
|
|
|
{
|
|
|
|
if (arch64)
|
|
|
|
{
|
2002-07-18 19:26:14 +00:00
|
|
|
if (!ptrace64aix (PTT_READ_SPRS, tid,
|
|
|
|
(unsigned long) &sprs64, 0, NULL))
|
2002-07-13 00:29:37 +00:00
|
|
|
memset (&sprs64, 0, sizeof (sprs64));
|
|
|
|
memcpy (&context->msr, &sprs64, sizeof(sprs64));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
if (!ptrace32 (PTT_READ_SPRS, tid, (uintptr_t) &sprs32, 0, NULL))
|
2002-07-13 00:29:37 +00:00
|
|
|
memset (&sprs32, 0, sizeof (sprs32));
|
|
|
|
memcpy (&context->msr, &sprs32, sizeof(sprs32));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Write register function should be able to write requested context
|
2011-01-07 19:36:19 +00:00
|
|
|
information to specified debuggee's kernel thread id.
|
2002-07-18 19:26:14 +00:00
|
|
|
If successful return 0, else non-zero is returned. */
|
|
|
|
|
2002-07-13 00:29:37 +00:00
|
|
|
static int
|
|
|
|
pdc_write_regs (pthdb_user_t user,
|
|
|
|
pthdb_tid_t tid,
|
|
|
|
unsigned long long flags,
|
|
|
|
pthdb_context_t *context)
|
|
|
|
{
|
2002-07-18 19:26:14 +00:00
|
|
|
/* This function doesn't appear to be used, so we could probably
|
|
|
|
just return 0 here. HOWEVER, if it is not defined, the OS will
|
|
|
|
complain and several thread debug functions will fail. In case
|
|
|
|
this is needed, I have implemented what I think it should do,
|
|
|
|
however this code is untested. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog, "pdc_write_regs tid=%d flags=%s\n",
|
2004-09-11 10:24:53 +00:00
|
|
|
(int) tid, hex_string (flags));
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* General-purpose registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
if (flags & PTHDB_FLAG_GPRS)
|
|
|
|
{
|
|
|
|
if (arch64)
|
2002-07-18 19:26:14 +00:00
|
|
|
ptrace64aix (PTT_WRITE_GPRS, tid,
|
2002-07-22 22:11:03 +00:00
|
|
|
(unsigned long) context->gpr, 0, NULL);
|
2002-07-13 00:29:37 +00:00
|
|
|
else
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
ptrace32 (PTT_WRITE_GPRS, tid, (uintptr_t) context->gpr, 0, NULL);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Floating-point registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
if (flags & PTHDB_FLAG_FPRS)
|
|
|
|
{
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
ptrace32 (PTT_WRITE_FPRS, tid, (uintptr_t) context->fpr, 0, NULL);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Special-purpose registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
if (flags & PTHDB_FLAG_SPRS)
|
|
|
|
{
|
|
|
|
if (arch64)
|
|
|
|
{
|
2002-07-18 19:26:14 +00:00
|
|
|
ptrace64aix (PTT_WRITE_SPRS, tid,
|
|
|
|
(unsigned long) &context->msr, 0, NULL);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
ptrace32 (PTT_WRITE_SPRS, tid, (uintptr_t) &context->msr, 0, NULL);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* pthdb callback: read LEN bytes from process ADDR into BUF. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
2002-07-18 19:26:14 +00:00
|
|
|
pdc_read_data (pthdb_user_t user, void *buf,
|
|
|
|
pthdb_addr_t addr, size_t len)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
int status, ret;
|
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
"pdc_read_data (user = %ld, buf = 0x%lx, addr = %s, len = %ld)\n",
|
2004-09-11 10:24:53 +00:00
|
|
|
user, (long) buf, hex_string (addr), len);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
status = target_read_memory (addr, buf, len);
|
|
|
|
ret = status == 0 ? PDC_SUCCESS : PDC_FAILURE;
|
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog, " status=%d, returning %s\n",
|
2002-07-18 19:26:14 +00:00
|
|
|
status, pd_status2str (ret));
|
2002-07-13 00:29:37 +00:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* pthdb callback: write LEN bytes from BUF to process ADDR. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
2002-07-18 19:26:14 +00:00
|
|
|
pdc_write_data (pthdb_user_t user, void *buf,
|
|
|
|
pthdb_addr_t addr, size_t len)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
int status, ret;
|
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
"pdc_write_data (user = %ld, buf = 0x%lx, addr = %s, len = %ld)\n",
|
2004-09-11 10:24:53 +00:00
|
|
|
user, (long) buf, hex_string (addr), len);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
status = target_write_memory (addr, buf, len);
|
|
|
|
ret = status == 0 ? PDC_SUCCESS : PDC_FAILURE;
|
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog, " status=%d, returning %s\n", status,
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
pd_status2str (ret));
|
2002-07-13 00:29:37 +00:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* pthdb callback: allocate a LEN-byte buffer and store a pointer to it
|
|
|
|
in BUFP. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
pdc_alloc (pthdb_user_t user, size_t len, void **bufp)
|
|
|
|
{
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
"pdc_alloc (user = %ld, len = %ld, bufp = 0x%lx)\n",
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
user, len, (long) bufp);
|
2002-07-13 00:29:37 +00:00
|
|
|
*bufp = xmalloc (len);
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
2002-07-18 19:26:14 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
" malloc returned 0x%lx\n", (long) *bufp);
|
2002-07-18 19:26:14 +00:00
|
|
|
|
|
|
|
/* Note: xmalloc() can't return 0; therefore PDC_FAILURE will never
|
|
|
|
be returned. */
|
|
|
|
|
2002-07-13 00:29:37 +00:00
|
|
|
return *bufp ? PDC_SUCCESS : PDC_FAILURE;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* pthdb callback: reallocate BUF, which was allocated by the alloc or
|
|
|
|
realloc callback, so that it contains LEN bytes, and store a
|
|
|
|
pointer to the result in BUFP. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
pdc_realloc (pthdb_user_t user, void *buf, size_t len, void **bufp)
|
|
|
|
{
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
"pdc_realloc (user = %ld, buf = 0x%lx, len = %ld, bufp = 0x%lx)\n",
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
user, (long) buf, len, (long) bufp);
|
2002-07-16 00:22:45 +00:00
|
|
|
*bufp = xrealloc (buf, len);
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
2002-07-18 19:26:14 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
" realloc returned 0x%lx\n", (long) *bufp);
|
2002-07-13 00:29:37 +00:00
|
|
|
return *bufp ? PDC_SUCCESS : PDC_FAILURE;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* pthdb callback: free BUF, which was allocated by the alloc or
|
|
|
|
realloc callback. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
pdc_dealloc (pthdb_user_t user, void *buf)
|
|
|
|
{
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
2002-07-18 19:26:14 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
* aix-thread.c (language.h): Include.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc):
Print newlines at end of debug messages.
(pdc_symbol_addrs, pdc_read_regs, pdc_write_regs, pdc_read_data)
(pdc_write_data): Use local_hex_string() instead of %llx formats.
2002-07-23 01:06:02 +00:00
|
|
|
"pdc_free (user = %ld, buf = 0x%lx)\n", user,
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
(long) buf);
|
2002-07-13 00:29:37 +00:00
|
|
|
xfree (buf);
|
|
|
|
return PDC_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Return a printable representation of pthread STATE. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static char *
|
|
|
|
state2str (pthdb_state_t state)
|
|
|
|
{
|
|
|
|
switch (state)
|
|
|
|
{
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
case PST_IDLE:
|
|
|
|
/* i18n: Like "Thread-Id %d, [state] idle" */
|
|
|
|
return _("idle"); /* being created */
|
|
|
|
case PST_RUN:
|
|
|
|
/* i18n: Like "Thread-Id %d, [state] running" */
|
|
|
|
return _("running"); /* running */
|
|
|
|
case PST_SLEEP:
|
|
|
|
/* i18n: Like "Thread-Id %d, [state] sleeping" */
|
|
|
|
return _("sleeping"); /* awaiting an event */
|
|
|
|
case PST_READY:
|
|
|
|
/* i18n: Like "Thread-Id %d, [state] ready" */
|
|
|
|
return _("ready"); /* runnable */
|
|
|
|
case PST_TERM:
|
|
|
|
/* i18n: Like "Thread-Id %d, [state] finished" */
|
|
|
|
return _("finished"); /* awaiting a join/detach */
|
|
|
|
default:
|
|
|
|
/* i18n: Like "Thread-Id %d, [state] unknown" */
|
|
|
|
return _("unknown");
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* qsort() comparison function for sorting pd_thread structs by pthid. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
pcmp (const void *p1v, const void *p2v)
|
|
|
|
{
|
|
|
|
struct pd_thread *p1 = (struct pd_thread *) p1v;
|
|
|
|
struct pd_thread *p2 = (struct pd_thread *) p2v;
|
|
|
|
return p1->pthid < p2->pthid ? -1 : p1->pthid > p2->pthid;
|
|
|
|
}
|
|
|
|
|
2009-05-20 18:21:20 +00:00
|
|
|
/* iterate_over_threads() callback for counting GDB threads.
|
|
|
|
|
|
|
|
Do not count the main thread (whose tid is zero). This matches
|
|
|
|
the list of threads provided by the pthreaddebug library, which
|
|
|
|
does not include that main thread either, and thus allows us
|
|
|
|
to compare the two lists. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
giter_count (struct thread_info *thread, void *countp)
|
|
|
|
{
|
2009-05-20 18:21:20 +00:00
|
|
|
if (PD_TID (thread->ptid))
|
|
|
|
(*(int *) countp)++;
|
2002-07-13 00:29:37 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2009-05-20 18:21:20 +00:00
|
|
|
/* iterate_over_threads() callback for accumulating GDB thread pids.
|
|
|
|
|
|
|
|
Do not include the main thread (whose tid is zero). This matches
|
|
|
|
the list of threads provided by the pthreaddebug library, which
|
|
|
|
does not include that main thread either, and thus allows us
|
|
|
|
to compare the two lists. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
giter_accum (struct thread_info *thread, void *bufp)
|
|
|
|
{
|
2009-05-20 18:21:20 +00:00
|
|
|
if (PD_TID (thread->ptid))
|
|
|
|
{
|
|
|
|
**(struct thread_info ***) bufp = thread;
|
|
|
|
(*(struct thread_info ***) bufp)++;
|
|
|
|
}
|
2002-07-13 00:29:37 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* ptid comparison function */
|
2002-07-18 19:26:14 +00:00
|
|
|
|
2002-07-13 00:29:37 +00:00
|
|
|
static int
|
|
|
|
ptid_cmp (ptid_t ptid1, ptid_t ptid2)
|
|
|
|
{
|
|
|
|
int pid1, pid2;
|
|
|
|
|
|
|
|
if (ptid_get_pid (ptid1) < ptid_get_pid (ptid2))
|
|
|
|
return -1;
|
|
|
|
else if (ptid_get_pid (ptid1) > ptid_get_pid (ptid2))
|
|
|
|
return 1;
|
|
|
|
else if (ptid_get_tid (ptid1) < ptid_get_tid (ptid2))
|
|
|
|
return -1;
|
|
|
|
else if (ptid_get_tid (ptid1) > ptid_get_tid (ptid2))
|
|
|
|
return 1;
|
|
|
|
else if (ptid_get_lwp (ptid1) < ptid_get_lwp (ptid2))
|
|
|
|
return -1;
|
|
|
|
else if (ptid_get_lwp (ptid1) > ptid_get_lwp (ptid2))
|
|
|
|
return 1;
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* qsort() comparison function for sorting thread_info structs by pid. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
|
|
|
gcmp (const void *t1v, const void *t2v)
|
|
|
|
{
|
|
|
|
struct thread_info *t1 = *(struct thread_info **) t1v;
|
|
|
|
struct thread_info *t2 = *(struct thread_info **) t2v;
|
|
|
|
return ptid_cmp (t1->ptid, t2->ptid);
|
|
|
|
}
|
|
|
|
|
2004-08-06 16:33:17 +00:00
|
|
|
/* Search through the list of all kernel threads for the thread
|
|
|
|
that has stopped on a SIGTRAP signal, and return its TID.
|
|
|
|
Return 0 if none found. */
|
|
|
|
|
|
|
|
static pthdb_tid_t
|
|
|
|
get_signaled_thread (void)
|
|
|
|
{
|
|
|
|
struct thrdsinfo64 thrinf;
|
2012-12-06 04:57:09 +00:00
|
|
|
tid_t ktid = 0;
|
2004-08-06 16:33:17 +00:00
|
|
|
int result = 0;
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
{
|
2013-09-30 11:50:12 +00:00
|
|
|
if (getthrds (ptid_get_pid (inferior_ptid), &thrinf,
|
2004-08-06 16:33:17 +00:00
|
|
|
sizeof (thrinf), &ktid, 1) != 1)
|
|
|
|
break;
|
|
|
|
|
|
|
|
if (thrinf.ti_cursig == SIGTRAP)
|
|
|
|
return thrinf.ti_tid;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Didn't find any thread stopped on a SIGTRAP signal. */
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2002-07-13 00:29:37 +00:00
|
|
|
/* Synchronize GDB's thread list with libpthdebug's.
|
|
|
|
|
|
|
|
There are some benefits of doing this every time the inferior stops:
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
- allows users to run thread-specific commands without needing to
|
|
|
|
run "info threads" first
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
- helps pthdb_tid_pthread() work properly (see "libpthdebug
|
|
|
|
peculiarities" at the top of this module)
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
- simplifies the demands placed on libpthdebug, which seems to
|
|
|
|
have difficulty with certain call patterns */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
|
|
|
sync_threadlists (void)
|
|
|
|
{
|
|
|
|
int cmd, status, infpid;
|
|
|
|
int pcount, psize, pi, gcount, gi;
|
|
|
|
struct pd_thread *pbuf;
|
|
|
|
struct thread_info **gbuf, **g, *thread;
|
|
|
|
pthdb_pthread_t pdtid;
|
|
|
|
pthread_t pthid;
|
|
|
|
pthdb_tid_t tid;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Accumulate an array of libpthdebug threads sorted by pthread id. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
pcount = 0;
|
|
|
|
psize = 1;
|
|
|
|
pbuf = (struct pd_thread *) xmalloc (psize * sizeof *pbuf);
|
|
|
|
|
|
|
|
for (cmd = PTHDB_LIST_FIRST;; cmd = PTHDB_LIST_NEXT)
|
|
|
|
{
|
|
|
|
status = pthdb_pthread (pd_session, &pdtid, cmd);
|
|
|
|
if (status != PTHDB_SUCCESS || pdtid == PTHDB_INVALID_PTHREAD)
|
|
|
|
break;
|
|
|
|
|
|
|
|
status = pthdb_pthread_ptid (pd_session, pdtid, &pthid);
|
|
|
|
if (status != PTHDB_SUCCESS || pthid == PTHDB_INVALID_PTID)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (pcount == psize)
|
|
|
|
{
|
|
|
|
psize *= 2;
|
2002-07-18 19:26:14 +00:00
|
|
|
pbuf = (struct pd_thread *) xrealloc (pbuf,
|
|
|
|
psize * sizeof *pbuf);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
pbuf[pcount].pdtid = pdtid;
|
|
|
|
pbuf[pcount].pthid = pthid;
|
|
|
|
pcount++;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (pi = 0; pi < pcount; pi++)
|
|
|
|
{
|
|
|
|
status = pthdb_pthread_tid (pd_session, pbuf[pi].pdtid, &tid);
|
|
|
|
if (status != PTHDB_SUCCESS)
|
|
|
|
tid = PTHDB_INVALID_TID;
|
|
|
|
pbuf[pi].tid = tid;
|
|
|
|
}
|
|
|
|
|
|
|
|
qsort (pbuf, pcount, sizeof *pbuf, pcmp);
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Accumulate an array of GDB threads sorted by pid. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
gcount = 0;
|
|
|
|
iterate_over_threads (giter_count, &gcount);
|
|
|
|
g = gbuf = (struct thread_info **) xmalloc (gcount * sizeof *gbuf);
|
|
|
|
iterate_over_threads (giter_accum, &g);
|
|
|
|
qsort (gbuf, gcount, sizeof *gbuf, gcmp);
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Apply differences between the two arrays to GDB's thread list. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2013-09-30 11:50:12 +00:00
|
|
|
infpid = ptid_get_pid (inferior_ptid);
|
2002-07-13 00:29:37 +00:00
|
|
|
for (pi = gi = 0; pi < pcount || gi < gcount;)
|
|
|
|
{
|
|
|
|
if (pi == pcount)
|
|
|
|
{
|
2002-07-15 20:06:12 +00:00
|
|
|
delete_thread (gbuf[gi]->ptid);
|
2002-07-13 00:29:37 +00:00
|
|
|
gi++;
|
|
|
|
}
|
2002-07-15 20:06:12 +00:00
|
|
|
else if (gi == gcount)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2013-10-04 08:56:09 +00:00
|
|
|
thread = add_thread (ptid_build (infpid, 0, pbuf[pi].pthid));
|
2002-07-13 00:29:37 +00:00
|
|
|
thread->private = xmalloc (sizeof (struct private_thread_info));
|
2002-07-15 20:06:12 +00:00
|
|
|
thread->private->pdtid = pbuf[pi].pdtid;
|
|
|
|
thread->private->tid = pbuf[pi].tid;
|
2002-07-13 00:29:37 +00:00
|
|
|
pi++;
|
|
|
|
}
|
2002-07-15 20:06:12 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
ptid_t pptid, gptid;
|
|
|
|
int cmp_result;
|
|
|
|
|
2013-09-30 11:50:12 +00:00
|
|
|
pptid = ptid_build (infpid, 0, pbuf[pi].pthid);
|
2002-07-15 20:06:12 +00:00
|
|
|
gptid = gbuf[gi]->ptid;
|
|
|
|
pdtid = pbuf[pi].pdtid;
|
|
|
|
tid = pbuf[pi].tid;
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-15 20:06:12 +00:00
|
|
|
cmp_result = ptid_cmp (pptid, gptid);
|
|
|
|
|
|
|
|
if (cmp_result == 0)
|
|
|
|
{
|
|
|
|
gbuf[gi]->private->pdtid = pdtid;
|
|
|
|
gbuf[gi]->private->tid = tid;
|
|
|
|
pi++;
|
|
|
|
gi++;
|
|
|
|
}
|
|
|
|
else if (cmp_result > 0)
|
|
|
|
{
|
|
|
|
delete_thread (gptid);
|
|
|
|
gi++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
thread = add_thread (pptid);
|
|
|
|
thread->private = xmalloc (sizeof (struct private_thread_info));
|
|
|
|
thread->private->pdtid = pdtid;
|
|
|
|
thread->private->tid = tid;
|
|
|
|
pi++;
|
|
|
|
}
|
|
|
|
}
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
xfree (pbuf);
|
|
|
|
xfree (gbuf);
|
|
|
|
}
|
|
|
|
|
2004-08-06 16:33:17 +00:00
|
|
|
/* Iterate_over_threads() callback for locating a thread, using
|
|
|
|
the TID of its associated kernel thread. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
2004-08-06 16:33:17 +00:00
|
|
|
iter_tid (struct thread_info *thread, void *tidp)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2004-08-06 16:33:17 +00:00
|
|
|
const pthdb_tid_t tid = *(pthdb_tid_t *)tidp;
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2004-08-06 16:33:17 +00:00
|
|
|
return (thread->private->tid == tid);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Synchronize libpthdebug's state with the inferior and with GDB,
|
|
|
|
generate a composite process/thread <pid> for the current thread,
|
|
|
|
set inferior_ptid to <pid> if SET_INFPID, and return <pid>. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static ptid_t
|
|
|
|
pd_update (int set_infpid)
|
|
|
|
{
|
|
|
|
int status;
|
|
|
|
ptid_t ptid;
|
2004-08-06 16:33:17 +00:00
|
|
|
pthdb_tid_t tid;
|
|
|
|
struct thread_info *thread = NULL;
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
if (!pd_active)
|
|
|
|
return inferior_ptid;
|
|
|
|
|
|
|
|
status = pthdb_session_update (pd_session);
|
|
|
|
if (status != PTHDB_SUCCESS)
|
|
|
|
return inferior_ptid;
|
|
|
|
|
|
|
|
sync_threadlists ();
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Define "current thread" as one that just received a trap signal. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2004-08-06 16:33:17 +00:00
|
|
|
tid = get_signaled_thread ();
|
|
|
|
if (tid != 0)
|
|
|
|
thread = iterate_over_threads (iter_tid, &tid);
|
2002-07-13 00:29:37 +00:00
|
|
|
if (!thread)
|
|
|
|
ptid = inferior_ptid;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ptid = thread->ptid;
|
|
|
|
if (set_infpid)
|
|
|
|
inferior_ptid = ptid;
|
|
|
|
}
|
|
|
|
return ptid;
|
|
|
|
}
|
|
|
|
|
2011-01-07 19:36:19 +00:00
|
|
|
/* Try to start debugging threads in the current process.
|
2002-07-18 19:26:14 +00:00
|
|
|
If successful and SET_INFPID, set inferior_ptid to reflect the
|
|
|
|
current thread. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static ptid_t
|
|
|
|
pd_activate (int set_infpid)
|
|
|
|
{
|
|
|
|
int status;
|
|
|
|
|
|
|
|
status = pthdb_session_init (PD_USER, arch64 ? PEM_64BIT : PEM_32BIT,
|
2002-07-18 19:26:14 +00:00
|
|
|
PTHDB_FLAG_REGS, &pd_callbacks,
|
|
|
|
&pd_session);
|
2002-07-13 00:29:37 +00:00
|
|
|
if (status != PTHDB_SUCCESS)
|
|
|
|
{
|
|
|
|
return inferior_ptid;
|
|
|
|
}
|
|
|
|
pd_active = 1;
|
|
|
|
return pd_update (set_infpid);
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Undo the effects of pd_activate(). */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
|
|
|
pd_deactivate (void)
|
|
|
|
{
|
|
|
|
if (!pd_active)
|
|
|
|
return;
|
|
|
|
pthdb_session_destroy (pd_session);
|
|
|
|
|
|
|
|
pid_to_prc (&inferior_ptid);
|
|
|
|
pd_active = 0;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* An object file has just been loaded. Check whether the current
|
|
|
|
application is pthreaded, and if so, prepare for thread debugging. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
|
|
|
pd_enable (void)
|
|
|
|
{
|
|
|
|
int status;
|
|
|
|
char *stub_name;
|
|
|
|
struct minimal_symbol *ms;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Don't initialize twice. */
|
2002-07-13 00:29:37 +00:00
|
|
|
if (pd_able)
|
|
|
|
return;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Check application word size. */
|
* gdbarch.sh (target_gdbarch): Remove macro.
(get_target_gdbarch): Rename to target_gdbarch.
* gdbarch.c, gdbarch.h: Rebuild.
* ada-tasks.c, aix-thread.c, amd64-linux-nat.c, arch-utils.c,
arm-tdep.c, auxv.c, breakpoint.c, bsd-uthread.c, corefile.c,
darwin-nat-info.c, dcache.c, dsrec.c, exec.c, fbsd-nat.c,
filesystem.c, gcore.c, gnu-nat.c, i386-darwin-nat.c, i386-nat.c,
ia64-vms-tdep.c, inf-ptrace.c, infcmd.c, jit.c, linux-nat.c,
linux-tdep.c, linux-thread-db.c, m32r-rom.c, memattr.c,
mep-tdep.c, microblaze-tdep.c, mips-linux-nat.c,
mips-linux-tdep.c, mips-tdep.c, monitor.c, moxie-tdep.c,
nto-procfs.c, nto-tdep.c, ppc-linux-nat.c, proc-service.c,
procfs.c, progspace.c, ravenscar-thread.c, record.c,
remote-m32r-sdi.c, remote-mips.c, remote-sim.c, remote.c,
rl78-tdep.c, rs6000-nat.c, rx-tdep.c, s390-nat.c, sol-thread.c,
solib-darwin.c, solib-dsbt.c, solib-frv.c, solib-ia64-hpux.c,
solib-irix.c, solib-pa64.c, solib-som.c, solib-spu.c,
solib-sunos.c, solib-svr4.c, solib.c, spu-linux-nat.c,
spu-multiarch.c, spu-tdep.c, symfile-mem.c, symfile.c, symtab.c,
target-descriptions.c, target.c, target.h, tracepoint.c,
windows-nat.c, windows-tdep.c, xcoffsolib.c, cli/cli-dump.c,
common/agent.c, mi/mi-interp.c, python/py-finishbreakpoint.c,
python/py-inferior.c, python/python.c: Update.
2012-11-09 19:58:03 +00:00
|
|
|
arch64 = register_size (target_gdbarch (), 0) == 8;
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Check whether the application is pthreaded. */
|
2002-07-13 00:29:37 +00:00
|
|
|
stub_name = NULL;
|
2002-07-18 19:26:14 +00:00
|
|
|
status = pthdb_session_pthreaded (PD_USER, PTHDB_FLAG_REGS,
|
|
|
|
&pd_callbacks, &stub_name);
|
2009-10-06 21:27:59 +00:00
|
|
|
if ((status != PTHDB_SUCCESS
|
|
|
|
&& status != PTHDB_NOT_PTHREADED) || !stub_name)
|
2002-07-13 00:29:37 +00:00
|
|
|
return;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Set a breakpoint on the returned stub function. */
|
2002-07-13 00:29:37 +00:00
|
|
|
if (!(ms = lookup_minimal_symbol (stub_name, NULL, NULL)))
|
|
|
|
return;
|
|
|
|
pd_brk_addr = SYMBOL_VALUE_ADDRESS (ms);
|
* gdbarch.sh (target_gdbarch): Remove macro.
(get_target_gdbarch): Rename to target_gdbarch.
* gdbarch.c, gdbarch.h: Rebuild.
* ada-tasks.c, aix-thread.c, amd64-linux-nat.c, arch-utils.c,
arm-tdep.c, auxv.c, breakpoint.c, bsd-uthread.c, corefile.c,
darwin-nat-info.c, dcache.c, dsrec.c, exec.c, fbsd-nat.c,
filesystem.c, gcore.c, gnu-nat.c, i386-darwin-nat.c, i386-nat.c,
ia64-vms-tdep.c, inf-ptrace.c, infcmd.c, jit.c, linux-nat.c,
linux-tdep.c, linux-thread-db.c, m32r-rom.c, memattr.c,
mep-tdep.c, microblaze-tdep.c, mips-linux-nat.c,
mips-linux-tdep.c, mips-tdep.c, monitor.c, moxie-tdep.c,
nto-procfs.c, nto-tdep.c, ppc-linux-nat.c, proc-service.c,
procfs.c, progspace.c, ravenscar-thread.c, record.c,
remote-m32r-sdi.c, remote-mips.c, remote-sim.c, remote.c,
rl78-tdep.c, rs6000-nat.c, rx-tdep.c, s390-nat.c, sol-thread.c,
solib-darwin.c, solib-dsbt.c, solib-frv.c, solib-ia64-hpux.c,
solib-irix.c, solib-pa64.c, solib-som.c, solib-spu.c,
solib-sunos.c, solib-svr4.c, solib.c, spu-linux-nat.c,
spu-multiarch.c, spu-tdep.c, symfile-mem.c, symfile.c, symtab.c,
target-descriptions.c, target.c, target.h, tracepoint.c,
windows-nat.c, windows-tdep.c, xcoffsolib.c, cli/cli-dump.c,
common/agent.c, mi/mi-interp.c, python/py-finishbreakpoint.c,
python/py-inferior.c, python/python.c: Update.
2012-11-09 19:58:03 +00:00
|
|
|
if (!create_thread_event_breakpoint (target_gdbarch (), pd_brk_addr))
|
2002-07-13 00:29:37 +00:00
|
|
|
return;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Prepare for thread debugging. */
|
2002-07-22 22:11:03 +00:00
|
|
|
push_target (&aix_thread_ops);
|
2002-07-13 00:29:37 +00:00
|
|
|
pd_able = 1;
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* If we're debugging a core file or an attached inferior, the
|
|
|
|
pthread library may already have been initialized, so try to
|
|
|
|
activate thread debugging. */
|
2002-07-13 00:29:37 +00:00
|
|
|
pd_activate (1);
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Undo the effects of pd_enable(). */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
|
|
|
pd_disable (void)
|
|
|
|
{
|
|
|
|
if (!pd_able)
|
|
|
|
return;
|
|
|
|
if (pd_active)
|
|
|
|
pd_deactivate ();
|
|
|
|
pd_able = 0;
|
2002-07-22 22:11:03 +00:00
|
|
|
unpush_target (&aix_thread_ops);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2007-05-11 19:55:20 +00:00
|
|
|
/* new_objfile observer callback.
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
If OBJFILE is non-null, check whether a threaded application is
|
|
|
|
being debugged, and if so, prepare for thread debugging.
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
If OBJFILE is null, stop debugging threads. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
|
|
|
new_objfile (struct objfile *objfile)
|
|
|
|
{
|
|
|
|
if (objfile)
|
|
|
|
pd_enable ();
|
|
|
|
else
|
|
|
|
pd_disable ();
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Attach to process specified by ARGS. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
Kill pthread_ops_hack
* target.h (struct target_ops): Make to_attach, to_detach,
to_create_inferior and to_mourn_inferior accept a pointer
to struct target_ops.
(target_attach, target_create_inferior, target_create_inferior):
Convert from macros to function. Find the right target to
invoke a method of.
(find_default_attach, find_default_create_inferior): New parameter
ops.
* corefile.c (core_file_command): Pass target to to_detach.
* corelow.c (core_detach): Add 'ops' parameter.
* fork-child.c (fork_inferior): Return the pid. Allow
init_trace_fun to be NULL.
* inf-ptrace (ptrace_ops_hack): Remove.
(inf_ptrace_him): Remove, moving all logic into....
(inf_ptrace_create_inferior): ... here. Push the target
passed as parameter.
(inf_ptrace_mourn_inferior, inf_ptrace_attach, inf_ptrace_detach):
Push/pop target passed as parameter, no ptrace_ops_hack.
(inf_ptrace_target): Don't remember result.
* inferior.h (fork_inferior): Adjust prototype.
* linux-nat.c (linux_nat_create_inferior, linux_nat_attach)
(linux_nat_detach, linux_nat_mourn_inferior): New parameter ops.
Pass it to linux_ops target.
* linux-thread-db.c (thread_db_detach, thread_db_mourn_inferior):
New parameter ops. Pass it to the target beneath.
* remote.c (remote_mourn, extended_remote_mourn, remote_detach)
(extended_remote_create_inferior): New parameter ops. Pass it
further.
* target.c (debug_to_attach, debug_to_detach)
(debug_to_mourn_inferior): New parameter ops.
(target_create_inferior): New.
(update_current_target): Do not inherit to_attach, to_detach,
to_create_inferiour, to_mourn_inferior. Do not default
to_detach and to_mourn_inferior.
(target_detach): Find the right target to use.
(target_mourn_inferior): New.
(find_default_attach, find_default_create_inferior): New parameter
ops. Pass the found target when calling its method.
(init_dummy_target): Provide fallback definition of to_detach.
(target_attach): New.
(debug_to_attach, debug_to_detach, debug_to_create_inferior)
(debug_to_mourn_inferiour): New parameter ops.
* aix-thread.c: Adjust.
* bsd-uthread.c: Adjust.
* gnu-nat.c: Adjust.
* go32-nat.c: Adjust.
* hpux-thread.c: Adjust.
* inf-ttrace.c: Ajust.
* monitor.c: Adjust.
* nto-procfs.c: Adjust.
* procfs.c: Adjust.
* remote-m32r-sdi.c: Adjust.
* remote-mips.c: Adjust.
* remote-sim.c: Adjust.
* rs6000-nat.c: Adjust.
* sol-thread.c: Adjust.
* win32-nat.c: Adjust.
* dec-thread.c: Adjust.
2008-11-09 11:27:18 +00:00
|
|
|
aix_thread_attach (struct target_ops *ops, char *args, int from_tty)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2009-03-15 19:38:42 +00:00
|
|
|
struct target_ops *beneath = find_target_beneath (ops);
|
|
|
|
|
|
|
|
beneath->to_attach (beneath, args, from_tty);
|
2002-07-13 00:29:37 +00:00
|
|
|
pd_activate (1);
|
|
|
|
}
|
|
|
|
|
2002-07-22 22:11:03 +00:00
|
|
|
/* Detach from the process attached to by aix_thread_attach(). */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
constify to_detach
This patch constifies the target_ops method to_detach.
This is a small cleanup, but also, I think, a bug-prevention fix,
since gdb already acts as if the "args" argument here was const.
In particular, top.c:quit_force calls kill_or_detach via
iterate_over_inferiors. kill_or_detach calls target_detach, passing
the same argument each time. So, if one of these methods was not
const-correct, then kill_or_detach would change its behavior in a
strange way.
I could not build every target I modified in this patch. I've
inspected them all by hand, though. Many targets do not use the
"args" parameter; a couple pass it to atoi; and a few pass it on to
the to_detach method of the target beneath. The only code that
required a real change was in linux-nat.c, and that only needed the
introduction of a temporary variable for const-correctness.
2013-11-08 Tom Tromey <tromey@redhat.com>
* aix-thread.c (aix_thread_detach): Update.
* corelow.c (core_detach): Update.
* darwin-nat.c (darwin_detach): Update.
* dec-thread.c (dec_thread_detach): Update.
* gnu-nat.c (gnu_detach): Update.
* go32-nat.c (go32_detach): Update.
* inf-ptrace.c (inf_ptrace_detach): Update.
* inf-ttrace.c (inf_ttrace_detach): Update.
* linux-fork.c (linux_fork_detach): Update.
* linux-fork.h (linux_fork_detach): Update.
* linux-nat.c (linux_nat_detach): Update. Introduce "tem"
local for const-correctness.
* linux-thread-db.c (thread_db_detach): Update.
* monitor.c (monitor_detach): Update.
* nto-procfs.c (procfs_detach): Update.
* procfs.c (procfs_detach): Update.
* record.c (record_detach): Update.
* record.h (record_detach): Update.
* remote-m32r-sdi.c (m32r_detach): Update.
* remote-mips.c (mips_detach): Update.
* remote-sim.c (gdbsim_detach): Update.
* remote.c (remote_detach_1, remote_detach)
(extended_remote_detach): Update.
* sol-thread.c (sol_thread_detach): Update.
* target.c (target_detach): Make "args" const.
(init_dummy_target): Update.
* target.h (struct target_ops) <to_detach>: Make argument const.
(target_detach): Likewise.
* windows-nat.c (windows_detach): Update.
2013-03-19 15:23:17 +00:00
|
|
|
aix_thread_detach (struct target_ops *ops, const char *args, int from_tty)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2009-03-15 19:38:42 +00:00
|
|
|
struct target_ops *beneath = find_target_beneath (ops);
|
|
|
|
|
2002-08-22 15:27:16 +00:00
|
|
|
pd_disable ();
|
2009-03-15 19:38:42 +00:00
|
|
|
beneath->to_detach (beneath, args, from_tty);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Tell the inferior process to continue running thread PID if != -1
|
2002-07-18 19:26:14 +00:00
|
|
|
and all threads otherwise. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
2009-03-12 17:44:29 +00:00
|
|
|
aix_thread_resume (struct target_ops *ops,
|
2012-05-24 16:39:15 +00:00
|
|
|
ptid_t ptid, int step, enum gdb_signal sig)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
struct thread_info *thread;
|
|
|
|
pthdb_tid_t tid[2];
|
|
|
|
|
|
|
|
if (!PD_TID (ptid))
|
2002-07-15 23:33:09 +00:00
|
|
|
{
|
|
|
|
struct cleanup *cleanup = save_inferior_ptid ();
|
2009-03-15 19:38:42 +00:00
|
|
|
struct target_ops *beneath = find_target_beneath (ops);
|
|
|
|
|
2013-09-30 11:50:12 +00:00
|
|
|
inferior_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
|
2009-03-15 19:38:42 +00:00
|
|
|
beneath->to_resume (beneath, ptid, step, sig);
|
2002-07-15 23:33:09 +00:00
|
|
|
do_cleanups (cleanup);
|
|
|
|
}
|
2002-07-13 00:29:37 +00:00
|
|
|
else
|
|
|
|
{
|
2009-05-24 21:06:53 +00:00
|
|
|
thread = find_thread_ptid (ptid);
|
2002-07-13 00:29:37 +00:00
|
|
|
if (!thread)
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
error (_("aix-thread resume: unknown pthread %ld"),
|
2013-09-30 11:50:12 +00:00
|
|
|
ptid_get_lwp (ptid));
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
tid[0] = thread->private->tid;
|
|
|
|
if (tid[0] == PTHDB_INVALID_TID)
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
error (_("aix-thread resume: no tid for pthread %ld"),
|
2013-09-30 11:50:12 +00:00
|
|
|
ptid_get_lwp (ptid));
|
2002-07-13 00:29:37 +00:00
|
|
|
tid[1] = 0;
|
|
|
|
|
|
|
|
if (arch64)
|
2013-08-07 13:24:26 +00:00
|
|
|
ptrace64aix (PTT_CONTINUE, tid[0], (long long) 1,
|
2012-05-24 16:39:15 +00:00
|
|
|
gdb_signal_to_host (sig), (void *) tid);
|
2002-07-13 00:29:37 +00:00
|
|
|
else
|
2013-08-07 13:24:26 +00:00
|
|
|
ptrace32 (PTT_CONTINUE, tid[0], (addr_ptr) 1,
|
2012-05-24 16:39:15 +00:00
|
|
|
gdb_signal_to_host (sig), (void *) tid);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Wait for thread/process ID if != -1 or for any thread otherwise.
|
|
|
|
If an error occurs, return -1, else return the pid of the stopped
|
|
|
|
thread. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static ptid_t
|
* linux-nat.c (linux_nat_wait): Adjust.
(linux_nat_pid_to_str): Adjust. Remove call to thread_db_init.
* linux-nat.h (thread_db_init): Delete declaration.
* linux-thread-db.c (target_beneath): Delete.
(thread_db_init): Delete.
(thread_db_detach): Use find_target_beneath.
(thread_db_wait): Adjust interface. Use find_target_beneath.
(thread_db_mourn_inferior): Use find_target_beneath.
(thread_db_can_async_p, thread_db_is_async_p, thread_db_async)
(thread_db_async_mask): Delete.
(thread_db_pid_to_str): Adjust interface. Use
find_target_beneath.
(thread_db_get_thread_local_address): Adjust interface. Use
find_target_beneath.
(init_thread_db_ops): Delete references to delete functions.
* target.c (update_current_target): Don't inherit or default
to_wait. Don't inherit to_pid_to_str and
to_get_thread_local_address.
(target_translate_tls_address): Look for a pushed target that
implements to_get_thread_local_address, and use it instead of
checking for target_get_thread_local_address_p.
(target_wait, target_pid_to_str): Reimplement as functions.
(dummy_pid_to_str): New.
(init_dummy_target): Register it.
(debug_to_wait): Delete.
* target.h (struct target_ops): Make to_wait, to_pid_to_str and
to_get_thread_local_address accept a pointer to struct target_ops.
(target_wait): Delete macro, and declare as function.
(target_pid_to_str): Likewise.
(target_get_thread_local_address)
(target_get_thread_local_address_p): Delete.
(noprocess): Add NORETURN and ATTR_NORETURN tags.
* inf-ptrace.c (inf_ptrace_wait): Adjust.
(inf_ptrace_pid_to_str): New.
(inf_ptrace_target): Use inf_ptrace_pid_to_str.
* aix-thread.c (aix_thread_wait, aix_thread_pid_to_str): Adjust.
* bsd-kvm.c (bsd_kvm_pid_to_str): Adjust.
* bsd-uthread.c (bsd_uthread_wait, bsd_uthread_pid_to_str):
Adjust.
* corelow.c (core_pid_to_str): Adjust.
* darwin-nat.c (darwin_wait, darwin_pid_to_str): Adjust.
* dec-thread.c (dec_thread_wait, dec_thread_pid_to_str): Adjust.
* gnu-nat.c (gnu_wait, gnu_pid_to_str): Adjust.
* go32-nat.c (go32_wait, go32_pid_to_str): Adjust.
* hpux-thread.c (hpux_thread_wait): Adjust.
* inf-ttrace.c (inf_ttrace_wait, inf_ttrace_pid_to_str): Adjust.
* monitor.c (monitor_wait, monitor_pid_to_str): Adjust.
* nto-procfs.c (procfs_wait, procfs_pid_to_str): Adjust.
* procfs.c (procfs_pid_to_str): Adjust.
* remote-m32r-sdi.c (m32r_wait, m32r_pid_to_str): Adjust.
* remote-mips.c (mips_wait): Adjust.
* remote-sim.c (gdbsim_wait, gdbsim_pid_to_str): Adjust.
* remote.c (remote_wait, remote_pid_to_str)
(remote_get_thread_local_address): Adjust.
* rs6000-nat.c (rs6000_wait): Adjust.
* sol-thread.c (procfs_pid_to_str): Adjust declaration.
(sol_thread_wait, solaris_pid_to_str): Adjust.
* spu-linux-nat.c (spu_child_wait): Adjust.
* windows-nat.c (windows_wait, windows_pid_to_str): Adjust.
2009-02-06 22:21:26 +00:00
|
|
|
aix_thread_wait (struct target_ops *ops,
|
2009-05-21 22:33:46 +00:00
|
|
|
ptid_t ptid, struct target_waitstatus *status, int options)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2002-07-15 23:33:09 +00:00
|
|
|
struct cleanup *cleanup = save_inferior_ptid ();
|
2009-03-15 19:38:42 +00:00
|
|
|
struct target_ops *beneath = find_target_beneath (ops);
|
2002-07-15 23:33:09 +00:00
|
|
|
|
2002-07-13 00:29:37 +00:00
|
|
|
pid_to_prc (&ptid);
|
2002-07-15 23:33:09 +00:00
|
|
|
|
2013-09-30 11:50:12 +00:00
|
|
|
inferior_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
|
2009-05-21 22:33:46 +00:00
|
|
|
ptid = beneath->to_wait (beneath, ptid, status, options);
|
2002-07-15 23:33:09 +00:00
|
|
|
do_cleanups (cleanup);
|
|
|
|
|
2013-09-30 11:50:12 +00:00
|
|
|
if (ptid_get_pid (ptid) == -1)
|
2002-07-13 00:29:37 +00:00
|
|
|
return pid_to_ptid (-1);
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Check whether libpthdebug might be ready to be initialized. */
|
2008-05-04 14:12:34 +00:00
|
|
|
if (!pd_active && status->kind == TARGET_WAITKIND_STOPPED
|
2012-05-24 16:51:47 +00:00
|
|
|
&& status->value.sig == GDB_SIGNAL_TRAP)
|
2008-05-04 14:12:34 +00:00
|
|
|
{
|
|
|
|
struct regcache *regcache = get_thread_regcache (ptid);
|
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
|
|
|
|
if (regcache_read_pc (regcache)
|
2013-12-18 10:09:34 +00:00
|
|
|
- target_decr_pc_after_break (gdbarch) == pd_brk_addr)
|
2008-05-04 14:12:34 +00:00
|
|
|
return pd_activate (0);
|
|
|
|
}
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
return pd_update (0);
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Record that the 64-bit general-purpose registers contain VALS. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_gprs64 (struct regcache *regcache, uint64_t *vals)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
|
2002-07-13 00:29:37 +00:00
|
|
|
int regno;
|
|
|
|
|
2004-05-13 19:36:05 +00:00
|
|
|
for (regno = 0; regno < ppc_num_gprs; regno++)
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_supply (regcache, tdep->ppc_gp0_regnum + regno,
|
2004-07-21 Andrew Cagney <cagney@gnu.org>
Use regcache_raw_supply instead of supply_register.
* regcache.h (supply_register): Delete declaration.
* regcache.c (supply_register): Delete function.
* wince.c (do_child_fetch_inferior_registers): Update.
* win32-nat.c (do_child_fetch_inferior_registers)
(fetch_elf_core_registers): Update.
* v850ice.c (v850ice_fetch_registers): Update.
* thread-db.c (thread_db_store_registers): Update.
* sol-thread.c (sol_thread_store_registers): Update.
* shnbsd-tdep.c (shnbsd_supply_reg): Update.
* rs6000-nat.c (fetch_register): Update.
* rom68k-rom.c (rom68k_supply_one_register): Update.
* remote.c (remote_wait, remote_async_wait): Update.
* remote-st.c (get_hex_regs): Update.
* remote-sim.c (gdbsim_fetch_register): Update.
* remote-sds.c (sds_fetch_registers): Update.
* remote-rdp.c (remote_rdp_fetch_register): Update.
* remote-rdi.c (arm_rdi_fetch_registers): Update.
* remote-mips.c (mips_wait, mips_fetch_registers): Update.
* remote-m32r-sdi.c (m32r_fetch_register): Update.
* remote-hms.c (init_hms_cmds): Update.
* remote-est.c (init_est_cmds): Update.
* remote-e7000.c (get_hex_regs, fetch_regs_from_dump)
(e7000_fetch_registers, sub2_from_pc, e7000_wait): Update.
* ppcnbsd-tdep.c (ppcnbsd_supply_reg, ppcnbsd_supply_fpreg): Update.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register)
(fetch_register, supply_vrregset, supply_vrregset)
(fetch_spe_registers): Update.
* ppc-bdm.c (bdm_ppc_fetch_registers): Update.
* monitor.c (monitor_supply_register): Update.
* mipsv4-nat.c (supply_gregset, supply_fpregset): Update.
* mipsnbsd-tdep.c (mipsnbsd_supply_reg)
(mipsnbsd_supply_fpreg): Update.
* mips-nat.c (fetch_inferior_registers)
(fetch_core_registers): Update.
* mips-linux-tdep.c (supply_32bit_reg, supply_gregset)
(supply_fpregset, mips64_supply_gregset)
(mips64_supply_fpregset): Update.
* m68klinux-nat.c (fetch_register, supply_gregset)
(supply_fpregset): Update.
* m68k-tdep.c (supply_gregset, supply_fpregset): Update.
* m32r-rom.c (init_m32r_cmds, init_mon2000_cmds): Update.
* lynx-nat.c (fetch_inferior_registers, fetch_core_registers): Update.
* irix5-nat.c (supply_gregset, supply_fpregset): Update.
* infptrace.c (fetch_register): Update.
* ia64-linux-nat.c (supply_gregset, supply_fpregset): Update.
* ia64-aix-nat.c (supply_gregset, supply_fpregset): Update.
* i386gnu-nat.c (fetch_fpregs, supply_gregset)
(gnu_fetch_registers, gnu_store_registers): Update.
* i386-nto-tdep.c (i386nto_supply_gregset): Update.
* i386-linux-nat.c (fetch_register, supply_gregset)
(dummy_sse_values): Update.
* hpux-thread.c (hpux_thread_fetch_registers): Update.
* hppah-nat.c (fetch_register): Update.
* hppa-linux-nat.c (fetch_register, supply_gregset)
(supply_fpregset): Update.
* go32-nat.c (fetch_register): Update.
* dve3900-rom.c (fetch_bitmapped_register)
(_initialize_r3900_rom): Update.
* cris-tdep.c (supply_gregset): Update.
* abug-rom.c (init_abug_cmds): Update.
* core-aout.c (fetch_core_registers): Update.
* armnbsd-nat.c (supply_gregset, supply_fparegset)
(fetch_register, fetch_fp_register): Update.
* arm-linux-nat.c (fetch_nwfpe_single, fetch_nwfpe_none)
(fetch_nwfpe_extended, fetch_fpregister, fetch_fpregs)
(fetch_register, fetch_regs, supply_gregset, supply_fpregset): Update.
* alphanbsd-tdep.c (fetch_core_registers): Update.
* alpha-tdep.c (alpha_supply_int_regs, alpha_supply_fp_regs): Update.
* alpha-nat.c (fetch_osf_core_registers)
(fetch_osf_core_registers, fetch_osf_core_registers): Update.
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs)
(supply_sprs64, supply_sprs32, fetch_regs_kernel_thread): Update.
2004-07-22 01:31:49 +00:00
|
|
|
(char *) (vals + regno));
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Record that 32-bit register REGNO contains VAL. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_reg32 (struct regcache *regcache, int regno, uint32_t val)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_supply (regcache, regno, (char *) &val);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Record that the floating-point registers contain VALS. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_fprs (struct regcache *regcache, double *vals)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2002-07-13 00:29:37 +00:00
|
|
|
int regno;
|
|
|
|
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
/* This function should never be called on architectures without
|
|
|
|
floating-point registers. */
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
gdb_assert (ppc_floating_point_unit_p (gdbarch));
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
|
2012-03-13 22:29:45 +00:00
|
|
|
for (regno = tdep->ppc_fp0_regnum;
|
|
|
|
regno < tdep->ppc_fp0_regnum + ppc_num_fprs;
|
|
|
|
regno++)
|
|
|
|
regcache_raw_supply (regcache, regno,
|
|
|
|
(char *) (vals + regno - tdep->ppc_fp0_regnum));
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-23 00:34:29 +00:00
|
|
|
/* Predicate to test whether given register number is a "special" register. */
|
|
|
|
static int
|
2007-11-07 06:53:41 +00:00
|
|
|
special_register_p (struct gdbarch *gdbarch, int regno)
|
2002-07-23 00:34:29 +00:00
|
|
|
{
|
2007-11-07 06:53:41 +00:00
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2002-07-23 00:34:29 +00:00
|
|
|
|
2007-11-07 06:53:41 +00:00
|
|
|
return regno == gdbarch_pc_regnum (gdbarch)
|
2002-07-23 00:34:29 +00:00
|
|
|
|| regno == tdep->ppc_ps_regnum
|
|
|
|
|| regno == tdep->ppc_cr_regnum
|
|
|
|
|| regno == tdep->ppc_lr_regnum
|
|
|
|
|| regno == tdep->ppc_ctr_regnum
|
|
|
|
|| regno == tdep->ppc_xer_regnum
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
|| (tdep->ppc_fpscr_regnum >= 0 && regno == tdep->ppc_fpscr_regnum)
|
2002-07-23 00:34:29 +00:00
|
|
|
|| (tdep->ppc_mq_regnum >= 0 && regno == tdep->ppc_mq_regnum);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Record that the special registers contain the specified 64-bit and
|
|
|
|
32-bit values. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_sprs64 (struct regcache *regcache,
|
|
|
|
uint64_t iar, uint64_t msr, uint32_t cr,
|
2002-07-26 23:12:59 +00:00
|
|
|
uint64_t lr, uint64_t ctr, uint32_t xer,
|
|
|
|
uint32_t fpscr)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2002-07-23 00:34:29 +00:00
|
|
|
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
regcache_raw_supply (regcache, gdbarch_pc_regnum (gdbarch),
|
2007-06-18 Markus Deuling <deuling@de.ibm.com>
* gdbarch.sh (SP_REGNUM): Replace by gdbarch_sp_regnum.
* v850-tdep.c (v850_unwind_sp): Likewise.
* std-regs.c (value_of_builtin_frame_sp_reg): Likewise.
* stack.c (frame_info): Likewise.
* stabsread.c (define_symbol): Likewise.
* sh-tdep.c (sh_push_dummy_call_fpu, sh_push_dummy_call_nofpu)
(sh_dwarf2_frame_init_reg, sh_frame_cache, sh_frame_prev_register)
(sh_unwind_sp): Likewise.
* sh64-tdep.c (sh64_push_dummy_call, sh64_frame_cache)
(sh64_frame_prev_register, sh64_unwind_sp): Likewise.
* rs6000-tdep.c (rs6000_push_dummy_call, rs6000_unwind_dummy_id)
(rs6000_frame_cache): Likewise.
* rs6000-nat.c (store_register): Likewise.
* remote-mips.c (mips_wait): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call)
(ppc64_sysv_abi_push_dummy_call): Likewise.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_cache): Likewise.
* ppcobsd-nat.c (ppcobsd_supply_pcb): Likewise.
* ppcnbsd-tdep.c (ppcnbsd_sigtramp_cache_init): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* m32r-rom.c (m32r_supply_register): Likewise.
* frame.c (frame_sp_unwind): Likewise.
* mips-tdep.c (mips_insn16_frame_cache)
(mips_insn32_frame_cache): Likewise (comment).
* m68klinux-nat.c (supply_gregset): Likewise.
* m68k-tdep.c (m68k_get_longjmp_target): Likewise.
* ia64-tdep.c (ia64_frame_prev_register): Likewise.
* i386-tdep.c (i386_get_longjmp_target): Likewise.
* dwarf2-frame.c (dwarf2_frame_default_init_reg): Likewise.
* cris-tdep.c (cris_regnums, cris_sigcontext_addr)
(cris_sigtramp_frame_unwind_cache, cris_push_dummy_call)
(cris_scan_prologue, crisv32_scan_prologue, cris_unwind_sp)
(cris_register_type, crisv32_register_type)
(cris_dwarf2_frame_init_reg): Likewise.
* arch-utils.c (legacy_virtual_frame_pointer): Likewise.
* amd64-tdep.c (amd64_frame_prev_register): Likewise.
* amd64-linux-tdep.c (amd64_linux_sigcontext_addr): Likewise.
* libunwind-frame.c (libunwind_frame_cache): Likewise.
* gdbarch.sh (PC_REGNUM): Replace by gdbarch_pc_regnum.
* regcache.c (read_pc_pid, generic_target_write_pc): Likewise.
* xtensa-tdep.c (xtensa_register_type, xtensa_supply_gregset)
(xtensa_unwind_pc, xtensa_frame_cache, xtensa_frame_prev_register)
(xtensa_extract_return_value, xtensa_store_return_value): Likewise.
* v850-tdep.c (v850_unwind_pc): Likewise.
* stack.c (frame_info): Likewise.
* sh-tdep.c (sh_generic_show_regs, sh3_show_regs, sh2e_show_regs)
(sh2a_show_regs, sh2a_nofpu_show_regs, sh3e_show_regs)
(sh3_dsp_show_regs, sh4_show_regs, sh4_nofpu_show_regs)
(sh_dwarf2_frame_init_reg, sh_frame_prev_register, sh_unwind_pc)
(sh_dsp_show_regs): Likewise.
* shnbsd-tdep.c (shnbsd_supply_gregset)
(shnbsd_collect_gregset): Likewise.
* shnbsd-nat.c (GETREGS_SUPPLIES): Likewise.
* sh64-tdep.c (sh64_compact_reg_base_num, sh64_show_media_regs)
(sh64_frame_prev_register, sh64_unwind_pc): Likewise.
* rs6000-tdep.c (ppc_supply_gregset, ppc_collect_gregset)
(6000_register_reggroup_p, rs6000_unwind_pc)
(rs6000_frame_cache): Likewise.
* rs6000-nat.c (regmap, rs6000_fetch_inferior_registers)
(rs6000_store_inferior_registers): Likewise.
* remote-mips.c (mips_wait, mips_load): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_cache): Likewise.
* ppcobsd-nat.c (ppcobsd_supply_pcb): Likewise.
* ppcnbsd-tdep.c (ppcnbsd_sigtramp_cache_init): Likewise.
* ppcnbsd-nat.c (getregs_supplies, ppcnbsd_supply_pcb): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* ppc-linux-nat.c (ppc_register_u_addr, fetch_ppc_registers)
(store_ppc_registers, fill_gregset): Likewise.
* mips-tdep.c (mips_stub_frame_cache, mips_gdbarch_init): Likewise.
* mipsnbsd-tdep.c (mipsnbsd_supply_reg, mipsnbsd_fill_reg): Likewise.
* mipsnbsd-nat.c (getregs_supplies): Likewise.
* m68k-tdep.c (m68k_register_type, m68k_unwind_pc): Likewise.
* m68klinux-nat.c (supply_gregset): Likewise.
* irix5-nat.c (fill_gregset): Likewise.
* i386-tdep.c (i386_unwind_pc): Likewise.
* i386-linux-nat.c (i386_linux_resume): Likewise.
* frame.c (get_prev_frame_1): Likewise.
* dwarf2-frame.c (dwarf2_frame_default_init_reg): Likewise.
* dbug-rom.c (dbug_supply_register): Likewise.
* cris-tdep.c (cris_sigtramp_frame_unwind_cache, cris_scan_prologue)
(crisv32_scan_prologue, cris_unwind_pc, cris_register_size)
(cris_register_type, crisv32_register_type, crisv32_register_name)
(cris_dwarf2_frame_init_reg, find_step_target)
(cris_software_single_step, cris_supply_gregset)
(cris_regnums): Likewise.
* alpha-linux-nat.c (alpha_linux_register_u_offset): Likewise.
* aix-thread.c (special_register_p, supply_sprs64, supply_sprs32)
(fill_sprs64, fill_sprs32, store_regs_user_thread): Likewise.
* mips-linux-tdep.c (mips_linux_write_pc): Likewise.
* gdbarch.sh (PS_REGNUM): Replace by gdbarch_ps_regnum.
* dbug-rom.c (dbug_supply_register): Likewise.
* xtensa-tdep.c (xtensa_supply_gregset, xtensa_frame_cache)
(xtensa_frame_prev_register, xtensa_push_dummy_call): Likewise.
* win32-nat.c (win32_resume): Likewise.
* std-regs.c (value_of_builtin_frame_ps_reg)
(value_of_builtin_frame_pc_reg): Likewise.
* m68k-tdep.c (m68k_register_type): Likewise.
* m68klinux-nat.c (supply_gregset): Likewise.
* gdbarch.sh (FP0_REGNUM): Replace by gdbarch_fp0_regnum.
* sh-tdep.c (sh_extract_return_value_fpu, sh_store_return_value_fpu)
(sh2e_show_regs, sh2a_show_regs, sh3e_show_regs, sh4_show_regs)
(sh_sh2a_register_type, sh_sh3e_register_type, sh_sh4_register_type)
(fv_reg_base_num, dr_reg_base_num): Likewise.
* sh64-tdep.c (sh64_fv_reg_base_num, sh64_dr_reg_base_num)
(sh64_fpp_reg_base_num, sh64_compact_reg_base_num, sh64_push_dummy_call)
(sh64_extract_return_value, sh64_store_return_value)
(sh64_show_media_regs, sh64_show_compact_regs, sh64_register_type)
(sh64_do_fp_register, sh64_media_print_registers_info): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers)
(invalidate_cache): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* mipsnbsd-tdep.c (mipsnbsd_supply_fpreg)
(mipsnbsd_fill_fpreg): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers)
(mipsnbsd_store_inferior_registers): Likewise.
* mips-linux-tdep.c (mips_supply_fpregset, mips_fill_fpregset)
(mips64_supply_fpregset, mips64_fill_fpregset): Likewise.
* mips-linux-nat.c (mips64_linux_register_addr): Likewise.
* m68k-tdep.c (m68k_register_type, m68k_convert_register_p): Likewise.
* m68klinux-nat.c (getfpregs_supplies, supply_fpregset)
(fill_fpregset): Likewise.
* irix5-nat.c (supply_fpregset, fill_fpregset): Likewise.
* i386-tdep.h (struct_return): Likewise (comment).
* i386-nto-tdep.c (i386nto_register_area): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register)
(go32_store_registers): Likewise.
* alpha-tdep.c (alpha_next_pc): Likewise.
* alpha-linux-nat.c (alpha_linux_register_u_offset): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers)
(alphabsd_store_inferior_registers): Likewise.
* core-regset.c (fetch_core_registers): Likewise.
* i386v4-nat.c (supply_fpregset, fill_fpregset): Likewise.
* gdbarch.c, gdbarch.h: Regenerate.
2007-06-18 17:45:26 +00:00
|
|
|
(char *) &iar);
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_supply (regcache, tdep->ppc_ps_regnum, (char *) &msr);
|
|
|
|
regcache_raw_supply (regcache, tdep->ppc_cr_regnum, (char *) &cr);
|
|
|
|
regcache_raw_supply (regcache, tdep->ppc_lr_regnum, (char *) &lr);
|
|
|
|
regcache_raw_supply (regcache, tdep->ppc_ctr_regnum, (char *) &ctr);
|
|
|
|
regcache_raw_supply (regcache, tdep->ppc_xer_regnum, (char *) &xer);
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
if (tdep->ppc_fpscr_regnum >= 0)
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_supply (regcache, tdep->ppc_fpscr_regnum,
|
2004-07-21 Andrew Cagney <cagney@gnu.org>
Use regcache_raw_supply instead of supply_register.
* regcache.h (supply_register): Delete declaration.
* regcache.c (supply_register): Delete function.
* wince.c (do_child_fetch_inferior_registers): Update.
* win32-nat.c (do_child_fetch_inferior_registers)
(fetch_elf_core_registers): Update.
* v850ice.c (v850ice_fetch_registers): Update.
* thread-db.c (thread_db_store_registers): Update.
* sol-thread.c (sol_thread_store_registers): Update.
* shnbsd-tdep.c (shnbsd_supply_reg): Update.
* rs6000-nat.c (fetch_register): Update.
* rom68k-rom.c (rom68k_supply_one_register): Update.
* remote.c (remote_wait, remote_async_wait): Update.
* remote-st.c (get_hex_regs): Update.
* remote-sim.c (gdbsim_fetch_register): Update.
* remote-sds.c (sds_fetch_registers): Update.
* remote-rdp.c (remote_rdp_fetch_register): Update.
* remote-rdi.c (arm_rdi_fetch_registers): Update.
* remote-mips.c (mips_wait, mips_fetch_registers): Update.
* remote-m32r-sdi.c (m32r_fetch_register): Update.
* remote-hms.c (init_hms_cmds): Update.
* remote-est.c (init_est_cmds): Update.
* remote-e7000.c (get_hex_regs, fetch_regs_from_dump)
(e7000_fetch_registers, sub2_from_pc, e7000_wait): Update.
* ppcnbsd-tdep.c (ppcnbsd_supply_reg, ppcnbsd_supply_fpreg): Update.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register)
(fetch_register, supply_vrregset, supply_vrregset)
(fetch_spe_registers): Update.
* ppc-bdm.c (bdm_ppc_fetch_registers): Update.
* monitor.c (monitor_supply_register): Update.
* mipsv4-nat.c (supply_gregset, supply_fpregset): Update.
* mipsnbsd-tdep.c (mipsnbsd_supply_reg)
(mipsnbsd_supply_fpreg): Update.
* mips-nat.c (fetch_inferior_registers)
(fetch_core_registers): Update.
* mips-linux-tdep.c (supply_32bit_reg, supply_gregset)
(supply_fpregset, mips64_supply_gregset)
(mips64_supply_fpregset): Update.
* m68klinux-nat.c (fetch_register, supply_gregset)
(supply_fpregset): Update.
* m68k-tdep.c (supply_gregset, supply_fpregset): Update.
* m32r-rom.c (init_m32r_cmds, init_mon2000_cmds): Update.
* lynx-nat.c (fetch_inferior_registers, fetch_core_registers): Update.
* irix5-nat.c (supply_gregset, supply_fpregset): Update.
* infptrace.c (fetch_register): Update.
* ia64-linux-nat.c (supply_gregset, supply_fpregset): Update.
* ia64-aix-nat.c (supply_gregset, supply_fpregset): Update.
* i386gnu-nat.c (fetch_fpregs, supply_gregset)
(gnu_fetch_registers, gnu_store_registers): Update.
* i386-nto-tdep.c (i386nto_supply_gregset): Update.
* i386-linux-nat.c (fetch_register, supply_gregset)
(dummy_sse_values): Update.
* hpux-thread.c (hpux_thread_fetch_registers): Update.
* hppah-nat.c (fetch_register): Update.
* hppa-linux-nat.c (fetch_register, supply_gregset)
(supply_fpregset): Update.
* go32-nat.c (fetch_register): Update.
* dve3900-rom.c (fetch_bitmapped_register)
(_initialize_r3900_rom): Update.
* cris-tdep.c (supply_gregset): Update.
* abug-rom.c (init_abug_cmds): Update.
* core-aout.c (fetch_core_registers): Update.
* armnbsd-nat.c (supply_gregset, supply_fparegset)
(fetch_register, fetch_fp_register): Update.
* arm-linux-nat.c (fetch_nwfpe_single, fetch_nwfpe_none)
(fetch_nwfpe_extended, fetch_fpregister, fetch_fpregs)
(fetch_register, fetch_regs, supply_gregset, supply_fpregset): Update.
* alphanbsd-tdep.c (fetch_core_registers): Update.
* alpha-tdep.c (alpha_supply_int_regs, alpha_supply_fp_regs): Update.
* alpha-nat.c (fetch_osf_core_registers)
(fetch_osf_core_registers, fetch_osf_core_registers): Update.
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs)
(supply_sprs64, supply_sprs32, fetch_regs_kernel_thread): Update.
2004-07-22 01:31:49 +00:00
|
|
|
(char *) &fpscr);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Record that the special registers contain the specified 32-bit
|
|
|
|
values. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_sprs32 (struct regcache *regcache,
|
|
|
|
uint32_t iar, uint32_t msr, uint32_t cr,
|
2002-07-26 23:12:59 +00:00
|
|
|
uint32_t lr, uint32_t ctr, uint32_t xer,
|
|
|
|
uint32_t fpscr)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2002-07-23 00:34:29 +00:00
|
|
|
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
regcache_raw_supply (regcache, gdbarch_pc_regnum (gdbarch),
|
2007-06-18 Markus Deuling <deuling@de.ibm.com>
* gdbarch.sh (SP_REGNUM): Replace by gdbarch_sp_regnum.
* v850-tdep.c (v850_unwind_sp): Likewise.
* std-regs.c (value_of_builtin_frame_sp_reg): Likewise.
* stack.c (frame_info): Likewise.
* stabsread.c (define_symbol): Likewise.
* sh-tdep.c (sh_push_dummy_call_fpu, sh_push_dummy_call_nofpu)
(sh_dwarf2_frame_init_reg, sh_frame_cache, sh_frame_prev_register)
(sh_unwind_sp): Likewise.
* sh64-tdep.c (sh64_push_dummy_call, sh64_frame_cache)
(sh64_frame_prev_register, sh64_unwind_sp): Likewise.
* rs6000-tdep.c (rs6000_push_dummy_call, rs6000_unwind_dummy_id)
(rs6000_frame_cache): Likewise.
* rs6000-nat.c (store_register): Likewise.
* remote-mips.c (mips_wait): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call)
(ppc64_sysv_abi_push_dummy_call): Likewise.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_cache): Likewise.
* ppcobsd-nat.c (ppcobsd_supply_pcb): Likewise.
* ppcnbsd-tdep.c (ppcnbsd_sigtramp_cache_init): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* m32r-rom.c (m32r_supply_register): Likewise.
* frame.c (frame_sp_unwind): Likewise.
* mips-tdep.c (mips_insn16_frame_cache)
(mips_insn32_frame_cache): Likewise (comment).
* m68klinux-nat.c (supply_gregset): Likewise.
* m68k-tdep.c (m68k_get_longjmp_target): Likewise.
* ia64-tdep.c (ia64_frame_prev_register): Likewise.
* i386-tdep.c (i386_get_longjmp_target): Likewise.
* dwarf2-frame.c (dwarf2_frame_default_init_reg): Likewise.
* cris-tdep.c (cris_regnums, cris_sigcontext_addr)
(cris_sigtramp_frame_unwind_cache, cris_push_dummy_call)
(cris_scan_prologue, crisv32_scan_prologue, cris_unwind_sp)
(cris_register_type, crisv32_register_type)
(cris_dwarf2_frame_init_reg): Likewise.
* arch-utils.c (legacy_virtual_frame_pointer): Likewise.
* amd64-tdep.c (amd64_frame_prev_register): Likewise.
* amd64-linux-tdep.c (amd64_linux_sigcontext_addr): Likewise.
* libunwind-frame.c (libunwind_frame_cache): Likewise.
* gdbarch.sh (PC_REGNUM): Replace by gdbarch_pc_regnum.
* regcache.c (read_pc_pid, generic_target_write_pc): Likewise.
* xtensa-tdep.c (xtensa_register_type, xtensa_supply_gregset)
(xtensa_unwind_pc, xtensa_frame_cache, xtensa_frame_prev_register)
(xtensa_extract_return_value, xtensa_store_return_value): Likewise.
* v850-tdep.c (v850_unwind_pc): Likewise.
* stack.c (frame_info): Likewise.
* sh-tdep.c (sh_generic_show_regs, sh3_show_regs, sh2e_show_regs)
(sh2a_show_regs, sh2a_nofpu_show_regs, sh3e_show_regs)
(sh3_dsp_show_regs, sh4_show_regs, sh4_nofpu_show_regs)
(sh_dwarf2_frame_init_reg, sh_frame_prev_register, sh_unwind_pc)
(sh_dsp_show_regs): Likewise.
* shnbsd-tdep.c (shnbsd_supply_gregset)
(shnbsd_collect_gregset): Likewise.
* shnbsd-nat.c (GETREGS_SUPPLIES): Likewise.
* sh64-tdep.c (sh64_compact_reg_base_num, sh64_show_media_regs)
(sh64_frame_prev_register, sh64_unwind_pc): Likewise.
* rs6000-tdep.c (ppc_supply_gregset, ppc_collect_gregset)
(6000_register_reggroup_p, rs6000_unwind_pc)
(rs6000_frame_cache): Likewise.
* rs6000-nat.c (regmap, rs6000_fetch_inferior_registers)
(rs6000_store_inferior_registers): Likewise.
* remote-mips.c (mips_wait, mips_load): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_cache): Likewise.
* ppcobsd-nat.c (ppcobsd_supply_pcb): Likewise.
* ppcnbsd-tdep.c (ppcnbsd_sigtramp_cache_init): Likewise.
* ppcnbsd-nat.c (getregs_supplies, ppcnbsd_supply_pcb): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* ppc-linux-nat.c (ppc_register_u_addr, fetch_ppc_registers)
(store_ppc_registers, fill_gregset): Likewise.
* mips-tdep.c (mips_stub_frame_cache, mips_gdbarch_init): Likewise.
* mipsnbsd-tdep.c (mipsnbsd_supply_reg, mipsnbsd_fill_reg): Likewise.
* mipsnbsd-nat.c (getregs_supplies): Likewise.
* m68k-tdep.c (m68k_register_type, m68k_unwind_pc): Likewise.
* m68klinux-nat.c (supply_gregset): Likewise.
* irix5-nat.c (fill_gregset): Likewise.
* i386-tdep.c (i386_unwind_pc): Likewise.
* i386-linux-nat.c (i386_linux_resume): Likewise.
* frame.c (get_prev_frame_1): Likewise.
* dwarf2-frame.c (dwarf2_frame_default_init_reg): Likewise.
* dbug-rom.c (dbug_supply_register): Likewise.
* cris-tdep.c (cris_sigtramp_frame_unwind_cache, cris_scan_prologue)
(crisv32_scan_prologue, cris_unwind_pc, cris_register_size)
(cris_register_type, crisv32_register_type, crisv32_register_name)
(cris_dwarf2_frame_init_reg, find_step_target)
(cris_software_single_step, cris_supply_gregset)
(cris_regnums): Likewise.
* alpha-linux-nat.c (alpha_linux_register_u_offset): Likewise.
* aix-thread.c (special_register_p, supply_sprs64, supply_sprs32)
(fill_sprs64, fill_sprs32, store_regs_user_thread): Likewise.
* mips-linux-tdep.c (mips_linux_write_pc): Likewise.
* gdbarch.sh (PS_REGNUM): Replace by gdbarch_ps_regnum.
* dbug-rom.c (dbug_supply_register): Likewise.
* xtensa-tdep.c (xtensa_supply_gregset, xtensa_frame_cache)
(xtensa_frame_prev_register, xtensa_push_dummy_call): Likewise.
* win32-nat.c (win32_resume): Likewise.
* std-regs.c (value_of_builtin_frame_ps_reg)
(value_of_builtin_frame_pc_reg): Likewise.
* m68k-tdep.c (m68k_register_type): Likewise.
* m68klinux-nat.c (supply_gregset): Likewise.
* gdbarch.sh (FP0_REGNUM): Replace by gdbarch_fp0_regnum.
* sh-tdep.c (sh_extract_return_value_fpu, sh_store_return_value_fpu)
(sh2e_show_regs, sh2a_show_regs, sh3e_show_regs, sh4_show_regs)
(sh_sh2a_register_type, sh_sh3e_register_type, sh_sh4_register_type)
(fv_reg_base_num, dr_reg_base_num): Likewise.
* sh64-tdep.c (sh64_fv_reg_base_num, sh64_dr_reg_base_num)
(sh64_fpp_reg_base_num, sh64_compact_reg_base_num, sh64_push_dummy_call)
(sh64_extract_return_value, sh64_store_return_value)
(sh64_show_media_regs, sh64_show_compact_regs, sh64_register_type)
(sh64_do_fp_register, sh64_media_print_registers_info): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers)
(invalidate_cache): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* mipsnbsd-tdep.c (mipsnbsd_supply_fpreg)
(mipsnbsd_fill_fpreg): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers)
(mipsnbsd_store_inferior_registers): Likewise.
* mips-linux-tdep.c (mips_supply_fpregset, mips_fill_fpregset)
(mips64_supply_fpregset, mips64_fill_fpregset): Likewise.
* mips-linux-nat.c (mips64_linux_register_addr): Likewise.
* m68k-tdep.c (m68k_register_type, m68k_convert_register_p): Likewise.
* m68klinux-nat.c (getfpregs_supplies, supply_fpregset)
(fill_fpregset): Likewise.
* irix5-nat.c (supply_fpregset, fill_fpregset): Likewise.
* i386-tdep.h (struct_return): Likewise (comment).
* i386-nto-tdep.c (i386nto_register_area): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register)
(go32_store_registers): Likewise.
* alpha-tdep.c (alpha_next_pc): Likewise.
* alpha-linux-nat.c (alpha_linux_register_u_offset): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers)
(alphabsd_store_inferior_registers): Likewise.
* core-regset.c (fetch_core_registers): Likewise.
* i386v4-nat.c (supply_fpregset, fill_fpregset): Likewise.
* gdbarch.c, gdbarch.h: Regenerate.
2007-06-18 17:45:26 +00:00
|
|
|
(char *) &iar);
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_supply (regcache, tdep->ppc_ps_regnum, (char *) &msr);
|
|
|
|
regcache_raw_supply (regcache, tdep->ppc_cr_regnum, (char *) &cr);
|
|
|
|
regcache_raw_supply (regcache, tdep->ppc_lr_regnum, (char *) &lr);
|
|
|
|
regcache_raw_supply (regcache, tdep->ppc_ctr_regnum, (char *) &ctr);
|
|
|
|
regcache_raw_supply (regcache, tdep->ppc_xer_regnum, (char *) &xer);
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
if (tdep->ppc_fpscr_regnum >= 0)
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_supply (regcache, tdep->ppc_fpscr_regnum,
|
2004-07-21 Andrew Cagney <cagney@gnu.org>
Use regcache_raw_supply instead of supply_register.
* regcache.h (supply_register): Delete declaration.
* regcache.c (supply_register): Delete function.
* wince.c (do_child_fetch_inferior_registers): Update.
* win32-nat.c (do_child_fetch_inferior_registers)
(fetch_elf_core_registers): Update.
* v850ice.c (v850ice_fetch_registers): Update.
* thread-db.c (thread_db_store_registers): Update.
* sol-thread.c (sol_thread_store_registers): Update.
* shnbsd-tdep.c (shnbsd_supply_reg): Update.
* rs6000-nat.c (fetch_register): Update.
* rom68k-rom.c (rom68k_supply_one_register): Update.
* remote.c (remote_wait, remote_async_wait): Update.
* remote-st.c (get_hex_regs): Update.
* remote-sim.c (gdbsim_fetch_register): Update.
* remote-sds.c (sds_fetch_registers): Update.
* remote-rdp.c (remote_rdp_fetch_register): Update.
* remote-rdi.c (arm_rdi_fetch_registers): Update.
* remote-mips.c (mips_wait, mips_fetch_registers): Update.
* remote-m32r-sdi.c (m32r_fetch_register): Update.
* remote-hms.c (init_hms_cmds): Update.
* remote-est.c (init_est_cmds): Update.
* remote-e7000.c (get_hex_regs, fetch_regs_from_dump)
(e7000_fetch_registers, sub2_from_pc, e7000_wait): Update.
* ppcnbsd-tdep.c (ppcnbsd_supply_reg, ppcnbsd_supply_fpreg): Update.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register)
(fetch_register, supply_vrregset, supply_vrregset)
(fetch_spe_registers): Update.
* ppc-bdm.c (bdm_ppc_fetch_registers): Update.
* monitor.c (monitor_supply_register): Update.
* mipsv4-nat.c (supply_gregset, supply_fpregset): Update.
* mipsnbsd-tdep.c (mipsnbsd_supply_reg)
(mipsnbsd_supply_fpreg): Update.
* mips-nat.c (fetch_inferior_registers)
(fetch_core_registers): Update.
* mips-linux-tdep.c (supply_32bit_reg, supply_gregset)
(supply_fpregset, mips64_supply_gregset)
(mips64_supply_fpregset): Update.
* m68klinux-nat.c (fetch_register, supply_gregset)
(supply_fpregset): Update.
* m68k-tdep.c (supply_gregset, supply_fpregset): Update.
* m32r-rom.c (init_m32r_cmds, init_mon2000_cmds): Update.
* lynx-nat.c (fetch_inferior_registers, fetch_core_registers): Update.
* irix5-nat.c (supply_gregset, supply_fpregset): Update.
* infptrace.c (fetch_register): Update.
* ia64-linux-nat.c (supply_gregset, supply_fpregset): Update.
* ia64-aix-nat.c (supply_gregset, supply_fpregset): Update.
* i386gnu-nat.c (fetch_fpregs, supply_gregset)
(gnu_fetch_registers, gnu_store_registers): Update.
* i386-nto-tdep.c (i386nto_supply_gregset): Update.
* i386-linux-nat.c (fetch_register, supply_gregset)
(dummy_sse_values): Update.
* hpux-thread.c (hpux_thread_fetch_registers): Update.
* hppah-nat.c (fetch_register): Update.
* hppa-linux-nat.c (fetch_register, supply_gregset)
(supply_fpregset): Update.
* go32-nat.c (fetch_register): Update.
* dve3900-rom.c (fetch_bitmapped_register)
(_initialize_r3900_rom): Update.
* cris-tdep.c (supply_gregset): Update.
* abug-rom.c (init_abug_cmds): Update.
* core-aout.c (fetch_core_registers): Update.
* armnbsd-nat.c (supply_gregset, supply_fparegset)
(fetch_register, fetch_fp_register): Update.
* arm-linux-nat.c (fetch_nwfpe_single, fetch_nwfpe_none)
(fetch_nwfpe_extended, fetch_fpregister, fetch_fpregs)
(fetch_register, fetch_regs, supply_gregset, supply_fpregset): Update.
* alphanbsd-tdep.c (fetch_core_registers): Update.
* alpha-tdep.c (alpha_supply_int_regs, alpha_supply_fp_regs): Update.
* alpha-nat.c (fetch_osf_core_registers)
(fetch_osf_core_registers, fetch_osf_core_registers): Update.
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs)
(supply_sprs64, supply_sprs32, fetch_regs_kernel_thread): Update.
2004-07-22 01:31:49 +00:00
|
|
|
(char *) &fpscr);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Fetch all registers from pthread PDTID, which doesn't have a kernel
|
|
|
|
thread.
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
There's no way to query a single register from a non-kernel
|
|
|
|
pthread, so there's no need for a single-register version of this
|
|
|
|
function. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fetch_regs_user_thread (struct regcache *regcache, pthdb_pthread_t pdtid)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2002-07-13 00:29:37 +00:00
|
|
|
int status, i;
|
|
|
|
pthdb_context_t ctx;
|
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
2002-07-22 22:11:03 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
|
|
|
"fetch_regs_user_thread %lx\n", (long) pdtid);
|
2002-07-13 00:29:37 +00:00
|
|
|
status = pthdb_pthread_context (pd_session, pdtid, &ctx);
|
|
|
|
if (status != PTHDB_SUCCESS)
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
error (_("aix-thread: fetch_registers: pthdb_pthread_context returned %s"),
|
2002-07-15 23:33:09 +00:00
|
|
|
pd_status2str (status));
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* General-purpose registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
if (arch64)
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_gprs64 (regcache, ctx.gpr);
|
2002-07-13 00:29:37 +00:00
|
|
|
else
|
2004-05-13 19:36:05 +00:00
|
|
|
for (i = 0; i < ppc_num_gprs; i++)
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_reg32 (regcache, tdep->ppc_gp0_regnum + i, ctx.gpr[i]);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Floating-point registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
if (ppc_floating_point_unit_p (gdbarch))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_fprs (regcache, ctx.fpr);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Special registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
if (arch64)
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_sprs64 (regcache, ctx.iar, ctx.msr, ctx.cr, ctx.lr, ctx.ctr,
|
|
|
|
ctx.xer, ctx.fpscr);
|
2002-07-13 00:29:37 +00:00
|
|
|
else
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_sprs32 (regcache, ctx.iar, ctx.msr, ctx.cr, ctx.lr, ctx.ctr,
|
|
|
|
ctx.xer, ctx.fpscr);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Fetch register REGNO if != -1 or all registers otherwise from
|
|
|
|
kernel thread TID.
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
AIX provides a way to query all of a kernel thread's GPRs, FPRs, or
|
|
|
|
SPRs, but there's no way to query individual registers within those
|
|
|
|
groups. Therefore, if REGNO != -1, this function fetches an entire
|
|
|
|
group.
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
Unfortunately, kernel thread register queries often fail with
|
|
|
|
EPERM, indicating that the thread is in kernel space. This breaks
|
|
|
|
backtraces of threads other than the current one. To make that
|
|
|
|
breakage obvious without throwing an error to top level (which is
|
|
|
|
bad e.g. during "info threads" output), zero registers that can't
|
|
|
|
be retrieved. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fetch_regs_kernel_thread (struct regcache *regcache, int regno,
|
|
|
|
pthdb_tid_t tid)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2004-05-13 19:36:05 +00:00
|
|
|
uint64_t gprs64[ppc_num_gprs];
|
|
|
|
uint32_t gprs32[ppc_num_gprs];
|
|
|
|
double fprs[ppc_num_fprs];
|
2002-07-13 00:29:37 +00:00
|
|
|
struct ptxsprs sprs64;
|
|
|
|
struct ptsprs sprs32;
|
|
|
|
int i;
|
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
2002-07-22 22:11:03 +00:00
|
|
|
"fetch_regs_kernel_thread tid=%lx regno=%d arch64=%d\n",
|
|
|
|
(long) tid, regno, arch64);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* General-purpose registers. */
|
2004-05-07 20:50:37 +00:00
|
|
|
if (regno == -1
|
|
|
|
|| (tdep->ppc_gp0_regnum <= regno
|
|
|
|
&& regno < tdep->ppc_gp0_regnum + ppc_num_gprs))
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
if (arch64)
|
|
|
|
{
|
2002-07-18 19:26:14 +00:00
|
|
|
if (!ptrace64aix (PTT_READ_GPRS, tid,
|
|
|
|
(unsigned long) gprs64, 0, NULL))
|
2002-07-13 00:29:37 +00:00
|
|
|
memset (gprs64, 0, sizeof (gprs64));
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_gprs64 (regcache, gprs64);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
if (!ptrace32 (PTT_READ_GPRS, tid, (uintptr_t) gprs32, 0, NULL))
|
2002-07-13 00:29:37 +00:00
|
|
|
memset (gprs32, 0, sizeof (gprs32));
|
2004-05-13 19:36:05 +00:00
|
|
|
for (i = 0; i < ppc_num_gprs; i++)
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_reg32 (regcache, tdep->ppc_gp0_regnum + i, gprs32[i]);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Floating-point registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
if (ppc_floating_point_unit_p (gdbarch)
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
&& (regno == -1
|
|
|
|
|| (regno >= tdep->ppc_fp0_regnum
|
|
|
|
&& regno < tdep->ppc_fp0_regnum + ppc_num_fprs)))
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
if (!ptrace32 (PTT_READ_FPRS, tid, (uintptr_t) fprs, 0, NULL))
|
2002-07-13 00:29:37 +00:00
|
|
|
memset (fprs, 0, sizeof (fprs));
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_fprs (regcache, fprs);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Special-purpose registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2007-11-07 06:53:41 +00:00
|
|
|
if (regno == -1 || special_register_p (gdbarch, regno))
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
if (arch64)
|
|
|
|
{
|
2002-07-18 19:26:14 +00:00
|
|
|
if (!ptrace64aix (PTT_READ_SPRS, tid,
|
|
|
|
(unsigned long) &sprs64, 0, NULL))
|
2002-07-13 00:29:37 +00:00
|
|
|
memset (&sprs64, 0, sizeof (sprs64));
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_sprs64 (regcache, sprs64.pt_iar, sprs64.pt_msr,
|
|
|
|
sprs64.pt_cr, sprs64.pt_lr, sprs64.pt_ctr,
|
|
|
|
sprs64.pt_xer, sprs64.pt_fpscr);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2002-07-23 00:34:29 +00:00
|
|
|
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
if (!ptrace32 (PTT_READ_SPRS, tid, (uintptr_t) &sprs32, 0, NULL))
|
2002-07-13 00:29:37 +00:00
|
|
|
memset (&sprs32, 0, sizeof (sprs32));
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
supply_sprs32 (regcache, sprs32.pt_iar, sprs32.pt_msr, sprs32.pt_cr,
|
2002-07-26 23:12:59 +00:00
|
|
|
sprs32.pt_lr, sprs32.pt_ctr, sprs32.pt_xer,
|
|
|
|
sprs32.pt_fpscr);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-23 00:34:29 +00:00
|
|
|
if (tdep->ppc_mq_regnum >= 0)
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_supply (regcache, tdep->ppc_mq_regnum,
|
2004-07-21 Andrew Cagney <cagney@gnu.org>
Use regcache_raw_supply instead of supply_register.
* regcache.h (supply_register): Delete declaration.
* regcache.c (supply_register): Delete function.
* wince.c (do_child_fetch_inferior_registers): Update.
* win32-nat.c (do_child_fetch_inferior_registers)
(fetch_elf_core_registers): Update.
* v850ice.c (v850ice_fetch_registers): Update.
* thread-db.c (thread_db_store_registers): Update.
* sol-thread.c (sol_thread_store_registers): Update.
* shnbsd-tdep.c (shnbsd_supply_reg): Update.
* rs6000-nat.c (fetch_register): Update.
* rom68k-rom.c (rom68k_supply_one_register): Update.
* remote.c (remote_wait, remote_async_wait): Update.
* remote-st.c (get_hex_regs): Update.
* remote-sim.c (gdbsim_fetch_register): Update.
* remote-sds.c (sds_fetch_registers): Update.
* remote-rdp.c (remote_rdp_fetch_register): Update.
* remote-rdi.c (arm_rdi_fetch_registers): Update.
* remote-mips.c (mips_wait, mips_fetch_registers): Update.
* remote-m32r-sdi.c (m32r_fetch_register): Update.
* remote-hms.c (init_hms_cmds): Update.
* remote-est.c (init_est_cmds): Update.
* remote-e7000.c (get_hex_regs, fetch_regs_from_dump)
(e7000_fetch_registers, sub2_from_pc, e7000_wait): Update.
* ppcnbsd-tdep.c (ppcnbsd_supply_reg, ppcnbsd_supply_fpreg): Update.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register)
(fetch_register, supply_vrregset, supply_vrregset)
(fetch_spe_registers): Update.
* ppc-bdm.c (bdm_ppc_fetch_registers): Update.
* monitor.c (monitor_supply_register): Update.
* mipsv4-nat.c (supply_gregset, supply_fpregset): Update.
* mipsnbsd-tdep.c (mipsnbsd_supply_reg)
(mipsnbsd_supply_fpreg): Update.
* mips-nat.c (fetch_inferior_registers)
(fetch_core_registers): Update.
* mips-linux-tdep.c (supply_32bit_reg, supply_gregset)
(supply_fpregset, mips64_supply_gregset)
(mips64_supply_fpregset): Update.
* m68klinux-nat.c (fetch_register, supply_gregset)
(supply_fpregset): Update.
* m68k-tdep.c (supply_gregset, supply_fpregset): Update.
* m32r-rom.c (init_m32r_cmds, init_mon2000_cmds): Update.
* lynx-nat.c (fetch_inferior_registers, fetch_core_registers): Update.
* irix5-nat.c (supply_gregset, supply_fpregset): Update.
* infptrace.c (fetch_register): Update.
* ia64-linux-nat.c (supply_gregset, supply_fpregset): Update.
* ia64-aix-nat.c (supply_gregset, supply_fpregset): Update.
* i386gnu-nat.c (fetch_fpregs, supply_gregset)
(gnu_fetch_registers, gnu_store_registers): Update.
* i386-nto-tdep.c (i386nto_supply_gregset): Update.
* i386-linux-nat.c (fetch_register, supply_gregset)
(dummy_sse_values): Update.
* hpux-thread.c (hpux_thread_fetch_registers): Update.
* hppah-nat.c (fetch_register): Update.
* hppa-linux-nat.c (fetch_register, supply_gregset)
(supply_fpregset): Update.
* go32-nat.c (fetch_register): Update.
* dve3900-rom.c (fetch_bitmapped_register)
(_initialize_r3900_rom): Update.
* cris-tdep.c (supply_gregset): Update.
* abug-rom.c (init_abug_cmds): Update.
* core-aout.c (fetch_core_registers): Update.
* armnbsd-nat.c (supply_gregset, supply_fparegset)
(fetch_register, fetch_fp_register): Update.
* arm-linux-nat.c (fetch_nwfpe_single, fetch_nwfpe_none)
(fetch_nwfpe_extended, fetch_fpregister, fetch_fpregs)
(fetch_register, fetch_regs, supply_gregset, supply_fpregset): Update.
* alphanbsd-tdep.c (fetch_core_registers): Update.
* alpha-tdep.c (alpha_supply_int_regs, alpha_supply_fp_regs): Update.
* alpha-nat.c (fetch_osf_core_registers)
(fetch_osf_core_registers, fetch_osf_core_registers): Update.
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs)
(supply_sprs64, supply_sprs32, fetch_regs_kernel_thread): Update.
2004-07-22 01:31:49 +00:00
|
|
|
(char *) &sprs32.pt_mq);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Fetch register REGNO if != -1 or all registers otherwise in the
|
2002-07-18 19:26:14 +00:00
|
|
|
thread/process specified by inferior_ptid. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
2009-03-12 17:44:29 +00:00
|
|
|
aix_thread_fetch_registers (struct target_ops *ops,
|
|
|
|
struct regcache *regcache, int regno)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
struct thread_info *thread;
|
|
|
|
pthdb_tid_t tid;
|
2009-03-15 19:38:42 +00:00
|
|
|
struct target_ops *beneath = find_target_beneath (ops);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
if (!PD_TID (inferior_ptid))
|
2009-03-15 19:38:42 +00:00
|
|
|
beneath->to_fetch_registers (beneath, regcache, regno);
|
2002-07-13 00:29:37 +00:00
|
|
|
else
|
|
|
|
{
|
2009-05-24 21:06:53 +00:00
|
|
|
thread = find_thread_ptid (inferior_ptid);
|
2002-07-13 00:29:37 +00:00
|
|
|
tid = thread->private->tid;
|
|
|
|
|
|
|
|
if (tid == PTHDB_INVALID_TID)
|
* target.h (struct regcache): Add forward declaration.
(struct target_ops): Add REGCACHE parameter to to_fetch_registers
and to_store_registers target operations.
(target_fetch_registers, target_store_registers): Update.
* regcache.c (regcache_raw_read): Replace register_cached by
regcache_valid_p. Pass regcache to target_fetch_registers.
(regcache_raw_write): Pass regcache to target_store_registers.
* arm-linux-nat.c (store_fpregister, store_fpregs, store_register,
store_regs, store_wmmx_regs): Replace register_cached by
regcache_valid_p.
* bsd-kvm.c (bsd_kvm_open, bsd_kvm_proc_cmd): Pass current_regcache
to target_fetch_registers calls.
* corelow.c (core_open): Likewise.
* linux-nat.c (linux_nat_corefile_thread_callback): Likewise.
* proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* win32-nat.c (win32_resume): Likewise.
* ia64-tdep.c (ia64_store_return_value): Pass current_regcache
to target_store_registers call.
* rs6000-tdep.c (rs6000_push_dummy_call): Likewise.
* inferior.h (store_inferior_registers): Update prototype.
(fetch_inferior_registers): Likewise.
* gnu-nat.c (gnu_store_registers, gnu_fetch_registers): Likewise.
* mips-linux-nat.c (super_fetch_registers, super_store_registers):
Update function pointer signatures.
* aix-thread.c (aix_thread_fetch_registers): Add REGCACHE parameter,
use it instead of current_regcache, update calls.
(aix_thread_store_registers): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers): Likewise.
(alphabsd_store_inferior_registers): Likewise.
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Likewise.
(amd64bsd_store_inferior_registers): Likewise.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Likewise.
(amd64_linux_store_inferior_registers): Likewise.
* arm-linux-nat.c (fetch_fpregister, fetch_fpregs, store_fpregister,
store_fpregs, fetch_register, fetch_regs, store_register, store_regs,
fetch_wmmx_regs, store_wmmx_regs): Likewise.
(arm_linux_fetch_inferior_registers): Likewise.
(arm_linux_store_inferior_registers): Likewise.
* armnbsd-nat.c (fetch_register, fetch_regs, fetch_fp_register,
fetch_fp_regs, armnbsd_fetch_registers): Likewise.
(store_register, store_regs, store_fp_register, store_fp_regs,
armnbsd_store_registers): Likewise.
* bsd-kvm.c (bsd_kvm_fetch_pcb, bsd_kvm_fetch_registers): Likewise.
* bsd-uthread.c (bsd_uthread_fetch_registers): Likewise.
(bsd_uthread_store_registers): Likewise.
* corelow.c (get_core_registers): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register,
go32_store_registers): Likewise.
* hppabsd-nat.c (hppabsd_fetch_registers): Likewise.
(hppabsd_store_registers): Likewise.
* hppa-hpux-nat.c (hppa_hpux_fetch_register): Likewise.
(hppa_hpux_fetch_inferior_registers): Likewise.
(hppa_hpux_store_register): Likewise.
(hppa_hpux_store_inferior_registers): Likewise.
* hppa-linux-nat.c (fetch_register, store_register): Likewise.
(hppa_linux_fetch_inferior_registers): Likewise.
(hppa_linux_store_inferior_registers): Likewise.
* hpux-thread.c (hpux_thread_fetch_registers): Likewise.
(hpux_thread_store_registers): Likewise.
* i386bsd-nat.c (i386bsd_fetch_inferior_registers): Likewise.
(i386bsd_store_inferior_registers): Likewise.
* i386gnu-nat.c (fetch_fpregs, gnu_fetch_registers, store_fpregs,
gnu_store_registers): Likewise.
* i386-linux-nat.c (fetch_register, store_register, fetch_regs,
store_regs, fetch_fpregs, store_fpregs, fetch_fpxregs, store_fpxregs):
Likewise.
(i386_linux_fetch_inferior_registers): Likewise.
(i386_linux_store_inferior_registers): Likewise.
* ia64-linux-nat.c (ia64_linux_fetch_register): Likewise.
(ia64_linux_fetch_registers): Likewise.
(ia64_linux_store_register): Likewise.
(ia64_linux_store_registers): Likewise.
* inf-child.c (inf_child_fetch_inferior_registers): Likewise.
(inf_child_store_inferior_registers): Likewise.
* inf-ptrace.c (inf_ptrace_fetch_register): Likewise.
(inf_ptrace_fetch_registers): Likewise.
(inf_ptrace_store_register): Likewise.
(inf_ptrace_store_registers): Likewise.
* infptrace.c (fetch_register, store_register): Likewise.
(fetch_inferior_registers, store_inferior_registers): Likewise.
* m32r-linux-nat.c (fetch_regs, store_regs): Likewise.
(m32r_linux_fetch_inferior_registers): Likewise.
(m32r_linux_store_inferior_registers): Likewise.
* m68kbsd-nat.c (m68kbsd_fetch_inferior_registers): Likewise.
(m68kbsd_store_inferior_registers): Likewise.
* m68klinux-nat.c (fetch_register, old_fetch_inferior_registers,
store_register, old_store_inferior_registers, fetch_regs, store_regs,
fetch_fpregs, store_fpregs): Likewise.
(m68k_linux_fetch_inferior_registers): Likewise.
(m68k_linux_store_inferior_registers): Likewise.
* m88kbsd-nat.c (m88kbsd_fetch_inferior_registers): Likewise.
(m88kbsd_store_inferior_registers): Likewise.
* mips64obsd-nat.c (mips64obsd_fetch_inferior_registers): Likewise.
(mips64obsd_store_inferior_registers): Likewise.
* mips-linux-nat.c (mips64_linux_regsets_fetch_registers): Likewise.
(mips64_linux_regsets_store_registers): Likewise.
(mips64_linux_fetch_registers): Likewise.
(mips64_linux_store_registers): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers): Likewise.
(mipsnbsd_store_inferior_registers): Likewise.
* monitor.c (monitor_fetch_register, monitor_store_register): Likewise.
(monitor_fetch_registers, monitor_store_registers): Likewise.
* nto-procfs.c (procfs_fetch_registers): Likewise.
(procfs_store_registers): Likewise.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register,
fetch_register, supply_vrregset, fetch_altivec_registers,
fetch_ppc_registers, ppc_linux_fetch_inferior_registers): Likewise.
(store_altivec_register, store_spe_register, store_register,
fill_vrregset, store_altivec_registers, store_ppc_registers,
ppc_linux_store_inferior_registers): Likewise.
* ppcnbsd-nat.c (ppcnbsd_fetch_inferior_registers): Likewise.
(ppcnbsd_store_inferior_registers): Likewise.
* ppcobsd-nat.c (ppcobsd_fetch_registers): Likewise.
(ppcobsd_store_registers): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* remote.c (fetch_register_using_p, process_g_packet,
fetch_registers_using_g, remote_fetch_registers): Likewise.
(store_register_using_P, store_registers_using_G,
remote_store_registers): Likewise.
* remote-m32r-sdi.c (m32r_fetch_registers, m32r_fetch_register,
m32r_store_register, m32r_store_register): Likewise.
* remote-mips.c (mips_fetch_registers, mips_store_registers): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
(gdbsim_store_register): Likewise.
* rs6000-nat.c (fetch_register, store_register): Likewise.
(rs6000_fetch_inferior_registers): Likewise.
(rs6000_store_inferior_registers): Likewise.
* s390-nat.c (fetch_regs, store_regs): Likewise.
(fetch_fpregs, store_fpregs): Likewise.
(s390_linux_fetch_inferior_registers): Likewise.
(s390_linux_store_inferior_registers): Likewise.
* shnbsd-nat.c (shnbsd_fetch_inferior_registers): Likewise.
(shnbsd_store_inferior_registers): Likewise.
* sol-thread.c (sol_thread_fetch_registers): Likewise.
(sol_thread_store_registers): Likewise.
* sparc-nat.c (fetch_inferior_registers): Likewise.
(store_inferior_registers): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
(spu_store_inferior_registers): Likewise.
* target.c (debug_print_register): Likewise.
(debug_to_fetch_registers, debug_to_store_registers): Likewise.
* vaxbsd-nat.c (vaxbsd_fetch_inferior_registers): Likewise.
(vaxbsd_store_inferior_registers): Likewise.
* win32-nat.c (do_win32_fetch_inferior_registers): Likewise.
(win32_fetch_inferior_registers): Likewise.
(win32_store_inferior_registers): Likewise.
2007-05-06 14:34:38 +00:00
|
|
|
fetch_regs_user_thread (regcache, thread->private->pdtid);
|
2002-07-13 00:29:37 +00:00
|
|
|
else
|
* target.h (struct regcache): Add forward declaration.
(struct target_ops): Add REGCACHE parameter to to_fetch_registers
and to_store_registers target operations.
(target_fetch_registers, target_store_registers): Update.
* regcache.c (regcache_raw_read): Replace register_cached by
regcache_valid_p. Pass regcache to target_fetch_registers.
(regcache_raw_write): Pass regcache to target_store_registers.
* arm-linux-nat.c (store_fpregister, store_fpregs, store_register,
store_regs, store_wmmx_regs): Replace register_cached by
regcache_valid_p.
* bsd-kvm.c (bsd_kvm_open, bsd_kvm_proc_cmd): Pass current_regcache
to target_fetch_registers calls.
* corelow.c (core_open): Likewise.
* linux-nat.c (linux_nat_corefile_thread_callback): Likewise.
* proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* win32-nat.c (win32_resume): Likewise.
* ia64-tdep.c (ia64_store_return_value): Pass current_regcache
to target_store_registers call.
* rs6000-tdep.c (rs6000_push_dummy_call): Likewise.
* inferior.h (store_inferior_registers): Update prototype.
(fetch_inferior_registers): Likewise.
* gnu-nat.c (gnu_store_registers, gnu_fetch_registers): Likewise.
* mips-linux-nat.c (super_fetch_registers, super_store_registers):
Update function pointer signatures.
* aix-thread.c (aix_thread_fetch_registers): Add REGCACHE parameter,
use it instead of current_regcache, update calls.
(aix_thread_store_registers): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers): Likewise.
(alphabsd_store_inferior_registers): Likewise.
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Likewise.
(amd64bsd_store_inferior_registers): Likewise.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Likewise.
(amd64_linux_store_inferior_registers): Likewise.
* arm-linux-nat.c (fetch_fpregister, fetch_fpregs, store_fpregister,
store_fpregs, fetch_register, fetch_regs, store_register, store_regs,
fetch_wmmx_regs, store_wmmx_regs): Likewise.
(arm_linux_fetch_inferior_registers): Likewise.
(arm_linux_store_inferior_registers): Likewise.
* armnbsd-nat.c (fetch_register, fetch_regs, fetch_fp_register,
fetch_fp_regs, armnbsd_fetch_registers): Likewise.
(store_register, store_regs, store_fp_register, store_fp_regs,
armnbsd_store_registers): Likewise.
* bsd-kvm.c (bsd_kvm_fetch_pcb, bsd_kvm_fetch_registers): Likewise.
* bsd-uthread.c (bsd_uthread_fetch_registers): Likewise.
(bsd_uthread_store_registers): Likewise.
* corelow.c (get_core_registers): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register,
go32_store_registers): Likewise.
* hppabsd-nat.c (hppabsd_fetch_registers): Likewise.
(hppabsd_store_registers): Likewise.
* hppa-hpux-nat.c (hppa_hpux_fetch_register): Likewise.
(hppa_hpux_fetch_inferior_registers): Likewise.
(hppa_hpux_store_register): Likewise.
(hppa_hpux_store_inferior_registers): Likewise.
* hppa-linux-nat.c (fetch_register, store_register): Likewise.
(hppa_linux_fetch_inferior_registers): Likewise.
(hppa_linux_store_inferior_registers): Likewise.
* hpux-thread.c (hpux_thread_fetch_registers): Likewise.
(hpux_thread_store_registers): Likewise.
* i386bsd-nat.c (i386bsd_fetch_inferior_registers): Likewise.
(i386bsd_store_inferior_registers): Likewise.
* i386gnu-nat.c (fetch_fpregs, gnu_fetch_registers, store_fpregs,
gnu_store_registers): Likewise.
* i386-linux-nat.c (fetch_register, store_register, fetch_regs,
store_regs, fetch_fpregs, store_fpregs, fetch_fpxregs, store_fpxregs):
Likewise.
(i386_linux_fetch_inferior_registers): Likewise.
(i386_linux_store_inferior_registers): Likewise.
* ia64-linux-nat.c (ia64_linux_fetch_register): Likewise.
(ia64_linux_fetch_registers): Likewise.
(ia64_linux_store_register): Likewise.
(ia64_linux_store_registers): Likewise.
* inf-child.c (inf_child_fetch_inferior_registers): Likewise.
(inf_child_store_inferior_registers): Likewise.
* inf-ptrace.c (inf_ptrace_fetch_register): Likewise.
(inf_ptrace_fetch_registers): Likewise.
(inf_ptrace_store_register): Likewise.
(inf_ptrace_store_registers): Likewise.
* infptrace.c (fetch_register, store_register): Likewise.
(fetch_inferior_registers, store_inferior_registers): Likewise.
* m32r-linux-nat.c (fetch_regs, store_regs): Likewise.
(m32r_linux_fetch_inferior_registers): Likewise.
(m32r_linux_store_inferior_registers): Likewise.
* m68kbsd-nat.c (m68kbsd_fetch_inferior_registers): Likewise.
(m68kbsd_store_inferior_registers): Likewise.
* m68klinux-nat.c (fetch_register, old_fetch_inferior_registers,
store_register, old_store_inferior_registers, fetch_regs, store_regs,
fetch_fpregs, store_fpregs): Likewise.
(m68k_linux_fetch_inferior_registers): Likewise.
(m68k_linux_store_inferior_registers): Likewise.
* m88kbsd-nat.c (m88kbsd_fetch_inferior_registers): Likewise.
(m88kbsd_store_inferior_registers): Likewise.
* mips64obsd-nat.c (mips64obsd_fetch_inferior_registers): Likewise.
(mips64obsd_store_inferior_registers): Likewise.
* mips-linux-nat.c (mips64_linux_regsets_fetch_registers): Likewise.
(mips64_linux_regsets_store_registers): Likewise.
(mips64_linux_fetch_registers): Likewise.
(mips64_linux_store_registers): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers): Likewise.
(mipsnbsd_store_inferior_registers): Likewise.
* monitor.c (monitor_fetch_register, monitor_store_register): Likewise.
(monitor_fetch_registers, monitor_store_registers): Likewise.
* nto-procfs.c (procfs_fetch_registers): Likewise.
(procfs_store_registers): Likewise.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register,
fetch_register, supply_vrregset, fetch_altivec_registers,
fetch_ppc_registers, ppc_linux_fetch_inferior_registers): Likewise.
(store_altivec_register, store_spe_register, store_register,
fill_vrregset, store_altivec_registers, store_ppc_registers,
ppc_linux_store_inferior_registers): Likewise.
* ppcnbsd-nat.c (ppcnbsd_fetch_inferior_registers): Likewise.
(ppcnbsd_store_inferior_registers): Likewise.
* ppcobsd-nat.c (ppcobsd_fetch_registers): Likewise.
(ppcobsd_store_registers): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* remote.c (fetch_register_using_p, process_g_packet,
fetch_registers_using_g, remote_fetch_registers): Likewise.
(store_register_using_P, store_registers_using_G,
remote_store_registers): Likewise.
* remote-m32r-sdi.c (m32r_fetch_registers, m32r_fetch_register,
m32r_store_register, m32r_store_register): Likewise.
* remote-mips.c (mips_fetch_registers, mips_store_registers): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
(gdbsim_store_register): Likewise.
* rs6000-nat.c (fetch_register, store_register): Likewise.
(rs6000_fetch_inferior_registers): Likewise.
(rs6000_store_inferior_registers): Likewise.
* s390-nat.c (fetch_regs, store_regs): Likewise.
(fetch_fpregs, store_fpregs): Likewise.
(s390_linux_fetch_inferior_registers): Likewise.
(s390_linux_store_inferior_registers): Likewise.
* shnbsd-nat.c (shnbsd_fetch_inferior_registers): Likewise.
(shnbsd_store_inferior_registers): Likewise.
* sol-thread.c (sol_thread_fetch_registers): Likewise.
(sol_thread_store_registers): Likewise.
* sparc-nat.c (fetch_inferior_registers): Likewise.
(store_inferior_registers): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
(spu_store_inferior_registers): Likewise.
* target.c (debug_print_register): Likewise.
(debug_to_fetch_registers, debug_to_store_registers): Likewise.
* vaxbsd-nat.c (vaxbsd_fetch_inferior_registers): Likewise.
(vaxbsd_store_inferior_registers): Likewise.
* win32-nat.c (do_win32_fetch_inferior_registers): Likewise.
(win32_fetch_inferior_registers): Likewise.
(win32_store_inferior_registers): Likewise.
2007-05-06 14:34:38 +00:00
|
|
|
fetch_regs_kernel_thread (regcache, regno, tid);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-07-22 19:20:21 +00:00
|
|
|
/* Store the gp registers into an array of uint32_t or uint64_t. */
|
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_gprs64 (const struct regcache *regcache, uint64_t *vals)
|
2002-07-22 19:20:21 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
|
2002-07-22 19:20:21 +00:00
|
|
|
int regno;
|
|
|
|
|
2004-05-07 20:50:37 +00:00
|
|
|
for (regno = 0; regno < ppc_num_gprs; regno++)
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache,
|
|
|
|
tdep->ppc_gp0_regnum + regno))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_gp0_regnum + regno,
|
2004-07-23 Andrew Cagney <cagney@gnu.org>
Use regcache_raw_collect instead of regcache_collect.
* regcache.h (regcache_collect): Delete declaration.
* regcache.c (regcache_colect): Delete function.
* win32-nat.c (do_child_store_inferior_registers): Update.
* sol-thread.c (sol_thread_store_registers): Update.
* shnbsd-tdep.c (shnbsd_fill_reg): Update.
* rs6000-nat.c (store_register): Update.
* remote.c (store_register_using_P, remote_store_registers): Update.
* ppcnbsd-tdep.c (ppcnbsd_fill_reg): Update.
* ppc-linux-nat.c (store_altivec_register, store_spe_register)
(fill_vrregset, store_spe_registers, fill_gregset)
(fill_gregset): Update.
* nto-procfs.c (procfs_store_registers): Update.
* mipsnbsd-tdep.c (mipsnbsd_fill_reg): Update.
* mips-linux-tdep.c (fill_gregset, mips64_fill_gregset): Update.
* m68klinux-nat.c (store_register, fill_gregset): Update.
* m68k-tdep.c (fill_gregset): Update.
* infptrace.c (store_register): Update.
* i386-nto-tdep.c (i386nto_regset_fill): Update.
* i386-linux-nat.c (store_register, fill_gregset): Update.
* hppa-linux-nat.c (fill_gregset): Update.
* go32-nat.c (store_register): Update.
* armnbsd-nat.c (store_register, store_regs, store_fp_register)
(store_fp_regs): Update.
* arm-linux-nat.c (store_nwfpe_single, store_nwfpe_double)
(store_nwfpe_extended, store_fpregister, store_fpregs)
(store_register, store_regs, fill_gregset, fill_fpregset): Update.
* alpha-tdep.c (alpha_fill_int_regs, alpha_fill_fp_regs): Update.
* aix-thread.c (fill_gprs64, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Update.
2004-07-24 01:00:21 +00:00
|
|
|
vals + regno);
|
2002-07-22 19:20:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_gprs32 (const struct regcache *regcache, uint32_t *vals)
|
2002-07-22 19:20:21 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
|
2002-07-22 19:20:21 +00:00
|
|
|
int regno;
|
|
|
|
|
2004-05-07 20:50:37 +00:00
|
|
|
for (regno = 0; regno < ppc_num_gprs; regno++)
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache,
|
|
|
|
tdep->ppc_gp0_regnum + regno))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_gp0_regnum + regno,
|
2004-07-23 Andrew Cagney <cagney@gnu.org>
Use regcache_raw_collect instead of regcache_collect.
* regcache.h (regcache_collect): Delete declaration.
* regcache.c (regcache_colect): Delete function.
* win32-nat.c (do_child_store_inferior_registers): Update.
* sol-thread.c (sol_thread_store_registers): Update.
* shnbsd-tdep.c (shnbsd_fill_reg): Update.
* rs6000-nat.c (store_register): Update.
* remote.c (store_register_using_P, remote_store_registers): Update.
* ppcnbsd-tdep.c (ppcnbsd_fill_reg): Update.
* ppc-linux-nat.c (store_altivec_register, store_spe_register)
(fill_vrregset, store_spe_registers, fill_gregset)
(fill_gregset): Update.
* nto-procfs.c (procfs_store_registers): Update.
* mipsnbsd-tdep.c (mipsnbsd_fill_reg): Update.
* mips-linux-tdep.c (fill_gregset, mips64_fill_gregset): Update.
* m68klinux-nat.c (store_register, fill_gregset): Update.
* m68k-tdep.c (fill_gregset): Update.
* infptrace.c (store_register): Update.
* i386-nto-tdep.c (i386nto_regset_fill): Update.
* i386-linux-nat.c (store_register, fill_gregset): Update.
* hppa-linux-nat.c (fill_gregset): Update.
* go32-nat.c (store_register): Update.
* armnbsd-nat.c (store_register, store_regs, store_fp_register)
(store_fp_regs): Update.
* arm-linux-nat.c (store_nwfpe_single, store_nwfpe_double)
(store_nwfpe_extended, store_fpregister, store_fpregs)
(store_register, store_regs, fill_gregset, fill_fpregset): Update.
* alpha-tdep.c (alpha_fill_int_regs, alpha_fill_fp_regs): Update.
* aix-thread.c (fill_gprs64, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Update.
2004-07-24 01:00:21 +00:00
|
|
|
vals + regno);
|
2002-07-22 19:20:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Store the floating point registers into a double array. */
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_fprs (const struct regcache *regcache, double *vals)
|
2002-07-22 19:20:21 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2002-07-22 19:20:21 +00:00
|
|
|
int regno;
|
|
|
|
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
/* This function should never be called on architectures without
|
|
|
|
floating-point registers. */
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
gdb_assert (ppc_floating_point_unit_p (gdbarch));
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
|
* config/rs6000/tm-rs6000.h (FP0_REGNUM): Document that this
should no longer be used in code specific to the RS6000 and its
derivatives.
* ppc-tdep.h (struct gdbarch_tdep): Add 'ppc_fp0_regnum' member.
* rs6000-tdep.c (rs6000_gdbarch_init): Initialize
tdep->ppc_fp0_regnum.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_dwarf2_stab_reg_to_regnum, rs6000_store_return_value)
(rs6000_frame_cache): Use tdep->ppc_fp0_regnum instead of
FP0_REGNUM.
* aix-thread.c (supply_fprs, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, store_regs_kernel_thread):
Same.
* ppc-bdm.c (bdm_ppc_fetch_registers, bdm_ppc_fetch_registers,
bdm_ppc_store_registers): Same.
* ppc-linux-nat.c (ppc_register_u_addr, fetch_register)
(store_register, fill_fpregset): Same.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache)
(ppc_linux_supply_fpregset): Same.
* ppcnbsd-nat.c (getfpregs_supplies): Same.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg):
Same.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call,
do_ppc_sysv_return_value, ppc64_sysv_abi_push_dummy_call,
ppc64_sysv_abi_return_value): Same.
* rs6000-nat.c (regmap, fetch_inferior_registers)
(store_inferior_registers, fetch_core_registers): Same.
2004-05-05 01:46:55 +00:00
|
|
|
for (regno = tdep->ppc_fp0_regnum;
|
|
|
|
regno < tdep->ppc_fp0_regnum + ppc_num_fprs;
|
|
|
|
regno++)
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, regno))
|
2012-03-13 22:27:12 +00:00
|
|
|
regcache_raw_collect (regcache, regno,
|
|
|
|
vals + regno - tdep->ppc_fp0_regnum);
|
2002-07-22 19:20:21 +00:00
|
|
|
}
|
|
|
|
|
2002-07-13 00:29:37 +00:00
|
|
|
/* Store the special registers into the specified 64-bit and 32-bit
|
2002-07-18 19:26:14 +00:00
|
|
|
locations. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_sprs64 (const struct regcache *regcache,
|
|
|
|
uint64_t *iar, uint64_t *msr, uint32_t *cr,
|
2002-07-26 23:12:59 +00:00
|
|
|
uint64_t *lr, uint64_t *ctr, uint32_t *xer,
|
|
|
|
uint32_t *fpscr)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2002-07-23 00:34:29 +00:00
|
|
|
|
|
|
|
/* Verify that the size of the size of the IAR buffer is the
|
|
|
|
same as the raw size of the PC (in the register cache). If
|
|
|
|
they're not, then either GDB has been built incorrectly, or
|
|
|
|
there's some other kind of internal error. To be really safe,
|
|
|
|
we should check all of the sizes. */
|
2007-06-18 Markus Deuling <deuling@de.ibm.com>
* gdbarch.sh (SP_REGNUM): Replace by gdbarch_sp_regnum.
* v850-tdep.c (v850_unwind_sp): Likewise.
* std-regs.c (value_of_builtin_frame_sp_reg): Likewise.
* stack.c (frame_info): Likewise.
* stabsread.c (define_symbol): Likewise.
* sh-tdep.c (sh_push_dummy_call_fpu, sh_push_dummy_call_nofpu)
(sh_dwarf2_frame_init_reg, sh_frame_cache, sh_frame_prev_register)
(sh_unwind_sp): Likewise.
* sh64-tdep.c (sh64_push_dummy_call, sh64_frame_cache)
(sh64_frame_prev_register, sh64_unwind_sp): Likewise.
* rs6000-tdep.c (rs6000_push_dummy_call, rs6000_unwind_dummy_id)
(rs6000_frame_cache): Likewise.
* rs6000-nat.c (store_register): Likewise.
* remote-mips.c (mips_wait): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call)
(ppc64_sysv_abi_push_dummy_call): Likewise.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_cache): Likewise.
* ppcobsd-nat.c (ppcobsd_supply_pcb): Likewise.
* ppcnbsd-tdep.c (ppcnbsd_sigtramp_cache_init): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* m32r-rom.c (m32r_supply_register): Likewise.
* frame.c (frame_sp_unwind): Likewise.
* mips-tdep.c (mips_insn16_frame_cache)
(mips_insn32_frame_cache): Likewise (comment).
* m68klinux-nat.c (supply_gregset): Likewise.
* m68k-tdep.c (m68k_get_longjmp_target): Likewise.
* ia64-tdep.c (ia64_frame_prev_register): Likewise.
* i386-tdep.c (i386_get_longjmp_target): Likewise.
* dwarf2-frame.c (dwarf2_frame_default_init_reg): Likewise.
* cris-tdep.c (cris_regnums, cris_sigcontext_addr)
(cris_sigtramp_frame_unwind_cache, cris_push_dummy_call)
(cris_scan_prologue, crisv32_scan_prologue, cris_unwind_sp)
(cris_register_type, crisv32_register_type)
(cris_dwarf2_frame_init_reg): Likewise.
* arch-utils.c (legacy_virtual_frame_pointer): Likewise.
* amd64-tdep.c (amd64_frame_prev_register): Likewise.
* amd64-linux-tdep.c (amd64_linux_sigcontext_addr): Likewise.
* libunwind-frame.c (libunwind_frame_cache): Likewise.
* gdbarch.sh (PC_REGNUM): Replace by gdbarch_pc_regnum.
* regcache.c (read_pc_pid, generic_target_write_pc): Likewise.
* xtensa-tdep.c (xtensa_register_type, xtensa_supply_gregset)
(xtensa_unwind_pc, xtensa_frame_cache, xtensa_frame_prev_register)
(xtensa_extract_return_value, xtensa_store_return_value): Likewise.
* v850-tdep.c (v850_unwind_pc): Likewise.
* stack.c (frame_info): Likewise.
* sh-tdep.c (sh_generic_show_regs, sh3_show_regs, sh2e_show_regs)
(sh2a_show_regs, sh2a_nofpu_show_regs, sh3e_show_regs)
(sh3_dsp_show_regs, sh4_show_regs, sh4_nofpu_show_regs)
(sh_dwarf2_frame_init_reg, sh_frame_prev_register, sh_unwind_pc)
(sh_dsp_show_regs): Likewise.
* shnbsd-tdep.c (shnbsd_supply_gregset)
(shnbsd_collect_gregset): Likewise.
* shnbsd-nat.c (GETREGS_SUPPLIES): Likewise.
* sh64-tdep.c (sh64_compact_reg_base_num, sh64_show_media_regs)
(sh64_frame_prev_register, sh64_unwind_pc): Likewise.
* rs6000-tdep.c (ppc_supply_gregset, ppc_collect_gregset)
(6000_register_reggroup_p, rs6000_unwind_pc)
(rs6000_frame_cache): Likewise.
* rs6000-nat.c (regmap, rs6000_fetch_inferior_registers)
(rs6000_store_inferior_registers): Likewise.
* remote-mips.c (mips_wait, mips_load): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_cache): Likewise.
* ppcobsd-nat.c (ppcobsd_supply_pcb): Likewise.
* ppcnbsd-tdep.c (ppcnbsd_sigtramp_cache_init): Likewise.
* ppcnbsd-nat.c (getregs_supplies, ppcnbsd_supply_pcb): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* ppc-linux-nat.c (ppc_register_u_addr, fetch_ppc_registers)
(store_ppc_registers, fill_gregset): Likewise.
* mips-tdep.c (mips_stub_frame_cache, mips_gdbarch_init): Likewise.
* mipsnbsd-tdep.c (mipsnbsd_supply_reg, mipsnbsd_fill_reg): Likewise.
* mipsnbsd-nat.c (getregs_supplies): Likewise.
* m68k-tdep.c (m68k_register_type, m68k_unwind_pc): Likewise.
* m68klinux-nat.c (supply_gregset): Likewise.
* irix5-nat.c (fill_gregset): Likewise.
* i386-tdep.c (i386_unwind_pc): Likewise.
* i386-linux-nat.c (i386_linux_resume): Likewise.
* frame.c (get_prev_frame_1): Likewise.
* dwarf2-frame.c (dwarf2_frame_default_init_reg): Likewise.
* dbug-rom.c (dbug_supply_register): Likewise.
* cris-tdep.c (cris_sigtramp_frame_unwind_cache, cris_scan_prologue)
(crisv32_scan_prologue, cris_unwind_pc, cris_register_size)
(cris_register_type, crisv32_register_type, crisv32_register_name)
(cris_dwarf2_frame_init_reg, find_step_target)
(cris_software_single_step, cris_supply_gregset)
(cris_regnums): Likewise.
* alpha-linux-nat.c (alpha_linux_register_u_offset): Likewise.
* aix-thread.c (special_register_p, supply_sprs64, supply_sprs32)
(fill_sprs64, fill_sprs32, store_regs_user_thread): Likewise.
* mips-linux-tdep.c (mips_linux_write_pc): Likewise.
* gdbarch.sh (PS_REGNUM): Replace by gdbarch_ps_regnum.
* dbug-rom.c (dbug_supply_register): Likewise.
* xtensa-tdep.c (xtensa_supply_gregset, xtensa_frame_cache)
(xtensa_frame_prev_register, xtensa_push_dummy_call): Likewise.
* win32-nat.c (win32_resume): Likewise.
* std-regs.c (value_of_builtin_frame_ps_reg)
(value_of_builtin_frame_pc_reg): Likewise.
* m68k-tdep.c (m68k_register_type): Likewise.
* m68klinux-nat.c (supply_gregset): Likewise.
* gdbarch.sh (FP0_REGNUM): Replace by gdbarch_fp0_regnum.
* sh-tdep.c (sh_extract_return_value_fpu, sh_store_return_value_fpu)
(sh2e_show_regs, sh2a_show_regs, sh3e_show_regs, sh4_show_regs)
(sh_sh2a_register_type, sh_sh3e_register_type, sh_sh4_register_type)
(fv_reg_base_num, dr_reg_base_num): Likewise.
* sh64-tdep.c (sh64_fv_reg_base_num, sh64_dr_reg_base_num)
(sh64_fpp_reg_base_num, sh64_compact_reg_base_num, sh64_push_dummy_call)
(sh64_extract_return_value, sh64_store_return_value)
(sh64_show_media_regs, sh64_show_compact_regs, sh64_register_type)
(sh64_do_fp_register, sh64_media_print_registers_info): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers)
(invalidate_cache): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* mipsnbsd-tdep.c (mipsnbsd_supply_fpreg)
(mipsnbsd_fill_fpreg): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers)
(mipsnbsd_store_inferior_registers): Likewise.
* mips-linux-tdep.c (mips_supply_fpregset, mips_fill_fpregset)
(mips64_supply_fpregset, mips64_fill_fpregset): Likewise.
* mips-linux-nat.c (mips64_linux_register_addr): Likewise.
* m68k-tdep.c (m68k_register_type, m68k_convert_register_p): Likewise.
* m68klinux-nat.c (getfpregs_supplies, supply_fpregset)
(fill_fpregset): Likewise.
* irix5-nat.c (supply_fpregset, fill_fpregset): Likewise.
* i386-tdep.h (struct_return): Likewise (comment).
* i386-nto-tdep.c (i386nto_register_area): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register)
(go32_store_registers): Likewise.
* alpha-tdep.c (alpha_next_pc): Likewise.
* alpha-linux-nat.c (alpha_linux_register_u_offset): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers)
(alphabsd_store_inferior_registers): Likewise.
* core-regset.c (fetch_core_registers): Likewise.
* i386v4-nat.c (supply_fpregset, fill_fpregset): Likewise.
* gdbarch.c, gdbarch.h: Regenerate.
2007-06-18 17:45:26 +00:00
|
|
|
gdb_assert (sizeof (*iar) == register_size
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
(gdbarch, gdbarch_pc_regnum (gdbarch)));
|
2002-07-23 00:34:29 +00:00
|
|
|
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache,
|
|
|
|
gdbarch_pc_regnum (gdbarch)))
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
regcache_raw_collect (regcache, gdbarch_pc_regnum (gdbarch), iar);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_ps_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_ps_regnum, msr);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_cr_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_cr_regnum, cr);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_lr_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_lr_regnum, lr);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_ctr_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_ctr_regnum, ctr);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_xer_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_xer_regnum, xer);
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
if (tdep->ppc_fpscr_regnum >= 0
|
2011-01-30 23:16:33 +00:00
|
|
|
&& REG_VALID == regcache_register_status (regcache,
|
|
|
|
tdep->ppc_fpscr_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_fpscr_regnum, fpscr);
|
2002-07-22 19:20:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_sprs32 (const struct regcache *regcache,
|
|
|
|
uint32_t *iar, uint32_t *msr, uint32_t *cr,
|
2007-04-27 13:17:27 +00:00
|
|
|
uint32_t *lr, uint32_t *ctr, uint32_t *xer,
|
|
|
|
uint32_t *fpscr)
|
2002-07-22 19:20:21 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2002-07-23 00:34:29 +00:00
|
|
|
|
|
|
|
/* Verify that the size of the size of the IAR buffer is the
|
|
|
|
same as the raw size of the PC (in the register cache). If
|
|
|
|
they're not, then either GDB has been built incorrectly, or
|
|
|
|
there's some other kind of internal error. To be really safe,
|
2007-04-27 13:17:27 +00:00
|
|
|
we should check all of the sizes. */
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
gdb_assert (sizeof (*iar) == register_size (gdbarch,
|
|
|
|
gdbarch_pc_regnum (gdbarch)));
|
2002-07-23 00:34:29 +00:00
|
|
|
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache,
|
|
|
|
gdbarch_pc_regnum (gdbarch)))
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
regcache_raw_collect (regcache, gdbarch_pc_regnum (gdbarch), iar);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_ps_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_ps_regnum, msr);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_cr_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_cr_regnum, cr);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_lr_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_lr_regnum, lr);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_ctr_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_ctr_regnum, ctr);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_xer_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_xer_regnum, xer);
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
if (tdep->ppc_fpscr_regnum >= 0
|
2011-01-30 23:16:33 +00:00
|
|
|
&& REG_VALID == regcache_register_status (regcache, tdep->ppc_fpscr_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_fpscr_regnum, fpscr);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Store all registers into pthread PDTID, which doesn't have a kernel
|
|
|
|
thread.
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
It's possible to store a single register into a non-kernel pthread,
|
|
|
|
but I doubt it's worth the effort. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
store_regs_user_thread (const struct regcache *regcache, pthdb_pthread_t pdtid)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2002-07-13 00:29:37 +00:00
|
|
|
int status, i;
|
|
|
|
pthdb_context_t ctx;
|
2002-07-22 19:20:21 +00:00
|
|
|
uint32_t int32;
|
|
|
|
uint64_t int64;
|
|
|
|
double dbl;
|
2002-07-13 00:29:37 +00:00
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
2002-07-18 19:26:14 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
2002-07-22 22:11:03 +00:00
|
|
|
"store_regs_user_thread %lx\n", (long) pdtid);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Retrieve the thread's current context for its non-register
|
|
|
|
values. */
|
2002-07-13 00:29:37 +00:00
|
|
|
status = pthdb_pthread_context (pd_session, pdtid, &ctx);
|
|
|
|
if (status != PTHDB_SUCCESS)
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
error (_("aix-thread: store_registers: pthdb_pthread_context returned %s"),
|
2002-07-15 23:33:09 +00:00
|
|
|
pd_status2str (status));
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-22 19:20:21 +00:00
|
|
|
/* Collect general-purpose register values from the regcache. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2004-05-13 19:36:05 +00:00
|
|
|
for (i = 0; i < ppc_num_gprs; i++)
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache,
|
|
|
|
tdep->ppc_gp0_regnum + i))
|
2002-07-22 19:56:07 +00:00
|
|
|
{
|
|
|
|
if (arch64)
|
|
|
|
{
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_gp0_regnum + i,
|
2004-07-23 Andrew Cagney <cagney@gnu.org>
Use regcache_raw_collect instead of regcache_collect.
* regcache.h (regcache_collect): Delete declaration.
* regcache.c (regcache_colect): Delete function.
* win32-nat.c (do_child_store_inferior_registers): Update.
* sol-thread.c (sol_thread_store_registers): Update.
* shnbsd-tdep.c (shnbsd_fill_reg): Update.
* rs6000-nat.c (store_register): Update.
* remote.c (store_register_using_P, remote_store_registers): Update.
* ppcnbsd-tdep.c (ppcnbsd_fill_reg): Update.
* ppc-linux-nat.c (store_altivec_register, store_spe_register)
(fill_vrregset, store_spe_registers, fill_gregset)
(fill_gregset): Update.
* nto-procfs.c (procfs_store_registers): Update.
* mipsnbsd-tdep.c (mipsnbsd_fill_reg): Update.
* mips-linux-tdep.c (fill_gregset, mips64_fill_gregset): Update.
* m68klinux-nat.c (store_register, fill_gregset): Update.
* m68k-tdep.c (fill_gregset): Update.
* infptrace.c (store_register): Update.
* i386-nto-tdep.c (i386nto_regset_fill): Update.
* i386-linux-nat.c (store_register, fill_gregset): Update.
* hppa-linux-nat.c (fill_gregset): Update.
* go32-nat.c (store_register): Update.
* armnbsd-nat.c (store_register, store_regs, store_fp_register)
(store_fp_regs): Update.
* arm-linux-nat.c (store_nwfpe_single, store_nwfpe_double)
(store_nwfpe_extended, store_fpregister, store_fpregs)
(store_register, store_regs, fill_gregset, fill_fpregset): Update.
* alpha-tdep.c (alpha_fill_int_regs, alpha_fill_fp_regs): Update.
* aix-thread.c (fill_gprs64, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Update.
2004-07-24 01:00:21 +00:00
|
|
|
(void *) &int64);
|
2002-07-22 19:56:07 +00:00
|
|
|
ctx.gpr[i] = int64;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_gp0_regnum + i,
|
2004-07-23 Andrew Cagney <cagney@gnu.org>
Use regcache_raw_collect instead of regcache_collect.
* regcache.h (regcache_collect): Delete declaration.
* regcache.c (regcache_colect): Delete function.
* win32-nat.c (do_child_store_inferior_registers): Update.
* sol-thread.c (sol_thread_store_registers): Update.
* shnbsd-tdep.c (shnbsd_fill_reg): Update.
* rs6000-nat.c (store_register): Update.
* remote.c (store_register_using_P, remote_store_registers): Update.
* ppcnbsd-tdep.c (ppcnbsd_fill_reg): Update.
* ppc-linux-nat.c (store_altivec_register, store_spe_register)
(fill_vrregset, store_spe_registers, fill_gregset)
(fill_gregset): Update.
* nto-procfs.c (procfs_store_registers): Update.
* mipsnbsd-tdep.c (mipsnbsd_fill_reg): Update.
* mips-linux-tdep.c (fill_gregset, mips64_fill_gregset): Update.
* m68klinux-nat.c (store_register, fill_gregset): Update.
* m68k-tdep.c (fill_gregset): Update.
* infptrace.c (store_register): Update.
* i386-nto-tdep.c (i386nto_regset_fill): Update.
* i386-linux-nat.c (store_register, fill_gregset): Update.
* hppa-linux-nat.c (fill_gregset): Update.
* go32-nat.c (store_register): Update.
* armnbsd-nat.c (store_register, store_regs, store_fp_register)
(store_fp_regs): Update.
* arm-linux-nat.c (store_nwfpe_single, store_nwfpe_double)
(store_nwfpe_extended, store_fpregister, store_fpregs)
(store_register, store_regs, fill_gregset, fill_fpregset): Update.
* alpha-tdep.c (alpha_fill_int_regs, alpha_fill_fp_regs): Update.
* aix-thread.c (fill_gprs64, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Update.
2004-07-24 01:00:21 +00:00
|
|
|
(void *) &int32);
|
2002-07-22 19:56:07 +00:00
|
|
|
ctx.gpr[i] = int32;
|
|
|
|
}
|
|
|
|
}
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-22 19:20:21 +00:00
|
|
|
/* Collect floating-point register values from the regcache. */
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
if (ppc_floating_point_unit_p (gdbarch))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_fprs (regcache, ctx.fpr);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-22 19:20:21 +00:00
|
|
|
/* Special registers (always kept in ctx as 64 bits). */
|
|
|
|
if (arch64)
|
|
|
|
{
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_sprs64 (regcache, &ctx.iar, &ctx.msr, &ctx.cr, &ctx.lr, &ctx.ctr,
|
|
|
|
&ctx.xer, &ctx.fpscr);
|
2002-07-22 19:20:21 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Problem: ctx.iar etc. are 64 bits, but raw_registers are 32.
|
2007-04-27 13:17:27 +00:00
|
|
|
Solution: use 32-bit temp variables. */
|
|
|
|
uint32_t tmp_iar, tmp_msr, tmp_cr, tmp_lr, tmp_ctr, tmp_xer,
|
|
|
|
tmp_fpscr;
|
2002-07-22 19:20:21 +00:00
|
|
|
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_sprs32 (regcache, &tmp_iar, &tmp_msr, &tmp_cr, &tmp_lr, &tmp_ctr,
|
|
|
|
&tmp_xer, &tmp_fpscr);
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache,
|
|
|
|
gdbarch_pc_regnum (gdbarch)))
|
2002-07-22 19:56:07 +00:00
|
|
|
ctx.iar = tmp_iar;
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_ps_regnum))
|
2002-07-22 19:56:07 +00:00
|
|
|
ctx.msr = tmp_msr;
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_cr_regnum))
|
2002-07-22 19:56:07 +00:00
|
|
|
ctx.cr = tmp_cr;
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache, tdep->ppc_lr_regnum))
|
2002-07-22 19:56:07 +00:00
|
|
|
ctx.lr = tmp_lr;
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache,
|
|
|
|
tdep->ppc_ctr_regnum))
|
2002-07-22 19:56:07 +00:00
|
|
|
ctx.ctr = tmp_ctr;
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache,
|
|
|
|
tdep->ppc_xer_regnum))
|
2002-07-22 19:56:07 +00:00
|
|
|
ctx.xer = tmp_xer;
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache,
|
|
|
|
tdep->ppc_xer_regnum))
|
2002-07-26 23:12:59 +00:00
|
|
|
ctx.fpscr = tmp_fpscr;
|
2002-07-22 19:20:21 +00:00
|
|
|
}
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
status = pthdb_pthread_setcontext (pd_session, pdtid, &ctx);
|
|
|
|
if (status != PTHDB_SUCCESS)
|
2011-01-07 19:36:19 +00:00
|
|
|
error (_("aix-thread: store_registers: "
|
|
|
|
"pthdb_pthread_setcontext returned %s"),
|
2002-07-15 23:33:09 +00:00
|
|
|
pd_status2str (status));
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Store register REGNO if != -1 or all registers otherwise into
|
|
|
|
kernel thread TID.
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
AIX provides a way to set all of a kernel thread's GPRs, FPRs, or
|
|
|
|
SPRs, but there's no way to set individual registers within those
|
|
|
|
groups. Therefore, if REGNO != -1, this function stores an entire
|
|
|
|
group. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
store_regs_kernel_thread (const struct regcache *regcache, int regno,
|
|
|
|
pthdb_tid_t tid)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
|
|
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
2004-05-13 19:36:05 +00:00
|
|
|
uint64_t gprs64[ppc_num_gprs];
|
|
|
|
uint32_t gprs32[ppc_num_gprs];
|
|
|
|
double fprs[ppc_num_fprs];
|
2002-07-13 00:29:37 +00:00
|
|
|
struct ptxsprs sprs64;
|
2002-07-22 19:20:21 +00:00
|
|
|
struct ptsprs sprs32;
|
|
|
|
int i;
|
2002-07-13 00:29:37 +00:00
|
|
|
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
if (debug_aix_thread)
|
2002-07-22 22:11:03 +00:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
|
|
|
"store_regs_kernel_thread tid=%lx regno=%d\n",
|
|
|
|
(long) tid, regno);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* General-purpose registers. */
|
2004-05-07 20:50:37 +00:00
|
|
|
if (regno == -1
|
|
|
|
|| (tdep->ppc_gp0_regnum <= regno
|
|
|
|
&& regno < tdep->ppc_gp0_regnum + ppc_num_fprs))
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
if (arch64)
|
2002-07-22 19:20:21 +00:00
|
|
|
{
|
2002-07-22 19:56:07 +00:00
|
|
|
/* Pre-fetch: some regs may not be in the cache. */
|
|
|
|
ptrace64aix (PTT_READ_GPRS, tid, (unsigned long) gprs64, 0, NULL);
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_gprs64 (regcache, gprs64);
|
2002-07-22 19:20:21 +00:00
|
|
|
ptrace64aix (PTT_WRITE_GPRS, tid, (unsigned long) gprs64, 0, NULL);
|
|
|
|
}
|
2002-07-13 00:29:37 +00:00
|
|
|
else
|
2002-07-22 19:20:21 +00:00
|
|
|
{
|
2002-07-22 19:56:07 +00:00
|
|
|
/* Pre-fetch: some regs may not be in the cache. */
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
ptrace32 (PTT_READ_GPRS, tid, (uintptr_t) gprs32, 0, NULL);
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_gprs32 (regcache, gprs32);
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
ptrace32 (PTT_WRITE_GPRS, tid, (uintptr_t) gprs32, 0, NULL);
|
2002-07-22 19:20:21 +00:00
|
|
|
}
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Floating-point registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2007-10-08 Markus Deuling <deuling@de.ibm.com>
* aix-thread.c (supply_gprs64, supply_fprs, supply_sprs64)
(supply_sprs32, fetch_regs_user_thread, fetch_regs_kernel_thread)
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Use
get_regcache_arch or get_frame_arch to get at the current architecture
by regcache or by frame, respectively.
2007-10-08 12:58:04 +00:00
|
|
|
if (ppc_floating_point_unit_p (gdbarch)
|
* ppc-tdep.h (struct gdbarch_tdep): Change definition of
ppc_fp0_regnum and ppc_fpscr_regnum: if they are -1, then this
processor variant lacks those registers.
(ppc_floating_point_unit_p): Change description to make it clear
that this returns info about the ISA, not the ABI.
* rs6000-tdep.c (ppc_floating_point_unit_p): Decide whether to
return true or false by checking tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum. The original code replicated the BFD
arch/mach switching done in rs6000_gdbarch_init; it's better to
keep that logic there, and just check the results here.
(rs6000_gdbarch_init): On the E500, set tdep->ppc_fp0_regnum and
tdep->ppc_fpscr_regnum to -1 to indicate that we have no
floating-point registers.
(ppc_supply_fpregset, ppc_collect_fpregset)
(rs6000_push_dummy_call, rs6000_extract_return_value)
(rs6000_store_return_value): Assert that we have floating-point
registers.
(rs6000_dwarf2_stab_reg_to_regnum): Add FIXME.
(rs6000_frame_cache): Don't note the locations at which
floating-point registers were saved if we have no fprs.
* aix-thread.c (supply_fprs, fill_fprs): Assert that we have FP
registers.
(fetch_regs_user_thread, fetch_regs_kernel_thread)
(store_regs_user_thread, store_regs_kernel_thread): Only call
supply_fprs / fill_fprs if we actually have floating-point
registers.
(special_register_p): Check ppc_fpscr_regnum before matching
against it.
(supply_sprs64, supply_sprs32, fill_sprs64, fill_sprs32): Don't
supply / collect fpscr if we don't have it.
* ppc-bdm.c: #include "gdb_assert.h".
(bdm_ppc_fetch_registers, bdm_ppc_store_registers): Assert that we
have floating-point registers, since I can't test this code on
FP-free systems to adapt it.
* ppc-linux-nat.c (ppc_register_u_addr): Don't match against the
fpscr and floating point register numbers if they don't exist.
(fetch_register): Assert that we have floating-point registers
before we reach the code that handles them.
(store_register): Same. And use tdep instead of calling
gdbarch_tdep again.
(fill_fpregset): Don't try to collect FP registers and fpscr if we
don't have them.
(ppc_linux_sigtramp_cache): Don't record the saved locations of
fprs and fpscr if we don't have them.
(ppc_linux_supply_fpregset): Don't supply fp regs and fpscr if we
don't have them.
* ppcnbsd-nat.c: #include "gdb_assert.h".
(getfpregs_supplies): Assert that we have floating-point registers.
* ppcnbsd-tdep.c (ppcnbsd_supply_fpreg, ppcnbsd_fill_fpreg): Same.
* ppcobsd-tdep.c: #include "gdb_assert.h".
(ppcobsd_supply_gregset, ppcobsd_collect_gregset): Assert that we
have floating-point registers.
* rs6000-nat.c (regmap): Don't match against the fpscr and
floating point register numbers if they don't exist.
(fetch_inferior_registers, store_inferior_registers,
fetch_core_registers): Only fetch / store / supply the
floating-point registers and the fpscr if we have them.
* Makefile.in (ppc-bdm.o, ppc-linux-nat.o, ppcnbsd-nat.o)
(ppcobsd-tdep.o): Update dependencies.
2004-05-11 04:55:32 +00:00
|
|
|
&& (regno == -1
|
|
|
|
|| (regno >= tdep->ppc_fp0_regnum
|
|
|
|
&& regno < tdep->ppc_fp0_regnum + ppc_num_fprs)))
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2002-07-22 19:56:07 +00:00
|
|
|
/* Pre-fetch: some regs may not be in the cache. */
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
ptrace32 (PTT_READ_FPRS, tid, (uintptr_t) fprs, 0, NULL);
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_fprs (regcache, fprs);
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
ptrace32 (PTT_WRITE_FPRS, tid, (uintptr_t) fprs, 0, NULL);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Special-purpose registers. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2007-11-07 06:53:41 +00:00
|
|
|
if (regno == -1 || special_register_p (gdbarch, regno))
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
if (arch64)
|
|
|
|
{
|
2002-07-22 19:56:07 +00:00
|
|
|
/* Pre-fetch: some registers won't be in the cache. */
|
2002-07-18 19:26:14 +00:00
|
|
|
ptrace64aix (PTT_READ_SPRS, tid,
|
|
|
|
(unsigned long) &sprs64, 0, NULL);
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_sprs64 (regcache, &sprs64.pt_iar, &sprs64.pt_msr,
|
|
|
|
&sprs64.pt_cr, &sprs64.pt_lr, &sprs64.pt_ctr,
|
|
|
|
&sprs64.pt_xer, &sprs64.pt_fpscr);
|
2002-07-18 19:26:14 +00:00
|
|
|
ptrace64aix (PTT_WRITE_SPRS, tid,
|
|
|
|
(unsigned long) &sprs64, 0, NULL);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-04-27 13:17:27 +00:00
|
|
|
/* The contents of "struct ptspr" were declared as "unsigned
|
|
|
|
long" up to AIX 5.2, but are "unsigned int" since 5.3.
|
|
|
|
Use temporaries to work around this problem. Also, add an
|
|
|
|
assert here to make sure we fail if the system header files
|
|
|
|
use "unsigned long", and the size of that type is not what
|
|
|
|
the headers expect. */
|
|
|
|
uint32_t tmp_iar, tmp_msr, tmp_cr, tmp_lr, tmp_ctr, tmp_xer,
|
|
|
|
tmp_fpscr;
|
|
|
|
|
|
|
|
gdb_assert (sizeof (sprs32.pt_iar) == 4);
|
|
|
|
|
2002-07-22 19:56:07 +00:00
|
|
|
/* Pre-fetch: some registers won't be in the cache. */
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
ptrace32 (PTT_READ_SPRS, tid, (uintptr_t) &sprs32, 0, NULL);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
fill_sprs32 (regcache, &tmp_iar, &tmp_msr, &tmp_cr, &tmp_lr,
|
|
|
|
&tmp_ctr, &tmp_xer, &tmp_fpscr);
|
2007-04-27 13:17:27 +00:00
|
|
|
|
|
|
|
sprs32.pt_iar = tmp_iar;
|
|
|
|
sprs32.pt_msr = tmp_msr;
|
|
|
|
sprs32.pt_cr = tmp_cr;
|
|
|
|
sprs32.pt_lr = tmp_lr;
|
|
|
|
sprs32.pt_ctr = tmp_ctr;
|
|
|
|
sprs32.pt_xer = tmp_xer;
|
|
|
|
sprs32.pt_fpscr = tmp_fpscr;
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-23 00:34:29 +00:00
|
|
|
if (tdep->ppc_mq_regnum >= 0)
|
2011-01-30 23:16:33 +00:00
|
|
|
if (REG_VALID == regcache_register_status (regcache,
|
|
|
|
tdep->ppc_mq_regnum))
|
* aix-thread.c (supply_gprs64, supply_reg32, supply_fprs,
supply_sprs64, supply_sprs32): Add REGCACHE parameter, use it
instead of current_regcache.
(fetch_regs_user_thread, fetch_regs_kernel_thread): Add
REGCACHE parameter, pass it to supply_ routines.
(aix_thread_fetch_registers): Pass current_regcache to
fetch_regs_user_thread and fetch_regs_kernel_thread.
(fill_gprs64, fill_gprs32, fill_fprs, fill_sprs64, fill_sprs32):
Add REGCACHE parameter, use it instead of current_regcache.
Call regcache_valid_p instead of register_cached.
(store_regs_user_thread, store_regs_kernel_thread): Likewise.
Also, pass REGCACHE to fill_ routines.
(aix_thread_store_registers): Pass current_regcache to
store_regs_user_thread and store_regs_kernel_thread.
2007-05-06 14:11:24 +00:00
|
|
|
regcache_raw_collect (regcache, tdep->ppc_mq_regnum,
|
2004-07-23 Andrew Cagney <cagney@gnu.org>
Use regcache_raw_collect instead of regcache_collect.
* regcache.h (regcache_collect): Delete declaration.
* regcache.c (regcache_colect): Delete function.
* win32-nat.c (do_child_store_inferior_registers): Update.
* sol-thread.c (sol_thread_store_registers): Update.
* shnbsd-tdep.c (shnbsd_fill_reg): Update.
* rs6000-nat.c (store_register): Update.
* remote.c (store_register_using_P, remote_store_registers): Update.
* ppcnbsd-tdep.c (ppcnbsd_fill_reg): Update.
* ppc-linux-nat.c (store_altivec_register, store_spe_register)
(fill_vrregset, store_spe_registers, fill_gregset)
(fill_gregset): Update.
* nto-procfs.c (procfs_store_registers): Update.
* mipsnbsd-tdep.c (mipsnbsd_fill_reg): Update.
* mips-linux-tdep.c (fill_gregset, mips64_fill_gregset): Update.
* m68klinux-nat.c (store_register, fill_gregset): Update.
* m68k-tdep.c (fill_gregset): Update.
* infptrace.c (store_register): Update.
* i386-nto-tdep.c (i386nto_regset_fill): Update.
* i386-linux-nat.c (store_register, fill_gregset): Update.
* hppa-linux-nat.c (fill_gregset): Update.
* go32-nat.c (store_register): Update.
* armnbsd-nat.c (store_register, store_regs, store_fp_register)
(store_fp_regs): Update.
* arm-linux-nat.c (store_nwfpe_single, store_nwfpe_double)
(store_nwfpe_extended, store_fpregister, store_fpregs)
(store_register, store_regs, fill_gregset, fill_fpregset): Update.
* alpha-tdep.c (alpha_fill_int_regs, alpha_fill_fp_regs): Update.
* aix-thread.c (fill_gprs64, fill_fprs, fill_sprs64, fill_sprs32)
(store_regs_user_thread, store_regs_kernel_thread): Update.
2004-07-24 01:00:21 +00:00
|
|
|
&sprs32.pt_mq);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
Cast to uintptr_t when calling ptrace32 on aix
When I verify my changes to target.h doesn't break build on aix, I get
the following build error on a clean GDB checkout.
../../binutils-gdb/gdb/aix-thread.c: In function 'pdc_read_regs':
../../binutils-gdb/gdb/aix-thread.c:366:4: error: passing argument 3 of 'ptrace32' makes integer from pointer without a cast [-Werror]
if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:263:1: note: expected 'long long int' but argument is of type 'uint32_t *'
ptrace32 (int req, int id, addr_ptr addr, int data, int *buf)
^
../../binutils-gdb/gdb/aix-thread.c:375:42: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
^
../../binutils-gdb/gdb/aix-thread.c:392:39: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
GCC uses -maix32 in default, so the 'long long' is 64 bit and address
is 32 bit. Such warnings should go away if -maix64 is used.
In this patch, I cast the parameter to uintptr_t first, and then cast
to addr_ptr.
gdb:
2014-01-07 Yao Qi <yao@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t.
(pdc_write_regs): Likewise.
(fetch_regs_kernel_thread): Likewise.
(store_regs_kernel_thread): Likewise.
2014-01-04 07:48:21 +00:00
|
|
|
ptrace32 (PTT_WRITE_SPRS, tid, (uintptr_t) &sprs32, 0, NULL);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Store gdb's current view of the register set into the
|
|
|
|
thread/process specified by inferior_ptid. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
2009-03-12 17:44:29 +00:00
|
|
|
aix_thread_store_registers (struct target_ops *ops,
|
|
|
|
struct regcache *regcache, int regno)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
struct thread_info *thread;
|
|
|
|
pthdb_tid_t tid;
|
2009-03-15 19:38:42 +00:00
|
|
|
struct target_ops *beneath = find_target_beneath (ops);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
if (!PD_TID (inferior_ptid))
|
2009-03-15 19:38:42 +00:00
|
|
|
beneath->to_store_registers (beneath, regcache, regno);
|
2002-07-13 00:29:37 +00:00
|
|
|
else
|
|
|
|
{
|
2009-05-24 21:06:53 +00:00
|
|
|
thread = find_thread_ptid (inferior_ptid);
|
2002-07-13 00:29:37 +00:00
|
|
|
tid = thread->private->tid;
|
|
|
|
|
|
|
|
if (tid == PTHDB_INVALID_TID)
|
* target.h (struct regcache): Add forward declaration.
(struct target_ops): Add REGCACHE parameter to to_fetch_registers
and to_store_registers target operations.
(target_fetch_registers, target_store_registers): Update.
* regcache.c (regcache_raw_read): Replace register_cached by
regcache_valid_p. Pass regcache to target_fetch_registers.
(regcache_raw_write): Pass regcache to target_store_registers.
* arm-linux-nat.c (store_fpregister, store_fpregs, store_register,
store_regs, store_wmmx_regs): Replace register_cached by
regcache_valid_p.
* bsd-kvm.c (bsd_kvm_open, bsd_kvm_proc_cmd): Pass current_regcache
to target_fetch_registers calls.
* corelow.c (core_open): Likewise.
* linux-nat.c (linux_nat_corefile_thread_callback): Likewise.
* proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* win32-nat.c (win32_resume): Likewise.
* ia64-tdep.c (ia64_store_return_value): Pass current_regcache
to target_store_registers call.
* rs6000-tdep.c (rs6000_push_dummy_call): Likewise.
* inferior.h (store_inferior_registers): Update prototype.
(fetch_inferior_registers): Likewise.
* gnu-nat.c (gnu_store_registers, gnu_fetch_registers): Likewise.
* mips-linux-nat.c (super_fetch_registers, super_store_registers):
Update function pointer signatures.
* aix-thread.c (aix_thread_fetch_registers): Add REGCACHE parameter,
use it instead of current_regcache, update calls.
(aix_thread_store_registers): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers): Likewise.
(alphabsd_store_inferior_registers): Likewise.
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Likewise.
(amd64bsd_store_inferior_registers): Likewise.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Likewise.
(amd64_linux_store_inferior_registers): Likewise.
* arm-linux-nat.c (fetch_fpregister, fetch_fpregs, store_fpregister,
store_fpregs, fetch_register, fetch_regs, store_register, store_regs,
fetch_wmmx_regs, store_wmmx_regs): Likewise.
(arm_linux_fetch_inferior_registers): Likewise.
(arm_linux_store_inferior_registers): Likewise.
* armnbsd-nat.c (fetch_register, fetch_regs, fetch_fp_register,
fetch_fp_regs, armnbsd_fetch_registers): Likewise.
(store_register, store_regs, store_fp_register, store_fp_regs,
armnbsd_store_registers): Likewise.
* bsd-kvm.c (bsd_kvm_fetch_pcb, bsd_kvm_fetch_registers): Likewise.
* bsd-uthread.c (bsd_uthread_fetch_registers): Likewise.
(bsd_uthread_store_registers): Likewise.
* corelow.c (get_core_registers): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register,
go32_store_registers): Likewise.
* hppabsd-nat.c (hppabsd_fetch_registers): Likewise.
(hppabsd_store_registers): Likewise.
* hppa-hpux-nat.c (hppa_hpux_fetch_register): Likewise.
(hppa_hpux_fetch_inferior_registers): Likewise.
(hppa_hpux_store_register): Likewise.
(hppa_hpux_store_inferior_registers): Likewise.
* hppa-linux-nat.c (fetch_register, store_register): Likewise.
(hppa_linux_fetch_inferior_registers): Likewise.
(hppa_linux_store_inferior_registers): Likewise.
* hpux-thread.c (hpux_thread_fetch_registers): Likewise.
(hpux_thread_store_registers): Likewise.
* i386bsd-nat.c (i386bsd_fetch_inferior_registers): Likewise.
(i386bsd_store_inferior_registers): Likewise.
* i386gnu-nat.c (fetch_fpregs, gnu_fetch_registers, store_fpregs,
gnu_store_registers): Likewise.
* i386-linux-nat.c (fetch_register, store_register, fetch_regs,
store_regs, fetch_fpregs, store_fpregs, fetch_fpxregs, store_fpxregs):
Likewise.
(i386_linux_fetch_inferior_registers): Likewise.
(i386_linux_store_inferior_registers): Likewise.
* ia64-linux-nat.c (ia64_linux_fetch_register): Likewise.
(ia64_linux_fetch_registers): Likewise.
(ia64_linux_store_register): Likewise.
(ia64_linux_store_registers): Likewise.
* inf-child.c (inf_child_fetch_inferior_registers): Likewise.
(inf_child_store_inferior_registers): Likewise.
* inf-ptrace.c (inf_ptrace_fetch_register): Likewise.
(inf_ptrace_fetch_registers): Likewise.
(inf_ptrace_store_register): Likewise.
(inf_ptrace_store_registers): Likewise.
* infptrace.c (fetch_register, store_register): Likewise.
(fetch_inferior_registers, store_inferior_registers): Likewise.
* m32r-linux-nat.c (fetch_regs, store_regs): Likewise.
(m32r_linux_fetch_inferior_registers): Likewise.
(m32r_linux_store_inferior_registers): Likewise.
* m68kbsd-nat.c (m68kbsd_fetch_inferior_registers): Likewise.
(m68kbsd_store_inferior_registers): Likewise.
* m68klinux-nat.c (fetch_register, old_fetch_inferior_registers,
store_register, old_store_inferior_registers, fetch_regs, store_regs,
fetch_fpregs, store_fpregs): Likewise.
(m68k_linux_fetch_inferior_registers): Likewise.
(m68k_linux_store_inferior_registers): Likewise.
* m88kbsd-nat.c (m88kbsd_fetch_inferior_registers): Likewise.
(m88kbsd_store_inferior_registers): Likewise.
* mips64obsd-nat.c (mips64obsd_fetch_inferior_registers): Likewise.
(mips64obsd_store_inferior_registers): Likewise.
* mips-linux-nat.c (mips64_linux_regsets_fetch_registers): Likewise.
(mips64_linux_regsets_store_registers): Likewise.
(mips64_linux_fetch_registers): Likewise.
(mips64_linux_store_registers): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers): Likewise.
(mipsnbsd_store_inferior_registers): Likewise.
* monitor.c (monitor_fetch_register, monitor_store_register): Likewise.
(monitor_fetch_registers, monitor_store_registers): Likewise.
* nto-procfs.c (procfs_fetch_registers): Likewise.
(procfs_store_registers): Likewise.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register,
fetch_register, supply_vrregset, fetch_altivec_registers,
fetch_ppc_registers, ppc_linux_fetch_inferior_registers): Likewise.
(store_altivec_register, store_spe_register, store_register,
fill_vrregset, store_altivec_registers, store_ppc_registers,
ppc_linux_store_inferior_registers): Likewise.
* ppcnbsd-nat.c (ppcnbsd_fetch_inferior_registers): Likewise.
(ppcnbsd_store_inferior_registers): Likewise.
* ppcobsd-nat.c (ppcobsd_fetch_registers): Likewise.
(ppcobsd_store_registers): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* remote.c (fetch_register_using_p, process_g_packet,
fetch_registers_using_g, remote_fetch_registers): Likewise.
(store_register_using_P, store_registers_using_G,
remote_store_registers): Likewise.
* remote-m32r-sdi.c (m32r_fetch_registers, m32r_fetch_register,
m32r_store_register, m32r_store_register): Likewise.
* remote-mips.c (mips_fetch_registers, mips_store_registers): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
(gdbsim_store_register): Likewise.
* rs6000-nat.c (fetch_register, store_register): Likewise.
(rs6000_fetch_inferior_registers): Likewise.
(rs6000_store_inferior_registers): Likewise.
* s390-nat.c (fetch_regs, store_regs): Likewise.
(fetch_fpregs, store_fpregs): Likewise.
(s390_linux_fetch_inferior_registers): Likewise.
(s390_linux_store_inferior_registers): Likewise.
* shnbsd-nat.c (shnbsd_fetch_inferior_registers): Likewise.
(shnbsd_store_inferior_registers): Likewise.
* sol-thread.c (sol_thread_fetch_registers): Likewise.
(sol_thread_store_registers): Likewise.
* sparc-nat.c (fetch_inferior_registers): Likewise.
(store_inferior_registers): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
(spu_store_inferior_registers): Likewise.
* target.c (debug_print_register): Likewise.
(debug_to_fetch_registers, debug_to_store_registers): Likewise.
* vaxbsd-nat.c (vaxbsd_fetch_inferior_registers): Likewise.
(vaxbsd_store_inferior_registers): Likewise.
* win32-nat.c (do_win32_fetch_inferior_registers): Likewise.
(win32_fetch_inferior_registers): Likewise.
(win32_store_inferior_registers): Likewise.
2007-05-06 14:34:38 +00:00
|
|
|
store_regs_user_thread (regcache, thread->private->pdtid);
|
2002-07-13 00:29:37 +00:00
|
|
|
else
|
* target.h (struct regcache): Add forward declaration.
(struct target_ops): Add REGCACHE parameter to to_fetch_registers
and to_store_registers target operations.
(target_fetch_registers, target_store_registers): Update.
* regcache.c (regcache_raw_read): Replace register_cached by
regcache_valid_p. Pass regcache to target_fetch_registers.
(regcache_raw_write): Pass regcache to target_store_registers.
* arm-linux-nat.c (store_fpregister, store_fpregs, store_register,
store_regs, store_wmmx_regs): Replace register_cached by
regcache_valid_p.
* bsd-kvm.c (bsd_kvm_open, bsd_kvm_proc_cmd): Pass current_regcache
to target_fetch_registers calls.
* corelow.c (core_open): Likewise.
* linux-nat.c (linux_nat_corefile_thread_callback): Likewise.
* proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* win32-nat.c (win32_resume): Likewise.
* ia64-tdep.c (ia64_store_return_value): Pass current_regcache
to target_store_registers call.
* rs6000-tdep.c (rs6000_push_dummy_call): Likewise.
* inferior.h (store_inferior_registers): Update prototype.
(fetch_inferior_registers): Likewise.
* gnu-nat.c (gnu_store_registers, gnu_fetch_registers): Likewise.
* mips-linux-nat.c (super_fetch_registers, super_store_registers):
Update function pointer signatures.
* aix-thread.c (aix_thread_fetch_registers): Add REGCACHE parameter,
use it instead of current_regcache, update calls.
(aix_thread_store_registers): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers): Likewise.
(alphabsd_store_inferior_registers): Likewise.
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Likewise.
(amd64bsd_store_inferior_registers): Likewise.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Likewise.
(amd64_linux_store_inferior_registers): Likewise.
* arm-linux-nat.c (fetch_fpregister, fetch_fpregs, store_fpregister,
store_fpregs, fetch_register, fetch_regs, store_register, store_regs,
fetch_wmmx_regs, store_wmmx_regs): Likewise.
(arm_linux_fetch_inferior_registers): Likewise.
(arm_linux_store_inferior_registers): Likewise.
* armnbsd-nat.c (fetch_register, fetch_regs, fetch_fp_register,
fetch_fp_regs, armnbsd_fetch_registers): Likewise.
(store_register, store_regs, store_fp_register, store_fp_regs,
armnbsd_store_registers): Likewise.
* bsd-kvm.c (bsd_kvm_fetch_pcb, bsd_kvm_fetch_registers): Likewise.
* bsd-uthread.c (bsd_uthread_fetch_registers): Likewise.
(bsd_uthread_store_registers): Likewise.
* corelow.c (get_core_registers): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register,
go32_store_registers): Likewise.
* hppabsd-nat.c (hppabsd_fetch_registers): Likewise.
(hppabsd_store_registers): Likewise.
* hppa-hpux-nat.c (hppa_hpux_fetch_register): Likewise.
(hppa_hpux_fetch_inferior_registers): Likewise.
(hppa_hpux_store_register): Likewise.
(hppa_hpux_store_inferior_registers): Likewise.
* hppa-linux-nat.c (fetch_register, store_register): Likewise.
(hppa_linux_fetch_inferior_registers): Likewise.
(hppa_linux_store_inferior_registers): Likewise.
* hpux-thread.c (hpux_thread_fetch_registers): Likewise.
(hpux_thread_store_registers): Likewise.
* i386bsd-nat.c (i386bsd_fetch_inferior_registers): Likewise.
(i386bsd_store_inferior_registers): Likewise.
* i386gnu-nat.c (fetch_fpregs, gnu_fetch_registers, store_fpregs,
gnu_store_registers): Likewise.
* i386-linux-nat.c (fetch_register, store_register, fetch_regs,
store_regs, fetch_fpregs, store_fpregs, fetch_fpxregs, store_fpxregs):
Likewise.
(i386_linux_fetch_inferior_registers): Likewise.
(i386_linux_store_inferior_registers): Likewise.
* ia64-linux-nat.c (ia64_linux_fetch_register): Likewise.
(ia64_linux_fetch_registers): Likewise.
(ia64_linux_store_register): Likewise.
(ia64_linux_store_registers): Likewise.
* inf-child.c (inf_child_fetch_inferior_registers): Likewise.
(inf_child_store_inferior_registers): Likewise.
* inf-ptrace.c (inf_ptrace_fetch_register): Likewise.
(inf_ptrace_fetch_registers): Likewise.
(inf_ptrace_store_register): Likewise.
(inf_ptrace_store_registers): Likewise.
* infptrace.c (fetch_register, store_register): Likewise.
(fetch_inferior_registers, store_inferior_registers): Likewise.
* m32r-linux-nat.c (fetch_regs, store_regs): Likewise.
(m32r_linux_fetch_inferior_registers): Likewise.
(m32r_linux_store_inferior_registers): Likewise.
* m68kbsd-nat.c (m68kbsd_fetch_inferior_registers): Likewise.
(m68kbsd_store_inferior_registers): Likewise.
* m68klinux-nat.c (fetch_register, old_fetch_inferior_registers,
store_register, old_store_inferior_registers, fetch_regs, store_regs,
fetch_fpregs, store_fpregs): Likewise.
(m68k_linux_fetch_inferior_registers): Likewise.
(m68k_linux_store_inferior_registers): Likewise.
* m88kbsd-nat.c (m88kbsd_fetch_inferior_registers): Likewise.
(m88kbsd_store_inferior_registers): Likewise.
* mips64obsd-nat.c (mips64obsd_fetch_inferior_registers): Likewise.
(mips64obsd_store_inferior_registers): Likewise.
* mips-linux-nat.c (mips64_linux_regsets_fetch_registers): Likewise.
(mips64_linux_regsets_store_registers): Likewise.
(mips64_linux_fetch_registers): Likewise.
(mips64_linux_store_registers): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers): Likewise.
(mipsnbsd_store_inferior_registers): Likewise.
* monitor.c (monitor_fetch_register, monitor_store_register): Likewise.
(monitor_fetch_registers, monitor_store_registers): Likewise.
* nto-procfs.c (procfs_fetch_registers): Likewise.
(procfs_store_registers): Likewise.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register,
fetch_register, supply_vrregset, fetch_altivec_registers,
fetch_ppc_registers, ppc_linux_fetch_inferior_registers): Likewise.
(store_altivec_register, store_spe_register, store_register,
fill_vrregset, store_altivec_registers, store_ppc_registers,
ppc_linux_store_inferior_registers): Likewise.
* ppcnbsd-nat.c (ppcnbsd_fetch_inferior_registers): Likewise.
(ppcnbsd_store_inferior_registers): Likewise.
* ppcobsd-nat.c (ppcobsd_fetch_registers): Likewise.
(ppcobsd_store_registers): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* remote.c (fetch_register_using_p, process_g_packet,
fetch_registers_using_g, remote_fetch_registers): Likewise.
(store_register_using_P, store_registers_using_G,
remote_store_registers): Likewise.
* remote-m32r-sdi.c (m32r_fetch_registers, m32r_fetch_register,
m32r_store_register, m32r_store_register): Likewise.
* remote-mips.c (mips_fetch_registers, mips_store_registers): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
(gdbsim_store_register): Likewise.
* rs6000-nat.c (fetch_register, store_register): Likewise.
(rs6000_fetch_inferior_registers): Likewise.
(rs6000_store_inferior_registers): Likewise.
* s390-nat.c (fetch_regs, store_regs): Likewise.
(fetch_fpregs, store_fpregs): Likewise.
(s390_linux_fetch_inferior_registers): Likewise.
(s390_linux_store_inferior_registers): Likewise.
* shnbsd-nat.c (shnbsd_fetch_inferior_registers): Likewise.
(shnbsd_store_inferior_registers): Likewise.
* sol-thread.c (sol_thread_fetch_registers): Likewise.
(sol_thread_store_registers): Likewise.
* sparc-nat.c (fetch_inferior_registers): Likewise.
(store_inferior_registers): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
(spu_store_inferior_registers): Likewise.
* target.c (debug_print_register): Likewise.
(debug_to_fetch_registers, debug_to_store_registers): Likewise.
* vaxbsd-nat.c (vaxbsd_fetch_inferior_registers): Likewise.
(vaxbsd_store_inferior_registers): Likewise.
* win32-nat.c (do_win32_fetch_inferior_registers): Likewise.
(win32_fetch_inferior_registers): Likewise.
(win32_store_inferior_registers): Likewise.
2007-05-06 14:34:38 +00:00
|
|
|
store_regs_kernel_thread (regcache, regno, tid);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-01-30 00:23:14 +00:00
|
|
|
/* Implement the to_xfer_partial target_ops method. */
|
2007-04-27 13:22:18 +00:00
|
|
|
|
Return target_xfer_status in to_xfer_partial
This patch does the conversion of to_xfer_partial from
LONGEST (*to_xfer_partial) (struct target_ops *ops,
enum target_object object, const char *annex,
gdb_byte *readbuf, const gdb_byte *writebuf,
ULONGEST offset, ULONGEST len);
to
enum target_xfer_status (*to_xfer_partial) (struct target_ops *ops,
enum target_object object, const char *annex,
gdb_byte *readbuf, const gdb_byte *writebuf,
ULONGEST offset, ULONGEST len, ULONGEST *xfered_len);
It changes to_xfer_partial return the transfer status and the transfered
length by *XFERED_LEN. Generally, the return status has three stats,
- TARGET_XFER_OK,
- TARGET_XFER_EOF,
- TARGET_XFER_E_XXXX,
See the comments to them in 'enum target_xfer_status'. Note that
Pedro suggested not name TARGET_XFER_DONE, as it is confusing,
compared with "TARGET_XFER_OK". We finally name it TARGET_XFER_EOF.
With this change, GDB core can handle unavailable data in a convenient
way.
The rationale behind this change was mentioned here
https://sourceware.org/ml/gdb-patches/2013-10/msg00761.html
Consider an object/value like this:
0 100 150 200 512
DDDDDDDDDDDxxxxxxxxxDDDDDD...DDIIIIIIIIIIII..III
where D is valid data, and xxx is unavailable data, and I is beyond
the end of the object (Invalid). Currently, if we start the
xfer at 0, requesting, say 512 bytes, we'll first get back 100 bytes.
The xfer machinery then retries fetching [100,512), and gets back
TARGET_XFER_E_UNAVAILABLE. That's sufficient when you're either
interested in either having the whole of the 512 bytes available,
or erroring out. But, in this scenario, we're interested in
the data at [150,512). The problem is that the last
TARGET_XFER_E_UNAVAILABLE gives us no indication where to
start the read next. We'd need something like:
get me [0,512) >>>
<<< here's [0,100), *xfered_len is 100, returns TARGET_XFER_OK
get me [100,512) >>> (**1)
<<< [100,150) is unavailable, *xfered_len is 50, return TARGET_XFER_E_UNAVAILABLE.
get me [150,512) >>>
<<< here's [150,200), *xfered_len is 50, return TARGET_XFER_OK.
get me [200,512) >>>
<<< no more data, return TARGET_XFER_EOF.
This naturally implies pushing down the decision of whether
to return TARGET_XFER_E_UNAVAILABLE or something else
down to the target. (Which kinds of leads back to tfile
itself reading from RO memory from file (though we could
export a function in exec.c for that that tfile delegates to,
instead of re-adding the old code).
Beside this change, we also add a macro TARGET_XFER_STATUS_ERROR_P to
check whether a status is an error or not, to stop using "status < 0".
This patch also eliminates the comparison between status and 0.
No target implementations to to_xfer_partial adapts this new
interface. The interface still behaves as before.
gdb:
2014-02-11 Yao Qi <yao@codesourcery.com>
* target.h (enum target_xfer_error): Rename to ...
(enum target_xfer_status): ... it. New. All users updated.
(enum target_xfer_status) <TARGET_XFER_OK>, <TARGET_XFER_EOF>:
New.
(TARGET_XFER_STATUS_ERROR_P): New macro.
(target_xfer_error_to_string): Remove declaration.
(target_xfer_status_to_string): Declare.
(target_xfer_partial_ftype): Adjust it.
(struct target_ops) <to_xfer_partial>: Return
target_xfer_status. Add argument xfered_len. Update
comments.
* target.c (target_xfer_error_to_string): Rename to ...
(target_xfer_status_to_string): ... it. New. All callers
updated.
(target_read_live_memory): Likewise. Call target_xfer_partial
instead of target_read.
(memory_xfer_live_readonly_partial): Return
target_xfer_status. Add argument xfered_len.
(raw_memory_xfer_partial): Likewise.
(memory_xfer_partial_1): Likewise.
(memory_xfer_partial): Likewise.
(target_xfer_partial): Likewise. Check *XFERED_LEN is set
properly. Update debug message.
(default_xfer_partial, current_xfer_partial): Likewise.
(target_write_partial): Likewise.
(target_read_partial): Likewise. All callers updated.
(read_whatever_is_readable): Likewise.
(target_write_with_progress): Likewise.
(target_read_alloc_1): Likewise.
* aix-thread.c (aix_thread_xfer_partial): Likewise.
* auxv.c (procfs_xfer_auxv): Likewise.
(ld_so_xfer_auxv, memory_xfer_auxv): Likewise.
* bfd-target.c (target_bfd_xfer_partial): Likewise.
* bsd-kvm.c (bsd_kvm_xfer_partial): Likewise.
* bsd-uthread.c (bsd_uthread_xfer_partia): Likewise.
* corefile.c (read_memory): Adjust.
* corelow.c (core_xfer_partial): Likewise.
* ctf.c (ctf_xfer_partial): Likewise.
* darwin-nat.c (darwin_read_dyld_info): Likewise. All callers
updated.
(darwin_xfer_partial): Likewise.
* exec.c (section_table_xfer_memory_partial): Likewise. All
callers updated.
(exec_xfer_partial): Likewise.
* exec.h (section_table_xfer_memory_partial): Update
declaration.
* gnu-nat.c (gnu_xfer_memory): Likewise. Assert 'res' is not
negative.
(gnu_xfer_partial): Likewise.
* ia64-hpux-nat.c (ia64_hpux_xfer_memory_no_bs): Likewise.
(ia64_hpux_xfer_memory, ia64_hpux_xfer_uregs): Likewise.
(ia64_hpux_xfer_solib_got): Likewise.
* inf-ptrace.c (inf_ptrace_xfer_partial): Likewise. Change
type of 'partial_len' to ULONGEST.
* inf-ttrace.c (inf_ttrace_xfer_partial): Likewise.
* linux-nat.c (linux_xfer_siginfo ): Likewise.
(linux_nat_xfer_partial): Likewise.
(linux_proc_xfer_partial, linux_xfer_partial): Likewise.
(linux_proc_xfer_spu, linux_nat_xfer_osdata): Likewise.
* monitor.c (monitor_xfer_memory): Likewise.
(monitor_xfer_partial): Likewise.
* procfs.c (procfs_xfer_partial): Likewise.
* record-btrace.c (record_btrace_xfer_partial): Likewise.
* record-full.c (record_full_xfer_partial): Likewise.
(record_full_core_xfer_partial): Likewise.
* remote-sim.c (gdbsim_xfer_memory): Likewise.
(gdbsim_xfer_partial): Likewise.
* remote.c (remote_write_bytes_aux): Likewise. All callers
updated.
(remote_write_bytes, remote_read_bytes): Likewise. All
callers updated.
(remote_flash_erase): Likewise. All callers updated.
(remote_write_qxfer): Likewise. All callers updated.
(remote_read_qxfer): Likewise. All callers updated.
(remote_xfer_partial): Likewise.
* rs6000-nat.c (rs6000_xfer_partial): Likewise.
(rs6000_xfer_shared_libraries): Likewise.
* sol-thread.c (sol_thread_xfer_partial): Likewise.
(sol_thread_xfer_partial): Likewise.
* sparc-nat.c (sparc_xfer_wcookie): Likewise.
(sparc_xfer_partial): Likewise.
* spu-linux-nat.c (spu_proc_xfer_spu): Likewise. All callers
updated.
(spu_xfer_partial): Likewise.
* spu-multiarch.c (spu_xfer_partial): Likewise.
* tracepoint.c (tfile_xfer_partial): Likewise.
* windows-nat.c (windows_xfer_memory): Likewise.
(windows_xfer_shared_libraries): Likewise.
(windows_xfer_partial): Likewise.
* valprint.c: Replace 'target_xfer_error' with
'target_xfer_status' in comments.
2014-01-27 12:35:33 +00:00
|
|
|
static enum target_xfer_status
|
2007-04-27 13:22:18 +00:00
|
|
|
aix_thread_xfer_partial (struct target_ops *ops, enum target_object object,
|
|
|
|
const char *annex, gdb_byte *readbuf,
|
2011-01-07 19:36:19 +00:00
|
|
|
const gdb_byte *writebuf,
|
Return target_xfer_status in to_xfer_partial
This patch does the conversion of to_xfer_partial from
LONGEST (*to_xfer_partial) (struct target_ops *ops,
enum target_object object, const char *annex,
gdb_byte *readbuf, const gdb_byte *writebuf,
ULONGEST offset, ULONGEST len);
to
enum target_xfer_status (*to_xfer_partial) (struct target_ops *ops,
enum target_object object, const char *annex,
gdb_byte *readbuf, const gdb_byte *writebuf,
ULONGEST offset, ULONGEST len, ULONGEST *xfered_len);
It changes to_xfer_partial return the transfer status and the transfered
length by *XFERED_LEN. Generally, the return status has three stats,
- TARGET_XFER_OK,
- TARGET_XFER_EOF,
- TARGET_XFER_E_XXXX,
See the comments to them in 'enum target_xfer_status'. Note that
Pedro suggested not name TARGET_XFER_DONE, as it is confusing,
compared with "TARGET_XFER_OK". We finally name it TARGET_XFER_EOF.
With this change, GDB core can handle unavailable data in a convenient
way.
The rationale behind this change was mentioned here
https://sourceware.org/ml/gdb-patches/2013-10/msg00761.html
Consider an object/value like this:
0 100 150 200 512
DDDDDDDDDDDxxxxxxxxxDDDDDD...DDIIIIIIIIIIII..III
where D is valid data, and xxx is unavailable data, and I is beyond
the end of the object (Invalid). Currently, if we start the
xfer at 0, requesting, say 512 bytes, we'll first get back 100 bytes.
The xfer machinery then retries fetching [100,512), and gets back
TARGET_XFER_E_UNAVAILABLE. That's sufficient when you're either
interested in either having the whole of the 512 bytes available,
or erroring out. But, in this scenario, we're interested in
the data at [150,512). The problem is that the last
TARGET_XFER_E_UNAVAILABLE gives us no indication where to
start the read next. We'd need something like:
get me [0,512) >>>
<<< here's [0,100), *xfered_len is 100, returns TARGET_XFER_OK
get me [100,512) >>> (**1)
<<< [100,150) is unavailable, *xfered_len is 50, return TARGET_XFER_E_UNAVAILABLE.
get me [150,512) >>>
<<< here's [150,200), *xfered_len is 50, return TARGET_XFER_OK.
get me [200,512) >>>
<<< no more data, return TARGET_XFER_EOF.
This naturally implies pushing down the decision of whether
to return TARGET_XFER_E_UNAVAILABLE or something else
down to the target. (Which kinds of leads back to tfile
itself reading from RO memory from file (though we could
export a function in exec.c for that that tfile delegates to,
instead of re-adding the old code).
Beside this change, we also add a macro TARGET_XFER_STATUS_ERROR_P to
check whether a status is an error or not, to stop using "status < 0".
This patch also eliminates the comparison between status and 0.
No target implementations to to_xfer_partial adapts this new
interface. The interface still behaves as before.
gdb:
2014-02-11 Yao Qi <yao@codesourcery.com>
* target.h (enum target_xfer_error): Rename to ...
(enum target_xfer_status): ... it. New. All users updated.
(enum target_xfer_status) <TARGET_XFER_OK>, <TARGET_XFER_EOF>:
New.
(TARGET_XFER_STATUS_ERROR_P): New macro.
(target_xfer_error_to_string): Remove declaration.
(target_xfer_status_to_string): Declare.
(target_xfer_partial_ftype): Adjust it.
(struct target_ops) <to_xfer_partial>: Return
target_xfer_status. Add argument xfered_len. Update
comments.
* target.c (target_xfer_error_to_string): Rename to ...
(target_xfer_status_to_string): ... it. New. All callers
updated.
(target_read_live_memory): Likewise. Call target_xfer_partial
instead of target_read.
(memory_xfer_live_readonly_partial): Return
target_xfer_status. Add argument xfered_len.
(raw_memory_xfer_partial): Likewise.
(memory_xfer_partial_1): Likewise.
(memory_xfer_partial): Likewise.
(target_xfer_partial): Likewise. Check *XFERED_LEN is set
properly. Update debug message.
(default_xfer_partial, current_xfer_partial): Likewise.
(target_write_partial): Likewise.
(target_read_partial): Likewise. All callers updated.
(read_whatever_is_readable): Likewise.
(target_write_with_progress): Likewise.
(target_read_alloc_1): Likewise.
* aix-thread.c (aix_thread_xfer_partial): Likewise.
* auxv.c (procfs_xfer_auxv): Likewise.
(ld_so_xfer_auxv, memory_xfer_auxv): Likewise.
* bfd-target.c (target_bfd_xfer_partial): Likewise.
* bsd-kvm.c (bsd_kvm_xfer_partial): Likewise.
* bsd-uthread.c (bsd_uthread_xfer_partia): Likewise.
* corefile.c (read_memory): Adjust.
* corelow.c (core_xfer_partial): Likewise.
* ctf.c (ctf_xfer_partial): Likewise.
* darwin-nat.c (darwin_read_dyld_info): Likewise. All callers
updated.
(darwin_xfer_partial): Likewise.
* exec.c (section_table_xfer_memory_partial): Likewise. All
callers updated.
(exec_xfer_partial): Likewise.
* exec.h (section_table_xfer_memory_partial): Update
declaration.
* gnu-nat.c (gnu_xfer_memory): Likewise. Assert 'res' is not
negative.
(gnu_xfer_partial): Likewise.
* ia64-hpux-nat.c (ia64_hpux_xfer_memory_no_bs): Likewise.
(ia64_hpux_xfer_memory, ia64_hpux_xfer_uregs): Likewise.
(ia64_hpux_xfer_solib_got): Likewise.
* inf-ptrace.c (inf_ptrace_xfer_partial): Likewise. Change
type of 'partial_len' to ULONGEST.
* inf-ttrace.c (inf_ttrace_xfer_partial): Likewise.
* linux-nat.c (linux_xfer_siginfo ): Likewise.
(linux_nat_xfer_partial): Likewise.
(linux_proc_xfer_partial, linux_xfer_partial): Likewise.
(linux_proc_xfer_spu, linux_nat_xfer_osdata): Likewise.
* monitor.c (monitor_xfer_memory): Likewise.
(monitor_xfer_partial): Likewise.
* procfs.c (procfs_xfer_partial): Likewise.
* record-btrace.c (record_btrace_xfer_partial): Likewise.
* record-full.c (record_full_xfer_partial): Likewise.
(record_full_core_xfer_partial): Likewise.
* remote-sim.c (gdbsim_xfer_memory): Likewise.
(gdbsim_xfer_partial): Likewise.
* remote.c (remote_write_bytes_aux): Likewise. All callers
updated.
(remote_write_bytes, remote_read_bytes): Likewise. All
callers updated.
(remote_flash_erase): Likewise. All callers updated.
(remote_write_qxfer): Likewise. All callers updated.
(remote_read_qxfer): Likewise. All callers updated.
(remote_xfer_partial): Likewise.
* rs6000-nat.c (rs6000_xfer_partial): Likewise.
(rs6000_xfer_shared_libraries): Likewise.
* sol-thread.c (sol_thread_xfer_partial): Likewise.
(sol_thread_xfer_partial): Likewise.
* sparc-nat.c (sparc_xfer_wcookie): Likewise.
(sparc_xfer_partial): Likewise.
* spu-linux-nat.c (spu_proc_xfer_spu): Likewise. All callers
updated.
(spu_xfer_partial): Likewise.
* spu-multiarch.c (spu_xfer_partial): Likewise.
* tracepoint.c (tfile_xfer_partial): Likewise.
* windows-nat.c (windows_xfer_memory): Likewise.
(windows_xfer_shared_libraries): Likewise.
(windows_xfer_partial): Likewise.
* valprint.c: Replace 'target_xfer_error' with
'target_xfer_status' in comments.
2014-01-27 12:35:33 +00:00
|
|
|
ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2007-04-27 13:22:18 +00:00
|
|
|
struct cleanup *old_chain = save_inferior_ptid ();
|
Return target_xfer_status in to_xfer_partial
This patch does the conversion of to_xfer_partial from
LONGEST (*to_xfer_partial) (struct target_ops *ops,
enum target_object object, const char *annex,
gdb_byte *readbuf, const gdb_byte *writebuf,
ULONGEST offset, ULONGEST len);
to
enum target_xfer_status (*to_xfer_partial) (struct target_ops *ops,
enum target_object object, const char *annex,
gdb_byte *readbuf, const gdb_byte *writebuf,
ULONGEST offset, ULONGEST len, ULONGEST *xfered_len);
It changes to_xfer_partial return the transfer status and the transfered
length by *XFERED_LEN. Generally, the return status has three stats,
- TARGET_XFER_OK,
- TARGET_XFER_EOF,
- TARGET_XFER_E_XXXX,
See the comments to them in 'enum target_xfer_status'. Note that
Pedro suggested not name TARGET_XFER_DONE, as it is confusing,
compared with "TARGET_XFER_OK". We finally name it TARGET_XFER_EOF.
With this change, GDB core can handle unavailable data in a convenient
way.
The rationale behind this change was mentioned here
https://sourceware.org/ml/gdb-patches/2013-10/msg00761.html
Consider an object/value like this:
0 100 150 200 512
DDDDDDDDDDDxxxxxxxxxDDDDDD...DDIIIIIIIIIIII..III
where D is valid data, and xxx is unavailable data, and I is beyond
the end of the object (Invalid). Currently, if we start the
xfer at 0, requesting, say 512 bytes, we'll first get back 100 bytes.
The xfer machinery then retries fetching [100,512), and gets back
TARGET_XFER_E_UNAVAILABLE. That's sufficient when you're either
interested in either having the whole of the 512 bytes available,
or erroring out. But, in this scenario, we're interested in
the data at [150,512). The problem is that the last
TARGET_XFER_E_UNAVAILABLE gives us no indication where to
start the read next. We'd need something like:
get me [0,512) >>>
<<< here's [0,100), *xfered_len is 100, returns TARGET_XFER_OK
get me [100,512) >>> (**1)
<<< [100,150) is unavailable, *xfered_len is 50, return TARGET_XFER_E_UNAVAILABLE.
get me [150,512) >>>
<<< here's [150,200), *xfered_len is 50, return TARGET_XFER_OK.
get me [200,512) >>>
<<< no more data, return TARGET_XFER_EOF.
This naturally implies pushing down the decision of whether
to return TARGET_XFER_E_UNAVAILABLE or something else
down to the target. (Which kinds of leads back to tfile
itself reading from RO memory from file (though we could
export a function in exec.c for that that tfile delegates to,
instead of re-adding the old code).
Beside this change, we also add a macro TARGET_XFER_STATUS_ERROR_P to
check whether a status is an error or not, to stop using "status < 0".
This patch also eliminates the comparison between status and 0.
No target implementations to to_xfer_partial adapts this new
interface. The interface still behaves as before.
gdb:
2014-02-11 Yao Qi <yao@codesourcery.com>
* target.h (enum target_xfer_error): Rename to ...
(enum target_xfer_status): ... it. New. All users updated.
(enum target_xfer_status) <TARGET_XFER_OK>, <TARGET_XFER_EOF>:
New.
(TARGET_XFER_STATUS_ERROR_P): New macro.
(target_xfer_error_to_string): Remove declaration.
(target_xfer_status_to_string): Declare.
(target_xfer_partial_ftype): Adjust it.
(struct target_ops) <to_xfer_partial>: Return
target_xfer_status. Add argument xfered_len. Update
comments.
* target.c (target_xfer_error_to_string): Rename to ...
(target_xfer_status_to_string): ... it. New. All callers
updated.
(target_read_live_memory): Likewise. Call target_xfer_partial
instead of target_read.
(memory_xfer_live_readonly_partial): Return
target_xfer_status. Add argument xfered_len.
(raw_memory_xfer_partial): Likewise.
(memory_xfer_partial_1): Likewise.
(memory_xfer_partial): Likewise.
(target_xfer_partial): Likewise. Check *XFERED_LEN is set
properly. Update debug message.
(default_xfer_partial, current_xfer_partial): Likewise.
(target_write_partial): Likewise.
(target_read_partial): Likewise. All callers updated.
(read_whatever_is_readable): Likewise.
(target_write_with_progress): Likewise.
(target_read_alloc_1): Likewise.
* aix-thread.c (aix_thread_xfer_partial): Likewise.
* auxv.c (procfs_xfer_auxv): Likewise.
(ld_so_xfer_auxv, memory_xfer_auxv): Likewise.
* bfd-target.c (target_bfd_xfer_partial): Likewise.
* bsd-kvm.c (bsd_kvm_xfer_partial): Likewise.
* bsd-uthread.c (bsd_uthread_xfer_partia): Likewise.
* corefile.c (read_memory): Adjust.
* corelow.c (core_xfer_partial): Likewise.
* ctf.c (ctf_xfer_partial): Likewise.
* darwin-nat.c (darwin_read_dyld_info): Likewise. All callers
updated.
(darwin_xfer_partial): Likewise.
* exec.c (section_table_xfer_memory_partial): Likewise. All
callers updated.
(exec_xfer_partial): Likewise.
* exec.h (section_table_xfer_memory_partial): Update
declaration.
* gnu-nat.c (gnu_xfer_memory): Likewise. Assert 'res' is not
negative.
(gnu_xfer_partial): Likewise.
* ia64-hpux-nat.c (ia64_hpux_xfer_memory_no_bs): Likewise.
(ia64_hpux_xfer_memory, ia64_hpux_xfer_uregs): Likewise.
(ia64_hpux_xfer_solib_got): Likewise.
* inf-ptrace.c (inf_ptrace_xfer_partial): Likewise. Change
type of 'partial_len' to ULONGEST.
* inf-ttrace.c (inf_ttrace_xfer_partial): Likewise.
* linux-nat.c (linux_xfer_siginfo ): Likewise.
(linux_nat_xfer_partial): Likewise.
(linux_proc_xfer_partial, linux_xfer_partial): Likewise.
(linux_proc_xfer_spu, linux_nat_xfer_osdata): Likewise.
* monitor.c (monitor_xfer_memory): Likewise.
(monitor_xfer_partial): Likewise.
* procfs.c (procfs_xfer_partial): Likewise.
* record-btrace.c (record_btrace_xfer_partial): Likewise.
* record-full.c (record_full_xfer_partial): Likewise.
(record_full_core_xfer_partial): Likewise.
* remote-sim.c (gdbsim_xfer_memory): Likewise.
(gdbsim_xfer_partial): Likewise.
* remote.c (remote_write_bytes_aux): Likewise. All callers
updated.
(remote_write_bytes, remote_read_bytes): Likewise. All
callers updated.
(remote_flash_erase): Likewise. All callers updated.
(remote_write_qxfer): Likewise. All callers updated.
(remote_read_qxfer): Likewise. All callers updated.
(remote_xfer_partial): Likewise.
* rs6000-nat.c (rs6000_xfer_partial): Likewise.
(rs6000_xfer_shared_libraries): Likewise.
* sol-thread.c (sol_thread_xfer_partial): Likewise.
(sol_thread_xfer_partial): Likewise.
* sparc-nat.c (sparc_xfer_wcookie): Likewise.
(sparc_xfer_partial): Likewise.
* spu-linux-nat.c (spu_proc_xfer_spu): Likewise. All callers
updated.
(spu_xfer_partial): Likewise.
* spu-multiarch.c (spu_xfer_partial): Likewise.
* tracepoint.c (tfile_xfer_partial): Likewise.
* windows-nat.c (windows_xfer_memory): Likewise.
(windows_xfer_shared_libraries): Likewise.
(windows_xfer_partial): Likewise.
* valprint.c: Replace 'target_xfer_error' with
'target_xfer_status' in comments.
2014-01-27 12:35:33 +00:00
|
|
|
enum target_xfer_status xfer;
|
2009-03-15 19:38:42 +00:00
|
|
|
struct target_ops *beneath = find_target_beneath (ops);
|
2002-07-15 23:33:09 +00:00
|
|
|
|
2013-09-30 11:50:12 +00:00
|
|
|
inferior_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
|
Return target_xfer_status in to_xfer_partial
This patch does the conversion of to_xfer_partial from
LONGEST (*to_xfer_partial) (struct target_ops *ops,
enum target_object object, const char *annex,
gdb_byte *readbuf, const gdb_byte *writebuf,
ULONGEST offset, ULONGEST len);
to
enum target_xfer_status (*to_xfer_partial) (struct target_ops *ops,
enum target_object object, const char *annex,
gdb_byte *readbuf, const gdb_byte *writebuf,
ULONGEST offset, ULONGEST len, ULONGEST *xfered_len);
It changes to_xfer_partial return the transfer status and the transfered
length by *XFERED_LEN. Generally, the return status has three stats,
- TARGET_XFER_OK,
- TARGET_XFER_EOF,
- TARGET_XFER_E_XXXX,
See the comments to them in 'enum target_xfer_status'. Note that
Pedro suggested not name TARGET_XFER_DONE, as it is confusing,
compared with "TARGET_XFER_OK". We finally name it TARGET_XFER_EOF.
With this change, GDB core can handle unavailable data in a convenient
way.
The rationale behind this change was mentioned here
https://sourceware.org/ml/gdb-patches/2013-10/msg00761.html
Consider an object/value like this:
0 100 150 200 512
DDDDDDDDDDDxxxxxxxxxDDDDDD...DDIIIIIIIIIIII..III
where D is valid data, and xxx is unavailable data, and I is beyond
the end of the object (Invalid). Currently, if we start the
xfer at 0, requesting, say 512 bytes, we'll first get back 100 bytes.
The xfer machinery then retries fetching [100,512), and gets back
TARGET_XFER_E_UNAVAILABLE. That's sufficient when you're either
interested in either having the whole of the 512 bytes available,
or erroring out. But, in this scenario, we're interested in
the data at [150,512). The problem is that the last
TARGET_XFER_E_UNAVAILABLE gives us no indication where to
start the read next. We'd need something like:
get me [0,512) >>>
<<< here's [0,100), *xfered_len is 100, returns TARGET_XFER_OK
get me [100,512) >>> (**1)
<<< [100,150) is unavailable, *xfered_len is 50, return TARGET_XFER_E_UNAVAILABLE.
get me [150,512) >>>
<<< here's [150,200), *xfered_len is 50, return TARGET_XFER_OK.
get me [200,512) >>>
<<< no more data, return TARGET_XFER_EOF.
This naturally implies pushing down the decision of whether
to return TARGET_XFER_E_UNAVAILABLE or something else
down to the target. (Which kinds of leads back to tfile
itself reading from RO memory from file (though we could
export a function in exec.c for that that tfile delegates to,
instead of re-adding the old code).
Beside this change, we also add a macro TARGET_XFER_STATUS_ERROR_P to
check whether a status is an error or not, to stop using "status < 0".
This patch also eliminates the comparison between status and 0.
No target implementations to to_xfer_partial adapts this new
interface. The interface still behaves as before.
gdb:
2014-02-11 Yao Qi <yao@codesourcery.com>
* target.h (enum target_xfer_error): Rename to ...
(enum target_xfer_status): ... it. New. All users updated.
(enum target_xfer_status) <TARGET_XFER_OK>, <TARGET_XFER_EOF>:
New.
(TARGET_XFER_STATUS_ERROR_P): New macro.
(target_xfer_error_to_string): Remove declaration.
(target_xfer_status_to_string): Declare.
(target_xfer_partial_ftype): Adjust it.
(struct target_ops) <to_xfer_partial>: Return
target_xfer_status. Add argument xfered_len. Update
comments.
* target.c (target_xfer_error_to_string): Rename to ...
(target_xfer_status_to_string): ... it. New. All callers
updated.
(target_read_live_memory): Likewise. Call target_xfer_partial
instead of target_read.
(memory_xfer_live_readonly_partial): Return
target_xfer_status. Add argument xfered_len.
(raw_memory_xfer_partial): Likewise.
(memory_xfer_partial_1): Likewise.
(memory_xfer_partial): Likewise.
(target_xfer_partial): Likewise. Check *XFERED_LEN is set
properly. Update debug message.
(default_xfer_partial, current_xfer_partial): Likewise.
(target_write_partial): Likewise.
(target_read_partial): Likewise. All callers updated.
(read_whatever_is_readable): Likewise.
(target_write_with_progress): Likewise.
(target_read_alloc_1): Likewise.
* aix-thread.c (aix_thread_xfer_partial): Likewise.
* auxv.c (procfs_xfer_auxv): Likewise.
(ld_so_xfer_auxv, memory_xfer_auxv): Likewise.
* bfd-target.c (target_bfd_xfer_partial): Likewise.
* bsd-kvm.c (bsd_kvm_xfer_partial): Likewise.
* bsd-uthread.c (bsd_uthread_xfer_partia): Likewise.
* corefile.c (read_memory): Adjust.
* corelow.c (core_xfer_partial): Likewise.
* ctf.c (ctf_xfer_partial): Likewise.
* darwin-nat.c (darwin_read_dyld_info): Likewise. All callers
updated.
(darwin_xfer_partial): Likewise.
* exec.c (section_table_xfer_memory_partial): Likewise. All
callers updated.
(exec_xfer_partial): Likewise.
* exec.h (section_table_xfer_memory_partial): Update
declaration.
* gnu-nat.c (gnu_xfer_memory): Likewise. Assert 'res' is not
negative.
(gnu_xfer_partial): Likewise.
* ia64-hpux-nat.c (ia64_hpux_xfer_memory_no_bs): Likewise.
(ia64_hpux_xfer_memory, ia64_hpux_xfer_uregs): Likewise.
(ia64_hpux_xfer_solib_got): Likewise.
* inf-ptrace.c (inf_ptrace_xfer_partial): Likewise. Change
type of 'partial_len' to ULONGEST.
* inf-ttrace.c (inf_ttrace_xfer_partial): Likewise.
* linux-nat.c (linux_xfer_siginfo ): Likewise.
(linux_nat_xfer_partial): Likewise.
(linux_proc_xfer_partial, linux_xfer_partial): Likewise.
(linux_proc_xfer_spu, linux_nat_xfer_osdata): Likewise.
* monitor.c (monitor_xfer_memory): Likewise.
(monitor_xfer_partial): Likewise.
* procfs.c (procfs_xfer_partial): Likewise.
* record-btrace.c (record_btrace_xfer_partial): Likewise.
* record-full.c (record_full_xfer_partial): Likewise.
(record_full_core_xfer_partial): Likewise.
* remote-sim.c (gdbsim_xfer_memory): Likewise.
(gdbsim_xfer_partial): Likewise.
* remote.c (remote_write_bytes_aux): Likewise. All callers
updated.
(remote_write_bytes, remote_read_bytes): Likewise. All
callers updated.
(remote_flash_erase): Likewise. All callers updated.
(remote_write_qxfer): Likewise. All callers updated.
(remote_read_qxfer): Likewise. All callers updated.
(remote_xfer_partial): Likewise.
* rs6000-nat.c (rs6000_xfer_partial): Likewise.
(rs6000_xfer_shared_libraries): Likewise.
* sol-thread.c (sol_thread_xfer_partial): Likewise.
(sol_thread_xfer_partial): Likewise.
* sparc-nat.c (sparc_xfer_wcookie): Likewise.
(sparc_xfer_partial): Likewise.
* spu-linux-nat.c (spu_proc_xfer_spu): Likewise. All callers
updated.
(spu_xfer_partial): Likewise.
* spu-multiarch.c (spu_xfer_partial): Likewise.
* tracepoint.c (tfile_xfer_partial): Likewise.
* windows-nat.c (windows_xfer_memory): Likewise.
(windows_xfer_shared_libraries): Likewise.
(windows_xfer_partial): Likewise.
* valprint.c: Replace 'target_xfer_error' with
'target_xfer_status' in comments.
2014-01-27 12:35:33 +00:00
|
|
|
xfer = beneath->to_xfer_partial (beneath, object, annex, readbuf,
|
|
|
|
writebuf, offset, len, xfered_len);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2007-04-27 13:22:18 +00:00
|
|
|
do_cleanups (old_chain);
|
|
|
|
return xfer;
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Clean up after the inferior exits. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
Kill pthread_ops_hack
* target.h (struct target_ops): Make to_attach, to_detach,
to_create_inferior and to_mourn_inferior accept a pointer
to struct target_ops.
(target_attach, target_create_inferior, target_create_inferior):
Convert from macros to function. Find the right target to
invoke a method of.
(find_default_attach, find_default_create_inferior): New parameter
ops.
* corefile.c (core_file_command): Pass target to to_detach.
* corelow.c (core_detach): Add 'ops' parameter.
* fork-child.c (fork_inferior): Return the pid. Allow
init_trace_fun to be NULL.
* inf-ptrace (ptrace_ops_hack): Remove.
(inf_ptrace_him): Remove, moving all logic into....
(inf_ptrace_create_inferior): ... here. Push the target
passed as parameter.
(inf_ptrace_mourn_inferior, inf_ptrace_attach, inf_ptrace_detach):
Push/pop target passed as parameter, no ptrace_ops_hack.
(inf_ptrace_target): Don't remember result.
* inferior.h (fork_inferior): Adjust prototype.
* linux-nat.c (linux_nat_create_inferior, linux_nat_attach)
(linux_nat_detach, linux_nat_mourn_inferior): New parameter ops.
Pass it to linux_ops target.
* linux-thread-db.c (thread_db_detach, thread_db_mourn_inferior):
New parameter ops. Pass it to the target beneath.
* remote.c (remote_mourn, extended_remote_mourn, remote_detach)
(extended_remote_create_inferior): New parameter ops. Pass it
further.
* target.c (debug_to_attach, debug_to_detach)
(debug_to_mourn_inferior): New parameter ops.
(target_create_inferior): New.
(update_current_target): Do not inherit to_attach, to_detach,
to_create_inferiour, to_mourn_inferior. Do not default
to_detach and to_mourn_inferior.
(target_detach): Find the right target to use.
(target_mourn_inferior): New.
(find_default_attach, find_default_create_inferior): New parameter
ops. Pass the found target when calling its method.
(init_dummy_target): Provide fallback definition of to_detach.
(target_attach): New.
(debug_to_attach, debug_to_detach, debug_to_create_inferior)
(debug_to_mourn_inferiour): New parameter ops.
* aix-thread.c: Adjust.
* bsd-uthread.c: Adjust.
* gnu-nat.c: Adjust.
* go32-nat.c: Adjust.
* hpux-thread.c: Adjust.
* inf-ttrace.c: Ajust.
* monitor.c: Adjust.
* nto-procfs.c: Adjust.
* procfs.c: Adjust.
* remote-m32r-sdi.c: Adjust.
* remote-mips.c: Adjust.
* remote-sim.c: Adjust.
* rs6000-nat.c: Adjust.
* sol-thread.c: Adjust.
* win32-nat.c: Adjust.
* dec-thread.c: Adjust.
2008-11-09 11:27:18 +00:00
|
|
|
aix_thread_mourn_inferior (struct target_ops *ops)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2009-03-15 19:38:42 +00:00
|
|
|
struct target_ops *beneath = find_target_beneath (ops);
|
|
|
|
|
2002-07-13 00:29:37 +00:00
|
|
|
pd_deactivate ();
|
2009-03-15 19:38:42 +00:00
|
|
|
beneath->to_mourn_inferior (beneath);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Return whether thread PID is still valid. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static int
|
2009-03-12 17:44:29 +00:00
|
|
|
aix_thread_thread_alive (struct target_ops *ops, ptid_t ptid)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2009-03-15 21:05:41 +00:00
|
|
|
struct target_ops *beneath = find_target_beneath (ops);
|
2009-03-15 19:38:42 +00:00
|
|
|
|
2002-07-13 00:29:37 +00:00
|
|
|
if (!PD_TID (ptid))
|
2009-03-15 19:38:42 +00:00
|
|
|
return beneath->to_thread_alive (beneath, ptid);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* We update the thread list every time the child stops, so all
|
|
|
|
valid threads should be in the thread list. */
|
2002-07-13 00:29:37 +00:00
|
|
|
return in_thread_list (ptid);
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Return a printable representation of composite PID for use in
|
|
|
|
"info threads" output. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static char *
|
* linux-nat.c (linux_nat_wait): Adjust.
(linux_nat_pid_to_str): Adjust. Remove call to thread_db_init.
* linux-nat.h (thread_db_init): Delete declaration.
* linux-thread-db.c (target_beneath): Delete.
(thread_db_init): Delete.
(thread_db_detach): Use find_target_beneath.
(thread_db_wait): Adjust interface. Use find_target_beneath.
(thread_db_mourn_inferior): Use find_target_beneath.
(thread_db_can_async_p, thread_db_is_async_p, thread_db_async)
(thread_db_async_mask): Delete.
(thread_db_pid_to_str): Adjust interface. Use
find_target_beneath.
(thread_db_get_thread_local_address): Adjust interface. Use
find_target_beneath.
(init_thread_db_ops): Delete references to delete functions.
* target.c (update_current_target): Don't inherit or default
to_wait. Don't inherit to_pid_to_str and
to_get_thread_local_address.
(target_translate_tls_address): Look for a pushed target that
implements to_get_thread_local_address, and use it instead of
checking for target_get_thread_local_address_p.
(target_wait, target_pid_to_str): Reimplement as functions.
(dummy_pid_to_str): New.
(init_dummy_target): Register it.
(debug_to_wait): Delete.
* target.h (struct target_ops): Make to_wait, to_pid_to_str and
to_get_thread_local_address accept a pointer to struct target_ops.
(target_wait): Delete macro, and declare as function.
(target_pid_to_str): Likewise.
(target_get_thread_local_address)
(target_get_thread_local_address_p): Delete.
(noprocess): Add NORETURN and ATTR_NORETURN tags.
* inf-ptrace.c (inf_ptrace_wait): Adjust.
(inf_ptrace_pid_to_str): New.
(inf_ptrace_target): Use inf_ptrace_pid_to_str.
* aix-thread.c (aix_thread_wait, aix_thread_pid_to_str): Adjust.
* bsd-kvm.c (bsd_kvm_pid_to_str): Adjust.
* bsd-uthread.c (bsd_uthread_wait, bsd_uthread_pid_to_str):
Adjust.
* corelow.c (core_pid_to_str): Adjust.
* darwin-nat.c (darwin_wait, darwin_pid_to_str): Adjust.
* dec-thread.c (dec_thread_wait, dec_thread_pid_to_str): Adjust.
* gnu-nat.c (gnu_wait, gnu_pid_to_str): Adjust.
* go32-nat.c (go32_wait, go32_pid_to_str): Adjust.
* hpux-thread.c (hpux_thread_wait): Adjust.
* inf-ttrace.c (inf_ttrace_wait, inf_ttrace_pid_to_str): Adjust.
* monitor.c (monitor_wait, monitor_pid_to_str): Adjust.
* nto-procfs.c (procfs_wait, procfs_pid_to_str): Adjust.
* procfs.c (procfs_pid_to_str): Adjust.
* remote-m32r-sdi.c (m32r_wait, m32r_pid_to_str): Adjust.
* remote-mips.c (mips_wait): Adjust.
* remote-sim.c (gdbsim_wait, gdbsim_pid_to_str): Adjust.
* remote.c (remote_wait, remote_pid_to_str)
(remote_get_thread_local_address): Adjust.
* rs6000-nat.c (rs6000_wait): Adjust.
* sol-thread.c (procfs_pid_to_str): Adjust declaration.
(sol_thread_wait, solaris_pid_to_str): Adjust.
* spu-linux-nat.c (spu_child_wait): Adjust.
* windows-nat.c (windows_wait, windows_pid_to_str): Adjust.
2009-02-06 22:21:26 +00:00
|
|
|
aix_thread_pid_to_str (struct target_ops *ops, ptid_t ptid)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
static char *ret = NULL;
|
2009-03-15 21:05:41 +00:00
|
|
|
struct target_ops *beneath = find_target_beneath (ops);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
if (!PD_TID (ptid))
|
2009-03-15 19:38:42 +00:00
|
|
|
return beneath->to_pid_to_str (beneath, ptid);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
/* Free previous return value; a new one will be allocated by
|
2004-06-28 23:59:29 +00:00
|
|
|
xstrprintf(). */
|
2002-07-13 00:29:37 +00:00
|
|
|
xfree (ret);
|
|
|
|
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
ret = xstrprintf (_("Thread %ld"), ptid_get_tid (ptid));
|
2002-07-13 00:29:37 +00:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Return a printable representation of extra information about
|
|
|
|
THREAD, for use in "info threads" output. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static char *
|
2002-07-22 22:11:03 +00:00
|
|
|
aix_thread_extra_thread_info (struct thread_info *thread)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
|
|
|
struct ui_file *buf;
|
|
|
|
int status;
|
|
|
|
pthdb_pthread_t pdtid;
|
|
|
|
pthdb_tid_t tid;
|
|
|
|
pthdb_state_t state;
|
|
|
|
pthdb_suspendstate_t suspendstate;
|
|
|
|
pthdb_detachstate_t detachstate;
|
|
|
|
int cancelpend;
|
|
|
|
static char *ret = NULL;
|
|
|
|
|
|
|
|
if (!PD_TID (thread->ptid))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
buf = mem_fileopen ();
|
|
|
|
|
|
|
|
pdtid = thread->private->pdtid;
|
|
|
|
tid = thread->private->tid;
|
|
|
|
|
|
|
|
if (tid != PTHDB_INVALID_TID)
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
/* i18n: Like "thread-identifier %d, [state] running, suspended" */
|
2007-04-27 13:17:27 +00:00
|
|
|
fprintf_unfiltered (buf, _("tid %d"), (int)tid);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
status = pthdb_pthread_state (pd_session, pdtid, &state);
|
|
|
|
if (status != PTHDB_SUCCESS)
|
|
|
|
state = PST_NOTSUP;
|
|
|
|
fprintf_unfiltered (buf, ", %s", state2str (state));
|
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
status = pthdb_pthread_suspendstate (pd_session, pdtid,
|
|
|
|
&suspendstate);
|
2002-07-13 00:29:37 +00:00
|
|
|
if (status == PTHDB_SUCCESS && suspendstate == PSS_SUSPENDED)
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
/* i18n: Like "Thread-Id %d, [state] running, suspended" */
|
|
|
|
fprintf_unfiltered (buf, _(", suspended"));
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
status = pthdb_pthread_detachstate (pd_session, pdtid,
|
|
|
|
&detachstate);
|
2002-07-13 00:29:37 +00:00
|
|
|
if (status == PTHDB_SUCCESS && detachstate == PDS_DETACHED)
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
/* i18n: Like "Thread-Id %d, [state] running, detached" */
|
|
|
|
fprintf_unfiltered (buf, _(", detached"));
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
pthdb_pthread_cancelpend (pd_session, pdtid, &cancelpend);
|
|
|
|
if (status == PTHDB_SUCCESS && cancelpend)
|
2005-01-05 Baurjan Ismagulov <ibr@ata.cs.hun.edu.tr>
Committed by Andrew Cagney.
* ada-valprint.c, aix-thread.c, alpha-nat.c: I18n markup.
* alphabsd-nat.c, alphanbsd-tdep.c, amd64-linux-nat.c: I18n markup.
* amd64-tdep.c, amd64bsd-nat.c, amd64fbsd-nat.c: I18n markup.
* arch-utils.c, arm-linux-nat.c, arm-tdep.c: I18n markup.
* armnbsd-nat.c, armnbsd-tdep.c, auxv.c, avr-tdep.c: I18n markup.
* aix-thread.c (_initialize_aix_thread): Get rid of the
deprecated_add_show_from_set call.
* alpha-tdep.c (_initialize_alpha_tdep): Ditto.
* arm-tdep.c (_initialize_arm_tdep): Ditto.
* command.h (add_setshow_enum_cmd): Add arguments for returning
new list elements.
* cli/cli-decode.c (add_setshow_enum_cmd): Ditto.
* mips-tdep.c (_initialize_mips_tdep): Modify calls to
add_setshow_enum_cmd.
2005-01-05 15:43:50 +00:00
|
|
|
/* i18n: Like "Thread-Id %d, [state] running, cancel pending" */
|
|
|
|
fprintf_unfiltered (buf, _(", cancel pending"));
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
ui_file_write (buf, "", 1);
|
|
|
|
|
|
|
|
xfree (ret); /* Free old buffer. */
|
|
|
|
|
2009-08-14 00:32:33 +00:00
|
|
|
ret = ui_file_xstrdup (buf, NULL);
|
2002-07-13 00:29:37 +00:00
|
|
|
ui_file_delete (buf);
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2009-03-12 17:44:29 +00:00
|
|
|
static ptid_t
|
|
|
|
aix_thread_get_ada_task_ptid (long lwp, long thread)
|
|
|
|
{
|
|
|
|
return ptid_build (ptid_get_pid (inferior_ptid), 0, thread);
|
|
|
|
}
|
|
|
|
|
2002-07-22 22:11:03 +00:00
|
|
|
/* Initialize target aix_thread_ops. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
|
|
|
static void
|
2002-07-22 22:11:03 +00:00
|
|
|
init_aix_thread_ops (void)
|
2002-07-13 00:29:37 +00:00
|
|
|
{
|
2009-05-21 23:19:50 +00:00
|
|
|
aix_thread_ops.to_shortname = "aix-threads";
|
|
|
|
aix_thread_ops.to_longname = _("AIX pthread support");
|
|
|
|
aix_thread_ops.to_doc = _("AIX pthread support");
|
|
|
|
|
|
|
|
aix_thread_ops.to_attach = aix_thread_attach;
|
|
|
|
aix_thread_ops.to_detach = aix_thread_detach;
|
|
|
|
aix_thread_ops.to_resume = aix_thread_resume;
|
|
|
|
aix_thread_ops.to_wait = aix_thread_wait;
|
|
|
|
aix_thread_ops.to_fetch_registers = aix_thread_fetch_registers;
|
|
|
|
aix_thread_ops.to_store_registers = aix_thread_store_registers;
|
|
|
|
aix_thread_ops.to_xfer_partial = aix_thread_xfer_partial;
|
2002-07-22 22:11:03 +00:00
|
|
|
/* No need for aix_thread_ops.to_create_inferior, because we activate thread
|
2002-07-18 19:26:14 +00:00
|
|
|
debugging when the inferior reaches pd_brk_addr. */
|
2009-05-21 23:19:50 +00:00
|
|
|
aix_thread_ops.to_mourn_inferior = aix_thread_mourn_inferior;
|
|
|
|
aix_thread_ops.to_thread_alive = aix_thread_thread_alive;
|
|
|
|
aix_thread_ops.to_pid_to_str = aix_thread_pid_to_str;
|
|
|
|
aix_thread_ops.to_extra_thread_info = aix_thread_extra_thread_info;
|
|
|
|
aix_thread_ops.to_get_ada_task_ptid = aix_thread_get_ada_task_ptid;
|
|
|
|
aix_thread_ops.to_stratum = thread_stratum;
|
|
|
|
aix_thread_ops.to_magic = OPS_MAGIC;
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Module startup initialization function, automagically called by
|
2002-07-18 19:26:14 +00:00
|
|
|
init.c. */
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2012-03-12 15:57:19 +00:00
|
|
|
void _initialize_aix_thread (void);
|
|
|
|
|
2002-07-13 00:29:37 +00:00
|
|
|
void
|
|
|
|
_initialize_aix_thread (void)
|
|
|
|
{
|
2002-07-22 22:11:03 +00:00
|
|
|
init_aix_thread_ops ();
|
2013-08-05 16:54:27 +00:00
|
|
|
complete_target_initialization (&aix_thread_ops);
|
2002-07-13 00:29:37 +00:00
|
|
|
|
2002-07-18 19:26:14 +00:00
|
|
|
/* Notice when object files get loaded and unloaded. */
|
2007-05-11 19:55:20 +00:00
|
|
|
observer_attach_new_objfile (new_objfile);
|
* aix-thread.c (gdbcmd.h): Include.
(DEBUG, DBG, DBG2, dbg): Eliminate.
(debug_aix_thread): New static global.
(ptrace_check, pdc_symbol_addrs, pdc_read_regs, pdc_write_regs)
(pdc_read_data, pdc_write_data, pdc_alloc, pdc_realloc, pdc_dealloc)
(fetch_regs_lib, store_regs_lib, store_regs_kern): Rewrite
invocations to DBG and DBG2 macros to test against
``debug_aix_thread'' and call fprintf_unfiltered().
(_initialize_aix_thread): Add new command "set debug aix-thread".
2002-07-15 18:55:04 +00:00
|
|
|
|
2006-02-10 19:47:45 +00:00
|
|
|
add_setshow_boolean_cmd ("aix-thread", class_maintenance, &debug_aix_thread,
|
2011-01-07 19:36:19 +00:00
|
|
|
_("Set debugging of AIX thread module."),
|
|
|
|
_("Show debugging of AIX thread module."),
|
|
|
|
_("Enables debugging output (used to debug GDB)."),
|
|
|
|
NULL, NULL,
|
|
|
|
/* FIXME: i18n: Debugging of AIX thread
|
|
|
|
module is \"%d\". */
|
|
|
|
&setdebuglist, &showdebuglist);
|
2002-07-13 00:29:37 +00:00
|
|
|
}
|