2001-07-22 04:16:44 +08:00
|
|
|
|
/* Native-dependent code for FreeBSD/i386.
|
2004-02-22 19:19:15 +08:00
|
|
|
|
|
2017-01-01 14:50:51 +08:00
|
|
|
|
Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
2001-07-22 04:16:44 +08:00
|
|
|
|
|
|
|
|
|
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-24 02:08:50 +08:00
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
2001-07-22 04:16:44 +08: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-24 02:08:50 +08:00
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2001-07-22 04:16:44 +08:00
|
|
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
|
#include "inferior.h"
|
|
|
|
|
#include "regcache.h"
|
2004-09-20 04:49:26 +08:00
|
|
|
|
#include "target.h"
|
2001-07-22 04:16:44 +08:00
|
|
|
|
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
#include <sys/ptrace.h>
|
|
|
|
|
#include <sys/sysctl.h>
|
2015-02-25 22:51:42 +08:00
|
|
|
|
#include <sys/user.h>
|
2001-07-22 04:16:44 +08:00
|
|
|
|
|
2004-09-20 04:49:26 +08:00
|
|
|
|
#include "fbsd-nat.h"
|
2003-08-11 00:46:08 +08:00
|
|
|
|
#include "i386-tdep.h"
|
Rename 32- and 64-bit Intel files from "i386" to "x86"
This commit renames nine files that contain code used by both 32- and
64-bit Intel ports such that their names are prefixed with "x86"
rather than "i386". All types, functions and variables within these
files are likewise renamed such that their names are prefixed with
"x86" rather than "i386". This makes GDB follow the convention used
by gdbserver such that 32-bit Intel code lives in files called
"i386-*", 64-bit Intel code lives in files called "amd64-*", and code
for both 32- and 64-bit Intel lives in files called "x86-*".
This commit only renames OS-independent files. The Linux ports of
both GDB and gdbserver now follow the i386/amd64/x86 convention fully.
Some ports still use the old convention where "i386" in file/function/
type/variable names can mean "32-bit only" or "32- and 64-bit" but I
don't want to touch ports I can't fully test except where absolutely
necessary.
gdb/ChangeLog:
* i386-nat.h: Renamed as...
* x86-nat.h: New file. All type, function and variable name
prefixes changed from "i386_" to "x86_". All references updated.
* i386-nat.c: Renamed as...
* x86-nat.c: New file. All type, function and variable name
prefixes changed from "i386_" to "x86_". All references updated.
* common/i386-xstate.h: Renamed as...
* common/x86-xstate.h: New file. All type, function and variable
name prefixes changed from "i386_" to "x86_". All references
updated.
* nat/i386-cpuid.h: Renamed as...
* nat/x86-cpuid.h: New file. All type, function and variable name
prefixes changed from "i386_" to "x86_". All references updated.
* nat/i386-gcc-cpuid.h: Renamed as...
* nat/x86-gcc-cpuid.h: New file. All type, function and variable
name prefixes changed from "i386_" to "x86_". All references
updated.
* nat/i386-dregs.h: Renamed as...
* nat/x86-dregs.h: New file. All type, function and variable name
prefixes changed from "i386_" to "x86_". All references updated.
* nat/i386-dregs.c: Renamed as...
* nat/x86-dregs.c: New file. All type, function and variable name
prefixes changed from "i386_" to "x86_". All references updated.
gdb/gdbserver/ChangeLog:
* i386-low.h: Renamed as...
* x86-low.h: New file. All type, function and variable name
prefixes changed from "i386_" to "x86_". All references updated.
* i386-low.c: Renamed as...
* x86-low.c: New file. All type, function and variable name
prefixes changed from "i386_" to "x86_". All references updated.
2014-08-19 22:16:11 +08:00
|
|
|
|
#include "x86-nat.h"
|
2017-09-05 10:31:33 +08:00
|
|
|
|
#include "x86-xstate.h"
|
Normalize names of some source files
Most tdep/nat files are named:
<cpu>-<os>-tdep.c
<cpu>-<os>-nat.c
A few files do not respect this scheme. This patch renames them so that
they are consistent with the rest of the files. It builds fine with
--enable-targets=all, but that doesn't test the nat files. I can only
hope that my grep skill is good enough.
gdb/ChangeLog:
* Makefile.in (ALL_64_TARGET_OBS, ALL_TARGET_OBS,
HFILES_NO_SRCDIR, ALLDEPFILES): Rename files.
* alphabsd-nat.c: Rename to ...
* alpha-bsd-nat.c: ... this, adjust include.
* alphabsd-tdep.c: Rename to ...
* alpha-bsd-tdep.c: ... this, adjust include.
* alphabsd-tdep.h: Rename to ...
* alpha-bsd-tdep.h: ... this, adjust include barrier and comment.
* alphafbsd-tdep.c: Rename to ...
* alpha-fbsd-tdep.c: ... this.
* alphanbsd-tdep.c: Rename to ...
* alpha-nbsd-tdep.c: ... this, adjust include.
* alphaobsd-tdep.c: Rename to ...
* alpha-obsd-tdep.c: ... this, adjust include.
* amd64bsd-nat.c: Rename to ...
* amd64-bsd-nat.c: ... this, adjust include.
* amd64fbsd-nat.c: Rename to ...
* amd64-fbsd-nat.c: ... this, adjust include.
* amd64fbsd-tdep.c: Rename to ...
* amd64-fbsd-tdep.c: ... this, adjust include.
* amd64nbsd-nat.c: Rename to ...
* amd64-nbsd-nat.c: ... this.
* amd64nbsd-tdep.c: Rename to ...
* amd64-nbsd-tdep.c: ... this.
* amd64obsd-nat.c: Rename to ...
* amd64-obsd-nat.c: ... this.
* amd64obsd-tdep.c: Rename to ...
* amd64-obsd-tdep.c: ... this.
* amd64-tdep.h: Update comments.
* armbsd-tdep.c: Rename to ...
* arm-bsd-tdep.c: ... this.
* armnbsd-nat.c: Rename to ...
* arm-nbsd-nat.c: ... this.
* armnbsd-tdep.c: Rename to ...
* arm-nbsd-tdep.c: ... this.
* armobsd-tdep.c: Rename to ...
* arm-obsd-tdep.c: ... this.
* arm-tdep.h: Update comments.
* hppabsd-tdep.c: Rename to ...
* hppa-bsd-tdep.c: ... this, adjust include.
* hppabsd-tdep.h: Rename to ...
* hppa-bsd-tdep.h: ... this, adjust include barrier and comment.
* hppanbsd-nat.c: Rename to ...
* hppa-nbsd-nat.c: ... this.
* hppanbsd-tdep.c: Rename to ...
* hppa-nbsd-tdep.c: ... this, adjust include.
* hppaobsd-nat.c: Rename to ...
* hppa-obsd-nat.c: ... this.
* hppaobsd-tdep.c: Rename to ...
* hppa-obsd-tdep.c: ... this, adjust include.
* i386bsd-nat.c: Rename to ...
* i386-bsd-nat.c: ... this, adjust include.
* i386bsd-nat.h: Rename to ...
* i386-bsd-nat.h: ... this, adjust include barrier and comment.
* i386bsd-tdep.c: Rename to ...
* i386-bsd-tdep.c: ... this.
* i386fbsd-nat.c: Rename to ...
* i386-fbsd-nat.c: ... this, adjust include.
* i386fbsd-tdep.c: Rename to ...
* i386-fbsd-tdep.c: ... this, adjust include.
* i386fbsd-tdep.h: Rename to ...
* i386-fbsd-tdep.h: ... this, adjust include barrier and comment.
* i386gnu-nat.c: Rename to ...
* i386-gnu-nat.c: ... this.
* i386gnu-tdep.c: Rename to ...
* i386-gnu-tdep.c: ... this.
* i386nbsd-nat.c: Rename to ...
* i386-nbsd-nat.c: ... this, adjust include.
* i386nbsd-tdep.c: Rename to ...
* i386-nbsd-tdep.c: ... this.
* i386obsd-nat.c: Rename to ...
* i386-obsd-nat.c: ... this, adjust include.
* i386obsd-tdep.c: Rename to ...
* i386-obsd-tdep.c: ... this.
* i386v4-nat.c: Rename to ...
* i386-v4-nat.c: ... this.
* i386-tdep.h: Update comments.
* m68k-tdep.h: Update comments.
* m68kbsd-nat.c: Rename to ...
* m68k-bsd-nat.c: ... this.
* m68kbsd-tdep.c: Rename to ...
* m68k-bsd-tdep.c: ... this.
* m68klinux-nat.c: Rename to ...
* m68k-linux-nat.c: ... this.
* m68klinux-tdep.c: Rename to ...
* m68k-linux-tdep.c: ... this.
* m88kbsd-nat.c: Rename to ...
* m88k-bsd-nat.c: ... this.
* mipsnbsd-nat.c: Rename to ...
* mips-nbsd-nat.c: ... this, adjust include.
* mipsnbsd-tdep.c: Rename to ...
* mips-nbsd-tdep.c: ... this, adjust include.
* mipsnbsd-tdep.h: Rename to ...
* mips-nbsd-tdep.h: ... this, adjust include barrier and comment.
* mips64obsd-nat.c: Rename to ...
* mips64-obsd-nat.c: ... this.
* mips64obsd-tdep.c: Rename to ...
* mips64-obsd-tdep.c: ... this.
* ppcfbsd-nat.c: Rename to ...
* ppc-fbsd-nat.c: ... this, adjust include.
* ppcfbsd-tdep.c: Rename to ...
* ppc-fbsd-tdep.c: ... this, adjust include.
* ppcfbsd-tdep.h: Rename to ...
* ppc-fbsd-tdep.h: ... this, adjust include barrier and comment.
* ppcnbsd-nat.c: Rename to ...
* ppc-nbsd-nat.c: ... this, adjust include.
* ppcnbsd-tdep.c: Rename to ...
* ppc-nbsd-tdep.c: ... this, adjust include.
* ppcnbsd-tdep.h: Rename to ...
* ppc-nbsd-tdep.h: ... this, adjust include barrier and comment.
* ppcobsd-nat.c: Rename to ...
* ppc-obsd-nat.c: ... this, adjust include.
* ppcobsd-tdep.c: Rename to ...
* ppc-obsd-tdep.c: ... this, adjust include.
* ppcobsd-tdep.h: Rename to ...
* ppc-obsd-tdep.h: ... this, adjust include barrier and comment.
* shnbsd-nat.c: Rename to ...
* sh-nbsd-nat.c: ... this.
* shnbsd-tdep.c: Rename to ...
* sh-nbsd-tdep.c: ... this.
* sparcnbsd-nat.c: Rename to ...
* sparc-nbsd-nat.c: ... this.
* sparcnbsd-tdep.c: Rename to ...
* sparc-nbsd-tdep.c: ... this.
* sparcobsd-tdep.c: Rename to ...
* sparc-obsd-tdep.c: ... this.
* sparc64fbsd-nat.c: Rename to ...
* sparc64-fbsd-nat.c: ... this.
* sparc64fbsd-tdep.c: Rename to ...
* sparc64-fbsd-tdep.c: ... this.
* sparc64nbsd-nat.c: Rename to ...
* sparc64-nbsd-nat.c: ... this.
* sparc64nbsd-tdep.c: Rename to ...
* sparc64-nbsd-tdep.c: ... this.
* sparc64obsd-nat.c: Rename to ...
* sparc64-obsd-nat.c: ... this.
* sparc64obsd-tdep.c: Rename to ...
* sparc64-obsd-tdep.c: ... this.
* sparc64-tdep.h: Update comments.
* vaxbsd-nat.c: Rename to ...
* vax-bsd-nat.c: ... this.
* vaxnbsd-tdep.c: Rename to ...
* vax-nbsd-tdep.c: ... this.
* vaxobsd-tdep.c: Rename to ...
* vax-obsd-tdep.c: ... this.
* x86bsd-nat.h: Rename to ...
* x86-bsd-nat.h: ... this, adjust include barrier and comment.
* x86bsd-nat.c: Rename to ...
* x86-bsd-nat.c: ... this, adjust include.
* configure.tgt: Update renamed files.
* config/alpha/fbsd.mh: Update renamed files.
* config/alpha/nbsd.mh: Update renamed files.
* config/arm/nbsdelf.mh: Update renamed files.
* config/djgpp/fnchange.lst: Update renamed files.
* config/i386/fbsd.mh: Update renamed files.
* config/i386/fbsd64.mh: Update renamed files.
* config/i386/i386gnu.mh: Update renamed files.
* config/i386/i386sol2.mh: Update renamed files.
* config/i386/nbsd64.mh: Update renamed files.
* config/i386/nbsdelf.mh: Update renamed files.
* config/i386/obsd.mh: Update renamed files.
* config/i386/obsd64.mh: Update renamed files.
* config/i386/sol2-64.mh: Update renamed files.
* config/m68k/linux.mh: Update renamed files.
* config/m68k/nbsdelf.mh: Update renamed files.
* config/m68k/obsd.mh: Update renamed files.
* config/m88k/obsd.mh: Update renamed files.
* config/mips/nbsd.mh: Update renamed files.
* config/mips/obsd64.mh: Update renamed files.
* config/pa/nbsd.mh: Update renamed files.
* config/pa/obsd.mh: Update renamed files.
* config/powerpc/fbsd.mh: Update renamed files.
* config/powerpc/nbsd.mh: Update renamed files.
* config/powerpc/obsd.mh: Update renamed files.
* config/sh/nbsd.mh: Update renamed files.
* config/sparc/fbsd.mh: Update renamed files.
* config/sparc/nbsd64.mh: Update renamed files.
* config/sparc/nbsdelf.mh: Update renamed files.
* config/sparc/obsd64.mh: Update renamed files.
* config/vax/nbsdelf.mh: Update renamed files.
* config/vax/obsd.mh: Update renamed files.
2016-11-23 05:14:24 +08:00
|
|
|
|
#include "x86-bsd-nat.h"
|
|
|
|
|
#include "i386-bsd-nat.h"
|
2003-08-11 00:46:08 +08:00
|
|
|
|
|
2004-09-20 04:49:26 +08:00
|
|
|
|
/* Resume execution of the inferior process. If STEP is nonzero,
|
|
|
|
|
single-step it. If SIGNAL is nonzero, give it that signal. */
|
2001-07-22 04:16:44 +08:00
|
|
|
|
|
2004-09-20 04:49:26 +08:00
|
|
|
|
static void
|
* corelow.c (get_core_registers): Adjust.
(core_file_thread_alive): Rename to...
(core_thread_alive): ... this.
(core_pid_to_str): Try gdbarch_core_pid_to_str first.
(init_core_ops): Adjust.
(coreops_suppress_target): Delete.
(_initialize_corelow): Unconditionally add core_ops.
* procfs.c: Include "inf-child.h".
(procfs_ops): Delete.
(init_procfs_ops): Delete. Reimplement as...
(procfs_target): ... this, inheriting from inf-child.
(procfs_attach, procfs_detach, procfs_fetch_registers): Adjust.
(procfs_prepare_to_store): Delete.
(procfs_store_registers, procfs_resume): Adjust.
(procfs_open): Delete.
(procfs_suppress_run): Delete.
(procfs_can_run): Delete.
(procfs_mourn_inferior): Adjust.
(procfs_init_inferior): Add target_ops parameter. Adjust.
(procfs_create_inferior): Don't pass procfs_init_inferior to
fork_inferior. Instead call it after fork_inferior returns.
(procfs_find_new_threads): Adjust.
(_initialize_procfs): Adjust to use procfs_target instead of
init_procfs_ops.
* sol-thread.c (orig_core_ops, sol_core_ops): Delete.
(lwp_to_thread): Use target_thread_alive.
(sol_thread_open): Delete.
(sol_thread_attach): Delete.
(sol_thread_detach, sol_thread_resume, sol_thread_wait)
(sol_thread_fetch_registers, sol_thread_store_registers): Adjust
to use find_target_beneath.
(sol_thread_prepare_to_store, sol_thread_xfer_memory): Delete.
(sol_thread_xfer_partial): Adjust to use find_target_beneath.
(sol_thread_files_info, sol_thread_kill_inferior): Delete.
(check_for_thread_db): New.
(sol_thread_notice_signals, sol_thread_create_inferior): Delete.
(sol_thread_new_objfile): Call check_for_thread_db.
(sol_thread_mourn_inferior): Adjust to use find_target_beneath.
(sol_thread_can_run): Delete.
(sol_thread_alive): Adjust to use find_target_beneath.
(sol_thread_stop): Delete.
(rw_common): Use target_write_memory or target_read_memory.
(ps_lgetregs, ps_lgetfpregs): Use target_fetch_registers.
(ps_lsetregs, ps_lsetfpregs): Use target_store_registers.
(solaris_pid_to_str): Remove check for libthread_db initialization
failing.
(sol_find_new_threads): Remove check for libthread_db
initialization failing, or for an invalid inferior_ptid. Adjust
to use find_target_beneath.
(sol_core_open, sol_core_close, sol_core_detach,
sol_core_files_info, sol_find_memory_regions,
sol_make_note_section, ignore): Delete.
(init_sol_thread_ops): Make it a thread_stratum target. Remove
unneeded callback settings.
(init_sol_core_ops): Delete.
(_initialize_sol_thread): No longer call init_sol_core_ops, set
procfs_suppress_run, or hack with core_ops.
* target.h (struct target_ops): Add a target_ops * parameter to
to_resume, to_fetch_registers, to_store_registers, to_thread_alive
and to_find_new_threads.
(target_fetch_registers, target_store_registers)
(target_thread_alive, target_find_new_threads): Redeclare as
function.
* target.c (update_current_target): Do not inherit or de_fault
to_resume, to_fetch_registers, to_store_registers,
to_thread_alive, to_find_new_threads.
(target_resume): Adjust.
(target_thread_alive, target_find_new_threads): New.
(debug_to_resume, debug_to_fetch_registers): Delete.
(target_fetch_registers): New.
(debug_to_store_registers): Delete.
(target_store_registers): New.
(debug_to_thread_alive, debug_to_find_new_threads): Delete.
(setup_target_debug): Adjust.
* gdbcore.h (core_ops): Delete declaration.
* inf-ptrace.c, linux-nat.c, remote.c, amd64-linux-nat.c,
inf-child.c, linux-thread-db.c, bsd-uthread.c, inf-ttrace.c,
i386-sol2-tdep.c, darwin-nat.c, gnu-nat.c, go32-nat.c,
hpux-thread.c, i386-linux-nat.c, i386fbsd-nat.c, monitor.c,
nto-procfs.c, remote-m32r-sdi.c, remote-mips.c, windows-nat.c,
alphabsd-nat.c, amd64bsd-nat.c, arm-linux-nat.c, armnbsd-nat.c,
bsd-kvm.c, hppa-hpux-nat.c, hppa-linux-nat.c, hppabsd-nat.c,
hppanbsd-nat.c, i386-darwin-nat.c, i386bsd-nat.c,
ia64-linux-nat.c, m32r-linux-nat.c, m68kbsd-nat.c,
m68klinux-nat.c, m88kbsd-nat.c, mips-linux-nat.c,
mips64obsd-nat.c, mipsnbsd-nat.c, ppc-linux-nat.c, ppcnbsd-nat.c,
ppcobsd-nat.c, remote-sim.c, rs6000-nat.c, s390-nat.c,
shnbsd-nat.c, sparc-nat.c, sparc-nat.h, spu-linux-nat.c,
vaxbsd-nat.c, xtensa-linux-nat.c: Adjust to target_ops changes.
* gdbarch.sh (core_pid_to_str): New gdbarch callback.
* gdbarch.h, gdbarch.c: Regenerate.
* sol2-tdep.c: Include "inferior.h".
(sol2_core_pid_to_str): New.
* sol2-tdep.h (sol2_core_pid_to_str): Declare.
* amd64-sol2-tdep.c (amd64_sol2_init_abi): Set it.
* sparc-sol2-tdep.c (sparc32_sol2_init_abi): Set it.
* sparc64-sol2-tdep.c (sparc64_sol2_init_abi): Set it.
* i386-sol2-tdep.c (i386_sol2_init_abi): Set it.
2009-02-23 08:03:50 +08:00
|
|
|
|
i386fbsd_resume (struct target_ops *ops,
|
2012-05-25 00:39:15 +08:00
|
|
|
|
ptid_t ptid, int step, enum gdb_signal signal)
|
2001-07-22 04:16:44 +08:00
|
|
|
|
{
|
|
|
|
|
pid_t pid = ptid_get_pid (ptid);
|
|
|
|
|
int request = PT_STEP;
|
|
|
|
|
|
|
|
|
|
if (pid == -1)
|
|
|
|
|
/* Resume all threads. This only gets used in the non-threaded
|
|
|
|
|
case, where "resume all threads" and "resume inferior_ptid" are
|
|
|
|
|
the same. */
|
|
|
|
|
pid = ptid_get_pid (inferior_ptid);
|
|
|
|
|
|
|
|
|
|
if (!step)
|
|
|
|
|
{
|
2007-06-17 01:16:26 +08:00
|
|
|
|
struct regcache *regcache = get_current_regcache ();
|
2003-08-11 00:46:08 +08:00
|
|
|
|
ULONGEST eflags;
|
2001-07-22 04:16:44 +08:00
|
|
|
|
|
|
|
|
|
/* Workaround for a bug in FreeBSD. Make sure that the trace
|
|
|
|
|
flag is off when doing a continue. There is a code path
|
|
|
|
|
through the kernel which leaves the flag set when it should
|
|
|
|
|
have been cleared. If a process has a signal pending (such
|
|
|
|
|
as SIGALRM) and we do a PT_STEP, the process never really has
|
|
|
|
|
a chance to run because the kernel needs to notify the
|
|
|
|
|
debugger that a signal is being sent. Therefore, the process
|
|
|
|
|
never goes through the kernel's trap() function which would
|
|
|
|
|
normally clear it. */
|
|
|
|
|
|
2007-06-17 01:16:26 +08:00
|
|
|
|
regcache_cooked_read_unsigned (regcache, I386_EFLAGS_REGNUM,
|
2003-08-11 00:46:08 +08:00
|
|
|
|
&eflags);
|
2001-07-22 04:16:44 +08:00
|
|
|
|
if (eflags & 0x0100)
|
2007-06-17 01:16:26 +08:00
|
|
|
|
regcache_cooked_write_unsigned (regcache, I386_EFLAGS_REGNUM,
|
2003-08-11 00:46:08 +08:00
|
|
|
|
eflags & ~0x0100);
|
2001-07-22 04:16:44 +08:00
|
|
|
|
|
|
|
|
|
request = PT_CONTINUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* An addres of (caddr_t) 1 tells ptrace to continue from where it
|
|
|
|
|
was. (If GDB wanted it to start some other way, we have already
|
|
|
|
|
written a new PC value to the child.) */
|
|
|
|
|
if (ptrace (request, pid, (caddr_t) 1,
|
2012-05-25 00:39:15 +08:00
|
|
|
|
gdb_signal_to_host (signal)) == -1)
|
2005-02-11 Andrew Cagney <cagney@gnu.org>
Mark up error_no_arg, query, perror_with_name, complaint, and
internal_error.
* breakpoint.c, cp-abi.c, cp-namespace.c, cp-support.c: Update.
* cris-tdep.c, dbxread.c, dictionary.c, dsrec.c: Update.
* dummy-frame.c, dve3900-rom.c, dwarf2-frame.c, dwarf2expr.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, event-loop.c: Update.
* exceptions.c, exec.c, f-lang.c, findvar.c, fork-child.c: Update.
* frame-unwind.c, frame.c, frv-linux-tdep.c, frv-tdep.c: Update.
* gdb_assert.h, gdbarch.c, gdbtypes.c, gnu-nat.c: Update.
* go32-nat.c, hppa-tdep.c, hppabsd-nat.c, hpread.c: Update.
* i386-linux-nat.c, i386-nat.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386fbsd-nat.c, inf-ptrace.c, inf-ttrace.c, infcall.c: Update.
* infcmd.c, inflow.c, infptrace.c, infrun.c, inftarg.c: Update.
* interps.c, language.c, linespec.c, linux-nat.c: Update.
* m32r-linux-nat.c, m68k-tdep.c, m68kbsd-nat.c: Update.
* m68klinux-nat.c, m88kbsd-nat.c, macroexp.c, macroscope.c: Update.
* macrotab.c, maint.c, mdebugread.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mips64obsd-nat.c: Update.
* mipsnbsd-nat.c, mn10300-tdep.c, monitor.c, nto-procfs.c: Update.
* objc-lang.c, objfiles.c, objfiles.h, ocd.c, osabi.c: Update.
* parse.c, ppc-bdm.c, ppc-linux-nat.c, ppc-sysv-tdep.c: Update.
* ppcnbsd-nat.c, ppcobsd-nat.c, printcmd.c, procfs.c: Update.
* regcache.c, reggroups.c, remote-e7000.c, remote-mips.c: Update.
* remote-rdp.c, remote-sds.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote.c, rs6000-nat.c, rs6000-tdep.c: Update.
* s390-nat.c, s390-tdep.c, sentinel-frame.c, serial.c: Update.
* sh-tdep.c, sh3-rom.c, sh64-tdep.c, shnbsd-nat.c: Update.
* solib-aix5.c, solib-svr4.c, solib.c, source.c: Update.
* sparc-nat.c, stabsread.c, stack.c, symfile.c, symtab.c: Update.
* symtab.h, target.c, tracepoint.c, ui-file.c, ui-out.c: Update.
* utils.c, valops.c, valprint.c, vax-nat.c, vaxbsd-nat.c: Update.
* win32-nat.c, xcoffread.c, xstormy16-tdep.c: Update.
* cli/cli-cmds.c, cli/cli-logging.c, cli/cli-script.c: Update.
* cli/cli-setshow.c, mi/mi-cmd-break.c, mi/mi-cmds.c: Update.
* mi/mi-console.c, mi/mi-getopt.c, mi/mi-out.c: Update.
* tui/tui-file.c, tui/tui-interp.c: Update.
2005-02-12 02:13:55 +08:00
|
|
|
|
perror_with_name (("ptrace"));
|
2001-07-22 04:16:44 +08:00
|
|
|
|
}
|
|
|
|
|
|
2004-05-23 01:21:36 +08:00
|
|
|
|
|
|
|
|
|
/* Support for debugging kernel virtual memory images. */
|
|
|
|
|
|
|
|
|
|
#include <machine/pcb.h>
|
|
|
|
|
|
|
|
|
|
#include "bsd-kvm.h"
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
i386fbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
|
|
|
|
|
{
|
|
|
|
|
/* The following is true for FreeBSD 4.7:
|
|
|
|
|
|
|
|
|
|
The pcb contains %eip, %ebx, %esp, %ebp, %esi, %edi and %gs.
|
|
|
|
|
This accounts for all callee-saved registers specified by the
|
|
|
|
|
psABI and then some. Here %esp contains the stack pointer at the
|
|
|
|
|
point just after the call to cpu_switch(). From this information
|
|
|
|
|
we reconstruct the register state as it would look when we just
|
|
|
|
|
returned from cpu_switch(). */
|
|
|
|
|
|
|
|
|
|
/* The stack pointer shouldn't be zero. */
|
|
|
|
|
if (pcb->pcb_esp == 0)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
pcb->pcb_esp += 4;
|
|
|
|
|
regcache_raw_supply (regcache, I386_EDI_REGNUM, &pcb->pcb_edi);
|
|
|
|
|
regcache_raw_supply (regcache, I386_ESI_REGNUM, &pcb->pcb_esi);
|
|
|
|
|
regcache_raw_supply (regcache, I386_EBP_REGNUM, &pcb->pcb_ebp);
|
|
|
|
|
regcache_raw_supply (regcache, I386_ESP_REGNUM, &pcb->pcb_esp);
|
|
|
|
|
regcache_raw_supply (regcache, I386_EBX_REGNUM, &pcb->pcb_ebx);
|
|
|
|
|
regcache_raw_supply (regcache, I386_EIP_REGNUM, &pcb->pcb_eip);
|
|
|
|
|
regcache_raw_supply (regcache, I386_GS_REGNUM, &pcb->pcb_gs);
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2015-02-22 05:43:30 +08:00
|
|
|
|
#ifdef PT_GETXSTATE_INFO
|
|
|
|
|
/* Implement the to_read_description method. */
|
|
|
|
|
|
|
|
|
|
static const struct target_desc *
|
|
|
|
|
i386fbsd_read_description (struct target_ops *ops)
|
|
|
|
|
{
|
|
|
|
|
static int xsave_probed;
|
|
|
|
|
static uint64_t xcr0;
|
|
|
|
|
|
|
|
|
|
if (!xsave_probed)
|
|
|
|
|
{
|
|
|
|
|
struct ptrace_xstate_info info;
|
|
|
|
|
|
|
|
|
|
if (ptrace (PT_GETXSTATE_INFO, ptid_get_pid (inferior_ptid),
|
|
|
|
|
(PTRACE_TYPE_ARG3) &info, sizeof (info)) == 0)
|
|
|
|
|
{
|
2016-06-28 04:19:09 +08:00
|
|
|
|
x86bsd_xsave_len = info.xsave_len;
|
2015-02-22 05:43:30 +08:00
|
|
|
|
xcr0 = info.xsave_mask;
|
|
|
|
|
}
|
|
|
|
|
xsave_probed = 1;
|
|
|
|
|
}
|
|
|
|
|
|
2017-09-04 18:33:56 +08:00
|
|
|
|
if (x86bsd_xsave_len == 0)
|
|
|
|
|
xcr0 = X86_XSTATE_SSE_MASK;
|
|
|
|
|
|
|
|
|
|
return i386_target_description (xcr0);
|
2015-02-22 05:43:30 +08:00
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
2001-07-22 04:16:44 +08:00
|
|
|
|
void
|
|
|
|
|
_initialize_i386fbsd_nat (void)
|
|
|
|
|
{
|
2004-09-20 04:49:26 +08:00
|
|
|
|
struct target_ops *t;
|
|
|
|
|
|
|
|
|
|
/* Add some extra features to the common *BSD/i386 target. */
|
|
|
|
|
t = i386bsd_target ();
|
2009-05-14 17:37:00 +08:00
|
|
|
|
|
2015-02-22 05:43:30 +08:00
|
|
|
|
#ifdef PT_GETXSTATE_INFO
|
|
|
|
|
t->to_read_description = i386fbsd_read_description;
|
|
|
|
|
#endif
|
2009-05-14 17:37:00 +08:00
|
|
|
|
|
2004-09-20 04:49:26 +08:00
|
|
|
|
t->to_resume = i386fbsd_resume;
|
2015-04-18 02:02:03 +08:00
|
|
|
|
fbsd_nat_add_target (t);
|
2004-09-20 04:49:26 +08:00
|
|
|
|
|
2004-09-27 03:44:50 +08:00
|
|
|
|
/* Support debugging kernel virtual memory images. */
|
|
|
|
|
bsd_kvm_add_target (i386fbsd_supply_pcb);
|
|
|
|
|
|
2015-02-25 22:51:42 +08:00
|
|
|
|
#ifdef KERN_PROC_SIGTRAMP
|
|
|
|
|
/* Normally signal frames are detected via i386fbsd_sigtramp_p.
|
|
|
|
|
However, FreeBSD 9.2 through 10.1 do not include the page holding
|
|
|
|
|
the signal code in core dumps. These releases do provide a
|
|
|
|
|
kern.proc.sigtramp.<pid> sysctl that returns the location of the
|
|
|
|
|
signal trampoline for a running process. We fetch the location
|
|
|
|
|
of the current (gdb) process and use this to identify signal
|
|
|
|
|
frames in core dumps from these releases. */
|
2001-07-22 04:16:44 +08:00
|
|
|
|
{
|
2015-02-25 22:51:42 +08:00
|
|
|
|
int mib[4];
|
|
|
|
|
struct kinfo_sigtramp kst;
|
2001-07-22 04:16:44 +08:00
|
|
|
|
size_t len;
|
|
|
|
|
|
|
|
|
|
mib[0] = CTL_KERN;
|
2015-02-25 22:51:42 +08:00
|
|
|
|
mib[1] = KERN_PROC;
|
|
|
|
|
mib[2] = KERN_PROC_SIGTRAMP;
|
|
|
|
|
mib[3] = getpid ();
|
|
|
|
|
len = sizeof (kst);
|
|
|
|
|
if (sysctl (mib, 4, &kst, &len, NULL, 0) == 0)
|
2001-07-22 04:16:44 +08:00
|
|
|
|
{
|
2015-02-25 22:51:42 +08:00
|
|
|
|
i386fbsd_sigtramp_start_addr = (uintptr_t) kst.ksigtramp_start;
|
|
|
|
|
i386fbsd_sigtramp_end_addr = (uintptr_t) kst.ksigtramp_end;
|
2001-07-22 04:16:44 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
}
|