2000-02-01 11:19:29 +08:00
|
|
|
|
/* Interface GDB to the GNU Hurd.
|
2017-01-01 14:50:51 +08:00
|
|
|
|
Copyright (C) 1992-2017 Free Software Foundation, Inc.
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
|
|
Written by Miles Bader <miles@gnu.ai.mit.edu>
|
|
|
|
|
|
|
|
|
|
Some code and ideas from m3-nat.c by Jukka Virtanen <jtv@hut.fi>
|
|
|
|
|
|
|
|
|
|
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
|
1999-04-16 09:35:26 +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
|
2013-06-07 22:39:33 +08:00
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2016-12-05 18:59:03 +08:00
|
|
|
|
/* Mach/Hurd headers are not yet ready for C++ compilation. */
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
1999-04-16 09:35:26 +08:00
|
|
|
|
#include <mach.h>
|
|
|
|
|
#include <mach_error.h>
|
|
|
|
|
#include <mach/exception.h>
|
2000-02-26 23:04:30 +08:00
|
|
|
|
#include <mach/message.h>
|
|
|
|
|
#include <mach/notify.h>
|
1999-04-16 09:35:26 +08:00
|
|
|
|
#include <mach/vm_attributes.h>
|
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
#include <hurd.h>
|
|
|
|
|
#include <hurd/interrupt.h>
|
1999-04-16 09:35:26 +08:00
|
|
|
|
#include <hurd/msg.h>
|
|
|
|
|
#include <hurd/msg_request.h>
|
2000-02-26 23:04:30 +08:00
|
|
|
|
#include <hurd/process.h>
|
2006-07-16 17:57:02 +08:00
|
|
|
|
/* Defined in <hurd/process.h>, but we need forward declarations from
|
|
|
|
|
<hurd/process_request.h> as well. */
|
|
|
|
|
#undef _process_user_
|
2000-02-26 23:04:30 +08:00
|
|
|
|
#include <hurd/process_request.h>
|
1999-04-16 09:35:26 +08:00
|
|
|
|
#include <hurd/signal.h>
|
|
|
|
|
#include <hurd/sigpreempt.h>
|
|
|
|
|
|
|
|
|
|
#include <portinfo.h>
|
2016-12-05 18:59:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
|
|
|
|
|
|
#include <ctype.h>
|
|
|
|
|
#include <limits.h>
|
|
|
|
|
#include <setjmp.h>
|
|
|
|
|
#include <signal.h>
|
|
|
|
|
#include <sys/ptrace.h>
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
#include "inferior.h"
|
|
|
|
|
#include "symtab.h"
|
|
|
|
|
#include "value.h"
|
|
|
|
|
#include "language.h"
|
|
|
|
|
#include "target.h"
|
2000-02-09 16:52:47 +08:00
|
|
|
|
#include "gdb_wait.h"
|
1999-04-16 09:35:26 +08:00
|
|
|
|
#include "gdbcmd.h"
|
|
|
|
|
#include "gdbcore.h"
|
2000-02-26 23:04:30 +08:00
|
|
|
|
#include "gdbthread.h"
|
2003-06-15 00:18:32 +08:00
|
|
|
|
#include "gdb_obstack.h"
|
2016-12-08 16:45:59 +08:00
|
|
|
|
#include "tid-parse.h"
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
#include "gnu-nat.h"
|
2009-07-20 23:18:24 +08:00
|
|
|
|
#include "inf-child.h"
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2016-12-05 18:59:03 +08:00
|
|
|
|
/* MIG stubs are not yet ready for C++ compilation. */
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
1999-04-16 09:35:26 +08:00
|
|
|
|
#include "exc_request_S.h"
|
|
|
|
|
#include "notify_S.h"
|
|
|
|
|
#include "process_reply_S.h"
|
|
|
|
|
#include "msg_reply_S.h"
|
|
|
|
|
#include "exc_request_U.h"
|
|
|
|
|
#include "msg_U.h"
|
2016-12-05 18:59:03 +08:00
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
static process_t proc_server = MACH_PORT_NULL;
|
|
|
|
|
|
|
|
|
|
/* If we've sent a proc_wait_request to the proc server, the pid of the
|
|
|
|
|
process we asked about. We can only ever have one outstanding. */
|
|
|
|
|
int proc_wait_pid = 0;
|
|
|
|
|
|
|
|
|
|
/* The number of wait requests we've sent, and expect replies from. */
|
|
|
|
|
int proc_waits_pending = 0;
|
|
|
|
|
|
|
|
|
|
int gnu_debug_flag = 0;
|
|
|
|
|
|
|
|
|
|
/* Forward decls */
|
|
|
|
|
|
2014-01-05 19:36:03 +08:00
|
|
|
|
static struct inf *make_inf ();
|
1999-04-16 09:35:26 +08:00
|
|
|
|
void inf_clear_wait (struct inf *inf);
|
|
|
|
|
void inf_cleanup (struct inf *inf);
|
|
|
|
|
void inf_startup (struct inf *inf, int pid);
|
|
|
|
|
int inf_update_suspends (struct inf *inf);
|
|
|
|
|
void inf_set_pid (struct inf *inf, pid_t pid);
|
|
|
|
|
void inf_validate_procs (struct inf *inf);
|
|
|
|
|
void inf_steal_exc_ports (struct inf *inf);
|
|
|
|
|
void inf_restore_exc_ports (struct inf *inf);
|
2003-09-09 11:14:02 +08:00
|
|
|
|
void inf_set_threads_resume_sc (struct inf *inf,
|
|
|
|
|
struct proc *run_thread,
|
|
|
|
|
int run_others);
|
|
|
|
|
int inf_set_threads_resume_sc_for_signal_thread (struct inf *inf);
|
|
|
|
|
void inf_suspend (struct inf *inf);
|
|
|
|
|
void inf_resume (struct inf *inf);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
void inf_set_step_thread (struct inf *inf, struct proc *proc);
|
|
|
|
|
void inf_detach (struct inf *inf);
|
|
|
|
|
void inf_attach (struct inf *inf, int pid);
|
2012-05-25 00:39:15 +08:00
|
|
|
|
void inf_signal (struct inf *inf, enum gdb_signal sig);
|
1999-06-08 03:19:32 +08:00
|
|
|
|
void inf_continue (struct inf *inf);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
#define inf_debug(_inf, msg, args...) \
|
|
|
|
|
do { struct inf *__inf = (_inf); \
|
2009-04-17 23:44:28 +08:00
|
|
|
|
debug ("{inf %d %s}: " msg, __inf->pid, \
|
|
|
|
|
host_address_to_string (__inf) , ##args); } while (0)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
void proc_abort (struct proc *proc, int force);
|
|
|
|
|
struct proc *make_proc (struct inf *inf, mach_port_t port, int tid);
|
|
|
|
|
struct proc *_proc_free (struct proc *proc);
|
|
|
|
|
int proc_update_sc (struct proc *proc);
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t proc_get_exception_port (struct proc *proc, mach_port_t * port);
|
|
|
|
|
kern_return_t proc_set_exception_port (struct proc *proc, mach_port_t port);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static mach_port_t _proc_get_exc_port (struct proc *proc);
|
|
|
|
|
void proc_steal_exc_port (struct proc *proc, mach_port_t exc_port);
|
|
|
|
|
void proc_restore_exc_port (struct proc *proc);
|
|
|
|
|
int proc_trace (struct proc *proc, int set);
|
|
|
|
|
|
|
|
|
|
/* Evaluate RPC_EXPR in a scope with the variables MSGPORT and REFPORT bound
|
|
|
|
|
to INF's msg port and task port respectively. If it has no msg port,
|
|
|
|
|
EIEIO is returned. INF must refer to a running process! */
|
|
|
|
|
#define INF_MSGPORT_RPC(inf, rpc_expr) \
|
|
|
|
|
HURD_MSGPORT_RPC (proc_getmsgport (proc_server, inf->pid, &msgport), \
|
|
|
|
|
(refport = inf->task->port, 0), 0, \
|
|
|
|
|
msgport ? (rpc_expr) : EIEIO)
|
|
|
|
|
|
|
|
|
|
/* Like INF_MSGPORT_RPC, but will also resume the signal thread to ensure
|
|
|
|
|
there's someone around to deal with the RPC (and resuspend things
|
|
|
|
|
afterwards). This effects INF's threads' resume_sc count. */
|
|
|
|
|
#define INF_RESUME_MSGPORT_RPC(inf, rpc_expr) \
|
|
|
|
|
(inf_set_threads_resume_sc_for_signal_thread (inf) \
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
? ({ kern_return_t __e; \
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_resume (inf); \
|
|
|
|
|
__e = INF_MSGPORT_RPC (inf, rpc_expr); \
|
|
|
|
|
inf_suspend (inf); \
|
|
|
|
|
__e; }) \
|
|
|
|
|
: EIEIO)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* The state passed by an exception message. */
|
|
|
|
|
struct exc_state
|
1999-07-08 04:19:36 +08:00
|
|
|
|
{
|
2011-01-08 03:36:19 +08:00
|
|
|
|
int exception; /* The exception code. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
int code, subcode;
|
2011-01-08 03:36:19 +08:00
|
|
|
|
mach_port_t handler; /* The real exception port to handle this. */
|
|
|
|
|
mach_port_t reply; /* The reply port from the exception call. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
};
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* The results of the last wait an inf did. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
struct inf_wait
|
1999-07-08 04:19:36 +08:00
|
|
|
|
{
|
|
|
|
|
struct target_waitstatus status; /* The status returned to gdb. */
|
2011-01-08 03:36:19 +08:00
|
|
|
|
struct exc_state exc; /* The exception that caused us to return. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct proc *thread; /* The thread in question. */
|
|
|
|
|
int suppress; /* Something trivial happened. */
|
|
|
|
|
};
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* The state of an inferior. */
|
|
|
|
|
struct inf
|
1999-07-08 04:19:36 +08:00
|
|
|
|
{
|
|
|
|
|
/* Fields describing the current inferior. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct proc *task; /* The mach task. */
|
|
|
|
|
struct proc *threads; /* A linked list of all threads in TASK. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* True if THREADS needn't be validated by querying the task. We
|
|
|
|
|
assume that we and the task in question are the only ones
|
|
|
|
|
frobbing the thread list, so as long as we don't let any code
|
|
|
|
|
run, we don't have to worry about THREADS changing. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
int threads_up_to_date;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
pid_t pid; /* The real system PID. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct inf_wait wait; /* What to return from target_wait. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* One thread proc in INF may be in `single-stepping mode'. This
|
|
|
|
|
is it. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct proc *step_thread;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* The thread we think is the signal thread. */
|
|
|
|
|
struct proc *signal_thread;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
mach_port_t event_port; /* Where we receive various msgs. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* True if we think at least one thread in the inferior could currently be
|
|
|
|
|
running. */
|
|
|
|
|
unsigned int running:1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* True if the process has stopped (in the proc server sense). Note that
|
|
|
|
|
since a proc server `stop' leaves the signal thread running, the inf can
|
|
|
|
|
be RUNNING && STOPPED... */
|
|
|
|
|
unsigned int stopped:1;
|
1999-06-08 03:19:32 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* True if the inferior has no message port. */
|
|
|
|
|
unsigned int nomsg:1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* True if the inferior is traced. */
|
|
|
|
|
unsigned int traced:1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* True if we shouldn't try waiting for the inferior, usually because we
|
|
|
|
|
can't for some reason. */
|
|
|
|
|
unsigned int no_wait:1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* When starting a new inferior, we don't try to validate threads until all
|
2014-01-09 04:42:07 +08:00
|
|
|
|
the proper execs have been done, which this flag states we still
|
1999-07-08 04:19:36 +08:00
|
|
|
|
expect to happen. */
|
2014-01-09 04:42:07 +08:00
|
|
|
|
unsigned int pending_execs:1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Fields describing global state. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* The task suspend count used when gdb has control. This is normally 1 to
|
|
|
|
|
make things easier for us, but sometimes (like when attaching to vital
|
|
|
|
|
system servers) it may be desirable to let the task continue to run
|
|
|
|
|
(pausing individual threads as necessary). */
|
|
|
|
|
int pause_sc;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* The task suspend count left when detaching from a task. */
|
|
|
|
|
int detach_sc;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* The initial values used for the run_sc and pause_sc of newly discovered
|
|
|
|
|
threads -- see the definition of those fields in struct proc. */
|
|
|
|
|
int default_thread_run_sc;
|
|
|
|
|
int default_thread_pause_sc;
|
|
|
|
|
int default_thread_detach_sc;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* True if the process should be traced when started/attached. Newly
|
|
|
|
|
started processes *must* be traced at first to exec them properly, but
|
|
|
|
|
if this is false, tracing is turned off as soon it has done so. */
|
|
|
|
|
int want_signals;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* True if exceptions from the inferior process should be trapped. This
|
|
|
|
|
must be on to use breakpoints. */
|
|
|
|
|
int want_exceptions;
|
|
|
|
|
};
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
int
|
|
|
|
|
__proc_pid (struct proc *proc)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
return proc->inf->pid;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Update PROC's real suspend count to match it's desired one. Returns true
|
|
|
|
|
if we think PROC is now in a runnable state. */
|
|
|
|
|
int
|
|
|
|
|
proc_update_sc (struct proc *proc)
|
|
|
|
|
{
|
|
|
|
|
int running;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
int err = 0;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
int delta = proc->sc - proc->cur_sc;
|
|
|
|
|
|
|
|
|
|
if (delta)
|
|
|
|
|
proc_debug (proc, "sc: %d --> %d", proc->cur_sc, proc->sc);
|
|
|
|
|
|
|
|
|
|
if (proc->sc == 0 && proc->state_changed)
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Since PROC may start running, we must write back any state changes. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2001-03-13 08:51:40 +08:00
|
|
|
|
gdb_assert (proc_is_thread (proc));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
proc_debug (proc, "storing back changed thread state");
|
|
|
|
|
err = thread_set_state (proc->port, THREAD_STATE_FLAVOR,
|
2000-03-13 05:16:09 +08:00
|
|
|
|
(thread_state_t) &proc->state, THREAD_STATE_SIZE);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!err)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
proc->state_changed = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (delta > 0)
|
2000-02-26 23:04:30 +08:00
|
|
|
|
{
|
|
|
|
|
while (delta-- > 0 && !err)
|
|
|
|
|
{
|
|
|
|
|
if (proc_is_task (proc))
|
|
|
|
|
err = task_suspend (proc->port);
|
|
|
|
|
else
|
|
|
|
|
err = thread_suspend (proc->port);
|
|
|
|
|
}
|
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else
|
2000-02-26 23:04:30 +08:00
|
|
|
|
{
|
|
|
|
|
while (delta++ < 0 && !err)
|
|
|
|
|
{
|
|
|
|
|
if (proc_is_task (proc))
|
|
|
|
|
err = task_resume (proc->port);
|
|
|
|
|
else
|
|
|
|
|
err = thread_resume (proc->port);
|
|
|
|
|
}
|
|
|
|
|
}
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!err)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
proc->cur_sc = proc->sc;
|
|
|
|
|
|
|
|
|
|
/* If we got an error, then the task/thread has disappeared. */
|
|
|
|
|
running = !err && proc->sc == 0;
|
|
|
|
|
|
|
|
|
|
proc_debug (proc, "is %s", err ? "dead" : running ? "running" : "suspended");
|
|
|
|
|
if (err)
|
2002-03-28 05:35:35 +08:00
|
|
|
|
proc_debug (proc, "err = %s", safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (running)
|
|
|
|
|
{
|
|
|
|
|
proc->aborted = 0;
|
|
|
|
|
proc->state_valid = proc->state_changed = 0;
|
|
|
|
|
proc->fetched_regs = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return running;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Thread_abort is called on PROC if needed. PROC must be a thread proc.
|
|
|
|
|
If PROC is deemed `precious', then nothing is done unless FORCE is true.
|
|
|
|
|
In particular, a thread is precious if it's running (in which case forcing
|
|
|
|
|
it includes suspending it first), or if it has an exception pending. */
|
|
|
|
|
void
|
|
|
|
|
proc_abort (struct proc *proc, int force)
|
|
|
|
|
{
|
2001-03-13 08:51:40 +08:00
|
|
|
|
gdb_assert (proc_is_thread (proc));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!proc->aborted)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct inf *inf = proc->inf;
|
|
|
|
|
int running = (proc->cur_sc == 0 && inf->task->cur_sc == 0);
|
|
|
|
|
|
|
|
|
|
if (running && force)
|
|
|
|
|
{
|
|
|
|
|
proc->sc = 1;
|
|
|
|
|
inf_update_suspends (proc->inf);
|
|
|
|
|
running = 0;
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Stopped %s."), proc_string (proc));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
else if (proc == inf->wait.thread && inf->wait.exc.reply && !force)
|
|
|
|
|
/* An exception is pending on PROC, which don't mess with. */
|
|
|
|
|
running = 1;
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!running)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* We only abort the thread if it's not actually running. */
|
|
|
|
|
{
|
|
|
|
|
thread_abort (proc->port);
|
|
|
|
|
proc_debug (proc, "aborted");
|
|
|
|
|
proc->aborted = 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
proc_debug (proc, "not aborting");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Make sure that the state field in PROC is up to date, and return a pointer
|
|
|
|
|
to it, or 0 if something is wrong. If WILL_MODIFY is true, makes sure
|
|
|
|
|
that the thread is stopped and aborted first, and sets the state_changed
|
|
|
|
|
field in PROC to true. */
|
|
|
|
|
thread_state_t
|
|
|
|
|
proc_get_state (struct proc *proc, int will_modify)
|
|
|
|
|
{
|
|
|
|
|
int was_aborted = proc->aborted;
|
|
|
|
|
|
|
|
|
|
proc_debug (proc, "updating state info%s",
|
|
|
|
|
will_modify ? " (with intention to modify)" : "");
|
|
|
|
|
|
|
|
|
|
proc_abort (proc, will_modify);
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!was_aborted && proc->aborted)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* PROC's state may have changed since we last fetched it. */
|
|
|
|
|
proc->state_valid = 0;
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!proc->state_valid)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
mach_msg_type_number_t state_size = THREAD_STATE_SIZE;
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err =
|
2010-05-15 04:17:37 +08:00
|
|
|
|
thread_get_state (proc->port, THREAD_STATE_FLAVOR,
|
|
|
|
|
(thread_state_t) &proc->state, &state_size);
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
proc_debug (proc, "getting thread state");
|
|
|
|
|
proc->state_valid = !err;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (proc->state_valid)
|
|
|
|
|
{
|
|
|
|
|
if (will_modify)
|
|
|
|
|
proc->state_changed = 1;
|
2000-03-13 05:16:09 +08:00
|
|
|
|
return (thread_state_t) &proc->state;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Set PORT to PROC's exception port. */
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t
|
1999-07-08 04:19:36 +08:00
|
|
|
|
proc_get_exception_port (struct proc * proc, mach_port_t * port)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
if (proc_is_task (proc))
|
|
|
|
|
return task_get_exception_port (proc->port, port);
|
|
|
|
|
else
|
|
|
|
|
return thread_get_exception_port (proc->port, port);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Set PROC's exception port to PORT. */
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t
|
1999-07-08 04:19:36 +08:00
|
|
|
|
proc_set_exception_port (struct proc * proc, mach_port_t port)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
proc_debug (proc, "setting exception port: %lu", port);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (proc_is_task (proc))
|
|
|
|
|
return task_set_exception_port (proc->port, port);
|
|
|
|
|
else
|
|
|
|
|
return thread_set_exception_port (proc->port, port);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Get PROC's exception port, cleaning up a bit if proc has died. */
|
|
|
|
|
static mach_port_t
|
|
|
|
|
_proc_get_exc_port (struct proc *proc)
|
|
|
|
|
{
|
|
|
|
|
mach_port_t exc_port;
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err = proc_get_exception_port (proc, &exc_port);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (err)
|
|
|
|
|
/* PROC must be dead. */
|
|
|
|
|
{
|
|
|
|
|
if (proc->exc_port)
|
|
|
|
|
mach_port_deallocate (mach_task_self (), proc->exc_port);
|
|
|
|
|
proc->exc_port = MACH_PORT_NULL;
|
|
|
|
|
if (proc->saved_exc_port)
|
|
|
|
|
mach_port_deallocate (mach_task_self (), proc->saved_exc_port);
|
|
|
|
|
proc->saved_exc_port = MACH_PORT_NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return exc_port;
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Replace PROC's exception port with EXC_PORT, unless it's already
|
|
|
|
|
been done. Stash away any existing exception port so we can
|
|
|
|
|
restore it later. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
void
|
|
|
|
|
proc_steal_exc_port (struct proc *proc, mach_port_t exc_port)
|
|
|
|
|
{
|
|
|
|
|
mach_port_t cur_exc_port = _proc_get_exc_port (proc);
|
|
|
|
|
|
|
|
|
|
if (cur_exc_port)
|
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err = 0;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
proc_debug (proc, "inserting exception port: %lu", exc_port);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (cur_exc_port != exc_port)
|
|
|
|
|
/* Put in our exception port. */
|
|
|
|
|
err = proc_set_exception_port (proc, exc_port);
|
|
|
|
|
|
|
|
|
|
if (err || cur_exc_port == proc->exc_port)
|
|
|
|
|
/* We previously set the exception port, and it's still set. So we
|
|
|
|
|
just keep the old saved port which is what the proc set. */
|
|
|
|
|
{
|
|
|
|
|
if (cur_exc_port)
|
|
|
|
|
mach_port_deallocate (mach_task_self (), cur_exc_port);
|
|
|
|
|
}
|
|
|
|
|
else
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Keep a copy of PROC's old exception port so it can be restored. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
if (proc->saved_exc_port)
|
|
|
|
|
mach_port_deallocate (mach_task_self (), proc->saved_exc_port);
|
|
|
|
|
proc->saved_exc_port = cur_exc_port;
|
|
|
|
|
}
|
|
|
|
|
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
proc_debug (proc, "saved exception port: %lu", proc->saved_exc_port);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (!err)
|
|
|
|
|
proc->exc_port = exc_port;
|
|
|
|
|
else
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Error setting exception port for %s: %s"),
|
2002-03-28 05:35:35 +08:00
|
|
|
|
proc_string (proc), safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* If we previously replaced PROC's exception port, put back what we
|
|
|
|
|
found there at the time, unless *our* exception port has since been
|
|
|
|
|
overwritten, in which case who knows what's going on. */
|
|
|
|
|
void
|
|
|
|
|
proc_restore_exc_port (struct proc *proc)
|
|
|
|
|
{
|
|
|
|
|
mach_port_t cur_exc_port = _proc_get_exc_port (proc);
|
|
|
|
|
|
|
|
|
|
if (cur_exc_port)
|
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err = 0;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
proc_debug (proc, "restoring real exception port");
|
|
|
|
|
|
|
|
|
|
if (proc->exc_port == cur_exc_port)
|
|
|
|
|
/* Our's is still there. */
|
|
|
|
|
err = proc_set_exception_port (proc, proc->saved_exc_port);
|
|
|
|
|
|
|
|
|
|
if (proc->saved_exc_port)
|
|
|
|
|
mach_port_deallocate (mach_task_self (), proc->saved_exc_port);
|
|
|
|
|
proc->saved_exc_port = MACH_PORT_NULL;
|
|
|
|
|
|
|
|
|
|
if (!err)
|
|
|
|
|
proc->exc_port = MACH_PORT_NULL;
|
|
|
|
|
else
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Error setting exception port for %s: %s"),
|
2002-03-28 05:35:35 +08:00
|
|
|
|
proc_string (proc), safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Turns hardware tracing in PROC on or off when SET is true or false,
|
|
|
|
|
respectively. Returns true on success. */
|
|
|
|
|
int
|
|
|
|
|
proc_trace (struct proc *proc, int set)
|
|
|
|
|
{
|
|
|
|
|
thread_state_t state = proc_get_state (proc, 1);
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!state)
|
2011-01-08 03:36:19 +08:00
|
|
|
|
return 0; /* The thread must be dead. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
proc_debug (proc, "tracing %s", set ? "on" : "off");
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (set)
|
|
|
|
|
{
|
|
|
|
|
/* XXX We don't get the exception unless the thread has its own
|
2011-01-08 03:36:19 +08:00
|
|
|
|
exception port???? */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (proc->exc_port == MACH_PORT_NULL)
|
|
|
|
|
proc_steal_exc_port (proc, proc->inf->event_port);
|
|
|
|
|
THREAD_STATE_SET_TRACED (state);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
THREAD_STATE_CLEAR_TRACED (state);
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* A variable from which to assign new TIDs. */
|
|
|
|
|
static int next_thread_id = 1;
|
|
|
|
|
|
|
|
|
|
/* Returns a new proc structure with the given fields. Also adds a
|
|
|
|
|
notification for PORT becoming dead to be sent to INF's notify port. */
|
|
|
|
|
struct proc *
|
|
|
|
|
make_proc (struct inf *inf, mach_port_t port, int tid)
|
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
mach_port_t prev_port = MACH_PORT_NULL;
|
Replace some xmalloc-family functions with XNEW-family ones
This patch is part of the make-gdb-buildable-in-C++ effort. The idea is
to change some calls to the xmalloc family of functions to calls to the
equivalents in the XNEW family. This avoids adding an explicit cast, so
it keeps the code a bit more readable. Some of them also map relatively
well to a C++ equivalent (XNEW (struct foo) -> new foo), so it will be
possible to do scripted replacements if needed.
I only changed calls that were obviously allocating memory for one or
multiple "objects". Allocation of variable sizes (such as strings or
buffer handling) will be for later (and won't use XNEW).
- xmalloc (sizeof (struct foo)) -> XNEW (struct foo)
- xmalloc (num * sizeof (struct foo)) -> XNEWVEC (struct foo, num)
- xcalloc (1, sizeof (struct foo)) -> XCNEW (struct foo)
- xcalloc (num, sizeof (struct foo)) -> XCNEWVEC (struct foo, num)
- xrealloc (p, num * sizeof (struct foo) -> XRESIZEVEC (struct foo, p, num)
- obstack_alloc (ob, sizeof (struct foo)) -> XOBNEW (ob, struct foo)
- obstack_alloc (ob, num * sizeof (struct foo)) -> XOBNEWVEC (ob, struct foo, num)
- alloca (sizeof (struct foo)) -> XALLOCA (struct foo)
- alloca (num * sizeof (struct foo)) -> XALLOCAVEC (struct foo, num)
Some instances of xmalloc followed by memset to zero the buffer were
replaced by XCNEW or XCNEWVEC.
I regtested on x86-64, Ubuntu 14.04, but the patch touches many
architecture-specific files. For those I'll have to rely on the
buildbot or people complaining that I broke their gdb.
gdb/ChangeLog:
* aarch64-linux-nat.c (aarch64_add_process): Likewise.
* aarch64-tdep.c (aarch64_gdbarch_init): Likewise.
* ada-exp.y (write_ambiguous_var): Likewise.
* ada-lang.c (resolve_subexp): Likewise.
(user_select_syms): Likewise.
(assign_aggregate): Likewise.
(ada_evaluate_subexp): Likewise.
(cache_symbol): Likewise.
* addrmap.c (allocate_key): Likewise.
(addrmap_create_mutable): Likewise.
* aix-thread.c (sync_threadlists): Likewise.
* alpha-tdep.c (alpha_push_dummy_call): Likewise.
(alpha_gdbarch_init): Likewise.
* amd64-windows-tdep.c (amd64_windows_push_arguments): Likewise.
* arm-linux-nat.c (arm_linux_add_process): Likewise.
* arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Likewise.
* arm-tdep.c (push_stack_item): Likewise.
(arm_displaced_step_copy_insn): Likewise.
(arm_gdbarch_init): Likewise.
(_initialize_arm_tdep): Likewise.
* avr-tdep.c (push_stack_item): Likewise.
* ax-general.c (new_agent_expr): Likewise.
* block.c (block_initialize_namespace): Likewise.
* breakpoint.c (alloc_counted_command_line): Likewise.
(update_dprintf_command_list): Likewise.
(parse_breakpoint_sals): Likewise.
(decode_static_tracepoint_spec): Likewise.
(until_break_command): Likewise.
(clear_command): Likewise.
(update_global_location_list): Likewise.
(get_breakpoint_objfile_data) Likewise.
* btrace.c (ftrace_new_function): Likewise.
(btrace_set_insn_history): Likewise.
(btrace_set_call_history): Likewise.
* buildsym.c (add_symbol_to_list): Likewise.
(record_pending_block): Likewise.
(start_subfile): Likewise.
(start_buildsym_compunit): Likewise.
(push_subfile): Likewise.
(end_symtab_get_static_block): Likewise.
(buildsym_init): Likewise.
* cli/cli-cmds.c (source_command): Likewise.
* cli/cli-decode.c (add_cmd): Likewise.
* cli/cli-script.c (build_command_line): Likewise.
(setup_user_args): Likewise.
(realloc_body_list): Likewise.
(process_next_line): Likewise.
(copy_command_lines): Likewise.
* cli/cli-setshow.c (do_set_command): Likewise.
* coff-pe-read.c (read_pe_exported_syms): Likewise.
* coffread.c (coff_locate_sections): Likewise.
(coff_symtab_read): Likewise.
(coff_read_struct_type): Likewise.
* common/cleanups.c (make_my_cleanup2): Likewise.
* common/common-exceptions.c (throw_it): Likewise.
* common/filestuff.c (make_cleanup_close): Likewise.
* common/format.c (parse_format_string): Likewise.
* common/queue.h (DEFINE_QUEUE_P): Likewise.
* compile/compile-object-load.c (munmap_list_add): Likewise.
(compile_object_load): Likewise.
* compile/compile-object-run.c (compile_object_run): Likewise.
* compile/compile.c (append_args): Likewise.
* corefile.c (specify_exec_file_hook): Likewise.
* cp-support.c (make_symbol_overload_list): Likewise.
* cris-tdep.c (push_stack_item): Likewise.
(cris_gdbarch_init): Likewise.
* ctf.c (ctf_trace_file_writer_new): Likewise.
* dbxread.c (init_header_files): Likewise.
(add_new_header_file): Likewise.
(init_bincl_list): Likewise.
(dbx_end_psymtab): Likewise.
(start_psymtab): Likewise.
(dbx_end_psymtab): Likewise.
* dcache.c (dcache_init): Likewise.
* dictionary.c (dict_create_hashed): Likewise.
(dict_create_hashed_expandable): Likewise.
(dict_create_linear): Likewise.
(dict_create_linear_expandable): Likewise.
* dtrace-probe.c (dtrace_process_dof_probe): Likewise.
* dummy-frame.c (register_dummy_frame_dtor): Likewise.
* dwarf2-frame-tailcall.c (cache_new_ref1): Likewise.
* dwarf2-frame.c (dwarf2_build_frame_info): Likewise.
(decode_frame_entry_1): Likewise.
* dwarf2expr.c (new_dwarf_expr_context): Likewise.
* dwarf2loc.c (dwarf2_compile_expr_to_ax): Likewise.
* dwarf2read.c (dwarf2_has_info): Likewise.
(create_signatured_type_table_from_index): Likewise.
(dwarf2_read_index): Likewise.
(dw2_get_file_names_reader): Likewise.
(create_all_type_units): Likewise.
(read_cutu_die_from_dwo): Likewise.
(init_tu_and_read_dwo_dies): Likewise.
(init_cutu_and_read_dies): Likewise.
(create_all_comp_units): Likewise.
(queue_comp_unit): Likewise.
(inherit_abstract_dies): Likewise.
(read_call_site_scope): Likewise.
(dwarf2_add_field): Likewise.
(dwarf2_add_typedef): Likewise.
(dwarf2_add_member_fn): Likewise.
(attr_to_dynamic_prop): Likewise.
(abbrev_table_alloc_abbrev): Likewise.
(abbrev_table_read_table): Likewise.
(add_include_dir): Likewise.
(add_file_name): Likewise.
(dwarf_decode_line_header): Likewise.
(dwarf2_const_value_attr): Likewise.
(dwarf_alloc_block): Likewise.
(parse_macro_definition): Likewise.
(set_die_type): Likewise.
(write_psymtabs_to_index): Likewise.
(create_cus_from_index): Likewise.
(dwarf2_create_include_psymtab): Likewise.
(process_psymtab_comp_unit_reader): Likewise.
(build_type_psymtab_dependencies): Likewise.
(read_comp_units_from_section): Likewise.
(compute_compunit_symtab_includes): Likewise.
(create_dwo_unit_in_dwp_v1): Likewise.
(create_dwo_unit_in_dwp_v2): Likewise.
(read_func_scope): Likewise.
(process_structure_scope): Likewise.
(mark_common_block_symbol_computed): Likewise.
(load_partial_dies): Likewise.
(dwarf2_symbol_mark_computed): Likewise.
* elfread.c (elf_symfile_segments): Likewise.
(elf_read_minimal_symbols): Likewise.
* environ.c (make_environ): Likewise.
* eval.c (evaluate_subexp_standard): Likewise.
* event-loop.c (create_file_handler): Likewise.
(create_async_signal_handler): Likewise.
(create_async_event_handler): Likewise.
(create_timer): Likewise.
* exec.c (build_section_table): Likewise.
* fbsd-nat.c (fbsd_remember_child): Likewise.
* fork-child.c (fork_inferior): Likewise.
* frv-tdep.c (new_variant): Likewise.
* gdbarch.sh (gdbarch_alloc): Likewise.
(append_name): Likewise.
* gdbtypes.c (rank_function): Likewise.
(copy_type_recursive): Likewise.
(add_dyn_prop): Likewise.
* gnu-nat.c (make_proc): Likewise.
(make_inf): Likewise.
(gnu_write_inferior): Likewise.
* gnu-v3-abi.c (build_gdb_vtable_type): Likewise.
(build_std_type_info_type): Likewise.
* guile/scm-param.c (compute_enum_list): Likewise.
* guile/scm-utils.c (gdbscm_parse_function_args): Likewise.
* guile/scm-value.c (gdbscm_value_call): Likewise.
* h8300-tdep.c (h8300_gdbarch_init): Likewise.
* hppa-tdep.c (hppa_init_objfile_priv_data): Likewise.
(read_unwind_info): Likewise.
* ia64-tdep.c (ia64_gdbarch_init): Likewise.
* infcall.c (dummy_frame_context_saver_setup): Likewise.
(call_function_by_hand_dummy): Likewise.
* infcmd.c (step_once): Likewise.
(finish_forward): Likewise.
(attach_command): Likewise.
(notice_new_inferior): Likewise.
* inferior.c (add_inferior_silent): Likewise.
* infrun.c (add_displaced_stepping_state): Likewise.
(save_infcall_control_state): Likewise.
(save_inferior_ptid): Likewise.
(_initialize_infrun): Likewise.
* jit.c (bfd_open_from_target_memory): Likewise.
(jit_gdbarch_data_init): Likewise.
* language.c (add_language): Likewise.
* linespec.c (decode_line_2): Likewise.
* linux-nat.c (add_to_pid_list): Likewise.
(add_initial_lwp): Likewise.
* linux-thread-db.c (add_thread_db_info): Likewise.
(record_thread): Likewise.
(info_auto_load_libthread_db): Likewise.
* m32c-tdep.c (m32c_gdbarch_init): Likewise.
* m68hc11-tdep.c (m68hc11_gdbarch_init): Likewise.
* m68k-tdep.c (m68k_gdbarch_init): Likewise.
* m88k-tdep.c (m88k_analyze_prologue): Likewise.
* macrocmd.c (macro_define_command): Likewise.
* macroexp.c (gather_arguments): Likewise.
* macroscope.c (sal_macro_scope): Likewise.
* macrotab.c (new_macro_table): Likewise.
* mdebugread.c (push_parse_stack): Likewise.
(parse_partial_symbols): Likewise.
(parse_symbol): Likewise.
(psymtab_to_symtab_1): Likewise.
(new_block): Likewise.
(new_psymtab): Likewise.
(mdebug_build_psymtabs): Likewise.
(add_pending): Likewise.
(elfmdebug_build_psymtabs): Likewise.
* mep-tdep.c (mep_gdbarch_init): Likewise.
* mi/mi-main.c (mi_execute_command): Likewise.
* mi/mi-parse.c (mi_parse_argv): Likewise.
* minidebug.c (lzma_open): Likewise.
* minsyms.c (terminate_minimal_symbol_table): Likewise.
* mips-linux-nat.c (mips_linux_insert_watchpoint): Likewise.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* mn10300-tdep.c (mn10300_gdbarch_init): Likewise.
* msp430-tdep.c (msp430_gdbarch_init): Likewise.
* mt-tdep.c (mt_registers_info): Likewise.
* nat/aarch64-linux.c (aarch64_linux_new_thread): Likewise.
* nat/linux-btrace.c (linux_enable_bts): Likewise.
(linux_enable_pt): Likewise.
* nat/linux-osdata.c (linux_xfer_osdata_processes): Likewise.
(linux_xfer_osdata_processgroups): Likewise.
* nios2-tdep.c (nios2_gdbarch_init): Likewise.
* nto-procfs.c (procfs_meminfo): Likewise.
* objc-lang.c (start_msglist): Likewise.
(selectors_info): Likewise.
(classes_info): Likewise.
(find_methods): Likewise.
* objfiles.c (allocate_objfile): Likewise.
(update_section_map): Likewise.
* osabi.c (gdbarch_register_osabi): Likewise.
(gdbarch_register_osabi_sniffer): Likewise.
* parse.c (start_arglist): Likewise.
* ppc-linux-nat.c (hwdebug_find_thread_points_by_tid): Likewise.
(hwdebug_insert_point): Likewise.
* printcmd.c (display_command): Likewise.
(ui_printf): Likewise.
* procfs.c (create_procinfo): Likewise.
(load_syscalls): Likewise.
(proc_get_LDT_entry): Likewise.
(proc_update_threads): Likewise.
* prologue-value.c (make_pv_area): Likewise.
(pv_area_store): Likewise.
* psymtab.c (extend_psymbol_list): Likewise.
(init_psymbol_list): Likewise.
(allocate_psymtab): Likewise.
* python/py-inferior.c (add_thread_object): Likewise.
* python/py-param.c (compute_enum_values): Likewise.
* python/py-value.c (valpy_call): Likewise.
* python/py-varobj.c (py_varobj_iter_next): Likewise.
* python/python.c (ensure_python_env): Likewise.
* record-btrace.c (record_btrace_start_replaying): Likewise.
* record-full.c (record_full_reg_alloc): Likewise.
(record_full_mem_alloc): Likewise.
(record_full_end_alloc): Likewise.
(record_full_core_xfer_partial): Likewise.
* regcache.c (get_thread_arch_aspace_regcache): Likewise.
* remote-fileio.c (remote_fileio_init_fd_map): Likewise.
* remote-notif.c (remote_notif_state_allocate): Likewise.
* remote.c (demand_private_info): Likewise.
(remote_notif_stop_alloc_reply): Likewise.
(remote_enable_btrace): Likewise.
* reverse.c (save_bookmark_command): Likewise.
* rl78-tdep.c (rl78_gdbarch_init): Likewise.
* rx-tdep.c (rx_gdbarch_init): Likewise.
* s390-linux-nat.c (s390_insert_watchpoint): Likewise.
* ser-go32.c (dos_get_tty_state): Likewise.
(dos_copy_tty_state): Likewise.
* ser-mingw.c (ser_windows_open): Likewise.
(ser_console_wait_handle): Likewise.
(ser_console_get_tty_state): Likewise.
(make_pipe_state): Likewise.
(net_windows_open): Likewise.
* ser-unix.c (hardwire_get_tty_state): Likewise.
(hardwire_copy_tty_state): Likewise.
* solib-aix.c (solib_aix_new_lm_info): Likewise.
* solib-dsbt.c (dsbt_current_sos): Likewise.
(dsbt_relocate_main_executable): Likewise.
* solib-frv.c (frv_current_sos): Likewise.
(frv_relocate_main_executable): Likewise.
* solib-spu.c (spu_bfd_fopen): Likewise.
* solib-svr4.c (lm_info_read): Likewise.
(svr4_copy_library_list): Likewise.
(svr4_default_sos): Likewise.
* source.c (find_source_lines): Likewise.
(line_info): Likewise.
(add_substitute_path_rule): Likewise.
* spu-linux-nat.c (spu_bfd_open): Likewise.
* spu-tdep.c (info_spu_dma_cmdlist): Likewise.
* stabsread.c (dbx_lookup_type): Likewise.
(read_type): Likewise.
(read_member_functions): Likewise.
(read_struct_fields): Likewise.
(read_baseclasses): Likewise.
(read_args): Likewise.
(_initialize_stabsread): Likewise.
* stack.c (func_command): Likewise.
* stap-probe.c (handle_stap_probe): Likewise.
* symfile.c (addrs_section_sort): Likewise.
(addr_info_make_relative): Likewise.
(load_section_callback): Likewise.
(add_symbol_file_command): Likewise.
(init_filename_language_table): Likewise.
* symtab.c (create_filename_seen_cache): Likewise.
(sort_search_symbols_remove_dups): Likewise.
(search_symbols): Likewise.
* target.c (make_cleanup_restore_target_terminal): Likewise.
* thread.c (new_thread): Likewise.
(enable_thread_stack_temporaries): Likewise.
(make_cleanup_restore_current_thread): Likewise.
(thread_apply_all_command): Likewise.
* tic6x-tdep.c (tic6x_gdbarch_init): Likewise.
* top.c (gdb_readline_wrapper): Likewise.
* tracefile-tfile.c (tfile_trace_file_writer_new): Likewise.
* tracepoint.c (trace_find_line_command): Likewise.
(all_tracepoint_actions_and_cleanup): Likewise.
(make_cleanup_restore_current_traceframe): Likewise.
(get_uploaded_tp): Likewise.
(get_uploaded_tsv): Likewise.
* tui/tui-data.c (tui_alloc_generic_win_info): Likewise.
(tui_alloc_win_info): Likewise.
(tui_alloc_content): Likewise.
(tui_add_content_elements): Likewise.
* tui/tui-disasm.c (tui_find_disassembly_address): Likewise.
(tui_set_disassem_content): Likewise.
* ui-file.c (ui_file_new): Likewise.
(stdio_file_new): Likewise.
(tee_file_new): Likewise.
* utils.c (make_cleanup_restore_integer): Likewise.
(add_internal_problem_command): Likewise.
* v850-tdep.c (v850_gdbarch_init): Likewise.
* valops.c (find_oload_champ): Likewise.
* value.c (allocate_value_lazy): Likewise.
(record_latest_value): Likewise.
(create_internalvar): Likewise.
* varobj.c (install_variable): Likewise.
(new_variable): Likewise.
(new_root_variable): Likewise.
(cppush): Likewise.
(_initialize_varobj): Likewise.
* windows-nat.c (windows_make_so): Likewise.
* x86-nat.c (x86_add_process): Likewise.
* xcoffread.c (arrange_linetable): Likewise.
(allocate_include_entry): Likewise.
(process_linenos): Likewise.
(SYMBOL_DUP): Likewise.
(xcoff_start_psymtab): Likewise.
(xcoff_end_psymtab): Likewise.
* xml-support.c (gdb_xml_parse_attr_ulongest): Likewise.
* xtensa-tdep.c (xtensa_register_type): Likewise.
* gdbarch.c: Regenerate.
* gdbarch.h: Regenerate.
gdb/gdbserver/ChangeLog:
* ax.c (gdb_parse_agent_expr): Likewise.
(compile_bytecodes): Likewise.
* dll.c (loaded_dll): Likewise.
* event-loop.c (append_callback_event): Likewise.
(create_file_handler): Likewise.
(create_file_event): Likewise.
* hostio.c (handle_open): Likewise.
* inferiors.c (add_thread): Likewise.
(add_process): Likewise.
* linux-aarch64-low.c (aarch64_linux_new_process): Likewise.
* linux-arm-low.c (arm_new_process): Likewise.
(arm_new_thread): Likewise.
* linux-low.c (add_to_pid_list): Likewise.
(linux_add_process): Likewise.
(handle_extended_wait): Likewise.
(add_lwp): Likewise.
(enqueue_one_deferred_signal): Likewise.
(enqueue_pending_signal): Likewise.
(linux_resume_one_lwp_throw): Likewise.
(linux_resume_one_thread): Likewise.
(linux_read_memory): Likewise.
(linux_write_memory): Likewise.
* linux-mips-low.c (mips_linux_new_process): Likewise.
(mips_linux_new_thread): Likewise.
(mips_add_watchpoint): Likewise.
* linux-x86-low.c (initialize_low_arch): Likewise.
* lynx-low.c (lynx_add_process): Likewise.
* mem-break.c (set_raw_breakpoint_at): Likewise.
(set_breakpoint): Likewise.
(add_condition_to_breakpoint): Likewise.
(add_commands_to_breakpoint): Likewise.
(clone_agent_expr): Likewise.
(clone_one_breakpoint): Likewise.
* regcache.c (new_register_cache): Likewise.
* remote-utils.c (look_up_one_symbol): Likewise.
* server.c (queue_stop_reply): Likewise.
(start_inferior): Likewise.
(queue_stop_reply_callback): Likewise.
(handle_target_event): Likewise.
* spu-low.c (fetch_ppc_memory): Likewise.
(store_ppc_memory): Likewise.
* target.c (set_target_ops): Likewise.
* thread-db.c (thread_db_load_search): Likewise.
(try_thread_db_load_1): Likewise.
* tracepoint.c (add_tracepoint): Likewise.
(add_tracepoint_action): Likewise.
(create_trace_state_variable): Likewise.
(cmd_qtdpsrc): Likewise.
(cmd_qtro): Likewise.
(add_while_stepping_state): Likewise.
* win32-low.c (child_add_thread): Likewise.
(get_image_name): Likewise.
2015-08-27 05:16:07 +08:00
|
|
|
|
struct proc *proc = XNEW (struct proc);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
proc->port = port;
|
|
|
|
|
proc->tid = tid;
|
|
|
|
|
proc->inf = inf;
|
|
|
|
|
proc->next = 0;
|
|
|
|
|
proc->saved_exc_port = MACH_PORT_NULL;
|
|
|
|
|
proc->exc_port = MACH_PORT_NULL;
|
|
|
|
|
|
|
|
|
|
proc->sc = 0;
|
|
|
|
|
proc->cur_sc = 0;
|
|
|
|
|
|
|
|
|
|
/* Note that these are all the values for threads; the task simply uses the
|
|
|
|
|
corresponding field in INF directly. */
|
|
|
|
|
proc->run_sc = inf->default_thread_run_sc;
|
|
|
|
|
proc->pause_sc = inf->default_thread_pause_sc;
|
|
|
|
|
proc->detach_sc = inf->default_thread_detach_sc;
|
|
|
|
|
proc->resume_sc = proc->run_sc;
|
|
|
|
|
|
|
|
|
|
proc->aborted = 0;
|
|
|
|
|
proc->dead = 0;
|
|
|
|
|
proc->state_valid = 0;
|
|
|
|
|
proc->state_changed = 0;
|
|
|
|
|
|
|
|
|
|
proc_debug (proc, "is new");
|
|
|
|
|
|
|
|
|
|
/* Get notified when things die. */
|
|
|
|
|
err =
|
1999-07-08 04:19:36 +08:00
|
|
|
|
mach_port_request_notification (mach_task_self (), port,
|
1999-04-16 09:35:26 +08:00
|
|
|
|
MACH_NOTIFY_DEAD_NAME, 1,
|
|
|
|
|
inf->event_port,
|
|
|
|
|
MACH_MSG_TYPE_MAKE_SEND_ONCE,
|
|
|
|
|
&prev_port);
|
|
|
|
|
if (err)
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
warning (_("Couldn't request notification for port %lu: %s"),
|
2002-03-28 05:35:35 +08:00
|
|
|
|
port, safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
proc_debug (proc, "notifications to: %lu", inf->event_port);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (prev_port != MACH_PORT_NULL)
|
|
|
|
|
mach_port_deallocate (mach_task_self (), prev_port);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (inf->want_exceptions)
|
2000-02-26 23:04:30 +08:00
|
|
|
|
{
|
|
|
|
|
if (proc_is_task (proc))
|
|
|
|
|
/* Make the task exception port point to us. */
|
|
|
|
|
proc_steal_exc_port (proc, inf->event_port);
|
|
|
|
|
else
|
|
|
|
|
/* Just clear thread exception ports -- they default to the
|
|
|
|
|
task one. */
|
|
|
|
|
proc_steal_exc_port (proc, MACH_PORT_NULL);
|
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
return proc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Frees PROC and any resources it uses, and returns the value of PROC's
|
|
|
|
|
next field. */
|
|
|
|
|
struct proc *
|
|
|
|
|
_proc_free (struct proc *proc)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = proc->inf;
|
|
|
|
|
struct proc *next = proc->next;
|
|
|
|
|
|
|
|
|
|
proc_debug (proc, "freeing...");
|
|
|
|
|
|
|
|
|
|
if (proc == inf->step_thread)
|
|
|
|
|
/* Turn off single stepping. */
|
|
|
|
|
inf_set_step_thread (inf, 0);
|
|
|
|
|
if (proc == inf->wait.thread)
|
|
|
|
|
inf_clear_wait (inf);
|
|
|
|
|
if (proc == inf->signal_thread)
|
|
|
|
|
inf->signal_thread = 0;
|
|
|
|
|
|
|
|
|
|
if (proc->port != MACH_PORT_NULL)
|
|
|
|
|
{
|
|
|
|
|
if (proc->exc_port != MACH_PORT_NULL)
|
|
|
|
|
/* Restore the original exception port. */
|
|
|
|
|
proc_restore_exc_port (proc);
|
|
|
|
|
if (proc->cur_sc != 0)
|
|
|
|
|
/* Resume the thread/task. */
|
|
|
|
|
{
|
|
|
|
|
proc->sc = 0;
|
|
|
|
|
proc_update_sc (proc);
|
|
|
|
|
}
|
|
|
|
|
mach_port_deallocate (mach_task_self (), proc->port);
|
|
|
|
|
}
|
|
|
|
|
|
2000-12-15 09:01:51 +08:00
|
|
|
|
xfree (proc);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
return next;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2014-01-05 19:36:03 +08:00
|
|
|
|
static struct inf *
|
2000-07-30 09:48:28 +08:00
|
|
|
|
make_inf (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
Replace some xmalloc-family functions with XNEW-family ones
This patch is part of the make-gdb-buildable-in-C++ effort. The idea is
to change some calls to the xmalloc family of functions to calls to the
equivalents in the XNEW family. This avoids adding an explicit cast, so
it keeps the code a bit more readable. Some of them also map relatively
well to a C++ equivalent (XNEW (struct foo) -> new foo), so it will be
possible to do scripted replacements if needed.
I only changed calls that were obviously allocating memory for one or
multiple "objects". Allocation of variable sizes (such as strings or
buffer handling) will be for later (and won't use XNEW).
- xmalloc (sizeof (struct foo)) -> XNEW (struct foo)
- xmalloc (num * sizeof (struct foo)) -> XNEWVEC (struct foo, num)
- xcalloc (1, sizeof (struct foo)) -> XCNEW (struct foo)
- xcalloc (num, sizeof (struct foo)) -> XCNEWVEC (struct foo, num)
- xrealloc (p, num * sizeof (struct foo) -> XRESIZEVEC (struct foo, p, num)
- obstack_alloc (ob, sizeof (struct foo)) -> XOBNEW (ob, struct foo)
- obstack_alloc (ob, num * sizeof (struct foo)) -> XOBNEWVEC (ob, struct foo, num)
- alloca (sizeof (struct foo)) -> XALLOCA (struct foo)
- alloca (num * sizeof (struct foo)) -> XALLOCAVEC (struct foo, num)
Some instances of xmalloc followed by memset to zero the buffer were
replaced by XCNEW or XCNEWVEC.
I regtested on x86-64, Ubuntu 14.04, but the patch touches many
architecture-specific files. For those I'll have to rely on the
buildbot or people complaining that I broke their gdb.
gdb/ChangeLog:
* aarch64-linux-nat.c (aarch64_add_process): Likewise.
* aarch64-tdep.c (aarch64_gdbarch_init): Likewise.
* ada-exp.y (write_ambiguous_var): Likewise.
* ada-lang.c (resolve_subexp): Likewise.
(user_select_syms): Likewise.
(assign_aggregate): Likewise.
(ada_evaluate_subexp): Likewise.
(cache_symbol): Likewise.
* addrmap.c (allocate_key): Likewise.
(addrmap_create_mutable): Likewise.
* aix-thread.c (sync_threadlists): Likewise.
* alpha-tdep.c (alpha_push_dummy_call): Likewise.
(alpha_gdbarch_init): Likewise.
* amd64-windows-tdep.c (amd64_windows_push_arguments): Likewise.
* arm-linux-nat.c (arm_linux_add_process): Likewise.
* arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Likewise.
* arm-tdep.c (push_stack_item): Likewise.
(arm_displaced_step_copy_insn): Likewise.
(arm_gdbarch_init): Likewise.
(_initialize_arm_tdep): Likewise.
* avr-tdep.c (push_stack_item): Likewise.
* ax-general.c (new_agent_expr): Likewise.
* block.c (block_initialize_namespace): Likewise.
* breakpoint.c (alloc_counted_command_line): Likewise.
(update_dprintf_command_list): Likewise.
(parse_breakpoint_sals): Likewise.
(decode_static_tracepoint_spec): Likewise.
(until_break_command): Likewise.
(clear_command): Likewise.
(update_global_location_list): Likewise.
(get_breakpoint_objfile_data) Likewise.
* btrace.c (ftrace_new_function): Likewise.
(btrace_set_insn_history): Likewise.
(btrace_set_call_history): Likewise.
* buildsym.c (add_symbol_to_list): Likewise.
(record_pending_block): Likewise.
(start_subfile): Likewise.
(start_buildsym_compunit): Likewise.
(push_subfile): Likewise.
(end_symtab_get_static_block): Likewise.
(buildsym_init): Likewise.
* cli/cli-cmds.c (source_command): Likewise.
* cli/cli-decode.c (add_cmd): Likewise.
* cli/cli-script.c (build_command_line): Likewise.
(setup_user_args): Likewise.
(realloc_body_list): Likewise.
(process_next_line): Likewise.
(copy_command_lines): Likewise.
* cli/cli-setshow.c (do_set_command): Likewise.
* coff-pe-read.c (read_pe_exported_syms): Likewise.
* coffread.c (coff_locate_sections): Likewise.
(coff_symtab_read): Likewise.
(coff_read_struct_type): Likewise.
* common/cleanups.c (make_my_cleanup2): Likewise.
* common/common-exceptions.c (throw_it): Likewise.
* common/filestuff.c (make_cleanup_close): Likewise.
* common/format.c (parse_format_string): Likewise.
* common/queue.h (DEFINE_QUEUE_P): Likewise.
* compile/compile-object-load.c (munmap_list_add): Likewise.
(compile_object_load): Likewise.
* compile/compile-object-run.c (compile_object_run): Likewise.
* compile/compile.c (append_args): Likewise.
* corefile.c (specify_exec_file_hook): Likewise.
* cp-support.c (make_symbol_overload_list): Likewise.
* cris-tdep.c (push_stack_item): Likewise.
(cris_gdbarch_init): Likewise.
* ctf.c (ctf_trace_file_writer_new): Likewise.
* dbxread.c (init_header_files): Likewise.
(add_new_header_file): Likewise.
(init_bincl_list): Likewise.
(dbx_end_psymtab): Likewise.
(start_psymtab): Likewise.
(dbx_end_psymtab): Likewise.
* dcache.c (dcache_init): Likewise.
* dictionary.c (dict_create_hashed): Likewise.
(dict_create_hashed_expandable): Likewise.
(dict_create_linear): Likewise.
(dict_create_linear_expandable): Likewise.
* dtrace-probe.c (dtrace_process_dof_probe): Likewise.
* dummy-frame.c (register_dummy_frame_dtor): Likewise.
* dwarf2-frame-tailcall.c (cache_new_ref1): Likewise.
* dwarf2-frame.c (dwarf2_build_frame_info): Likewise.
(decode_frame_entry_1): Likewise.
* dwarf2expr.c (new_dwarf_expr_context): Likewise.
* dwarf2loc.c (dwarf2_compile_expr_to_ax): Likewise.
* dwarf2read.c (dwarf2_has_info): Likewise.
(create_signatured_type_table_from_index): Likewise.
(dwarf2_read_index): Likewise.
(dw2_get_file_names_reader): Likewise.
(create_all_type_units): Likewise.
(read_cutu_die_from_dwo): Likewise.
(init_tu_and_read_dwo_dies): Likewise.
(init_cutu_and_read_dies): Likewise.
(create_all_comp_units): Likewise.
(queue_comp_unit): Likewise.
(inherit_abstract_dies): Likewise.
(read_call_site_scope): Likewise.
(dwarf2_add_field): Likewise.
(dwarf2_add_typedef): Likewise.
(dwarf2_add_member_fn): Likewise.
(attr_to_dynamic_prop): Likewise.
(abbrev_table_alloc_abbrev): Likewise.
(abbrev_table_read_table): Likewise.
(add_include_dir): Likewise.
(add_file_name): Likewise.
(dwarf_decode_line_header): Likewise.
(dwarf2_const_value_attr): Likewise.
(dwarf_alloc_block): Likewise.
(parse_macro_definition): Likewise.
(set_die_type): Likewise.
(write_psymtabs_to_index): Likewise.
(create_cus_from_index): Likewise.
(dwarf2_create_include_psymtab): Likewise.
(process_psymtab_comp_unit_reader): Likewise.
(build_type_psymtab_dependencies): Likewise.
(read_comp_units_from_section): Likewise.
(compute_compunit_symtab_includes): Likewise.
(create_dwo_unit_in_dwp_v1): Likewise.
(create_dwo_unit_in_dwp_v2): Likewise.
(read_func_scope): Likewise.
(process_structure_scope): Likewise.
(mark_common_block_symbol_computed): Likewise.
(load_partial_dies): Likewise.
(dwarf2_symbol_mark_computed): Likewise.
* elfread.c (elf_symfile_segments): Likewise.
(elf_read_minimal_symbols): Likewise.
* environ.c (make_environ): Likewise.
* eval.c (evaluate_subexp_standard): Likewise.
* event-loop.c (create_file_handler): Likewise.
(create_async_signal_handler): Likewise.
(create_async_event_handler): Likewise.
(create_timer): Likewise.
* exec.c (build_section_table): Likewise.
* fbsd-nat.c (fbsd_remember_child): Likewise.
* fork-child.c (fork_inferior): Likewise.
* frv-tdep.c (new_variant): Likewise.
* gdbarch.sh (gdbarch_alloc): Likewise.
(append_name): Likewise.
* gdbtypes.c (rank_function): Likewise.
(copy_type_recursive): Likewise.
(add_dyn_prop): Likewise.
* gnu-nat.c (make_proc): Likewise.
(make_inf): Likewise.
(gnu_write_inferior): Likewise.
* gnu-v3-abi.c (build_gdb_vtable_type): Likewise.
(build_std_type_info_type): Likewise.
* guile/scm-param.c (compute_enum_list): Likewise.
* guile/scm-utils.c (gdbscm_parse_function_args): Likewise.
* guile/scm-value.c (gdbscm_value_call): Likewise.
* h8300-tdep.c (h8300_gdbarch_init): Likewise.
* hppa-tdep.c (hppa_init_objfile_priv_data): Likewise.
(read_unwind_info): Likewise.
* ia64-tdep.c (ia64_gdbarch_init): Likewise.
* infcall.c (dummy_frame_context_saver_setup): Likewise.
(call_function_by_hand_dummy): Likewise.
* infcmd.c (step_once): Likewise.
(finish_forward): Likewise.
(attach_command): Likewise.
(notice_new_inferior): Likewise.
* inferior.c (add_inferior_silent): Likewise.
* infrun.c (add_displaced_stepping_state): Likewise.
(save_infcall_control_state): Likewise.
(save_inferior_ptid): Likewise.
(_initialize_infrun): Likewise.
* jit.c (bfd_open_from_target_memory): Likewise.
(jit_gdbarch_data_init): Likewise.
* language.c (add_language): Likewise.
* linespec.c (decode_line_2): Likewise.
* linux-nat.c (add_to_pid_list): Likewise.
(add_initial_lwp): Likewise.
* linux-thread-db.c (add_thread_db_info): Likewise.
(record_thread): Likewise.
(info_auto_load_libthread_db): Likewise.
* m32c-tdep.c (m32c_gdbarch_init): Likewise.
* m68hc11-tdep.c (m68hc11_gdbarch_init): Likewise.
* m68k-tdep.c (m68k_gdbarch_init): Likewise.
* m88k-tdep.c (m88k_analyze_prologue): Likewise.
* macrocmd.c (macro_define_command): Likewise.
* macroexp.c (gather_arguments): Likewise.
* macroscope.c (sal_macro_scope): Likewise.
* macrotab.c (new_macro_table): Likewise.
* mdebugread.c (push_parse_stack): Likewise.
(parse_partial_symbols): Likewise.
(parse_symbol): Likewise.
(psymtab_to_symtab_1): Likewise.
(new_block): Likewise.
(new_psymtab): Likewise.
(mdebug_build_psymtabs): Likewise.
(add_pending): Likewise.
(elfmdebug_build_psymtabs): Likewise.
* mep-tdep.c (mep_gdbarch_init): Likewise.
* mi/mi-main.c (mi_execute_command): Likewise.
* mi/mi-parse.c (mi_parse_argv): Likewise.
* minidebug.c (lzma_open): Likewise.
* minsyms.c (terminate_minimal_symbol_table): Likewise.
* mips-linux-nat.c (mips_linux_insert_watchpoint): Likewise.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* mn10300-tdep.c (mn10300_gdbarch_init): Likewise.
* msp430-tdep.c (msp430_gdbarch_init): Likewise.
* mt-tdep.c (mt_registers_info): Likewise.
* nat/aarch64-linux.c (aarch64_linux_new_thread): Likewise.
* nat/linux-btrace.c (linux_enable_bts): Likewise.
(linux_enable_pt): Likewise.
* nat/linux-osdata.c (linux_xfer_osdata_processes): Likewise.
(linux_xfer_osdata_processgroups): Likewise.
* nios2-tdep.c (nios2_gdbarch_init): Likewise.
* nto-procfs.c (procfs_meminfo): Likewise.
* objc-lang.c (start_msglist): Likewise.
(selectors_info): Likewise.
(classes_info): Likewise.
(find_methods): Likewise.
* objfiles.c (allocate_objfile): Likewise.
(update_section_map): Likewise.
* osabi.c (gdbarch_register_osabi): Likewise.
(gdbarch_register_osabi_sniffer): Likewise.
* parse.c (start_arglist): Likewise.
* ppc-linux-nat.c (hwdebug_find_thread_points_by_tid): Likewise.
(hwdebug_insert_point): Likewise.
* printcmd.c (display_command): Likewise.
(ui_printf): Likewise.
* procfs.c (create_procinfo): Likewise.
(load_syscalls): Likewise.
(proc_get_LDT_entry): Likewise.
(proc_update_threads): Likewise.
* prologue-value.c (make_pv_area): Likewise.
(pv_area_store): Likewise.
* psymtab.c (extend_psymbol_list): Likewise.
(init_psymbol_list): Likewise.
(allocate_psymtab): Likewise.
* python/py-inferior.c (add_thread_object): Likewise.
* python/py-param.c (compute_enum_values): Likewise.
* python/py-value.c (valpy_call): Likewise.
* python/py-varobj.c (py_varobj_iter_next): Likewise.
* python/python.c (ensure_python_env): Likewise.
* record-btrace.c (record_btrace_start_replaying): Likewise.
* record-full.c (record_full_reg_alloc): Likewise.
(record_full_mem_alloc): Likewise.
(record_full_end_alloc): Likewise.
(record_full_core_xfer_partial): Likewise.
* regcache.c (get_thread_arch_aspace_regcache): Likewise.
* remote-fileio.c (remote_fileio_init_fd_map): Likewise.
* remote-notif.c (remote_notif_state_allocate): Likewise.
* remote.c (demand_private_info): Likewise.
(remote_notif_stop_alloc_reply): Likewise.
(remote_enable_btrace): Likewise.
* reverse.c (save_bookmark_command): Likewise.
* rl78-tdep.c (rl78_gdbarch_init): Likewise.
* rx-tdep.c (rx_gdbarch_init): Likewise.
* s390-linux-nat.c (s390_insert_watchpoint): Likewise.
* ser-go32.c (dos_get_tty_state): Likewise.
(dos_copy_tty_state): Likewise.
* ser-mingw.c (ser_windows_open): Likewise.
(ser_console_wait_handle): Likewise.
(ser_console_get_tty_state): Likewise.
(make_pipe_state): Likewise.
(net_windows_open): Likewise.
* ser-unix.c (hardwire_get_tty_state): Likewise.
(hardwire_copy_tty_state): Likewise.
* solib-aix.c (solib_aix_new_lm_info): Likewise.
* solib-dsbt.c (dsbt_current_sos): Likewise.
(dsbt_relocate_main_executable): Likewise.
* solib-frv.c (frv_current_sos): Likewise.
(frv_relocate_main_executable): Likewise.
* solib-spu.c (spu_bfd_fopen): Likewise.
* solib-svr4.c (lm_info_read): Likewise.
(svr4_copy_library_list): Likewise.
(svr4_default_sos): Likewise.
* source.c (find_source_lines): Likewise.
(line_info): Likewise.
(add_substitute_path_rule): Likewise.
* spu-linux-nat.c (spu_bfd_open): Likewise.
* spu-tdep.c (info_spu_dma_cmdlist): Likewise.
* stabsread.c (dbx_lookup_type): Likewise.
(read_type): Likewise.
(read_member_functions): Likewise.
(read_struct_fields): Likewise.
(read_baseclasses): Likewise.
(read_args): Likewise.
(_initialize_stabsread): Likewise.
* stack.c (func_command): Likewise.
* stap-probe.c (handle_stap_probe): Likewise.
* symfile.c (addrs_section_sort): Likewise.
(addr_info_make_relative): Likewise.
(load_section_callback): Likewise.
(add_symbol_file_command): Likewise.
(init_filename_language_table): Likewise.
* symtab.c (create_filename_seen_cache): Likewise.
(sort_search_symbols_remove_dups): Likewise.
(search_symbols): Likewise.
* target.c (make_cleanup_restore_target_terminal): Likewise.
* thread.c (new_thread): Likewise.
(enable_thread_stack_temporaries): Likewise.
(make_cleanup_restore_current_thread): Likewise.
(thread_apply_all_command): Likewise.
* tic6x-tdep.c (tic6x_gdbarch_init): Likewise.
* top.c (gdb_readline_wrapper): Likewise.
* tracefile-tfile.c (tfile_trace_file_writer_new): Likewise.
* tracepoint.c (trace_find_line_command): Likewise.
(all_tracepoint_actions_and_cleanup): Likewise.
(make_cleanup_restore_current_traceframe): Likewise.
(get_uploaded_tp): Likewise.
(get_uploaded_tsv): Likewise.
* tui/tui-data.c (tui_alloc_generic_win_info): Likewise.
(tui_alloc_win_info): Likewise.
(tui_alloc_content): Likewise.
(tui_add_content_elements): Likewise.
* tui/tui-disasm.c (tui_find_disassembly_address): Likewise.
(tui_set_disassem_content): Likewise.
* ui-file.c (ui_file_new): Likewise.
(stdio_file_new): Likewise.
(tee_file_new): Likewise.
* utils.c (make_cleanup_restore_integer): Likewise.
(add_internal_problem_command): Likewise.
* v850-tdep.c (v850_gdbarch_init): Likewise.
* valops.c (find_oload_champ): Likewise.
* value.c (allocate_value_lazy): Likewise.
(record_latest_value): Likewise.
(create_internalvar): Likewise.
* varobj.c (install_variable): Likewise.
(new_variable): Likewise.
(new_root_variable): Likewise.
(cppush): Likewise.
(_initialize_varobj): Likewise.
* windows-nat.c (windows_make_so): Likewise.
* x86-nat.c (x86_add_process): Likewise.
* xcoffread.c (arrange_linetable): Likewise.
(allocate_include_entry): Likewise.
(process_linenos): Likewise.
(SYMBOL_DUP): Likewise.
(xcoff_start_psymtab): Likewise.
(xcoff_end_psymtab): Likewise.
* xml-support.c (gdb_xml_parse_attr_ulongest): Likewise.
* xtensa-tdep.c (xtensa_register_type): Likewise.
* gdbarch.c: Regenerate.
* gdbarch.h: Regenerate.
gdb/gdbserver/ChangeLog:
* ax.c (gdb_parse_agent_expr): Likewise.
(compile_bytecodes): Likewise.
* dll.c (loaded_dll): Likewise.
* event-loop.c (append_callback_event): Likewise.
(create_file_handler): Likewise.
(create_file_event): Likewise.
* hostio.c (handle_open): Likewise.
* inferiors.c (add_thread): Likewise.
(add_process): Likewise.
* linux-aarch64-low.c (aarch64_linux_new_process): Likewise.
* linux-arm-low.c (arm_new_process): Likewise.
(arm_new_thread): Likewise.
* linux-low.c (add_to_pid_list): Likewise.
(linux_add_process): Likewise.
(handle_extended_wait): Likewise.
(add_lwp): Likewise.
(enqueue_one_deferred_signal): Likewise.
(enqueue_pending_signal): Likewise.
(linux_resume_one_lwp_throw): Likewise.
(linux_resume_one_thread): Likewise.
(linux_read_memory): Likewise.
(linux_write_memory): Likewise.
* linux-mips-low.c (mips_linux_new_process): Likewise.
(mips_linux_new_thread): Likewise.
(mips_add_watchpoint): Likewise.
* linux-x86-low.c (initialize_low_arch): Likewise.
* lynx-low.c (lynx_add_process): Likewise.
* mem-break.c (set_raw_breakpoint_at): Likewise.
(set_breakpoint): Likewise.
(add_condition_to_breakpoint): Likewise.
(add_commands_to_breakpoint): Likewise.
(clone_agent_expr): Likewise.
(clone_one_breakpoint): Likewise.
* regcache.c (new_register_cache): Likewise.
* remote-utils.c (look_up_one_symbol): Likewise.
* server.c (queue_stop_reply): Likewise.
(start_inferior): Likewise.
(queue_stop_reply_callback): Likewise.
(handle_target_event): Likewise.
* spu-low.c (fetch_ppc_memory): Likewise.
(store_ppc_memory): Likewise.
* target.c (set_target_ops): Likewise.
* thread-db.c (thread_db_load_search): Likewise.
(try_thread_db_load_1): Likewise.
* tracepoint.c (add_tracepoint): Likewise.
(add_tracepoint_action): Likewise.
(create_trace_state_variable): Likewise.
(cmd_qtdpsrc): Likewise.
(cmd_qtro): Likewise.
(add_while_stepping_state): Likewise.
* win32-low.c (child_add_thread): Likewise.
(get_image_name): Likewise.
2015-08-27 05:16:07 +08:00
|
|
|
|
struct inf *inf = XNEW (struct inf);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
inf->task = 0;
|
|
|
|
|
inf->threads = 0;
|
|
|
|
|
inf->threads_up_to_date = 0;
|
|
|
|
|
inf->pid = 0;
|
|
|
|
|
inf->wait.status.kind = TARGET_WAITKIND_SPURIOUS;
|
|
|
|
|
inf->wait.thread = 0;
|
|
|
|
|
inf->wait.exc.handler = MACH_PORT_NULL;
|
|
|
|
|
inf->wait.exc.reply = MACH_PORT_NULL;
|
|
|
|
|
inf->step_thread = 0;
|
|
|
|
|
inf->signal_thread = 0;
|
|
|
|
|
inf->event_port = MACH_PORT_NULL;
|
|
|
|
|
inf->running = 0;
|
1999-06-08 03:19:32 +08:00
|
|
|
|
inf->stopped = 0;
|
|
|
|
|
inf->nomsg = 1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf->traced = 0;
|
|
|
|
|
inf->no_wait = 0;
|
|
|
|
|
inf->pending_execs = 0;
|
|
|
|
|
inf->pause_sc = 1;
|
|
|
|
|
inf->detach_sc = 0;
|
|
|
|
|
inf->default_thread_run_sc = 0;
|
|
|
|
|
inf->default_thread_pause_sc = 0;
|
|
|
|
|
inf->default_thread_detach_sc = 0;
|
|
|
|
|
inf->want_signals = 1; /* By default */
|
|
|
|
|
inf->want_exceptions = 1; /* By default */
|
|
|
|
|
|
|
|
|
|
return inf;
|
|
|
|
|
}
|
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* Clear INF's target wait status. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
void
|
|
|
|
|
inf_clear_wait (struct inf *inf)
|
|
|
|
|
{
|
|
|
|
|
inf_debug (inf, "clearing wait");
|
|
|
|
|
inf->wait.status.kind = TARGET_WAITKIND_SPURIOUS;
|
|
|
|
|
inf->wait.thread = 0;
|
|
|
|
|
inf->wait.suppress = 0;
|
|
|
|
|
if (inf->wait.exc.handler != MACH_PORT_NULL)
|
|
|
|
|
{
|
|
|
|
|
mach_port_deallocate (mach_task_self (), inf->wait.exc.handler);
|
|
|
|
|
inf->wait.exc.handler = MACH_PORT_NULL;
|
|
|
|
|
}
|
|
|
|
|
if (inf->wait.exc.reply != MACH_PORT_NULL)
|
|
|
|
|
{
|
|
|
|
|
mach_port_deallocate (mach_task_self (), inf->wait.exc.reply);
|
|
|
|
|
inf->wait.exc.reply = MACH_PORT_NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
inf_cleanup (struct inf *inf)
|
|
|
|
|
{
|
|
|
|
|
inf_debug (inf, "cleanup");
|
|
|
|
|
|
|
|
|
|
inf_clear_wait (inf);
|
|
|
|
|
|
|
|
|
|
inf_set_pid (inf, -1);
|
|
|
|
|
inf->pid = 0;
|
1999-06-08 03:19:32 +08:00
|
|
|
|
inf->running = 0;
|
|
|
|
|
inf->stopped = 0;
|
|
|
|
|
inf->nomsg = 1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf->traced = 0;
|
|
|
|
|
inf->no_wait = 0;
|
|
|
|
|
inf->pending_execs = 0;
|
|
|
|
|
|
|
|
|
|
if (inf->event_port)
|
|
|
|
|
{
|
|
|
|
|
mach_port_destroy (mach_task_self (), inf->event_port);
|
|
|
|
|
inf->event_port = MACH_PORT_NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
inf_startup (struct inf *inf, int pid)
|
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
inf_debug (inf, "startup: pid = %d", pid);
|
|
|
|
|
|
|
|
|
|
inf_cleanup (inf);
|
|
|
|
|
|
|
|
|
|
/* Make the port on which we receive all events. */
|
|
|
|
|
err = mach_port_allocate (mach_task_self (),
|
|
|
|
|
MACH_PORT_RIGHT_RECEIVE, &inf->event_port);
|
|
|
|
|
if (err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("Error allocating event port: %s"), safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Make a send right for it, so we can easily copy it for other people. */
|
|
|
|
|
mach_port_insert_right (mach_task_self (), inf->event_port,
|
|
|
|
|
inf->event_port, MACH_MSG_TYPE_MAKE_SEND);
|
|
|
|
|
inf_set_pid (inf, pid);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* Close current process, if any, and attach INF to process PORT. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
void
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_set_pid (struct inf *inf, pid_t pid)
|
|
|
|
|
{
|
|
|
|
|
task_t task_port;
|
|
|
|
|
struct proc *task = inf->task;
|
|
|
|
|
|
|
|
|
|
inf_debug (inf, "setting pid: %d", pid);
|
|
|
|
|
|
|
|
|
|
if (pid < 0)
|
|
|
|
|
task_port = MACH_PORT_NULL;
|
|
|
|
|
else
|
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err = proc_pid2task (proc_server, pid, &task_port);
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (err)
|
2011-01-08 03:36:19 +08:00
|
|
|
|
error (_("Error getting task for pid %d: %s"),
|
|
|
|
|
pid, safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
inf_debug (inf, "setting task: %lu", task_port);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (inf->pause_sc)
|
|
|
|
|
task_suspend (task_port);
|
|
|
|
|
|
|
|
|
|
if (task && task->port != task_port)
|
|
|
|
|
{
|
|
|
|
|
inf->task = 0;
|
2011-01-08 03:36:19 +08:00
|
|
|
|
inf_validate_procs (inf); /* Trash all the threads. */
|
|
|
|
|
_proc_free (task); /* And the task. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (task_port != MACH_PORT_NULL)
|
|
|
|
|
{
|
|
|
|
|
inf->task = make_proc (inf, task_port, PROC_TID_TASK);
|
|
|
|
|
inf->threads_up_to_date = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (inf->task)
|
|
|
|
|
{
|
|
|
|
|
inf->pid = pid;
|
|
|
|
|
if (inf->pause_sc)
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* Reflect task_suspend above. */
|
|
|
|
|
inf->task->sc = inf->task->cur_sc = 1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
inf->pid = -1;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-06-08 03:19:32 +08:00
|
|
|
|
/* Validates INF's stopped, nomsg and traced field from the actual
|
|
|
|
|
proc server state. Note that the traced field is only updated from
|
|
|
|
|
the proc server state if we do not have a message port. If we do
|
|
|
|
|
have a message port we'd better look at the tracemask itself. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
1999-06-08 03:19:32 +08:00
|
|
|
|
inf_validate_procinfo (struct inf *inf)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
char *noise;
|
|
|
|
|
mach_msg_type_number_t noise_len = 0;
|
|
|
|
|
struct procinfo *pi;
|
|
|
|
|
mach_msg_type_number_t pi_len = 0;
|
|
|
|
|
int info_flags = 0;
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err =
|
2010-05-15 04:17:37 +08:00
|
|
|
|
proc_getprocinfo (proc_server, inf->pid, &info_flags,
|
|
|
|
|
(procinfo_t *) &pi, &pi_len, &noise, &noise_len);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!err)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
inf->stopped = !!(pi->state & PI_STOPPED);
|
1999-06-08 03:19:32 +08:00
|
|
|
|
inf->nomsg = !!(pi->state & PI_NOMSG);
|
|
|
|
|
if (inf->nomsg)
|
|
|
|
|
inf->traced = !!(pi->state & PI_TRACED);
|
2014-11-23 23:19:46 +08:00
|
|
|
|
vm_deallocate (mach_task_self (), (vm_address_t) pi,
|
|
|
|
|
pi_len * sizeof (*(procinfo_t) 0));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (noise_len > 0)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
vm_deallocate (mach_task_self (), (vm_address_t) noise, noise_len);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2000-02-11 14:34:58 +08:00
|
|
|
|
/* Validates INF's task suspend count. If it's higher than we expect,
|
|
|
|
|
verify with the user before `stealing' the extra count. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
|
|
|
|
inf_validate_task_sc (struct inf *inf)
|
|
|
|
|
{
|
2000-02-11 14:34:58 +08:00
|
|
|
|
char *noise;
|
|
|
|
|
mach_msg_type_number_t noise_len = 0;
|
|
|
|
|
struct procinfo *pi;
|
|
|
|
|
mach_msg_type_number_t pi_len = 0;
|
|
|
|
|
int info_flags = PI_FETCH_TASKINFO;
|
|
|
|
|
int suspend_count = -1;
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2000-02-11 14:34:58 +08:00
|
|
|
|
retry:
|
|
|
|
|
err = proc_getprocinfo (proc_server, inf->pid, &info_flags,
|
2000-02-26 23:04:30 +08:00
|
|
|
|
(procinfo_t *) &pi, &pi_len, &noise, &noise_len);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (err)
|
2000-02-11 14:34:58 +08:00
|
|
|
|
{
|
|
|
|
|
inf->task->dead = 1; /* oh well */
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (inf->task->cur_sc < pi->taskinfo.suspend_count && suspend_count == -1)
|
|
|
|
|
{
|
|
|
|
|
/* The proc server might have suspended the task while stopping
|
|
|
|
|
it. This happens when the task is handling a traced signal.
|
|
|
|
|
Refetch the suspend count. The proc server should be
|
|
|
|
|
finished stopping the task by now. */
|
|
|
|
|
suspend_count = pi->taskinfo.suspend_count;
|
|
|
|
|
goto retry;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
suspend_count = pi->taskinfo.suspend_count;
|
|
|
|
|
|
2014-11-23 23:19:46 +08:00
|
|
|
|
vm_deallocate (mach_task_self (), (vm_address_t) pi,
|
|
|
|
|
pi_len * sizeof (*(procinfo_t) 0));
|
2000-02-11 14:34:58 +08:00
|
|
|
|
if (noise_len > 0)
|
2014-11-23 23:19:46 +08:00
|
|
|
|
vm_deallocate (mach_task_self (), (vm_address_t) noise, noise_len);
|
2000-02-11 14:34:58 +08:00
|
|
|
|
|
|
|
|
|
if (inf->task->cur_sc < suspend_count)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2016-04-12 23:49:32 +08:00
|
|
|
|
if (!query (_("Pid %d has an additional task suspend count of %d;"
|
|
|
|
|
" clear it? "), inf->pid,
|
|
|
|
|
suspend_count - inf->task->cur_sc))
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("Additional task suspend count left untouched."));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2000-02-11 14:34:58 +08:00
|
|
|
|
inf->task->cur_sc = suspend_count;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* Turns tracing for INF on or off, depending on ON, unless it already
|
|
|
|
|
is. If INF is running, the resume_sc count of INF's threads will
|
|
|
|
|
be modified, and the signal thread will briefly be run to change
|
|
|
|
|
the trace state. */
|
2014-01-05 19:36:03 +08:00
|
|
|
|
static void
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_set_traced (struct inf *inf, int on)
|
|
|
|
|
{
|
2000-02-26 23:04:30 +08:00
|
|
|
|
if (on == inf->traced)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (inf->task && !inf->task->dead)
|
|
|
|
|
/* Make it take effect immediately. */
|
|
|
|
|
{
|
|
|
|
|
sigset_t mask = on ? ~(sigset_t) 0 : 0;
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err =
|
1999-07-08 04:19:36 +08:00
|
|
|
|
INF_RESUME_MSGPORT_RPC (inf, msg_set_init_int (msgport, refport,
|
2000-02-26 23:04:30 +08:00
|
|
|
|
INIT_TRACEMASK, mask));
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
if (err == EIEIO)
|
|
|
|
|
{
|
|
|
|
|
if (on)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Can't modify tracing state for pid %d: %s"),
|
2000-02-26 23:04:30 +08:00
|
|
|
|
inf->pid, "No signal thread");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf->traced = on;
|
2000-02-26 23:04:30 +08:00
|
|
|
|
}
|
|
|
|
|
else if (err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Can't modify tracing state for pid %d: %s"),
|
2002-03-28 05:35:35 +08:00
|
|
|
|
inf->pid, safe_strerror (err));
|
2000-02-26 23:04:30 +08:00
|
|
|
|
else
|
|
|
|
|
inf->traced = on;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
inf->traced = on;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* Makes all the real suspend count deltas of all the procs in INF
|
|
|
|
|
match the desired values. Careful to always do thread/task suspend
|
|
|
|
|
counts in the safe order. Returns true if at least one thread is
|
2011-01-08 03:36:19 +08:00
|
|
|
|
thought to be running. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
int
|
|
|
|
|
inf_update_suspends (struct inf *inf)
|
|
|
|
|
{
|
|
|
|
|
struct proc *task = inf->task;
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* We don't have to update INF->threads even though we're iterating over it
|
|
|
|
|
because we'll change a thread only if it already has an existing proc
|
|
|
|
|
entry. */
|
|
|
|
|
inf_debug (inf, "updating suspend counts");
|
|
|
|
|
|
|
|
|
|
if (task)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread;
|
|
|
|
|
int task_running = (task->sc == 0), thread_running = 0;
|
|
|
|
|
|
|
|
|
|
if (task->sc > task->cur_sc)
|
|
|
|
|
/* The task is becoming _more_ suspended; do before any threads. */
|
|
|
|
|
task_running = proc_update_sc (task);
|
|
|
|
|
|
|
|
|
|
if (inf->pending_execs)
|
|
|
|
|
/* When we're waiting for an exec, things may be happening behind our
|
|
|
|
|
back, so be conservative. */
|
|
|
|
|
thread_running = 1;
|
|
|
|
|
|
|
|
|
|
/* Do all the thread suspend counts. */
|
|
|
|
|
for (thread = inf->threads; thread; thread = thread->next)
|
|
|
|
|
thread_running |= proc_update_sc (thread);
|
|
|
|
|
|
|
|
|
|
if (task->sc != task->cur_sc)
|
|
|
|
|
/* We didn't do the task first, because we wanted to wait for the
|
|
|
|
|
threads; do it now. */
|
|
|
|
|
task_running = proc_update_sc (task);
|
|
|
|
|
|
|
|
|
|
inf_debug (inf, "%srunning...",
|
|
|
|
|
(thread_running && task_running) ? "" : "not ");
|
|
|
|
|
|
|
|
|
|
inf->running = thread_running && task_running;
|
|
|
|
|
|
|
|
|
|
/* Once any thread has executed some code, we can't depend on the
|
1999-07-08 04:19:36 +08:00
|
|
|
|
threads list any more. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (inf->running)
|
|
|
|
|
inf->threads_up_to_date = 0;
|
|
|
|
|
|
|
|
|
|
return inf->running;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Converts a GDB pid to a struct proc. */
|
|
|
|
|
struct proc *
|
|
|
|
|
inf_tid_to_thread (struct inf *inf, int tid)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = inf->threads;
|
|
|
|
|
|
|
|
|
|
while (thread)
|
|
|
|
|
if (thread->tid == tid)
|
|
|
|
|
return thread;
|
|
|
|
|
else
|
|
|
|
|
thread = thread->next;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Converts a thread port to a struct proc. */
|
2014-01-05 19:36:03 +08:00
|
|
|
|
static struct proc *
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_port_to_thread (struct inf *inf, mach_port_t port)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = inf->threads;
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
while (thread)
|
|
|
|
|
if (thread->port == port)
|
|
|
|
|
return thread;
|
|
|
|
|
else
|
|
|
|
|
thread = thread->next;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
2014-09-13 02:29:11 +08:00
|
|
|
|
/* See gnu-nat.h. */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
inf_threads (struct inf *inf, inf_threads_ftype *f, void *arg)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread;
|
|
|
|
|
|
|
|
|
|
for (thread = inf->threads; thread; thread = thread->next)
|
|
|
|
|
f (thread, arg);
|
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Make INF's list of threads be consistent with reality of TASK. */
|
|
|
|
|
void
|
|
|
|
|
inf_validate_procs (struct inf *inf)
|
|
|
|
|
{
|
|
|
|
|
thread_array_t threads;
|
2000-02-26 23:04:30 +08:00
|
|
|
|
mach_msg_type_number_t num_threads, i;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
struct proc *task = inf->task;
|
|
|
|
|
|
|
|
|
|
/* If no threads are currently running, this function will guarantee that
|
|
|
|
|
things are up to date. The exception is if there are zero threads --
|
|
|
|
|
then it is almost certainly in an odd state, and probably some outside
|
|
|
|
|
agent will create threads. */
|
|
|
|
|
inf->threads_up_to_date = inf->threads ? !inf->running : 0;
|
|
|
|
|
|
|
|
|
|
if (task)
|
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err = task_threads (task->port, &threads, &num_threads);
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_debug (inf, "fetching threads");
|
|
|
|
|
if (err)
|
|
|
|
|
/* TASK must be dead. */
|
|
|
|
|
{
|
|
|
|
|
task->dead = 1;
|
|
|
|
|
task = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!task)
|
|
|
|
|
{
|
|
|
|
|
num_threads = 0;
|
|
|
|
|
inf_debug (inf, "no task");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* Make things normally linear. */
|
|
|
|
|
mach_msg_type_number_t search_start = 0;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* Which thread in PROCS corresponds to each task thread, & the task. */
|
|
|
|
|
struct proc *matched[num_threads + 1];
|
|
|
|
|
/* The last thread in INF->threads, so we can add to the end. */
|
|
|
|
|
struct proc *last = 0;
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* The current thread we're considering. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
struct proc *thread = inf->threads;
|
|
|
|
|
|
2003-09-30 21:23:49 +08:00
|
|
|
|
memset (matched, 0, sizeof (matched));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
while (thread)
|
|
|
|
|
{
|
2000-02-26 23:04:30 +08:00
|
|
|
|
mach_msg_type_number_t left;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
for (i = search_start, left = num_threads; left; i++, left--)
|
|
|
|
|
{
|
|
|
|
|
if (i >= num_threads)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
i -= num_threads; /* I wrapped around. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (thread->port == threads[i])
|
|
|
|
|
/* We already know about this thread. */
|
|
|
|
|
{
|
|
|
|
|
matched[i] = thread;
|
|
|
|
|
last = thread;
|
|
|
|
|
thread = thread->next;
|
|
|
|
|
search_start++;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!left)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
proc_debug (thread, "died!");
|
|
|
|
|
thread->port = MACH_PORT_NULL;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
thread = _proc_free (thread); /* THREAD is dead. */
|
2006-05-12 03:37:52 +08:00
|
|
|
|
if (last)
|
|
|
|
|
last->next = thread;
|
|
|
|
|
else
|
|
|
|
|
inf->threads = thread;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < num_threads; i++)
|
2000-02-26 23:04:30 +08:00
|
|
|
|
{
|
|
|
|
|
if (matched[i])
|
|
|
|
|
/* Throw away the duplicate send right. */
|
|
|
|
|
mach_port_deallocate (mach_task_self (), threads[i]);
|
|
|
|
|
else
|
|
|
|
|
/* THREADS[I] is a thread we don't know about yet! */
|
|
|
|
|
{
|
2008-09-09 05:33:25 +08:00
|
|
|
|
ptid_t ptid;
|
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
thread = make_proc (inf, threads[i], next_thread_id++);
|
2006-05-12 03:37:52 +08:00
|
|
|
|
if (last)
|
|
|
|
|
last->next = thread;
|
|
|
|
|
else
|
|
|
|
|
inf->threads = thread;
|
2000-02-26 23:04:30 +08:00
|
|
|
|
last = thread;
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
proc_debug (thread, "new thread: %lu", threads[i]);
|
2008-09-09 05:33:25 +08:00
|
|
|
|
|
2013-09-18 22:47:51 +08:00
|
|
|
|
ptid = ptid_build (inf->pid, thread->tid, 0);
|
2008-09-09 05:33:25 +08:00
|
|
|
|
|
|
|
|
|
/* Tell GDB's generic thread code. */
|
|
|
|
|
|
|
|
|
|
if (ptid_equal (inferior_ptid, pid_to_ptid (inf->pid)))
|
|
|
|
|
/* This is the first time we're hearing about thread
|
|
|
|
|
ids, after a fork-child. */
|
|
|
|
|
thread_change_ptid (inferior_ptid, ptid);
|
|
|
|
|
else if (inf->pending_execs != 0)
|
|
|
|
|
/* This is a shell thread. */
|
|
|
|
|
add_thread_silent (ptid);
|
|
|
|
|
else
|
|
|
|
|
add_thread (ptid);
|
2000-02-26 23:04:30 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
vm_deallocate (mach_task_self (),
|
2000-02-26 23:04:30 +08:00
|
|
|
|
(vm_address_t) threads, (num_threads * sizeof (thread_t)));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Makes sure that INF's thread list is synced with the actual process. */
|
2003-09-09 11:14:02 +08:00
|
|
|
|
int
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_update_procs (struct inf *inf)
|
|
|
|
|
{
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!inf->task)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
return 0;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!inf->threads_up_to_date)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_validate_procs (inf);
|
|
|
|
|
return !!inf->task;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Sets the resume_sc of each thread in inf. That of RUN_THREAD is set to 0,
|
|
|
|
|
and others are set to their run_sc if RUN_OTHERS is true, and otherwise
|
|
|
|
|
their pause_sc. */
|
2003-09-09 11:14:02 +08:00
|
|
|
|
void
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_set_threads_resume_sc (struct inf *inf,
|
|
|
|
|
struct proc *run_thread, int run_others)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread;
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_update_procs (inf);
|
|
|
|
|
for (thread = inf->threads; thread; thread = thread->next)
|
|
|
|
|
if (thread == run_thread)
|
|
|
|
|
thread->resume_sc = 0;
|
|
|
|
|
else if (run_others)
|
|
|
|
|
thread->resume_sc = thread->run_sc;
|
|
|
|
|
else
|
|
|
|
|
thread->resume_sc = thread->pause_sc;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Cause INF to continue execution immediately; individual threads may still
|
|
|
|
|
be suspended (but their suspend counts will be updated). */
|
2003-09-09 11:14:02 +08:00
|
|
|
|
void
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_resume (struct inf *inf)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread;
|
|
|
|
|
|
|
|
|
|
inf_update_procs (inf);
|
|
|
|
|
|
|
|
|
|
for (thread = inf->threads; thread; thread = thread->next)
|
|
|
|
|
thread->sc = thread->resume_sc;
|
|
|
|
|
|
|
|
|
|
if (inf->task)
|
|
|
|
|
{
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!inf->pending_execs)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* Try to make sure our task count is correct -- in the case where
|
|
|
|
|
we're waiting for an exec though, things are too volatile, so just
|
|
|
|
|
assume things will be reasonable (which they usually will be). */
|
|
|
|
|
inf_validate_task_sc (inf);
|
|
|
|
|
inf->task->sc = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inf_update_suspends (inf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Cause INF to stop execution immediately; individual threads may still
|
|
|
|
|
be running. */
|
2003-09-09 11:14:02 +08:00
|
|
|
|
void
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_suspend (struct inf *inf)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread;
|
|
|
|
|
|
|
|
|
|
inf_update_procs (inf);
|
|
|
|
|
|
|
|
|
|
for (thread = inf->threads; thread; thread = thread->next)
|
|
|
|
|
thread->sc = thread->pause_sc;
|
|
|
|
|
|
|
|
|
|
if (inf->task)
|
|
|
|
|
inf->task->sc = inf->pause_sc;
|
|
|
|
|
|
|
|
|
|
inf_update_suspends (inf);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* INF has one thread PROC that is in single-stepping mode. This
|
|
|
|
|
function changes it to be PROC, changing any old step_thread to be
|
|
|
|
|
a normal one. A PROC of 0 clears any existing value. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
void
|
|
|
|
|
inf_set_step_thread (struct inf *inf, struct proc *thread)
|
|
|
|
|
{
|
2001-03-13 08:51:40 +08:00
|
|
|
|
gdb_assert (!thread || proc_is_thread (thread));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (thread)
|
|
|
|
|
inf_debug (inf, "setting step thread: %d/%d", inf->pid, thread->tid);
|
|
|
|
|
else
|
|
|
|
|
inf_debug (inf, "clearing step thread");
|
|
|
|
|
|
|
|
|
|
if (inf->step_thread != thread)
|
|
|
|
|
{
|
|
|
|
|
if (inf->step_thread && inf->step_thread->port != MACH_PORT_NULL)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!proc_trace (inf->step_thread, 0))
|
1999-04-16 09:35:26 +08:00
|
|
|
|
return;
|
|
|
|
|
if (thread && proc_trace (thread, 1))
|
|
|
|
|
inf->step_thread = thread;
|
|
|
|
|
else
|
|
|
|
|
inf->step_thread = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Set up the thread resume_sc's so that only the signal thread is running
|
|
|
|
|
(plus whatever other thread are set to always run). Returns true if we
|
|
|
|
|
did so, or false if we can't find a signal thread. */
|
2003-09-09 11:14:02 +08:00
|
|
|
|
int
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_set_threads_resume_sc_for_signal_thread (struct inf *inf)
|
|
|
|
|
{
|
|
|
|
|
if (inf->signal_thread)
|
|
|
|
|
{
|
|
|
|
|
inf_set_threads_resume_sc (inf, inf->signal_thread, 0);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
inf_update_signal_thread (struct inf *inf)
|
|
|
|
|
{
|
|
|
|
|
/* XXX for now we assume that if there's a msgport, the 2nd thread is
|
|
|
|
|
the signal thread. */
|
|
|
|
|
inf->signal_thread = inf->threads ? inf->threads->next : 0;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Detachs from INF's inferior task, letting it run once again... */
|
|
|
|
|
void
|
|
|
|
|
inf_detach (struct inf *inf)
|
|
|
|
|
{
|
|
|
|
|
struct proc *task = inf->task;
|
|
|
|
|
|
|
|
|
|
inf_debug (inf, "detaching...");
|
|
|
|
|
|
|
|
|
|
inf_clear_wait (inf);
|
|
|
|
|
inf_set_step_thread (inf, 0);
|
|
|
|
|
|
|
|
|
|
if (task)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread;
|
|
|
|
|
|
1999-06-08 03:19:32 +08:00
|
|
|
|
inf_validate_procinfo (inf);
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_set_traced (inf, 0);
|
|
|
|
|
if (inf->stopped)
|
1999-06-08 03:19:32 +08:00
|
|
|
|
{
|
|
|
|
|
if (inf->nomsg)
|
|
|
|
|
inf_continue (inf);
|
|
|
|
|
else
|
2012-05-25 00:51:47 +08:00
|
|
|
|
inf_signal (inf, GDB_SIGNAL_0);
|
1999-06-08 03:19:32 +08:00
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
proc_restore_exc_port (task);
|
|
|
|
|
task->sc = inf->detach_sc;
|
|
|
|
|
|
|
|
|
|
for (thread = inf->threads; thread; thread = thread->next)
|
|
|
|
|
{
|
|
|
|
|
proc_restore_exc_port (thread);
|
|
|
|
|
thread->sc = thread->detach_sc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inf_update_suspends (inf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inf_cleanup (inf);
|
|
|
|
|
}
|
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* Attaches INF to the process with process id PID, returning it in a
|
|
|
|
|
suspended state suitable for debugging. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
void
|
|
|
|
|
inf_attach (struct inf *inf, int pid)
|
|
|
|
|
{
|
|
|
|
|
inf_debug (inf, "attaching: %d", pid);
|
|
|
|
|
|
|
|
|
|
if (inf->pid)
|
|
|
|
|
inf_detach (inf);
|
|
|
|
|
|
|
|
|
|
inf_startup (inf, pid);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Makes sure that we've got our exception ports entrenched in the process. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
void
|
|
|
|
|
inf_steal_exc_ports (struct inf *inf)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct proc *thread;
|
|
|
|
|
|
|
|
|
|
inf_debug (inf, "stealing exception ports");
|
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
inf_set_step_thread (inf, 0); /* The step thread is special. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
proc_steal_exc_port (inf->task, inf->event_port);
|
|
|
|
|
for (thread = inf->threads; thread; thread = thread->next)
|
|
|
|
|
proc_steal_exc_port (thread, MACH_PORT_NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Makes sure the process has its own exception ports. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
void
|
|
|
|
|
inf_restore_exc_ports (struct inf *inf)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct proc *thread;
|
|
|
|
|
|
|
|
|
|
inf_debug (inf, "restoring exception ports");
|
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
inf_set_step_thread (inf, 0); /* The step thread is special. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
proc_restore_exc_port (inf->task);
|
|
|
|
|
for (thread = inf->threads; thread; thread = thread->next)
|
|
|
|
|
proc_restore_exc_port (thread);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Deliver signal SIG to INF. If INF is stopped, delivering a signal, even
|
|
|
|
|
signal 0, will continue it. INF is assumed to be in a paused state, and
|
|
|
|
|
the resume_sc's of INF's threads may be affected. */
|
|
|
|
|
void
|
2012-05-25 00:39:15 +08:00
|
|
|
|
inf_signal (struct inf *inf, enum gdb_signal sig)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err = 0;
|
2012-05-25 00:39:15 +08:00
|
|
|
|
int host_sig = gdb_signal_to_host (sig);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2012-05-25 00:39:15 +08:00
|
|
|
|
#define NAME gdb_signal_to_name (sig)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (host_sig >= _NSIG)
|
|
|
|
|
/* A mach exception. Exceptions are encoded in the signal space by
|
|
|
|
|
putting them after _NSIG; this assumes they're positive (and not
|
|
|
|
|
extremely large)! */
|
|
|
|
|
{
|
|
|
|
|
struct inf_wait *w = &inf->wait;
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (w->status.kind == TARGET_WAITKIND_STOPPED
|
|
|
|
|
&& w->status.value.sig == sig
|
|
|
|
|
&& w->thread && !w->thread->aborted)
|
|
|
|
|
/* We're passing through the last exception we received. This is
|
|
|
|
|
kind of bogus, because exceptions are per-thread whereas gdb
|
|
|
|
|
treats signals as per-process. We just forward the exception to
|
|
|
|
|
the correct handler, even it's not for the same thread as TID --
|
|
|
|
|
i.e., we pretend it's global. */
|
|
|
|
|
{
|
|
|
|
|
struct exc_state *e = &w->exc;
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_debug (inf, "passing through exception:"
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
" task = %lu, thread = %lu, exc = %d"
|
1999-04-16 09:35:26 +08:00
|
|
|
|
", code = %d, subcode = %d",
|
|
|
|
|
w->thread->port, inf->task->port,
|
|
|
|
|
e->exception, e->code, e->subcode);
|
|
|
|
|
err =
|
|
|
|
|
exception_raise_request (e->handler,
|
|
|
|
|
e->reply, MACH_MSG_TYPE_MOVE_SEND_ONCE,
|
|
|
|
|
w->thread->port, inf->task->port,
|
|
|
|
|
e->exception, e->code, e->subcode);
|
|
|
|
|
}
|
|
|
|
|
else
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("Can't forward spontaneous exception (%s)."), NAME);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
/* A Unix signal. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (inf->stopped)
|
|
|
|
|
/* The process is stopped and expecting a signal. Just send off a
|
|
|
|
|
request and let it get handled when we resume everything. */
|
|
|
|
|
{
|
|
|
|
|
inf_debug (inf, "sending %s to stopped process", NAME);
|
|
|
|
|
err =
|
|
|
|
|
INF_MSGPORT_RPC (inf,
|
|
|
|
|
msg_sig_post_untraced_request (msgport,
|
|
|
|
|
inf->event_port,
|
|
|
|
|
MACH_MSG_TYPE_MAKE_SEND_ONCE,
|
|
|
|
|
host_sig, 0,
|
|
|
|
|
refport));
|
|
|
|
|
if (!err)
|
|
|
|
|
/* Posting an untraced signal automatically continues it.
|
|
|
|
|
We clear this here rather than when we get the reply
|
|
|
|
|
because we'd rather assume it's not stopped when it
|
|
|
|
|
actually is, than the reverse. */
|
|
|
|
|
inf->stopped = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
/* It's not expecting it. We have to let just the signal thread
|
|
|
|
|
run, and wait for it to get into a reasonable state before we
|
|
|
|
|
can continue the rest of the process. When we finally resume the
|
|
|
|
|
process the signal we request will be the very first thing that
|
2011-01-08 03:36:19 +08:00
|
|
|
|
happens. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
{
|
2000-02-26 23:04:30 +08:00
|
|
|
|
inf_debug (inf, "sending %s to unstopped process"
|
|
|
|
|
" (so resuming signal thread)", NAME);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
err =
|
2000-02-26 23:04:30 +08:00
|
|
|
|
INF_RESUME_MSGPORT_RPC (inf,
|
|
|
|
|
msg_sig_post_untraced (msgport, host_sig,
|
|
|
|
|
0, refport));
|
1999-07-08 04:19:36 +08:00
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (err == EIEIO)
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Can't do too much... */
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Can't deliver signal %s: No signal thread."), NAME);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else if (err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Delivering signal %s: %s"), NAME, safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
#undef NAME
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-06-08 03:19:32 +08:00
|
|
|
|
/* Continue INF without delivering a signal. This is meant to be used
|
|
|
|
|
when INF does not have a message port. */
|
|
|
|
|
void
|
|
|
|
|
inf_continue (struct inf *inf)
|
|
|
|
|
{
|
|
|
|
|
process_t proc;
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err = proc_pid2proc (proc_server, inf->pid, &proc);
|
1999-06-08 03:19:32 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!err)
|
1999-06-08 03:19:32 +08:00
|
|
|
|
{
|
|
|
|
|
inf_debug (inf, "continuing process");
|
|
|
|
|
|
|
|
|
|
err = proc_mark_cont (proc);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!err)
|
1999-06-08 03:19:32 +08:00
|
|
|
|
{
|
|
|
|
|
struct proc *thread;
|
|
|
|
|
|
|
|
|
|
for (thread = inf->threads; thread; thread = thread->next)
|
|
|
|
|
thread_resume (thread->port);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
1999-06-08 03:19:32 +08:00
|
|
|
|
inf->stopped = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Can't continue process: %s"), safe_strerror (err));
|
1999-06-08 03:19:32 +08:00
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-06-08 03:19:32 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* The inferior used for all gdb target ops. */
|
2008-10-08 02:42:42 +08:00
|
|
|
|
struct inf *gnu_current_inf = 0;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* The inferior being waited for by gnu_wait. Since GDB is decidely not
|
|
|
|
|
multi-threaded, we don't bother to lock this. */
|
|
|
|
|
struct inf *waiting_inf;
|
|
|
|
|
|
2016-12-05 18:59:03 +08:00
|
|
|
|
/* MIG stubs are not yet ready for C++ compilation. */
|
|
|
|
|
extern "C" int exc_server (mach_msg_header_t *, mach_msg_header_t *);
|
|
|
|
|
extern "C" int msg_reply_server (mach_msg_header_t *, mach_msg_header_t *);
|
|
|
|
|
extern "C" int notify_server (mach_msg_header_t *, mach_msg_header_t *);
|
|
|
|
|
extern "C" int process_reply_server (mach_msg_header_t *, mach_msg_header_t *);
|
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Wait for something to happen in the inferior, returning what in STATUS. */
|
2001-05-04 12:15:33 +08: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-07 06:21:26 +08:00
|
|
|
|
gnu_wait (struct target_ops *ops,
|
2009-05-21 23:48:42 +08:00
|
|
|
|
ptid_t ptid, struct target_waitstatus *status, int options)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct msg
|
|
|
|
|
{
|
|
|
|
|
mach_msg_header_t hdr;
|
|
|
|
|
mach_msg_type_t type;
|
|
|
|
|
int data[8000];
|
2000-02-26 23:04:30 +08:00
|
|
|
|
} msg;
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
struct proc *thread;
|
2008-10-08 02:42:42 +08:00
|
|
|
|
struct inf *inf = gnu_current_inf;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2001-03-13 08:51:40 +08:00
|
|
|
|
gdb_assert (inf->task);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (!inf->threads && !inf->pending_execs)
|
|
|
|
|
/* No threads! Assume that maybe some outside agency is frobbing our
|
|
|
|
|
task, and really look for new threads. If we can't find any, just tell
|
|
|
|
|
the user to try again later. */
|
|
|
|
|
{
|
|
|
|
|
inf_validate_procs (inf);
|
|
|
|
|
if (!inf->threads && !inf->task->dead)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("There are no threads; try again later."));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
waiting_inf = inf;
|
|
|
|
|
|
2008-09-09 05:33:25 +08:00
|
|
|
|
inf_debug (inf, "waiting for: %s", target_pid_to_str (ptid));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
rewait:
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (proc_wait_pid != inf->pid && !inf->no_wait)
|
|
|
|
|
/* Always get information on events from the proc server. */
|
|
|
|
|
{
|
|
|
|
|
inf_debug (inf, "requesting wait on pid %d", inf->pid);
|
|
|
|
|
|
|
|
|
|
if (proc_wait_pid)
|
|
|
|
|
/* The proc server is single-threaded, and only allows a single
|
2011-01-08 03:36:19 +08:00
|
|
|
|
outstanding wait request, so we have to cancel the previous one. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
inf_debug (inf, "cancelling previous wait on pid %d", proc_wait_pid);
|
|
|
|
|
interrupt_operation (proc_server, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err =
|
|
|
|
|
proc_wait_request (proc_server, inf->event_port, inf->pid, WUNTRACED);
|
|
|
|
|
if (err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("wait request failed: %s"), safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
inf_debug (inf, "waits pending: %d", proc_waits_pending);
|
|
|
|
|
proc_wait_pid = inf->pid;
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* Even if proc_waits_pending was > 0 before, we still won't
|
|
|
|
|
get any other replies, because it was either from a
|
|
|
|
|
different INF, or a different process attached to INF --
|
|
|
|
|
and the event port, which is the wait reply port, changes
|
2011-01-08 03:36:19 +08:00
|
|
|
|
when you switch processes. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
proc_waits_pending = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inf_clear_wait (inf);
|
|
|
|
|
|
|
|
|
|
/* What can happen? (1) Dead name notification; (2) Exceptions arrive;
|
|
|
|
|
(3) wait reply from the proc server. */
|
|
|
|
|
|
|
|
|
|
inf_debug (inf, "waiting for an event...");
|
|
|
|
|
err = mach_msg (&msg.hdr, MACH_RCV_MSG | MACH_RCV_INTERRUPT,
|
|
|
|
|
0, sizeof (struct msg), inf->event_port,
|
|
|
|
|
MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
|
|
|
|
|
|
|
|
|
|
/* Re-suspend the task. */
|
|
|
|
|
inf_suspend (inf);
|
|
|
|
|
|
|
|
|
|
if (!inf->task && inf->pending_execs)
|
|
|
|
|
/* When doing an exec, it's possible that the old task wasn't reused
|
|
|
|
|
(e.g., setuid execs). So if the task seems to have disappeared,
|
|
|
|
|
attempt to refetch it, as the pid should still be the same. */
|
|
|
|
|
inf_set_pid (inf, inf->pid);
|
|
|
|
|
|
|
|
|
|
if (err == EMACH_RCV_INTERRUPTED)
|
|
|
|
|
inf_debug (inf, "interrupted");
|
|
|
|
|
else if (err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("Couldn't wait for an event: %s"), safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct
|
|
|
|
|
{
|
|
|
|
|
mach_msg_header_t hdr;
|
|
|
|
|
mach_msg_type_t err_type;
|
|
|
|
|
kern_return_t err;
|
|
|
|
|
char noise[200];
|
|
|
|
|
}
|
|
|
|
|
reply;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
inf_debug (inf, "event: msgid = %d", msg.hdr.msgh_id);
|
|
|
|
|
|
|
|
|
|
/* Handle what we got. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!notify_server (&msg.hdr, &reply.hdr)
|
|
|
|
|
&& !exc_server (&msg.hdr, &reply.hdr)
|
|
|
|
|
&& !process_reply_server (&msg.hdr, &reply.hdr)
|
|
|
|
|
&& !msg_reply_server (&msg.hdr, &reply.hdr))
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* Whatever it is, it's something strange. */
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("Got a strange event, msg id = %d."), msg.hdr.msgh_id);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (reply.err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("Handling event, msgid = %d: %s"),
|
2002-03-28 05:35:35 +08:00
|
|
|
|
msg.hdr.msgh_id, safe_strerror (reply.err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (inf->pending_execs)
|
|
|
|
|
/* We're waiting for the inferior to finish execing. */
|
|
|
|
|
{
|
|
|
|
|
struct inf_wait *w = &inf->wait;
|
|
|
|
|
enum target_waitkind kind = w->status.kind;
|
|
|
|
|
|
|
|
|
|
if (kind == TARGET_WAITKIND_SPURIOUS)
|
|
|
|
|
/* Since gdb is actually counting the number of times the inferior
|
|
|
|
|
stops, expecting one stop per exec, we only return major events
|
|
|
|
|
while execing. */
|
|
|
|
|
{
|
|
|
|
|
w->suppress = 1;
|
2014-01-09 04:42:07 +08:00
|
|
|
|
inf_debug (inf, "pending_execs, ignoring minor event");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
else if (kind == TARGET_WAITKIND_STOPPED
|
2012-05-25 00:51:47 +08:00
|
|
|
|
&& w->status.value.sig == GDB_SIGNAL_TRAP)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* Ah hah! A SIGTRAP from the inferior while starting up probably
|
|
|
|
|
means we've succesfully completed an exec! */
|
|
|
|
|
{
|
2014-01-09 04:42:07 +08:00
|
|
|
|
inf_debug (inf, "one pending exec completed");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
else if (kind == TARGET_WAITKIND_STOPPED)
|
|
|
|
|
/* It's possible that this signal is because of a crashed process
|
|
|
|
|
being handled by the hurd crash server; in this case, the process
|
|
|
|
|
will have an extra task suspend, which we need to know about.
|
|
|
|
|
Since the code in inf_resume that normally checks for this is
|
|
|
|
|
disabled while INF->pending_execs, we do the check here instead. */
|
|
|
|
|
inf_validate_task_sc (inf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (inf->wait.suppress)
|
|
|
|
|
/* Some totally spurious event happened that we don't consider
|
|
|
|
|
worth returning to gdb. Just keep waiting. */
|
|
|
|
|
{
|
|
|
|
|
inf_debug (inf, "suppressing return, rewaiting...");
|
|
|
|
|
inf_resume (inf);
|
|
|
|
|
goto rewait;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Pass back out our results. */
|
2004-04-04 22:23:51 +08:00
|
|
|
|
memcpy (status, &inf->wait.status, sizeof (*status));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
thread = inf->wait.thread;
|
|
|
|
|
if (thread)
|
2013-09-18 22:47:51 +08:00
|
|
|
|
ptid = ptid_build (inf->pid, thread->tid, 0);
|
2008-09-09 05:33:25 +08:00
|
|
|
|
else if (ptid_equal (ptid, minus_one_ptid))
|
|
|
|
|
thread = inf_tid_to_thread (inf, -1);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else
|
2013-09-18 22:47:51 +08:00
|
|
|
|
thread = inf_tid_to_thread (inf, ptid_get_lwp (ptid));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (!thread || thread->port == MACH_PORT_NULL)
|
2000-02-26 23:04:30 +08:00
|
|
|
|
{
|
|
|
|
|
/* TID is dead; try and find a new thread. */
|
|
|
|
|
if (inf_update_procs (inf) && inf->threads)
|
2013-09-18 22:47:51 +08:00
|
|
|
|
ptid = ptid_build (inf->pid, inf->threads->tid, 0); /* The first
|
2011-01-08 03:36:19 +08:00
|
|
|
|
available
|
|
|
|
|
thread. */
|
2000-02-26 23:04:30 +08:00
|
|
|
|
else
|
2008-09-09 05:33:25 +08:00
|
|
|
|
ptid = inferior_ptid; /* let wait_for_inferior handle exit case */
|
2000-02-26 23:04:30 +08:00
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2008-09-09 05:33:25 +08:00
|
|
|
|
if (thread
|
|
|
|
|
&& !ptid_equal (ptid, minus_one_ptid)
|
|
|
|
|
&& status->kind != TARGET_WAITKIND_SPURIOUS
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&& inf->pause_sc == 0 && thread->pause_sc == 0)
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* If something actually happened to THREAD, make sure we
|
|
|
|
|
suspend it. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
thread->sc = 1;
|
|
|
|
|
inf_update_suspends (inf);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2008-09-09 05:33:25 +08:00
|
|
|
|
inf_debug (inf, "returning ptid = %s, status = %s (%d)",
|
|
|
|
|
target_pid_to_str (ptid),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
status->kind == TARGET_WAITKIND_EXITED ? "EXITED"
|
|
|
|
|
: status->kind == TARGET_WAITKIND_STOPPED ? "STOPPED"
|
|
|
|
|
: status->kind == TARGET_WAITKIND_SIGNALLED ? "SIGNALLED"
|
|
|
|
|
: status->kind == TARGET_WAITKIND_LOADED ? "LOADED"
|
|
|
|
|
: status->kind == TARGET_WAITKIND_SPURIOUS ? "SPURIOUS"
|
|
|
|
|
: "?",
|
|
|
|
|
status->value.integer);
|
|
|
|
|
|
2008-09-09 05:33:25 +08:00
|
|
|
|
return ptid;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* The rpc handler called by exc_server. */
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t
|
1999-04-16 09:35:26 +08:00
|
|
|
|
S_exception_raise_request (mach_port_t port, mach_port_t reply_port,
|
|
|
|
|
thread_t thread_port, task_t task_port,
|
|
|
|
|
int exception, int code, int subcode)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = waiting_inf;
|
|
|
|
|
struct proc *thread = inf_port_to_thread (inf, thread_port);
|
|
|
|
|
|
|
|
|
|
inf_debug (waiting_inf,
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
"thread = %lu, task = %lu, exc = %d, code = %d, subcode = %d",
|
2000-02-26 23:04:30 +08:00
|
|
|
|
thread_port, task_port, exception, code, subcode);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (!thread)
|
|
|
|
|
/* We don't know about thread? */
|
|
|
|
|
{
|
|
|
|
|
inf_update_procs (inf);
|
|
|
|
|
thread = inf_port_to_thread (inf, thread_port);
|
|
|
|
|
if (!thread)
|
|
|
|
|
/* Give up, the generating thread is gone. */
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mach_port_deallocate (mach_task_self (), thread_port);
|
|
|
|
|
mach_port_deallocate (mach_task_self (), task_port);
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!thread->aborted)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* THREAD hasn't been aborted since this exception happened (abortion
|
|
|
|
|
clears any exception state), so it must be real. */
|
|
|
|
|
{
|
|
|
|
|
/* Store away the details; this will destroy any previous info. */
|
|
|
|
|
inf->wait.thread = thread;
|
|
|
|
|
|
|
|
|
|
inf->wait.status.kind = TARGET_WAITKIND_STOPPED;
|
|
|
|
|
|
|
|
|
|
if (exception == EXC_BREAKPOINT)
|
|
|
|
|
/* GDB likes to get SIGTRAP for breakpoints. */
|
|
|
|
|
{
|
2012-05-25 00:51:47 +08:00
|
|
|
|
inf->wait.status.value.sig = GDB_SIGNAL_TRAP;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
mach_port_deallocate (mach_task_self (), reply_port);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
/* Record the exception so that we can forward it later. */
|
|
|
|
|
{
|
|
|
|
|
if (thread->exc_port == port)
|
|
|
|
|
{
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
inf_debug (waiting_inf, "Handler is thread exception port <%lu>",
|
1999-04-16 09:35:26 +08:00
|
|
|
|
thread->saved_exc_port);
|
|
|
|
|
inf->wait.exc.handler = thread->saved_exc_port;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
inf_debug (waiting_inf, "Handler is task exception port <%lu>",
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf->task->saved_exc_port);
|
|
|
|
|
inf->wait.exc.handler = inf->task->saved_exc_port;
|
2001-03-13 08:51:40 +08:00
|
|
|
|
gdb_assert (inf->task->exc_port == port);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
if (inf->wait.exc.handler != MACH_PORT_NULL)
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Add a reference to the exception handler. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
mach_port_mod_refs (mach_task_self (),
|
|
|
|
|
inf->wait.exc.handler, MACH_PORT_RIGHT_SEND,
|
|
|
|
|
1);
|
|
|
|
|
|
|
|
|
|
inf->wait.exc.exception = exception;
|
|
|
|
|
inf->wait.exc.code = code;
|
|
|
|
|
inf->wait.exc.subcode = subcode;
|
|
|
|
|
inf->wait.exc.reply = reply_port;
|
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Exceptions are encoded in the signal space by putting
|
|
|
|
|
them after _NSIG; this assumes they're positive (and not
|
|
|
|
|
extremely large)! */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf->wait.status.value.sig =
|
2012-05-25 00:39:15 +08:00
|
|
|
|
gdb_signal_from_host (_NSIG + exception);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
/* A supppressed exception, which ignore. */
|
|
|
|
|
{
|
|
|
|
|
inf->wait.suppress = 1;
|
|
|
|
|
mach_port_deallocate (mach_task_self (), reply_port);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Fill in INF's wait field after a task has died without giving us more
|
|
|
|
|
detailed information. */
|
2014-01-05 19:36:03 +08:00
|
|
|
|
static void
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_task_died_status (struct inf *inf)
|
|
|
|
|
{
|
2011-01-08 03:36:19 +08:00
|
|
|
|
warning (_("Pid %d died with unknown exit status, using SIGKILL."),
|
|
|
|
|
inf->pid);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf->wait.status.kind = TARGET_WAITKIND_SIGNALLED;
|
2012-05-25 00:51:47 +08:00
|
|
|
|
inf->wait.status.value.sig = GDB_SIGNAL_KILL;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Notify server routines. The only real one is dead name notification. */
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t
|
1999-04-16 09:35:26 +08:00
|
|
|
|
do_mach_notify_dead_name (mach_port_t notify, mach_port_t dead_port)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = waiting_inf;
|
|
|
|
|
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
inf_debug (waiting_inf, "port = %lu", dead_port);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (inf->task && inf->task->port == dead_port)
|
|
|
|
|
{
|
|
|
|
|
proc_debug (inf->task, "is dead");
|
|
|
|
|
inf->task->port = MACH_PORT_NULL;
|
|
|
|
|
if (proc_wait_pid == inf->pid)
|
|
|
|
|
/* We have a wait outstanding on the process, which will return more
|
|
|
|
|
detailed information, so delay until we get that. */
|
|
|
|
|
inf->wait.suppress = 1;
|
|
|
|
|
else
|
|
|
|
|
/* We never waited for the process (maybe it wasn't a child), so just
|
|
|
|
|
pretend it got a SIGKILL. */
|
|
|
|
|
inf_task_died_status (inf);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = inf_port_to_thread (inf, dead_port);
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (thread)
|
|
|
|
|
{
|
|
|
|
|
proc_debug (thread, "is dead");
|
|
|
|
|
thread->port = MACH_PORT_NULL;
|
|
|
|
|
}
|
2000-02-11 14:34:58 +08:00
|
|
|
|
|
|
|
|
|
if (inf->task->dead)
|
|
|
|
|
/* Since the task is dead, its threads are dying with it. */
|
|
|
|
|
inf->wait.suppress = 1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mach_port_deallocate (mach_task_self (), dead_port);
|
2011-01-08 03:36:19 +08:00
|
|
|
|
inf->threads_up_to_date = 0; /* Just in case. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
Hurd: New RPC reply stub functions.
gdb/
* gnu-nat.c (ill_rpc): Remove function; replaced with this...
(ILL_RPC): ... new macro.
(do_mach_notify_no_senders, do_mach_notify_port_deleted)
(do_mach_notify_msg_accepted, do_mach_notify_port_destroyed)
(do_mach_notify_send_once, S_proc_setmsgport_reply)
(S_proc_getmsgport_reply, S_msg_sig_post_reply): Generate stub
functions with ILL_RPC macro.
(S_proc_pid2task_reply, S_proc_task2pid_reply)
(S_proc_task2proc_reply, S_proc_proc2task_reply)
(S_proc_pid2proc_reply, S_proc_getprocinfo_reply)
(S_proc_getprocargs_reply, S_proc_getprocenv_reply)
(S_proc_getloginid_reply, S_proc_getloginpids_reply)
(S_proc_getlogin_reply, S_proc_getsid_reply)
(S_proc_getsessionpgids_reply, S_proc_getsessionpids_reply)
(S_proc_getsidport_reply, S_proc_getpgrp_reply)
(S_proc_getpgrppids_reply, S_proc_get_tty_reply)
(S_proc_getnports_reply, S_proc_is_important_reply)
(S_proc_get_code_reply): New stub functions, generated with
ILL_RPC macro.
Based on a patch by David Michael <fedora.dm0@gmail.com>.
2014-01-06 23:28:00 +08:00
|
|
|
|
#define ILL_RPC(fun, ...) \
|
2014-02-17 11:20:35 +08:00
|
|
|
|
extern kern_return_t fun (__VA_ARGS__); \
|
Hurd: New RPC reply stub functions.
gdb/
* gnu-nat.c (ill_rpc): Remove function; replaced with this...
(ILL_RPC): ... new macro.
(do_mach_notify_no_senders, do_mach_notify_port_deleted)
(do_mach_notify_msg_accepted, do_mach_notify_port_destroyed)
(do_mach_notify_send_once, S_proc_setmsgport_reply)
(S_proc_getmsgport_reply, S_msg_sig_post_reply): Generate stub
functions with ILL_RPC macro.
(S_proc_pid2task_reply, S_proc_task2pid_reply)
(S_proc_task2proc_reply, S_proc_proc2task_reply)
(S_proc_pid2proc_reply, S_proc_getprocinfo_reply)
(S_proc_getprocargs_reply, S_proc_getprocenv_reply)
(S_proc_getloginid_reply, S_proc_getloginpids_reply)
(S_proc_getlogin_reply, S_proc_getsid_reply)
(S_proc_getsessionpgids_reply, S_proc_getsessionpids_reply)
(S_proc_getsidport_reply, S_proc_getpgrp_reply)
(S_proc_getpgrppids_reply, S_proc_get_tty_reply)
(S_proc_getnports_reply, S_proc_is_important_reply)
(S_proc_get_code_reply): New stub functions, generated with
ILL_RPC macro.
Based on a patch by David Michael <fedora.dm0@gmail.com>.
2014-01-06 23:28:00 +08:00
|
|
|
|
kern_return_t fun (__VA_ARGS__) \
|
|
|
|
|
{ \
|
|
|
|
|
warning (_("illegal rpc: %s"), #fun); \
|
|
|
|
|
return 0; \
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
Hurd: New RPC reply stub functions.
gdb/
* gnu-nat.c (ill_rpc): Remove function; replaced with this...
(ILL_RPC): ... new macro.
(do_mach_notify_no_senders, do_mach_notify_port_deleted)
(do_mach_notify_msg_accepted, do_mach_notify_port_destroyed)
(do_mach_notify_send_once, S_proc_setmsgport_reply)
(S_proc_getmsgport_reply, S_msg_sig_post_reply): Generate stub
functions with ILL_RPC macro.
(S_proc_pid2task_reply, S_proc_task2pid_reply)
(S_proc_task2proc_reply, S_proc_proc2task_reply)
(S_proc_pid2proc_reply, S_proc_getprocinfo_reply)
(S_proc_getprocargs_reply, S_proc_getprocenv_reply)
(S_proc_getloginid_reply, S_proc_getloginpids_reply)
(S_proc_getlogin_reply, S_proc_getsid_reply)
(S_proc_getsessionpgids_reply, S_proc_getsessionpids_reply)
(S_proc_getsidport_reply, S_proc_getpgrp_reply)
(S_proc_getpgrppids_reply, S_proc_get_tty_reply)
(S_proc_getnports_reply, S_proc_is_important_reply)
(S_proc_get_code_reply): New stub functions, generated with
ILL_RPC macro.
Based on a patch by David Michael <fedora.dm0@gmail.com>.
2014-01-06 23:28:00 +08:00
|
|
|
|
ILL_RPC (do_mach_notify_no_senders,
|
|
|
|
|
mach_port_t notify, mach_port_mscount_t count)
|
|
|
|
|
ILL_RPC (do_mach_notify_port_deleted,
|
|
|
|
|
mach_port_t notify, mach_port_t name)
|
|
|
|
|
ILL_RPC (do_mach_notify_msg_accepted,
|
|
|
|
|
mach_port_t notify, mach_port_t name)
|
|
|
|
|
ILL_RPC (do_mach_notify_port_destroyed,
|
|
|
|
|
mach_port_t notify, mach_port_t name)
|
|
|
|
|
ILL_RPC (do_mach_notify_send_once,
|
|
|
|
|
mach_port_t notify)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Process_reply server routines. We only use process_wait_reply. */
|
|
|
|
|
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t
|
|
|
|
|
S_proc_wait_reply (mach_port_t reply, kern_return_t err,
|
1999-04-16 09:35:26 +08:00
|
|
|
|
int status, int sigcode, rusage_t rusage, pid_t pid)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = waiting_inf;
|
|
|
|
|
|
|
|
|
|
inf_debug (inf, "err = %s, pid = %d, status = 0x%x, sigcode = %d",
|
2002-03-28 05:35:35 +08:00
|
|
|
|
err ? safe_strerror (err) : "0", pid, status, sigcode);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (err && proc_wait_pid && (!inf->task || !inf->task->port))
|
|
|
|
|
/* Ack. The task has died, but the task-died notification code didn't
|
|
|
|
|
tell anyone because it thought a more detailed reply from the
|
|
|
|
|
procserver was forthcoming. However, we now learn that won't
|
|
|
|
|
happen... So we have to act like the task just died, and this time,
|
|
|
|
|
tell the world. */
|
|
|
|
|
inf_task_died_status (inf);
|
|
|
|
|
|
|
|
|
|
if (--proc_waits_pending == 0)
|
|
|
|
|
/* PROC_WAIT_PID represents the most recent wait. We will always get
|
|
|
|
|
replies in order because the proc server is single threaded. */
|
|
|
|
|
proc_wait_pid = 0;
|
|
|
|
|
|
|
|
|
|
inf_debug (inf, "waits pending now: %d", proc_waits_pending);
|
|
|
|
|
|
|
|
|
|
if (err)
|
|
|
|
|
{
|
|
|
|
|
if (err != EINTR)
|
|
|
|
|
{
|
2011-01-08 03:36:19 +08:00
|
|
|
|
warning (_("Can't wait for pid %d: %s"),
|
|
|
|
|
inf->pid, safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf->no_wait = 1;
|
|
|
|
|
|
|
|
|
|
/* Since we can't see the inferior's signals, don't trap them. */
|
|
|
|
|
inf_set_traced (inf, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (pid == inf->pid)
|
|
|
|
|
{
|
|
|
|
|
store_waitstatus (&inf->wait.status, status);
|
|
|
|
|
if (inf->wait.status.kind == TARGET_WAITKIND_STOPPED)
|
|
|
|
|
/* The process has sent us a signal, and stopped itself in a sane
|
|
|
|
|
state pending our actions. */
|
|
|
|
|
{
|
|
|
|
|
inf_debug (inf, "process has stopped itself");
|
|
|
|
|
inf->stopped = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
inf->wait.suppress = 1; /* Something odd happened. Ignore. */
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
Hurd: New RPC reply stub functions.
gdb/
* gnu-nat.c (ill_rpc): Remove function; replaced with this...
(ILL_RPC): ... new macro.
(do_mach_notify_no_senders, do_mach_notify_port_deleted)
(do_mach_notify_msg_accepted, do_mach_notify_port_destroyed)
(do_mach_notify_send_once, S_proc_setmsgport_reply)
(S_proc_getmsgport_reply, S_msg_sig_post_reply): Generate stub
functions with ILL_RPC macro.
(S_proc_pid2task_reply, S_proc_task2pid_reply)
(S_proc_task2proc_reply, S_proc_proc2task_reply)
(S_proc_pid2proc_reply, S_proc_getprocinfo_reply)
(S_proc_getprocargs_reply, S_proc_getprocenv_reply)
(S_proc_getloginid_reply, S_proc_getloginpids_reply)
(S_proc_getlogin_reply, S_proc_getsid_reply)
(S_proc_getsessionpgids_reply, S_proc_getsessionpids_reply)
(S_proc_getsidport_reply, S_proc_getpgrp_reply)
(S_proc_getpgrppids_reply, S_proc_get_tty_reply)
(S_proc_getnports_reply, S_proc_is_important_reply)
(S_proc_get_code_reply): New stub functions, generated with
ILL_RPC macro.
Based on a patch by David Michael <fedora.dm0@gmail.com>.
2014-01-06 23:28:00 +08:00
|
|
|
|
ILL_RPC (S_proc_setmsgport_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
mach_port_t oldmsgport)
|
|
|
|
|
ILL_RPC (S_proc_getmsgport_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
mach_port_t msgports)
|
|
|
|
|
ILL_RPC (S_proc_pid2task_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code, mach_port_t task)
|
|
|
|
|
ILL_RPC (S_proc_task2pid_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code, pid_t pid)
|
|
|
|
|
ILL_RPC (S_proc_task2proc_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code, mach_port_t proc)
|
|
|
|
|
ILL_RPC (S_proc_proc2task_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code, mach_port_t task)
|
|
|
|
|
ILL_RPC (S_proc_pid2proc_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code, mach_port_t proc)
|
|
|
|
|
ILL_RPC (S_proc_getprocinfo_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
int flags, procinfo_t procinfo, mach_msg_type_number_t procinfoCnt,
|
|
|
|
|
data_t threadwaits, mach_msg_type_number_t threadwaitsCnt)
|
|
|
|
|
ILL_RPC (S_proc_getprocargs_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
data_t procargs, mach_msg_type_number_t procargsCnt)
|
|
|
|
|
ILL_RPC (S_proc_getprocenv_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
data_t procenv, mach_msg_type_number_t procenvCnt)
|
|
|
|
|
ILL_RPC (S_proc_getloginid_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code, pid_t login_id)
|
|
|
|
|
ILL_RPC (S_proc_getloginpids_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
pidarray_t pids, mach_msg_type_number_t pidsCnt)
|
|
|
|
|
ILL_RPC (S_proc_getlogin_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code, string_t logname)
|
|
|
|
|
ILL_RPC (S_proc_getsid_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code, pid_t sid)
|
|
|
|
|
ILL_RPC (S_proc_getsessionpgids_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
pidarray_t pgidset, mach_msg_type_number_t pgidsetCnt)
|
|
|
|
|
ILL_RPC (S_proc_getsessionpids_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
pidarray_t pidset, mach_msg_type_number_t pidsetCnt)
|
|
|
|
|
ILL_RPC (S_proc_getsidport_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
mach_port_t sessport)
|
|
|
|
|
ILL_RPC (S_proc_getpgrp_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code, pid_t pgrp)
|
|
|
|
|
ILL_RPC (S_proc_getpgrppids_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
pidarray_t pidset, mach_msg_type_number_t pidsetCnt)
|
|
|
|
|
ILL_RPC (S_proc_get_tty_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code, mach_port_t tty)
|
|
|
|
|
ILL_RPC (S_proc_getnports_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
mach_msg_type_number_t nports)
|
|
|
|
|
ILL_RPC (S_proc_is_important_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
boolean_t essential)
|
|
|
|
|
ILL_RPC (S_proc_get_code_reply,
|
|
|
|
|
mach_port_t reply_port, kern_return_t return_code,
|
|
|
|
|
vm_address_t start_code, vm_address_t end_code)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Msg_reply server routines. We only use msg_sig_post_untraced_reply. */
|
|
|
|
|
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t
|
|
|
|
|
S_msg_sig_post_untraced_reply (mach_port_t reply, kern_return_t err)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct inf *inf = waiting_inf;
|
|
|
|
|
|
|
|
|
|
if (err == EBUSY)
|
|
|
|
|
/* EBUSY is what we get when the crash server has grabbed control of the
|
|
|
|
|
process and doesn't like what signal we tried to send it. Just act
|
|
|
|
|
like the process stopped (using a signal of 0 should mean that the
|
|
|
|
|
*next* time the user continues, it will pass signal 0, which the crash
|
|
|
|
|
server should like). */
|
|
|
|
|
{
|
|
|
|
|
inf->wait.status.kind = TARGET_WAITKIND_STOPPED;
|
2012-05-25 00:51:47 +08:00
|
|
|
|
inf->wait.status.value.sig = GDB_SIGNAL_0;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
else if (err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Signal delivery failed: %s"), safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (err)
|
|
|
|
|
/* We only get this reply when we've posted a signal to a process which we
|
|
|
|
|
thought was stopped, and which we expected to continue after the signal.
|
|
|
|
|
Given that the signal has failed for some reason, it's reasonable to
|
|
|
|
|
assume it's still stopped. */
|
|
|
|
|
inf->stopped = 1;
|
|
|
|
|
else
|
|
|
|
|
inf->wait.suppress = 1;
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
Hurd: New RPC reply stub functions.
gdb/
* gnu-nat.c (ill_rpc): Remove function; replaced with this...
(ILL_RPC): ... new macro.
(do_mach_notify_no_senders, do_mach_notify_port_deleted)
(do_mach_notify_msg_accepted, do_mach_notify_port_destroyed)
(do_mach_notify_send_once, S_proc_setmsgport_reply)
(S_proc_getmsgport_reply, S_msg_sig_post_reply): Generate stub
functions with ILL_RPC macro.
(S_proc_pid2task_reply, S_proc_task2pid_reply)
(S_proc_task2proc_reply, S_proc_proc2task_reply)
(S_proc_pid2proc_reply, S_proc_getprocinfo_reply)
(S_proc_getprocargs_reply, S_proc_getprocenv_reply)
(S_proc_getloginid_reply, S_proc_getloginpids_reply)
(S_proc_getlogin_reply, S_proc_getsid_reply)
(S_proc_getsessionpgids_reply, S_proc_getsessionpids_reply)
(S_proc_getsidport_reply, S_proc_getpgrp_reply)
(S_proc_getpgrppids_reply, S_proc_get_tty_reply)
(S_proc_getnports_reply, S_proc_is_important_reply)
(S_proc_get_code_reply): New stub functions, generated with
ILL_RPC macro.
Based on a patch by David Michael <fedora.dm0@gmail.com>.
2014-01-06 23:28:00 +08:00
|
|
|
|
ILL_RPC (S_msg_sig_post_reply,
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
mach_port_t reply, kern_return_t err)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Returns the number of messages queued for the receive right PORT. */
|
|
|
|
|
static mach_port_msgcount_t
|
|
|
|
|
port_msgs_queued (mach_port_t port)
|
|
|
|
|
{
|
|
|
|
|
struct mach_port_status status;
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err =
|
2010-05-15 04:17:37 +08:00
|
|
|
|
mach_port_get_receive_status (mach_task_self (), port, &status);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (err)
|
|
|
|
|
return 0;
|
|
|
|
|
else
|
|
|
|
|
return status.mps_msgcount;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Resume execution of the inferior process.
|
|
|
|
|
|
|
|
|
|
If STEP is nonzero, single-step it.
|
|
|
|
|
If SIGNAL is nonzero, give it that signal.
|
|
|
|
|
|
|
|
|
|
TID STEP:
|
|
|
|
|
-1 true Single step the current thread allowing other threads to run.
|
|
|
|
|
-1 false Continue the current thread allowing other threads to run.
|
|
|
|
|
X true Single step the given thread, don't allow any others to run.
|
|
|
|
|
X false Continue the given thread, do not allow any others to run.
|
|
|
|
|
(Where X, of course, is anything except -1)
|
|
|
|
|
|
|
|
|
|
Note that a resume may not `take' if there are pending exceptions/&c
|
|
|
|
|
still unprocessed from the last resume we did (any given resume may result
|
2011-01-08 03:36:19 +08:00
|
|
|
|
in multiple events returned by wait). */
|
|
|
|
|
|
1999-04-16 09:35: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
|
|
|
|
gnu_resume (struct target_ops *ops,
|
2012-05-25 00:39:15 +08:00
|
|
|
|
ptid_t ptid, int step, enum gdb_signal sig)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct proc *step_thread = 0;
|
2008-09-09 05:33:25 +08:00
|
|
|
|
int resume_all;
|
2008-10-08 02:42:42 +08:00
|
|
|
|
struct inf *inf = gnu_current_inf;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2008-09-09 05:33:25 +08:00
|
|
|
|
inf_debug (inf, "ptid = %s, step = %d, sig = %d",
|
|
|
|
|
target_pid_to_str (ptid), step, sig);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-06-08 03:19:32 +08:00
|
|
|
|
inf_validate_procinfo (inf);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
2012-05-25 00:51:47 +08:00
|
|
|
|
if (sig != GDB_SIGNAL_0 || inf->stopped)
|
1999-06-08 03:19:32 +08:00
|
|
|
|
{
|
2012-05-25 00:51:47 +08:00
|
|
|
|
if (sig == GDB_SIGNAL_0 && inf->nomsg)
|
1999-06-08 03:19:32 +08:00
|
|
|
|
inf_continue (inf);
|
|
|
|
|
else
|
|
|
|
|
inf_signal (inf, sig);
|
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else if (inf->wait.exc.reply != MACH_PORT_NULL)
|
|
|
|
|
/* We received an exception to which we have chosen not to forward, so
|
|
|
|
|
abort the faulting thread, which will perhaps retake it. */
|
|
|
|
|
{
|
|
|
|
|
proc_abort (inf->wait.thread, 1);
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Aborting %s with unforwarded exception %s."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
proc_string (inf->wait.thread),
|
2012-05-25 00:39:15 +08:00
|
|
|
|
gdb_signal_to_name (inf->wait.status.value.sig));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (port_msgs_queued (inf->event_port))
|
|
|
|
|
/* If there are still messages in our event queue, don't bother resuming
|
2011-01-08 03:36:19 +08:00
|
|
|
|
the process, as we're just going to stop it right away anyway. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
inf_update_procs (inf);
|
|
|
|
|
|
2008-09-09 05:33:25 +08:00
|
|
|
|
/* A specific PTID means `step only this process id'. */
|
|
|
|
|
resume_all = ptid_equal (ptid, minus_one_ptid);
|
|
|
|
|
|
|
|
|
|
if (resume_all)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* Allow all threads to run, except perhaps single-stepping one. */
|
|
|
|
|
{
|
2013-09-30 19:50:12 +08:00
|
|
|
|
inf_debug (inf, "running all threads; tid = %d",
|
|
|
|
|
ptid_get_pid (inferior_ptid));
|
2011-01-08 03:36:19 +08:00
|
|
|
|
ptid = inferior_ptid; /* What to step. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_set_threads_resume_sc (inf, 0, 1);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
/* Just allow a single thread to run. */
|
|
|
|
|
{
|
2013-09-18 22:47:51 +08:00
|
|
|
|
struct proc *thread = inf_tid_to_thread (inf, ptid_get_lwp (ptid));
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!thread)
|
2008-09-09 05:33:25 +08:00
|
|
|
|
error (_("Can't run single thread id %s: no such thread!"),
|
|
|
|
|
target_pid_to_str (ptid));
|
|
|
|
|
inf_debug (inf, "running one thread: %s", target_pid_to_str (ptid));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_set_threads_resume_sc (inf, thread, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (step)
|
|
|
|
|
{
|
2013-09-18 22:47:51 +08:00
|
|
|
|
step_thread = inf_tid_to_thread (inf, ptid_get_lwp (ptid));
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!step_thread)
|
2008-09-09 05:33:25 +08:00
|
|
|
|
warning (_("Can't step thread id %s: no such thread."),
|
|
|
|
|
target_pid_to_str (ptid));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else
|
2008-09-09 05:33:25 +08:00
|
|
|
|
inf_debug (inf, "stepping thread: %s", target_pid_to_str (ptid));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
if (step_thread != inf->step_thread)
|
|
|
|
|
inf_set_step_thread (inf, step_thread);
|
|
|
|
|
|
|
|
|
|
inf_debug (inf, "here we go...");
|
|
|
|
|
inf_resume (inf);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
static void
|
Add a target_ops parameter to the to_kill method in struct target_ops.
* target.h (struct target_ops): Add a "target_ops *" parameter to
method to_kill.
(target_kill): Remove macro. Add declaration.
* target.c (debug_to_kill): Delete, no longer necessary.
(target_kill): New function.
(update_current_target): Stop inheriting the to_kill method.
Do not de_fault it to no_process either.
(setup_target_debug): Do not set current_target.to_kill.
* gnu-nat.c, go32-nat.c, hpux-thread.c, inf-ptrace.c, inf-ttrace.c,
linux-nat.c, monitor.c, nto-procfs.c, procfs.c, remote-m32r-sdi.c,
remote-mips.c, remote-sim.c, remote.c, windows-nat.c: Update
accordingly.
2009-03-18 03:28:09 +08:00
|
|
|
|
gnu_kill_inferior (struct target_ops *ops)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2008-10-08 02:42:42 +08:00
|
|
|
|
struct proc *task = gnu_current_inf->task;
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (task)
|
|
|
|
|
{
|
|
|
|
|
proc_debug (task, "terminating...");
|
|
|
|
|
task_terminate (task->port);
|
2008-10-08 02:42:42 +08:00
|
|
|
|
inf_set_pid (gnu_current_inf, -1);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
Consolidate target_mourn_inferior between GDB and gdbserver
This patch consolidates the API of target_mourn_inferior between GDB
and gdbserver, in my continuing efforts to make sharing the
fork_inferior function possible between both.
GDB's version of the function did not care about the inferior's ptid
being mourned, but gdbserver's needed to know this information. Since
it actually makes sense to pass the ptid as an argument, instead of
depending on a global value directly (which GDB's version did), I
decided to make the generic API to accept it. I then went on and
extended all calls being made on GDB to include a ptid argument (which
ended up being inferior_ptid most of the times, anyway), and now we
have a more sane interface.
On GDB's side, after talking to Pedro a bit about it, we decided that
just an assertion to make sure that the ptid being passed is equal to
inferior_ptid would be enough for now, on the GDB side. We can remove
the assertion and perform more operations later if we ever pass
anything different than inferior_ptid.
Regression tested on our BuildBot, everything OK.
I'd appreciate a special look at gdb/windows-nat.c's modification
because I wasn't really sure what to do there. It seemed to me that
maybe I should build a ptid out of the process information there, but
then I am almost sure the assertion on GDB's side would trigger.
gdb/ChangeLog:
2016-09-19 Sergio Durigan Junior <sergiodj@redhat.com>
* darwin-nat.c (darwin_kill_inferior): Adjusting call to
target_mourn_inferior to include ptid_t argument.
* fork-child.c (startup_inferior): Likewise.
* gnu-nat.c (gnu_kill_inferior): Likewise.
* inf-ptrace.c (inf_ptrace_kill): Likewise.
* infrun.c (handle_inferior_event_1): Likewise.
* linux-nat.c (linux_nat_attach): Likewise.
(linux_nat_kill): Likewise.
* nto-procfs.c (interrupt_query): Likewise.
(procfs_interrupt): Likewise.
(procfs_kill_inferior): Likewise.
* procfs.c (procfs_kill_inferior): Likewise.
* record.c (record_mourn_inferior): Likewise.
* remote-sim.c (gdbsim_kill): Likewise.
* remote.c (remote_detach_1): Likewise.
(remote_kill): Likewise.
* target.c (target_mourn_inferior): Change declaration to accept
new ptid_t argument; use gdb_assert on it.
* target.h (target_mourn_inferior): Move function prototype from
here...
* target/target.h (target_mourn_inferior): ... to here. Adjust it
to accept new ptid_t argument.
* windows-nat.c (get_windows_debug_event): Adjusting call to
target_mourn_inferior to include ptid_t argument.
gdb/gdbserver/ChangeLog:
2016-09-19 Sergio Durigan Junior <sergiodj@redhat.com>
* server.c (start_inferior): Call target_mourn_inferior instead of
mourn_inferior; pass ptid_t argument to it.
(resume): Likewise.
(handle_target_event): Likewise.
* target.c (target_mourn_inferior): New function.
* target.h (mourn_inferior): Delete macro.
2016-09-12 11:45:31 +08:00
|
|
|
|
target_mourn_inferior (inferior_ptid);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Clean up after the inferior dies. */
|
|
|
|
|
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 19:27:18 +08:00
|
|
|
|
gnu_mourn_inferior (struct target_ops *ops)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2008-10-08 02:42:42 +08:00
|
|
|
|
inf_debug (gnu_current_inf, "rip");
|
|
|
|
|
inf_detach (gnu_current_inf);
|
2014-05-22 05:28:23 +08:00
|
|
|
|
inf_child_mourn_inferior (ops);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Fork an inferior process, and start debugging it. */
|
|
|
|
|
|
|
|
|
|
/* Set INFERIOR_PID to the first thread available in the child, if any. */
|
|
|
|
|
static int
|
2000-07-30 09:48:28 +08:00
|
|
|
|
inf_pick_first_thread (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2008-10-08 02:42:42 +08:00
|
|
|
|
if (gnu_current_inf->task && gnu_current_inf->threads)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* The first thread. */
|
2008-10-08 02:42:42 +08:00
|
|
|
|
return gnu_current_inf->threads->tid;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else
|
|
|
|
|
/* What may be the next thread. */
|
|
|
|
|
return next_thread_id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct inf *
|
2000-07-30 09:48:28 +08:00
|
|
|
|
cur_inf (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2008-10-08 02:42:42 +08:00
|
|
|
|
if (!gnu_current_inf)
|
|
|
|
|
gnu_current_inf = make_inf ();
|
|
|
|
|
return gnu_current_inf;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
2016-11-25 21:56:01 +08:00
|
|
|
|
static void
|
|
|
|
|
gnu_ptrace_me (void)
|
|
|
|
|
{
|
|
|
|
|
/* We're in the child; make this process stop as soon as it execs. */
|
|
|
|
|
struct inf *inf = cur_inf ();
|
|
|
|
|
inf_debug (inf, "tracing self");
|
|
|
|
|
if (ptrace (PTRACE_TRACEME) != 0)
|
2017-02-15 07:27:23 +08:00
|
|
|
|
trace_start_error_with_name ("ptrace");
|
2016-11-25 21:56:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 09:35:26 +08: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 19:27:18 +08:00
|
|
|
|
gnu_create_inferior (struct target_ops *ops,
|
C++-fy and prepare for sharing fork_inferior
As a preparation for the next patch, which will move fork_inferior
from GDB to common/ (and therefore share it with gdbserver), it is
interesting to convert a few functions to C++.
This patch touches functions related to parsing command-line arguments
to the inferior (see gdb/fork-child.c:breakup_args), the way the
arguments are stored on fork_inferior (using std::vector instead of
char **), and the code responsible for dealing with argv also on
gdbserver.
I've taken this opportunity and decided to constify a few arguments to
fork_inferior/create_inferior as well, in order to make the code
cleaner. And now, on gdbserver, we're using xstrdup everywhere and
aren't checking for memory allocation failures anymore, as requested
by Pedro:
<https://sourceware.org/ml/gdb-patches/2017-03/msg00191.html>
Message-Id: <025ebdb9-90d9-d54a-c055-57ed2406b812@redhat.com>
Pedro Alves wrote:
> On the "== NULL" check: IIUC, the old NULL check was there to
> handle strdup returning NULL due to out-of-memory.
> See NULL checks and comments further above in this function.
> Now that you're using a std::vector, that doesn't work or make
> sense any longer, since if push_back fails to allocate space for
> its internal buffer (with operator new), our operator new replacement
> (common/new-op.c) calls malloc_failure, which aborts gdbserver.
>
> Not sure it makes sense to handle out-of-memory specially in
> the gdb/rsp-facing functions nowadays (maybe git blame/log/patch
> submission for that code shows some guidelines). Maybe (or, probably)
> it's OK to stop caring about it, but then we should consistently remove
> left over code, by using xstrdup instead and remove the NULL checks.
IMO this refactoring was very good to increase the readability of the
code as well, because some parts of the argument handling were
unnecessarily confusing before.
gdb/ChangeLog:
2017-04-12 Sergio Durigan Junior <sergiodj@redhat.com>
* common/common-utils.c (free_vector_argv): New function.
* common/common-utils.h: Include <vector>.
(free_vector_argv): New prototype.
* darwin-nat.c (darwin_create_inferior): Rewrite function
prototype in order to constify "exec_file" and accept a
"std::string" for "allargs".
* fork-child.c: Include <vector>.
(breakup_args): Rewrite function, using C++.
(fork_inferior): Rewrite function header, constify "exec_file_arg"
and accept "std::string" for "allargs". Update the code to
calculate "argv" based on "allargs". Update calls to "exec_fun"
and "execvp".
* gnu-nat.c (gnu_create_inferior): Rewrite function prototype in
order to constify "exec_file" and accept a "std::string" for
"allargs".
* go32-nat.c (go32_create_inferior): Likewise.
* inf-ptrace.c (inf_ptrace_create_inferior): Likewise.
* infcmd.c (run_command_1): Constify "exec_file". Use
"std::string" for inferior arguments.
* inferior.h (fork_inferior): Update prototype.
* linux-nat.c (linux_nat_create_inferior): Rewrite function
prototype in order to constify "exec_file" and accept a
"std::string" for "allargs".
* nto-procfs.c (procfs_create_inferior): Likewise.
* procfs.c (procfs_create_inferior): Likewise.
* remote-sim.c (gdbsim_create_inferior): Likewise.
* remote.c (extended_remote_run): Update code to accept
"std::string" as argument.
(extended_remote_create_inferior): Rewrite function prototype in
order to constify "exec_file" and accept a "std::string" for
"allargs".
* rs6000-nat.c (super_create_inferior): Likewise.
(rs6000_create_inferior): Likewise.
* target.h (struct target_ops) <to_create_inferior>: Likewise.
* windows-nat.c (windows_create_inferior): Likewise.
gdb/gdbserver/ChangeLog:
2017-04-12 Sergio Durigan Junior <sergiodj@redhat.com>
* server.c: Include <vector>.
<program_argv, wrapper_argv>: Convert to std::vector.
(start_inferior): Rewrite function to use C++.
(handle_v_run): Likewise. Update code that calculates the argv
based on the vRun packet; use C++.
(captured_main): Likewise.
2017-03-23 09:54:49 +08:00
|
|
|
|
const char *exec_file, const std::string &allargs,
|
|
|
|
|
char **env,
|
2004-05-25 22:58:31 +08:00
|
|
|
|
int from_tty)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2009-07-20 23:18:24 +08:00
|
|
|
|
int pid;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2009-07-20 23:18:24 +08:00
|
|
|
|
inf_debug (inf, "creating inferior");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2016-11-25 21:56:01 +08:00
|
|
|
|
pid = fork_inferior (exec_file, allargs, env, gnu_ptrace_me,
|
2011-09-22 18:22:28 +08:00
|
|
|
|
NULL, NULL, NULL, NULL);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
Share fork_inferior et al with gdbserver
This is the most important (and the biggest, sorry) patch of the
series. It moves fork_inferior from gdb/fork-child.c to
nat/fork-inferior.c and makes all the necessary adjustments to both
GDB and gdbserver to make sure everything works OK.
There is no "most important change" with this patch; all changes are
made in a progressive way, making sure that gdbserver had the
necessary features while not breaking GDB at the same time.
I decided to go ahead and implement a partial support for starting the
inferior with a shell on gdbserver, although the full feature comes in
the next patch. The user won't have the option to disable the
startup-with-shell, and also won't be able to change which shell
gdbserver will use (other than setting the $SHELL environment
variable, that is).
Everything is working as expected, and no regressions were present
during the tests.
gdb/ChangeLog:
2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com>
Pedro Alves <palves@redhat.com>
* Makefile.in (HFILES_NO_SRCDIR): Add "common/common-inferior.h"
and "nat/fork-inferior.h".
* common/common-inferior.h: New file, with contents from
"gdb/inferior.h".
* commom/common-utils.c: Include "common-utils.h".
(stringify_argv): New function.
* common/common-utils.h (stringify_argv): New prototype.
* configure.nat: Add "fork-inferior.o" as a dependency for
"*linux*", "fbsd*" and "nbsd*" hosts.
* corefile.c (get_exec_file): Update comment.
* darwin-nat.c (darwin_ptrace_him): Call "gdb_startup_inferior"
instead of "startup_inferior".
(darwin_create_inferior): Call "add_thread_silent" after
"fork_inferior".
* fork-child.c: Cleanup unnecessary includes.
(SHELL_FILE): Move to "common/common-fork-child.c".
(environ): Likewise.
(exec_wrapper): Initialize.
(get_exec_wrapper): New function.
(breakup_args): Move to "common/common-fork-child.c"; rename to
"breakup_args_for_exec".
(escape_bang_in_quoted_argument): Move to
"common/common-fork-child.c".
(saved_ui): New variable.
(prefork_hook): New function.
(postfork_hook): Likewise.
(postfork_child_hook): Likewise.
(gdb_startup_inferior): Likewise.
(fork_inferior): Move to "common/common-fork-child.c". Update
function to support gdbserver.
(startup_inferior): Likewise.
* gdbcore.h (get_exec_file): Remove declaration.
* gnu-nat.c (gnu_create_inferior): Call "gdb_startup_inferior"
instead of "startup_inferior". Call "add_thread_silent" after
"fork_inferior".
* inf-ptrace.c: Include "nat/fork-inferior.h" and "utils.h".
(inf_ptrace_create_inferior): Call "gdb_startup_inferior"
instead of "startup_inferior". Call "add_thread_silent" after
"fork_inferior".
* inferior.h: Include "common-inferior.h".
(trace_start_error): Move to "common/common-utils.h".
(trace_start_error_with_name): Likewise.
(fork_inferior): Move prototype to "nat/fork-inferior.h".
(startup_inferior): Likewise.
(gdb_startup_inferior): New prototype.
* nat/fork-inferior.c: New file, with contents from "fork-child.c".
* nat/fork-inferior.h: New file.
* procfs.c (procfs_init_inferior): Call "gdb_startup_inferior"
instead of "startup_inferior". Call "add_thread_silent" after
"fork_inferior".
* target.h (target_terminal_init): Move prototype to
"target/target.h".
(target_terminal_inferior): Likewise.
(target_terminal_ours): Likewise.
* target/target.h (target_terminal_init): New prototype, moved
from "target.h".
(target_terminal_inferior): Likewise.
(target_terminal_ours): Likewise.
* utils.c (gdb_flush_out_err): New function.
gdb/gdbserver/ChangeLog:
2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com>
Pedro Alves <palves@redhat.com>
* Makefile.in (SFILES): Add "nat/fork-inferior.o".
* configure: Regenerate.
* configure.srv (srv_linux_obj): Add "fork-child.o" and
"fork-inferior.o".
(i[34567]86-*-lynxos*): Likewise.
(spu*-*-*): Likewise.
* fork-child.c: New file.
* linux-low.c: Include "common-inferior.h", "nat/fork-inferior.h"
and "environ.h".
(linux_ptrace_fun): New function.
(linux_create_inferior): Adjust function prototype to reflect
change on "target.h". Adjust function code to use
"fork_inferior".
(linux_request_interrupt): Delete "signal_pid".
* lynx-low.c: Include "common-inferior.h" and "nat/fork-inferior.h".
(lynx_ptrace_fun): New function.
(lynx_create_inferior): Adjust function prototype to reflect
change on "target.h". Adjust function code to use
"fork_inferior".
* nto-low.c (nto_create_inferior): Adjust function prototype and
code to reflect change on "target.h". Update comments.
* server.c: Include "common-inferior.h", "nat/fork-inferior.h",
"common-terminal.h" and "environ.h".
(terminal_fd): Moved to fork-child.c.
(old_foreground_pgrp): Likewise.
(restore_old_foreground_pgrp): Likewise.
(last_status): Make it global.
(last_ptid): Likewise.
(our_environ): New variable.
(startup_with_shell): Likewise.
(program_name): Likewise.
(program_argv): Rename to...
(program_args): ...this.
(wrapper_argv): New variable.
(start_inferior): Delete function.
(get_exec_wrapper): New function.
(get_exec_file): Likewise.
(get_environ): Likewise.
(prefork_hook): Likewise.
(post_fork_inferior): Likewise.
(postfork_hook): Likewise.
(postfork_child_hook): Likewise.
(handle_v_run): Update code to deal with arguments coming from the
remote host. Update calls from "start_inferior" to
"create_inferior".
(captured_main): Likewise. Initialize environment variable. Call
"have_job_control".
* server.h (post_fork_inferior): New prototype.
(get_environ): Likewise.
(last_status): Declare.
(last_ptid): Likewise.
(signal_pid): Likewise.
* spu-low.c: Include "common-inferior.h" and "nat/fork-inferior.h".
(spu_ptrace_fun): New function.
(spu_create_inferior): Adjust function prototype to reflect change
on "target.h". Adjust function code to use "fork_inferior".
* target.c (target_terminal_init): New function.
(target_terminal_inferior): Likewise.
(target_terminal_ours): Likewise.
* target.h: Include <vector>.
(struct target_ops) <create_inferior>: Update prototype.
(create_inferior): Update macro.
* utils.c (gdb_flush_out_err): New function.
* win32-low.c (win32_create_inferior): Adjust function prototype
and code to reflect change on "target.h".
gdb/testsuite/ChangeLog:
2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com>
* gdb.server/non-existing-program.exp: Update regex in order to
reflect the fact that gdbserver is now using fork_inferior (with a
shell) to startup the inferior.
2016-12-23 10:11:11 +08:00
|
|
|
|
/* We have something that executes now. We'll be running through
|
|
|
|
|
the shell at this point (if startup-with-shell is true), but the
|
|
|
|
|
pid shouldn't change. */
|
|
|
|
|
add_thread_silent (pid_to_ptid (pid));
|
|
|
|
|
|
2009-07-20 23:18:24 +08:00
|
|
|
|
/* Attach to the now stopped child, which is actually a shell... */
|
|
|
|
|
inf_debug (inf, "attaching to child: %d", pid);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2009-07-20 23:18:24 +08:00
|
|
|
|
inf_attach (inf, pid);
|
2008-09-09 05:33:25 +08:00
|
|
|
|
|
2009-07-20 23:18:24 +08:00
|
|
|
|
push_target (ops);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2014-01-09 04:42:07 +08:00
|
|
|
|
inf->pending_execs = 1;
|
2009-07-20 23:18:24 +08:00
|
|
|
|
inf->nomsg = 1;
|
|
|
|
|
inf->traced = 1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2009-07-20 23:18:24 +08:00
|
|
|
|
/* Now let the child run again, knowing that it will stop
|
2011-01-08 03:36:19 +08:00
|
|
|
|
immediately because of the ptrace. */
|
2009-07-20 23:18:24 +08:00
|
|
|
|
inf_resume (inf);
|
|
|
|
|
|
|
|
|
|
/* We now have thread info. */
|
|
|
|
|
thread_change_ptid (inferior_ptid,
|
2013-09-18 22:47:51 +08:00
|
|
|
|
ptid_build (inf->pid, inf_pick_first_thread (), 0));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
Share fork_inferior et al with gdbserver
This is the most important (and the biggest, sorry) patch of the
series. It moves fork_inferior from gdb/fork-child.c to
nat/fork-inferior.c and makes all the necessary adjustments to both
GDB and gdbserver to make sure everything works OK.
There is no "most important change" with this patch; all changes are
made in a progressive way, making sure that gdbserver had the
necessary features while not breaking GDB at the same time.
I decided to go ahead and implement a partial support for starting the
inferior with a shell on gdbserver, although the full feature comes in
the next patch. The user won't have the option to disable the
startup-with-shell, and also won't be able to change which shell
gdbserver will use (other than setting the $SHELL environment
variable, that is).
Everything is working as expected, and no regressions were present
during the tests.
gdb/ChangeLog:
2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com>
Pedro Alves <palves@redhat.com>
* Makefile.in (HFILES_NO_SRCDIR): Add "common/common-inferior.h"
and "nat/fork-inferior.h".
* common/common-inferior.h: New file, with contents from
"gdb/inferior.h".
* commom/common-utils.c: Include "common-utils.h".
(stringify_argv): New function.
* common/common-utils.h (stringify_argv): New prototype.
* configure.nat: Add "fork-inferior.o" as a dependency for
"*linux*", "fbsd*" and "nbsd*" hosts.
* corefile.c (get_exec_file): Update comment.
* darwin-nat.c (darwin_ptrace_him): Call "gdb_startup_inferior"
instead of "startup_inferior".
(darwin_create_inferior): Call "add_thread_silent" after
"fork_inferior".
* fork-child.c: Cleanup unnecessary includes.
(SHELL_FILE): Move to "common/common-fork-child.c".
(environ): Likewise.
(exec_wrapper): Initialize.
(get_exec_wrapper): New function.
(breakup_args): Move to "common/common-fork-child.c"; rename to
"breakup_args_for_exec".
(escape_bang_in_quoted_argument): Move to
"common/common-fork-child.c".
(saved_ui): New variable.
(prefork_hook): New function.
(postfork_hook): Likewise.
(postfork_child_hook): Likewise.
(gdb_startup_inferior): Likewise.
(fork_inferior): Move to "common/common-fork-child.c". Update
function to support gdbserver.
(startup_inferior): Likewise.
* gdbcore.h (get_exec_file): Remove declaration.
* gnu-nat.c (gnu_create_inferior): Call "gdb_startup_inferior"
instead of "startup_inferior". Call "add_thread_silent" after
"fork_inferior".
* inf-ptrace.c: Include "nat/fork-inferior.h" and "utils.h".
(inf_ptrace_create_inferior): Call "gdb_startup_inferior"
instead of "startup_inferior". Call "add_thread_silent" after
"fork_inferior".
* inferior.h: Include "common-inferior.h".
(trace_start_error): Move to "common/common-utils.h".
(trace_start_error_with_name): Likewise.
(fork_inferior): Move prototype to "nat/fork-inferior.h".
(startup_inferior): Likewise.
(gdb_startup_inferior): New prototype.
* nat/fork-inferior.c: New file, with contents from "fork-child.c".
* nat/fork-inferior.h: New file.
* procfs.c (procfs_init_inferior): Call "gdb_startup_inferior"
instead of "startup_inferior". Call "add_thread_silent" after
"fork_inferior".
* target.h (target_terminal_init): Move prototype to
"target/target.h".
(target_terminal_inferior): Likewise.
(target_terminal_ours): Likewise.
* target/target.h (target_terminal_init): New prototype, moved
from "target.h".
(target_terminal_inferior): Likewise.
(target_terminal_ours): Likewise.
* utils.c (gdb_flush_out_err): New function.
gdb/gdbserver/ChangeLog:
2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com>
Pedro Alves <palves@redhat.com>
* Makefile.in (SFILES): Add "nat/fork-inferior.o".
* configure: Regenerate.
* configure.srv (srv_linux_obj): Add "fork-child.o" and
"fork-inferior.o".
(i[34567]86-*-lynxos*): Likewise.
(spu*-*-*): Likewise.
* fork-child.c: New file.
* linux-low.c: Include "common-inferior.h", "nat/fork-inferior.h"
and "environ.h".
(linux_ptrace_fun): New function.
(linux_create_inferior): Adjust function prototype to reflect
change on "target.h". Adjust function code to use
"fork_inferior".
(linux_request_interrupt): Delete "signal_pid".
* lynx-low.c: Include "common-inferior.h" and "nat/fork-inferior.h".
(lynx_ptrace_fun): New function.
(lynx_create_inferior): Adjust function prototype to reflect
change on "target.h". Adjust function code to use
"fork_inferior".
* nto-low.c (nto_create_inferior): Adjust function prototype and
code to reflect change on "target.h". Update comments.
* server.c: Include "common-inferior.h", "nat/fork-inferior.h",
"common-terminal.h" and "environ.h".
(terminal_fd): Moved to fork-child.c.
(old_foreground_pgrp): Likewise.
(restore_old_foreground_pgrp): Likewise.
(last_status): Make it global.
(last_ptid): Likewise.
(our_environ): New variable.
(startup_with_shell): Likewise.
(program_name): Likewise.
(program_argv): Rename to...
(program_args): ...this.
(wrapper_argv): New variable.
(start_inferior): Delete function.
(get_exec_wrapper): New function.
(get_exec_file): Likewise.
(get_environ): Likewise.
(prefork_hook): Likewise.
(post_fork_inferior): Likewise.
(postfork_hook): Likewise.
(postfork_child_hook): Likewise.
(handle_v_run): Update code to deal with arguments coming from the
remote host. Update calls from "start_inferior" to
"create_inferior".
(captured_main): Likewise. Initialize environment variable. Call
"have_job_control".
* server.h (post_fork_inferior): New prototype.
(get_environ): Likewise.
(last_status): Declare.
(last_ptid): Likewise.
(signal_pid): Likewise.
* spu-low.c: Include "common-inferior.h" and "nat/fork-inferior.h".
(spu_ptrace_fun): New function.
(spu_create_inferior): Adjust function prototype to reflect change
on "target.h". Adjust function code to use "fork_inferior".
* target.c (target_terminal_init): New function.
(target_terminal_inferior): Likewise.
(target_terminal_ours): Likewise.
* target.h: Include <vector>.
(struct target_ops) <create_inferior>: Update prototype.
(create_inferior): Update macro.
* utils.c (gdb_flush_out_err): New function.
* win32-low.c (win32_create_inferior): Adjust function prototype
and code to reflect change on "target.h".
gdb/testsuite/ChangeLog:
2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com>
* gdb.server/non-existing-program.exp: Update regex in order to
reflect the fact that gdbserver is now using fork_inferior (with a
shell) to startup the inferior.
2016-12-23 10:11:11 +08:00
|
|
|
|
gdb_startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED);
|
|
|
|
|
|
2014-01-09 04:42:07 +08:00
|
|
|
|
inf->pending_execs = 0;
|
Hurd: Adjust to changes to "push pruning old threads down to the target"
For "info threads", we currently run into:
$ gdb/gdb -q -nw -nx --batch -ex start -ex info\ threads bfd/doc/chew
Temporary breakpoint 1 at 0x80486e0: file ../../../W._C._Handy/bfd/doc/chew.c, line 1535.
[New Thread 10656.5]
Thread 4 hit Temporary breakpoint 1, main (ac=1, av=0x102cd84) at ../../../W._C._Handy/bfd/doc/chew.c:1535
1535 {
Id Target Id Frame
1 bogus thread id 1 Can't fetch registers from thread bogus thread id 1: No such thread
Before commit e8032dde10b743253125d7defb5f5503b21c1d26,
gdb/thread.c:update_thread_list used to call prune_threads, after that change
it doesn't anymore, and we don't implement the to_update_thread_list target
method where the prune_threads call got moved. For now, apply a fix, related
to commit c82f56d9d760a9b4034eeaac44f2f0fa5779ff69 "Hurd: Adjust to
startup-with-shell changes", which restores the previous behavior:
Id Target Id Frame
* 4 Thread 10688.4 main (ac=1, av=0x102cd84) at ../../../W._C._Handy/bfd/doc/chew.c:1535
5 Thread 10688.5 0x0106096c in ?? () from /lib/i386-gnu/libc.so.0.3
Not perfect, but at least better.
gdb/
* gnu-nat.c (gnu_create_inferior): After startup_inferior, call
prune_threads.
2016-05-26 00:54:40 +08:00
|
|
|
|
/* Get rid of the old shell threads. */
|
|
|
|
|
prune_threads ();
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-06-08 03:19:32 +08:00
|
|
|
|
inf_validate_procinfo (inf);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_update_signal_thread (inf);
|
|
|
|
|
inf_set_traced (inf, inf->want_signals);
|
|
|
|
|
|
|
|
|
|
/* Execing the process will have trashed our exception ports; steal them
|
|
|
|
|
back (or make sure they're restored if the user wants that). */
|
|
|
|
|
if (inf->want_exceptions)
|
|
|
|
|
inf_steal_exc_ports (inf);
|
|
|
|
|
else
|
|
|
|
|
inf_restore_exc_ports (inf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Attach to process PID, then initialize for debugging it
|
|
|
|
|
and wait for the trace-trap that results from attaching. */
|
|
|
|
|
static void
|
2013-04-15 23:40:57 +08:00
|
|
|
|
gnu_attach (struct target_ops *ops, const char *args, int from_tty)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
int pid;
|
|
|
|
|
char *exec_file;
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2008-09-22 23:21:30 +08:00
|
|
|
|
struct inferior *inferior;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2010-02-16 01:35:50 +08:00
|
|
|
|
pid = parse_pid_to_attach (args);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2010-02-16 01:35:50 +08:00
|
|
|
|
if (pid == getpid ()) /* Trying to masturbate? */
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("I refuse to debug myself!"));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (from_tty)
|
|
|
|
|
{
|
|
|
|
|
exec_file = (char *) get_exec_file (0);
|
|
|
|
|
|
|
|
|
|
if (exec_file)
|
|
|
|
|
printf_unfiltered ("Attaching to program `%s', pid %d\n",
|
|
|
|
|
exec_file, pid);
|
|
|
|
|
else
|
|
|
|
|
printf_unfiltered ("Attaching to pid %d\n", pid);
|
|
|
|
|
|
|
|
|
|
gdb_flush (gdb_stdout);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inf_debug (inf, "attaching to pid: %d", pid);
|
|
|
|
|
|
|
|
|
|
inf_attach (inf, pid);
|
2008-09-09 20:08:12 +08:00
|
|
|
|
|
2009-07-20 23:18:24 +08:00
|
|
|
|
push_target (ops);
|
2008-09-09 20:08:12 +08:00
|
|
|
|
|
2009-10-19 Pedro Alves <pedro@codesourcery.com>
Stan Shebs <stan@codesourcery.com>
Add base multi-executable/process support to GDB.
gdb/
* Makefile.in (SFILES): Add progspace.c.
(COMMON_OBS): Add progspace.o.
* progspace.h: New.
* progspace.c: New.
* breakpoint.h (struct bp_target_info) <placed_address_space>: New
field.
(struct bp_location) <pspace>: New field.
(struct breakpoint) <pspace>: New field.
(bpstat_stop_status, breakpoint_here_p)
(moribund_breakpoint_here_p, breakpoint_inserted_here_p)
(regular_breakpoint_inserted_here_p)
(software_breakpoint_inserted_here_p, breakpoint_thread_match)
(set_default_breakpoint): Adjust prototypes.
(remove_breakpoints_pid, breakpoint_program_space_exit): Declare.
(insert_single_step_breakpoint, deprecated_insert_raw_breakpoint):
Adjust prototypes.
* breakpoint.c (executing_startup): Delete.
(default_breakpoint_sspace): New.
(breakpoint_restore_shadows): Skip if the address space doesn't
match.
(update_watchpoint): Record the frame's program space in the
breakpoint location.
(insert_bp_location): Record the address space in target_info.
Adjust to pass the symbol space to solib_name_from_address.
(breakpoint_program_space_exit): New.
(insert_breakpoint_locations): Switch the symbol space and thread
when inserting breakpoints. Don't insert breakpoints in a vfork
parent waiting for vfork done if we're not attached to the vfork
child.
(remove_breakpoints_pid): New.
(reattach_breakpoints): Switch to a thread of PID. Ignore
breakpoints of other symbol spaces.
(create_internal_breakpoint): Store the symbol space in the sal.
(create_longjmp_master_breakpoint): Iterate over all symbol
spaces.
(update_breakpoints_after_exec): Ignore breakpoints for other
symbol spaces.
(remove_breakpoint): Rename to ...
(remove_breakpoint_1): ... this. Pass the breakpoints symbol
space to solib_name_from_address.
(remove_breakpoint): New.
(mark_breakpoints_out): Ignore breakpoints from other symbol
spaces.
(breakpoint_init_inferior): Ditto.
(breakpoint_here_p): Add an address space argument and adjust to
use breakpoint_address_match.
(moribund_breakpoint_here_p): Ditto.
(regular_breakpoint_inserted_here_p): Ditto.
(breakpoint_inserted_here_p): Ditto.
(software_breakpoint_inserted_here_p): Ditto.
(breakpoint_thread_match): Ditto.
(bpstat_check_location): Ditto.
(bpstat_stop_status): Ditto.
(print_breakpoint_location): If there's a location to print,
switch the current symbol space.
(print_one_breakpoint_location): Add `allflag' argument.
(print_one_breakpoint): Ditto. Adjust.
(do_captured_breakpoint_query): Adjust.
(breakpoint_1): Adjust.
(breakpoint_has_pc): Also match the symbol space.
(describe_other_breakpoints): Add a symbol space argument and
adjust.
(set_default_breakpoint): Add a symbol space argument. Set
default_breakpoint_sspace.
(breakpoint_address_match): New.
(check_duplicates_for): Add an address space argument, and adjust.
(set_raw_breakpoint): Record the symbol space in the location and
in the breakpoint.
(set_longjmp_breakpoint): Skip longjmp master breakpoints from
other symbol spaces.
(remove_thread_event_breakpoints, remove_solib_event_breakpoints)
(disable_breakpoints_in_shlibs): Skip breakpoints from other
symbol spaces.
(disable_breakpoints_in_unloaded_shlib): Match symbol spaces.
(create_catchpoint): Set the symbol space in the sal.
(disable_breakpoints_before_startup): Skip breakpoints from other
symbol spaces. Set executing_startup in the current symbol space.
(enable_breakpoints_after_startup): Clear executing_startup in the
current symbol space. Skip breakpoints from other symbol spaces.
(clone_momentary_breakpoint): Also copy the symbol space.
(add_location_to_breakpoint): Set the location's symbol space.
(bp_loc_is_permanent): Switch thread and symbol space.
(create_breakpoint): Adjust.
(expand_line_sal_maybe): Expand comment to mention symbol spaces.
Switch thread and symbol space when reading memory.
(parse_breakpoint_sals): Set the symbol space in the sal.
(break_command_really): Ditto.
(skip_prologue_sal): Switch and space.
(resolve_sal_pc): Ditto.
(watch_command_1): Record the symbol space in the sal.
(create_ada_exception_breakpoint): Adjust.
(clear_command): Adjust. Match symbol spaces.
(update_global_location_list): Use breakpoint_address_match.
(breakpoint_re_set_one): Switch thread and space.
(breakpoint_re_set): Save symbol space.
(breakpoint_re_set_thread): Also reset the symbol space.
(deprecated_insert_raw_breakpoint): Add an address space argument.
Adjust.
(insert_single_step_breakpoint): Ditto.
(single_step_breakpoint_inserted_here_p): Ditto.
(clear_syscall_counts): New.
(_initialize_breakpoint): Install it as inferior_exit observer.
* exec.h: Include "progspace.h".
(exec_bfd, exec_bfd_mtime): New defines.
(exec_close): Declare.
* exec.c: Include "gdbthread.h" and "progspace.h".
(exec_bfd, exec_bfd_mtime, current_target_sections_1): Delete.
(using_exec_ops): New.
(exec_close_1): Rename to exec_close, and make public.
(exec_close): Rename to exec_close_1, and adjust all callers. Add
description. Remove target sections and close executables from
all program spaces.
(exec_file_attach): Add comment.
(add_target_sections): Check on `using_exec_ops' to check if the
target should be pushed.
(remove_target_sections): Only unpush the target if there are no
more target sections in any symbol space.
* gdbcore.h: Include "exec.h".
(exec_bfd, exec_bfd_mtime): Remove declarations.
* frame.h (get_frame_program_space, get_frame_address_space)
(frame_unwind_program_space): Declare.
* frame.c (struct frame_info) <pspace, aspace>: New fields.
(create_sentinel_frame): Add program space argument. Set the
pspace and aspace fields of the frame object.
(get_current_frame, create_new_frame): Adjust.
(get_frame_program_space): New.
(frame_unwind_program_space): New.
(get_frame_address_space): New.
* stack.c (print_frame_info): Adjust.
(print_frame): Use the frame's program space.
* gdbthread.h (any_live_thread_of_process): Declare.
* thread.c (any_live_thread_of_process): New.
(switch_to_thread): Switch the program space as well.
(restore_selected_frame): Don't warn if trying to restore frame
level 0.
* inferior.h: Include "progspace.h".
(detach_fork): Declare.
(struct inferior) <removable, aspace, pspace>
<vfork_parent, vfork_child, pending_detach>
<waiting_for_vfork_done>: New fields.
<terminal_info>: Remove field.
<data, num_data>: New fields.
(register_inferior_data, register_inferior_data_with_cleanup)
(clear_inferior_data, set_inferior_data, inferior_data): Declare.
(exit_inferior, exit_inferior_silent, exit_inferior_num_silent)
(inferior_appeared): Declare.
(find_inferior_pid): Typo.
(find_inferior_id, find_inferior_for_program_space): Declare.
(set_current_inferior, save_current_inferior, prune_inferiors)
(number_of_inferiors): Declare.
(inferior_list): Declare.
* inferior.c: Include "gdbcore.h" and "symfile.h".
(inferior_list): Make public.
(delete_inferior_1): Always delete thread silently.
(find_inferior_id): Make public.
(current_inferior_): New.
(current_inferior): Use it.
(set_current_inferior): New.
(restore_inferior): New.
(save_current_inferior): New.
(free_inferior): Free the per-inferior data.
(add_inferior_silent): Allocate per-inferior data.
Call inferior_appeared.
(delete_threads_of_inferior): New.
(delete_inferior_1): Adjust interface to take an inferior pointer.
(delete_inferior): Adjust.
(delete_inferior_silent): Adjust.
(exit_inferior_1): New.
(exit_inferior): New.
(exit_inferior_silent): New.
(exit_inferior_num_silent): New.
(detach_inferior): Adjust.
(inferior_appeared): New.
(discard_all_inferiors): Adjust.
(find_inferior_id): Make public. Assert pid is not zero.
(find_inferior_for_program_space): New.
(have_inferiors): Check if we have any inferior with pid not zero.
(have_live_inferiors): Go over all pushed targets looking for
process_stratum.
(prune_inferiors): New.
(number_of_inferiors): New.
(print_inferior): Add executable column. Print vfork parent/child
relationships.
(inferior_command): Adjust to cope with not running inferiors.
(remove_inferior_command): New.
(add_inferior_command): New.
(clone_inferior_command): New.
(struct inferior_data): New.
(struct inferior_data_registration): New.
(struct inferior_data_registry): New.
(inferior_data_registry): New.
(register_inferior_data_with_cleanup): New.
(register_inferior_data): New.
(inferior_alloc_data): New.
(inferior_free_data): New.
(clear_inferior_data): New.
(set_inferior_data): New.
(inferior_data): New.
(initialize_inferiors): New.
(_initialize_inferiors): Register "add-inferior",
"remove-inferior" and "clone-inferior" commands.
* objfiles.h: Include "progspace.h".
(struct objfile) <pspace>: New field.
(symfile_objfile, object_files): Don't declare.
(ALL_PSPACE_OBJFILES): New.
(ALL_PSPACE_OBJFILES_SAFE): New.
(ALL_OBJFILES, ALL_OBJFILES_SAFE): Adjust.
(ALL_PSPACE_SYMTABS): New.
(ALL_PRIMARY_SYMTABS): Adjust.
(ALL_PSPACE_PRIMARY_SYMTABS): New.
(ALL_PSYMTABS): Adjust.
(ALL_PSPACE_PSYMTABS): New.
* objfiles.c (object_files, symfile_objfile): Delete.
(struct objfile_sspace_info): New.
(objfiles_pspace_data): New.
(objfiles_pspace_data_cleanup): New.
(get_objfile_pspace_data): New.
(objfiles_changed_p): Delete.
(allocate_objfile): Set the objfile's program space. Adjust to
reference objfiles_changed_p in pspace data.
(free_objfile): Adjust to reference objfiles_changed_p in pspace
data.
(objfile_relocate): Ditto.
(update_section_map): Add pspace argument. Adjust to iterate over
objfiles in the passed in pspace.
(find_pc_section): Delete sections and num_sections statics.
Adjust to refer to program space's objfiles_changed_p. Adjust to
refer to sections and num_sections store in the objfile's pspace
data.
(objfiles_changed): Adjust to reference objfiles_changed_p in
pspace data.
(_initialize_objfiles): New.
* linespec.c (decode_all_digits, decode_dollar): Set the sal's
program space.
* source.c (current_source_pspace): New.
(get_current_source_symtab_and_line): Set the sal's program space.
(set_current_source_symtab_and_line): Set current_source_pspace.
(select_source_symtab): Ditto. Use ALL_OBJFILES.
(forget_cached_source_info): Iterate over all program spaces.
* symfile.c (clear_symtab_users): Adjust.
* symmisc.c (print_symbol_bcache_statistics): Iterate over all
program spaces.
(print_objfile_statistics): Ditto.
(maintenance_print_msymbols): Ditto.
(maintenance_print_objfiles): Ditto.
(maintenance_info_symtabs): Ditto.
(maintenance_info_psymtabs): Ditto.
* symtab.h (SYMTAB_PSPACE): New.
(struct symtab_and_line) <pspace>: New field.
* symtab.c (init_sal): Clear the sal's program space.
(find_pc_sect_symtab): Set the sal's program space. Switch thread
and space.
(append_expanded_sal): Add program space argument. Iterate over
all program spaces.
(expand_line_sal): Iterate over all program spaces. Switch
program space.
* target.h (enum target_waitkind) <TARGET_WAITKIND_VFORK_DONE>: New.
(struct target_ops) <to_thread_address_space>: New field.
(target_thread_address_space): Define.
* target.c (target_detach): Only remove breakpoints from the
inferior we're detaching.
(target_thread_address_space): New.
* defs.h (initialize_progspace): Declare.
* top.c (gdb_init): Call it.
* solist.h (struct so_list) <sspace>: New field.
* solib.h (struct program_space): Forward declare.
(solib_name_from_address): Adjust prototype.
* solib.c (so_list_head): Replace with a macro referencing the
program space.
(update_solib_list): Set the so's program space.
(solib_name_from_address): Add a program space argument and adjust.
* solib-svr4.c (struct svr4_info) <pid>: Delete field.
<interp_text_sect_low, interp_text_sect_high, interp_plt_sect_low>
<interp_plt_sect_high>: New fields.
(svr4_info_p, svr4_info): Delete.
(solib_svr4_sspace_data): New.
(get_svr4_info): Rewrite.
(svr4_sspace_data_cleanup): New.
(open_symbol_file_object): Adjust.
(svr4_default_sos): Adjust.
(svr4_fetch_objfile_link_map): Adjust.
(interp_text_sect_low, interp_text_sect_high, interp_plt_sect_low)
(interp_plt_sect_high): Delete.
(svr4_in_dynsym_resolve_code): Adjust.
(enable_break): Adjust.
(svr4_clear_solib): Revert bit that removed the svr4_info here,
and reinstate clearing debug_base, debug_loader_offset_p,
debug_loader_offset and debug_loader_name.
(_initialize_svr4_solib): Register solib_svr4_pspace_data. Don't
install an inferior_exit observer anymore.
* printcmd.c (struct display) <pspace>: New field.
(display_command): Set the display's sspace.
(do_one_display): Match the display's sspace.
(display_uses_solib_p): Ditto.
* linux-fork.c (detach_fork): Moved to infrun.c.
(_initialize_linux_fork): Moved "detach-on-fork" command to
infrun.c.
* infrun.c (detach_fork): Moved from linux-fork.c.
(proceed_after_vfork_done): New.
(handle_vfork_child_exec_or_exit): New.
(follow_exec_mode_replace, follow_exec_mode_keep)
(follow_exec_mode_names, follow_exec_mode_string)
(show_follow_exec_mode_string): New.
(follow_exec): New. Reinstate the mark_breakpoints_out call.
Remove shared libraries before attaching new executable. If user
wants to keep the inferior, keep it.
(displaced_step_fixup): Adjust to pass an address space to the
breakpoints module.
(resume): Ditto.
(clear_proceed_status): In all-stop mode, always clear the proceed
status of all threads.
(prepare_to_proceed): Adjust to pass an address space to the
breakpoints module.
(proceed): Ditto.
(adjust_pc_after_break): Ditto.
(handle_inferior_event): When handling a process exit, switch the
program space to the inferior's that had exited. Call
handle_vfork_child_exec_or_exit. Adjust to pass an address space
to the breakpoints module. In non-stop mode, when following a
fork and detach-fork is off, also resume the other branch. Handle
TARGET_WAITKIND_VFORK_DONE. Set the program space in sals.
(normal_stop): Prune inferiors.
(_initialize_infrun): Install the new "follow-exec-mode" command.
"detach-on-fork" moved here.
* regcache.h (get_regcache_aspace): Declare.
* regcache.c (struct regcache) <aspace>: New field.
(regcache_xmalloc): Clear the aspace.
(get_regcache_aspace): New.
(regcache_cpy): Copy the aspace field.
(regcache_cpy_no_passthrough): Ditto.
(get_thread_regcache): Fetch the thread's address space from the
target, and store it in the regcache.
* infcall.c (call_function_by_hand): Set the sal's pspace.
* arch-utils.c (default_has_shared_address_space): New.
* arch-utils.h (default_has_shared_address_space): Declare.
* gdbarch.sh (has_shared_address_space): New.
* gdbarch.h, gdbarch.c: Regenerate.
* linux-tdep.c: Include auxv.h, target.h, elf/common.h.
(linux_has_shared_address_space): New.
(_initialize_linux_tdep): Declare.
* arm-tdep.c (arm_software_single_step): Pass the frame's address
space to insert_single_step_breakpoint.
* arm-linux-tdep.c (arm_linux_software_single_step): Pass the
frame's pspace to breakpoint functions.
* cris-tdep.c (crisv32_single_step_through_delay): Ditto.
(cris_software_single_step): Ditto.
* mips-tdep.c (deal_with_atomic_sequence): Add frame argument.
Pass the frame's pspace to breakpoint functions.
(mips_software_single_step): Adjust.
(mips_single_step_through_delay): Adjust.
* rs6000-aix-tdep.c (rs6000_software_single_step): Adjust.
* rs6000-tdep.c (ppc_deal_with_atomic_sequence): Adjust.
* solib-irix.c (enable_break): Adjust to pass the current frame's
address space to breakpoint functions.
* sparc-tdep.c (sparc_software_single_step): Ditto.
* spu-tdep.c (spu_software_single_step): Ditto.
* alpha-tdep.c (alpha_software_single_step): Ditto.
* record.c (record_wait): Adjust to pass an address space to the
breakpoints module.
* fork-child.c (fork_inferior): Set the new inferior's program and
address spaces.
* inf-ptrace.c (inf_ptrace_follow_fork): Copy the parent's program
and address spaces.
(inf_ptrace_attach): Set the inferior's program and address spaces.
* linux-nat.c: Include "solib.h".
(linux_child_follow_fork): Manage parent and child's program and
address spaces. Clone the parent's program space if necessary.
Don't wait for the vfork to be done here. Refuse to resume if
following the vfork parent while leaving the child stopped.
(resume_callback): Don't resume a vfork parent.
(linux_nat_resume): Also check for pending events in the
lp->waitstatus field.
(linux_handle_extended_wait): Report TARGET_WAITKIND_VFORK_DONE
events to the core.
(stop_wait_callback): Don't wait for SIGSTOP on vfork parents.
(cancel_breakpoint): Adjust.
* linux-thread-db.c (thread_db_wait): Don't remove thread event
breakpoints here.
(thread_db_mourn_inferior): Don't mark breakpoints out here.
Remove thread event breakpoints after mourning.
* corelow.c: Include progspace.h.
(core_open): Set the inferior's program and address spaces.
* remote.c (remote_add_inferior): Set the new inferior's program
and address spaces.
(remote_start_remote): Update address spaces.
(extended_remote_create_inferior_1): Don't init the thread list if
we already debugging other inferiors.
* darwin-nat.c (darwin_attach): Set the new inferior's program and
address spaces.
* gnu-nat.c (gnu_attach): Ditto.
* go32-nat.c (go32_create_inferior): Ditto.
* inf-ttrace.c (inf_ttrace_follow_fork, inf_ttrace_attach): Ditto.
* monitor.c (monitor_open): Ditto.
* nto-procfs.c (procfs_attach, procfs_create_inferior): Ditto.
* procfs.c (do_attach): Ditto.
* windows-nat.c (do_initial_windows_stuff): Ditto.
* inflow.c (inferior_process_group)
(terminal_init_inferior_with_pgrp, terminal_inferior,
(terminal_ours_1, inflow_inferior_exit, copy_terminal_info)
(child_terminal_info, new_tty_postfork, set_sigint_trap): Adjust
to use per-inferior data instead of inferior->terminal_info.
(inflow_inferior_data): New.
(inflow_new_inferior): Delete.
(inflow_inferior_data_cleanup): New.
(get_inflow_inferior_data): New.
* mi/mi-interp.c (mi_new_inferior): Rename to...
(mi_inferior_appeared): ... this.
(mi_interpreter_init): Adjust.
* tui/tui-disasm.c: Include "progspace.h".
(tui_set_disassem_content): Pass an address space to
breakpoint_here_p.
* NEWS: Mention multi-program debugging support. Mention new
commands "add-inferior", "clone-inferior", "remove-inferior",
"maint info program-spaces", and new option "set
follow-exec-mode".
2009-10-19 Pedro Alves <pedro@codesourcery.com>
Stan Shebs <stan@codesourcery.com>
gdb/doc/
* observer.texi (new_inferior): Rename to...
(inferior_appeared): ... this.
2009-10-19 Pedro Alves <pedro@codesourcery.com>
Stan Shebs <stan@codesourcery.com>
gdb/testsuite/
* gdb.base/foll-vfork.exp: Adjust to spell out "follow-fork".
* gdb.base/foll-exec.exp: Adjust to expect a process id before
"Executing new program".
* gdb.base/foll-fork.exp: Adjust to spell out "follow-fork".
* gdb.base/multi-forks.exp: Ditto. Adjust to the inferior being
left listed after having been killed.
* gdb.base/attach.exp: Adjust to spell out "symbol-file".
* gdb.base/maint.exp: Adjust test.
* Makefile.in (ALL_SUBDIRS): Add gdb.multi.
* gdb.multi/Makefile.in: New.
* gdb.multi/base.exp: New.
* gdb.multi/goodbye.c: New.
* gdb.multi/hangout.c: New.
* gdb.multi/hello.c: New.
* gdb.multi/bkpt-multi-exec.c: New.
* gdb.multi/bkpt-multi-exec.exp: New.
* gdb.multi/crashme.c: New.
2009-10-19 Pedro Alves <pedro@codesourcery.com>
Stan Shebs <stan@codesourcery.com>
gdb/doc/
* gdb.texinfo (Inferiors): Rename node to ...
(Inferiors and Programs): ... this. Mention running multiple
programs in the same debug session.
<info inferiors>: Mention the new 'Executable' column if "info
inferiors". Update examples. Document the "add-inferior",
"clone-inferior", "remove-inferior" and "maint info
program-spaces" commands.
(Process): Rename node to...
(Forks): ... this. Document "set|show follow-exec-mode".
2009-10-19 17:51:43 +08:00
|
|
|
|
inferior = current_inferior ();
|
|
|
|
|
inferior_appeared (inferior, pid);
|
2008-09-22 23:21:30 +08:00
|
|
|
|
inferior->attach_flag = 1;
|
2008-09-22 23:16:51 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf_update_procs (inf);
|
|
|
|
|
|
2013-09-18 22:47:51 +08:00
|
|
|
|
inferior_ptid = ptid_build (pid, inf_pick_first_thread (), 0);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-05-05 22:45:51 +08:00
|
|
|
|
/* We have to initialize the terminal settings now, since the code
|
|
|
|
|
below might try to restore them. */
|
|
|
|
|
target_terminal_init ();
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* If the process was stopped before we attached, make it continue the next
|
|
|
|
|
time the user does a continue. */
|
1999-06-08 03:19:32 +08:00
|
|
|
|
inf_validate_procinfo (inf);
|
|
|
|
|
|
|
|
|
|
inf_update_signal_thread (inf);
|
|
|
|
|
inf_set_traced (inf, inf->want_signals);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
#if 0 /* Do we need this? */
|
|
|
|
|
renumber_threads (0); /* Give our threads reasonable names. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
#endif
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Take a program previously attached to and detaches it.
|
|
|
|
|
The program resumes execution and will no longer stop
|
|
|
|
|
on signals, etc. We'd better not have left any breakpoints
|
|
|
|
|
in the program or it'll die when it hits one. For this
|
|
|
|
|
to work, it may be necessary for the process to have been
|
|
|
|
|
previously attached. It *might* work if the program was
|
|
|
|
|
started via fork. */
|
|
|
|
|
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 23:23:17 +08:00
|
|
|
|
gnu_detach (struct target_ops *ops, const char *args, int from_tty)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2008-09-22 23:16:51 +08:00
|
|
|
|
int pid;
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (from_tty)
|
|
|
|
|
{
|
|
|
|
|
char *exec_file = get_exec_file (0);
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (exec_file)
|
|
|
|
|
printf_unfiltered ("Detaching from program `%s' pid %d\n",
|
2008-10-08 02:42:42 +08:00
|
|
|
|
exec_file, gnu_current_inf->pid);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else
|
2008-10-08 02:42:42 +08:00
|
|
|
|
printf_unfiltered ("Detaching from pid %d\n", gnu_current_inf->pid);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
gdb_flush (gdb_stdout);
|
|
|
|
|
}
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
2008-10-08 02:42:42 +08:00
|
|
|
|
pid = gnu_current_inf->pid;
|
2008-09-22 23:16:51 +08:00
|
|
|
|
|
2008-10-08 02:42:42 +08:00
|
|
|
|
inf_detach (gnu_current_inf);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2001-05-04 12:15:33 +08:00
|
|
|
|
inferior_ptid = null_ptid;
|
2008-09-22 23:16:51 +08:00
|
|
|
|
detach_inferior (pid);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
Allow making GDB not automatically connect to the native target.
Sometimes it's useful to be able to disable the automatic connection
to the native target. E.g., sometimes GDB disconnects from the
extended-remote target I was debugging, without me noticing it, and
then I do "run". That starts the program locally, and only after a
little head scratch session do I figure out the program is running
locally instead of remotely as intended. Same thing with "attach",
"info os", etc.
With the patch, we now can have this instead:
(gdb) set auto-connect-native-target off
(gdb) target extended-remote :9999
...
*gdb disconnects*
(gdb) run
Don't know how to run. Try "help target".
To still be able to connect to the native target with
auto-connect-native-target set to off, I've made "target native" work
instead of erroring out as today.
Before:
(gdb) target native
Use the "run" command to start a native process.
After:
(gdb) target native
Done. Use the "run" command to start a process.
(gdb) maint print target-stack
The current target stack is:
- native (Native process)
- exec (Local exec file)
- None (None)
(gdb) run
Starting program: ./a.out
...
I've also wanted this for the testsuite, when running against the
native-extended-gdbserver.exp board (runs against gdbserver in
extended-remote mode). With a non-native-target board, it's always a
bug to launch a program with the native target. Turns out we still
have one such case this patch catches:
(gdb) break main
Breakpoint 1 at 0x4009e5: file ../../../src/gdb/testsuite/gdb.base/coremaker.c, line 138.
(gdb) run
Don't know how to run. Try "help target".
(gdb) FAIL: gdb.base/corefile.exp: run: with core
On the patch itself, probably the least obvious bit is the need to go
through all targets, and move the unpush_target call to after the
generic_mourn_inferior call instead of before. This is what
inf-ptrace.c does too, ever since multi-process support was added.
The reason inf-ptrace.c does things in that order is that in the
current multi-process/single-target model, we shouldn't unpush the
target if there are still other live inferiors being debugged. The
check for that is "have_inferiors ()" (a misnomer nowadays...), which
does:
have_inferiors (void)
{
for (inf = inferior_list; inf; inf = inf->next)
if (inf->pid != 0)
return 1;
It's generic_mourn_inferior that ends up clearing inf->pid, so we need
to call it before the have_inferiors check. To make all native
targets behave the same WRT to explicit "target native", I've added an
inf_child_maybe_unpush_target function that targets call instead of
calling unpush_target directly, and as that includes the
have_inferiors check, I needed to adjust the targets.
Tested on x86_64 Fedora 20, native, and also with the
extended-gdbserver board.
Confirmed a cross build of djgpp gdb still builds.
Smoke tested a cross build of Windows gdb under Wine.
Untested otherwise.
gdb/
2014-05-21 Pedro Alves <palves@redhat.com>
* inf-child.c (inf_child_ops, inf_child_explicitly_opened): New
globals.
(inf_child_open_target): New function.
(inf_child_open): Use inf_child_open_target to push the target
instead of erroring out.
(inf_child_disconnect, inf_child_close)
(inf_child_maybe_unpush_target): New functions.
(inf_child_target): Install inf_child_disconnect and
inf_child_close. Store a pointer to the returned object.
* inf-child.h (inf_child_open_target, inf_child_maybe_unpush): New
declarations.
* target.c (auto_connect_native_target): New global.
(show_default_run_target): New function.
(find_default_run_target): Return NULL if automatically connecting
to the native target is disabled.
(_initialize_target): Install set/show auto-connect-native-target.
* NEWS: Mention "set auto-connect-native-target", and "target
native".
* linux-nat.c (super_close): New global.
(linux_nat_close): Call super_close.
(linux_nat_add_target): Store a pointer to the base class's
to_close method.
* inf-ptrace.c (inf_ptrace_mourn_inferior, inf_ptrace_detach): Use
inf_child_maybe_unpush.
* inf-ttrace.c (inf_ttrace_him): Don't push the target if it is
already pushed.
(inf_ttrace_mourn_inferior): Only unpush the target after mourning
the inferior. Use inf_child_maybe_unpush_target.
(inf_ttrace_attach): Don't push the target if it is already
pushed.
(inf_ttrace_detach): Use inf_child_maybe_unpush_target.
* darwin-nat.c (darwin_mourn_inferior): Only unpush the target
after mourning the inferior. Use inf_child_maybe_unpush_target.
(darwin_attach_pid): Don't push the target if it is already
pushed.
* gnu-nat.c (gnu_mourn_inferior): Only unpush the target after
mourning the inferior. Use inf_child_maybe_unpush_target.
(gnu_detach): Use inf_child_maybe_unpush_target.
* go32-nat.c (go32_create_inferior): Don't push the target if it
is already pushed.
(go32_mourn_inferior): Use inf_child_maybe_unpush_target.
* nto-procfs.c (procfs_is_nto_target): Adjust comment.
(procfs_open): Rename to ...
(procfs_open_1): ... this. Add target_ops parameter. Adjust
comments. Can target_preopen before changing node. Call
inf_child_open_target to push the target explicitly.
(procfs_attach): Don't push the target if it is already pushed.
(procfs_detach): Use inf_child_maybe_unpush_target.
(procfs_create_inferior): Don't push the target if it is already
pushed.
(nto_native_ops): New global.
(procfs_open): Reimplement.
(procfs_native_open): New function.
(init_procfs_targets): Install procfs_native_open as to_open of
"target native". Store a pointer to the "native" target in
nto_native_ops.
* procfs.c (procfs_attach): Don't push the target if it is already
pushed.
(procfs_detach): Use inf_child_maybe_unpush_target.
(procfs_mourn_inferior): Only unpush the target after mourning the
inferior. Use inf_child_maybe_unpush_target.
(procfs_init_inferior): Don't push the target if it is already
pushed.
* windows-nat.c (do_initial_windows_stuff): Don't push the target
if it is already pushed.
(windows_detach): Use inf_child_maybe_unpush_target.
(windows_mourn_inferior): Only unpush the target after mourning
the inferior. Use inf_child_maybe_unpush_target.
gdb/doc/
2014-05-21 Pedro Alves <palves@redhat.com>
* gdb.texinfo (Starting): Document "set/show
auto-connect-native-target".
(Target Commands): Document "target native".
gdb/testsuite/
2014-05-21 Pedro Alves <palves@redhat.com>
* boards/gdbserver-base.exp (GDBFLAGS): Set to "set
auto-connect-native-target off".
* gdb.base/auto-connect-native-target.c: New file.
* gdb.base/auto-connect-native-target.exp: New file.
2014-05-22 01:30:47 +08:00
|
|
|
|
inf_child_maybe_unpush_target (ops);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
2014-03-14 08:06:45 +08:00
|
|
|
|
gnu_terminal_init (struct target_ops *self)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2008-10-08 02:42:42 +08:00
|
|
|
|
gdb_assert (gnu_current_inf);
|
2014-03-14 08:06:45 +08:00
|
|
|
|
child_terminal_init_with_pgrp (gnu_current_inf->pid);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2013-12-18 12:34:36 +08:00
|
|
|
|
gnu_stop (struct target_ops *self, ptid_t ptid)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("to_stop target function not implemented"));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
* 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
|
|
|
|
gnu_thread_alive (struct target_ops *ops, ptid_t ptid)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2008-10-08 02:42:42 +08:00
|
|
|
|
inf_update_procs (gnu_current_inf);
|
|
|
|
|
return !!inf_tid_to_thread (gnu_current_inf,
|
2013-09-18 22:47:51 +08:00
|
|
|
|
ptid_get_lwp (ptid));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* Read inferior task's LEN bytes from ADDR and copy it to MYADDR in
|
|
|
|
|
gdb's address space. Return 0 on failure; number of bytes read
|
|
|
|
|
otherwise. */
|
2013-09-19 21:40:38 +08:00
|
|
|
|
static int
|
|
|
|
|
gnu_read_inferior (task_t task, CORE_ADDR addr, gdb_byte *myaddr, int length)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
vm_address_t low_address = (vm_address_t) trunc_page (addr);
|
|
|
|
|
vm_size_t aligned_length =
|
1999-07-08 04:19:36 +08:00
|
|
|
|
(vm_size_t) round_page (addr + length) - low_address;
|
|
|
|
|
pointer_t copied;
|
2014-02-07 14:35:09 +08:00
|
|
|
|
mach_msg_type_number_t copy_count;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Get memory from inferior with page aligned addresses. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
err = vm_read (task, low_address, aligned_length, &copied, ©_count);
|
|
|
|
|
if (err)
|
|
|
|
|
return 0;
|
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
err = hurd_safe_copyin (myaddr, (void *) (addr - low_address + copied),
|
|
|
|
|
length);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (err)
|
|
|
|
|
{
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Read from inferior faulted: %s"), safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
length = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = vm_deallocate (mach_task_self (), copied, copy_count);
|
|
|
|
|
if (err)
|
2011-01-08 03:36:19 +08:00
|
|
|
|
warning (_("gnu_read_inferior vm_deallocate failed: %s"),
|
|
|
|
|
safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
return length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define CHK_GOTO_OUT(str,ret) \
|
|
|
|
|
do if (ret != KERN_SUCCESS) { errstr = #str; goto out; } while(0)
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct vm_region_list
|
|
|
|
|
{
|
1999-04-16 09:35:26 +08:00
|
|
|
|
struct vm_region_list *next;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
vm_prot_t protection;
|
|
|
|
|
vm_address_t start;
|
|
|
|
|
vm_size_t length;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
};
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct obstack region_obstack;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
/* Write gdb's LEN bytes from MYADDR and copy it to ADDR in inferior
|
|
|
|
|
task's address space. */
|
2013-09-19 21:40:38 +08:00
|
|
|
|
static int
|
|
|
|
|
gnu_write_inferior (task_t task, CORE_ADDR addr,
|
|
|
|
|
const gdb_byte *myaddr, int length)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
vm_address_t low_address = (vm_address_t) trunc_page (addr);
|
|
|
|
|
vm_size_t aligned_length =
|
|
|
|
|
(vm_size_t) round_page (addr + length) - low_address;
|
|
|
|
|
pointer_t copied;
|
2014-02-07 14:35:09 +08:00
|
|
|
|
mach_msg_type_number_t copy_count;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
int deallocate = 0;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
char *errstr = "Bug in gnu_write_inferior";
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
struct vm_region_list *region_element;
|
2015-09-01 04:19:49 +08:00
|
|
|
|
struct vm_region_list *region_head = NULL;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Get memory from inferior with page aligned addresses. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
err = vm_read (task,
|
|
|
|
|
low_address,
|
|
|
|
|
aligned_length,
|
|
|
|
|
&copied,
|
|
|
|
|
©_count);
|
|
|
|
|
CHK_GOTO_OUT ("gnu_write_inferior vm_read failed", err);
|
|
|
|
|
|
|
|
|
|
deallocate++;
|
|
|
|
|
|
2006-07-16 17:57:02 +08:00
|
|
|
|
err = hurd_safe_copyout ((void *) (addr - low_address + copied),
|
2000-02-26 23:04:30 +08:00
|
|
|
|
myaddr, length);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
CHK_GOTO_OUT ("Write to inferior faulted", err);
|
|
|
|
|
|
|
|
|
|
obstack_init (®ion_obstack);
|
|
|
|
|
|
|
|
|
|
/* Do writes atomically.
|
2000-02-26 23:04:30 +08:00
|
|
|
|
First check for holes and unwritable memory. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
1999-07-08 04:19:36 +08:00
|
|
|
|
vm_size_t remaining_length = aligned_length;
|
|
|
|
|
vm_address_t region_address = low_address;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
struct vm_region_list *scan;
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
while (region_address < low_address + aligned_length)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
vm_prot_t protection;
|
|
|
|
|
vm_prot_t max_protection;
|
|
|
|
|
vm_inherit_t inheritance;
|
|
|
|
|
boolean_t shared;
|
|
|
|
|
mach_port_t object_name;
|
|
|
|
|
vm_offset_t offset;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
vm_size_t region_length = remaining_length;
|
|
|
|
|
vm_address_t old_address = region_address;
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
err = vm_region (task,
|
|
|
|
|
®ion_address,
|
|
|
|
|
®ion_length,
|
|
|
|
|
&protection,
|
|
|
|
|
&max_protection,
|
|
|
|
|
&inheritance,
|
|
|
|
|
&shared,
|
|
|
|
|
&object_name,
|
|
|
|
|
&offset);
|
|
|
|
|
CHK_GOTO_OUT ("vm_region failed", err);
|
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Check for holes in memory. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (old_address != region_address)
|
|
|
|
|
{
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
warning (_("No memory at 0x%lx. Nothing written"),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
old_address);
|
|
|
|
|
err = KERN_SUCCESS;
|
|
|
|
|
length = 0;
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!(max_protection & VM_PROT_WRITE))
|
|
|
|
|
{
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
warning (_("Memory at address 0x%lx is unwritable. "
|
2011-01-08 03:36:19 +08:00
|
|
|
|
"Nothing written"),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
old_address);
|
|
|
|
|
err = KERN_SUCCESS;
|
|
|
|
|
length = 0;
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Chain the regions for later use. */
|
Replace some xmalloc-family functions with XNEW-family ones
This patch is part of the make-gdb-buildable-in-C++ effort. The idea is
to change some calls to the xmalloc family of functions to calls to the
equivalents in the XNEW family. This avoids adding an explicit cast, so
it keeps the code a bit more readable. Some of them also map relatively
well to a C++ equivalent (XNEW (struct foo) -> new foo), so it will be
possible to do scripted replacements if needed.
I only changed calls that were obviously allocating memory for one or
multiple "objects". Allocation of variable sizes (such as strings or
buffer handling) will be for later (and won't use XNEW).
- xmalloc (sizeof (struct foo)) -> XNEW (struct foo)
- xmalloc (num * sizeof (struct foo)) -> XNEWVEC (struct foo, num)
- xcalloc (1, sizeof (struct foo)) -> XCNEW (struct foo)
- xcalloc (num, sizeof (struct foo)) -> XCNEWVEC (struct foo, num)
- xrealloc (p, num * sizeof (struct foo) -> XRESIZEVEC (struct foo, p, num)
- obstack_alloc (ob, sizeof (struct foo)) -> XOBNEW (ob, struct foo)
- obstack_alloc (ob, num * sizeof (struct foo)) -> XOBNEWVEC (ob, struct foo, num)
- alloca (sizeof (struct foo)) -> XALLOCA (struct foo)
- alloca (num * sizeof (struct foo)) -> XALLOCAVEC (struct foo, num)
Some instances of xmalloc followed by memset to zero the buffer were
replaced by XCNEW or XCNEWVEC.
I regtested on x86-64, Ubuntu 14.04, but the patch touches many
architecture-specific files. For those I'll have to rely on the
buildbot or people complaining that I broke their gdb.
gdb/ChangeLog:
* aarch64-linux-nat.c (aarch64_add_process): Likewise.
* aarch64-tdep.c (aarch64_gdbarch_init): Likewise.
* ada-exp.y (write_ambiguous_var): Likewise.
* ada-lang.c (resolve_subexp): Likewise.
(user_select_syms): Likewise.
(assign_aggregate): Likewise.
(ada_evaluate_subexp): Likewise.
(cache_symbol): Likewise.
* addrmap.c (allocate_key): Likewise.
(addrmap_create_mutable): Likewise.
* aix-thread.c (sync_threadlists): Likewise.
* alpha-tdep.c (alpha_push_dummy_call): Likewise.
(alpha_gdbarch_init): Likewise.
* amd64-windows-tdep.c (amd64_windows_push_arguments): Likewise.
* arm-linux-nat.c (arm_linux_add_process): Likewise.
* arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Likewise.
* arm-tdep.c (push_stack_item): Likewise.
(arm_displaced_step_copy_insn): Likewise.
(arm_gdbarch_init): Likewise.
(_initialize_arm_tdep): Likewise.
* avr-tdep.c (push_stack_item): Likewise.
* ax-general.c (new_agent_expr): Likewise.
* block.c (block_initialize_namespace): Likewise.
* breakpoint.c (alloc_counted_command_line): Likewise.
(update_dprintf_command_list): Likewise.
(parse_breakpoint_sals): Likewise.
(decode_static_tracepoint_spec): Likewise.
(until_break_command): Likewise.
(clear_command): Likewise.
(update_global_location_list): Likewise.
(get_breakpoint_objfile_data) Likewise.
* btrace.c (ftrace_new_function): Likewise.
(btrace_set_insn_history): Likewise.
(btrace_set_call_history): Likewise.
* buildsym.c (add_symbol_to_list): Likewise.
(record_pending_block): Likewise.
(start_subfile): Likewise.
(start_buildsym_compunit): Likewise.
(push_subfile): Likewise.
(end_symtab_get_static_block): Likewise.
(buildsym_init): Likewise.
* cli/cli-cmds.c (source_command): Likewise.
* cli/cli-decode.c (add_cmd): Likewise.
* cli/cli-script.c (build_command_line): Likewise.
(setup_user_args): Likewise.
(realloc_body_list): Likewise.
(process_next_line): Likewise.
(copy_command_lines): Likewise.
* cli/cli-setshow.c (do_set_command): Likewise.
* coff-pe-read.c (read_pe_exported_syms): Likewise.
* coffread.c (coff_locate_sections): Likewise.
(coff_symtab_read): Likewise.
(coff_read_struct_type): Likewise.
* common/cleanups.c (make_my_cleanup2): Likewise.
* common/common-exceptions.c (throw_it): Likewise.
* common/filestuff.c (make_cleanup_close): Likewise.
* common/format.c (parse_format_string): Likewise.
* common/queue.h (DEFINE_QUEUE_P): Likewise.
* compile/compile-object-load.c (munmap_list_add): Likewise.
(compile_object_load): Likewise.
* compile/compile-object-run.c (compile_object_run): Likewise.
* compile/compile.c (append_args): Likewise.
* corefile.c (specify_exec_file_hook): Likewise.
* cp-support.c (make_symbol_overload_list): Likewise.
* cris-tdep.c (push_stack_item): Likewise.
(cris_gdbarch_init): Likewise.
* ctf.c (ctf_trace_file_writer_new): Likewise.
* dbxread.c (init_header_files): Likewise.
(add_new_header_file): Likewise.
(init_bincl_list): Likewise.
(dbx_end_psymtab): Likewise.
(start_psymtab): Likewise.
(dbx_end_psymtab): Likewise.
* dcache.c (dcache_init): Likewise.
* dictionary.c (dict_create_hashed): Likewise.
(dict_create_hashed_expandable): Likewise.
(dict_create_linear): Likewise.
(dict_create_linear_expandable): Likewise.
* dtrace-probe.c (dtrace_process_dof_probe): Likewise.
* dummy-frame.c (register_dummy_frame_dtor): Likewise.
* dwarf2-frame-tailcall.c (cache_new_ref1): Likewise.
* dwarf2-frame.c (dwarf2_build_frame_info): Likewise.
(decode_frame_entry_1): Likewise.
* dwarf2expr.c (new_dwarf_expr_context): Likewise.
* dwarf2loc.c (dwarf2_compile_expr_to_ax): Likewise.
* dwarf2read.c (dwarf2_has_info): Likewise.
(create_signatured_type_table_from_index): Likewise.
(dwarf2_read_index): Likewise.
(dw2_get_file_names_reader): Likewise.
(create_all_type_units): Likewise.
(read_cutu_die_from_dwo): Likewise.
(init_tu_and_read_dwo_dies): Likewise.
(init_cutu_and_read_dies): Likewise.
(create_all_comp_units): Likewise.
(queue_comp_unit): Likewise.
(inherit_abstract_dies): Likewise.
(read_call_site_scope): Likewise.
(dwarf2_add_field): Likewise.
(dwarf2_add_typedef): Likewise.
(dwarf2_add_member_fn): Likewise.
(attr_to_dynamic_prop): Likewise.
(abbrev_table_alloc_abbrev): Likewise.
(abbrev_table_read_table): Likewise.
(add_include_dir): Likewise.
(add_file_name): Likewise.
(dwarf_decode_line_header): Likewise.
(dwarf2_const_value_attr): Likewise.
(dwarf_alloc_block): Likewise.
(parse_macro_definition): Likewise.
(set_die_type): Likewise.
(write_psymtabs_to_index): Likewise.
(create_cus_from_index): Likewise.
(dwarf2_create_include_psymtab): Likewise.
(process_psymtab_comp_unit_reader): Likewise.
(build_type_psymtab_dependencies): Likewise.
(read_comp_units_from_section): Likewise.
(compute_compunit_symtab_includes): Likewise.
(create_dwo_unit_in_dwp_v1): Likewise.
(create_dwo_unit_in_dwp_v2): Likewise.
(read_func_scope): Likewise.
(process_structure_scope): Likewise.
(mark_common_block_symbol_computed): Likewise.
(load_partial_dies): Likewise.
(dwarf2_symbol_mark_computed): Likewise.
* elfread.c (elf_symfile_segments): Likewise.
(elf_read_minimal_symbols): Likewise.
* environ.c (make_environ): Likewise.
* eval.c (evaluate_subexp_standard): Likewise.
* event-loop.c (create_file_handler): Likewise.
(create_async_signal_handler): Likewise.
(create_async_event_handler): Likewise.
(create_timer): Likewise.
* exec.c (build_section_table): Likewise.
* fbsd-nat.c (fbsd_remember_child): Likewise.
* fork-child.c (fork_inferior): Likewise.
* frv-tdep.c (new_variant): Likewise.
* gdbarch.sh (gdbarch_alloc): Likewise.
(append_name): Likewise.
* gdbtypes.c (rank_function): Likewise.
(copy_type_recursive): Likewise.
(add_dyn_prop): Likewise.
* gnu-nat.c (make_proc): Likewise.
(make_inf): Likewise.
(gnu_write_inferior): Likewise.
* gnu-v3-abi.c (build_gdb_vtable_type): Likewise.
(build_std_type_info_type): Likewise.
* guile/scm-param.c (compute_enum_list): Likewise.
* guile/scm-utils.c (gdbscm_parse_function_args): Likewise.
* guile/scm-value.c (gdbscm_value_call): Likewise.
* h8300-tdep.c (h8300_gdbarch_init): Likewise.
* hppa-tdep.c (hppa_init_objfile_priv_data): Likewise.
(read_unwind_info): Likewise.
* ia64-tdep.c (ia64_gdbarch_init): Likewise.
* infcall.c (dummy_frame_context_saver_setup): Likewise.
(call_function_by_hand_dummy): Likewise.
* infcmd.c (step_once): Likewise.
(finish_forward): Likewise.
(attach_command): Likewise.
(notice_new_inferior): Likewise.
* inferior.c (add_inferior_silent): Likewise.
* infrun.c (add_displaced_stepping_state): Likewise.
(save_infcall_control_state): Likewise.
(save_inferior_ptid): Likewise.
(_initialize_infrun): Likewise.
* jit.c (bfd_open_from_target_memory): Likewise.
(jit_gdbarch_data_init): Likewise.
* language.c (add_language): Likewise.
* linespec.c (decode_line_2): Likewise.
* linux-nat.c (add_to_pid_list): Likewise.
(add_initial_lwp): Likewise.
* linux-thread-db.c (add_thread_db_info): Likewise.
(record_thread): Likewise.
(info_auto_load_libthread_db): Likewise.
* m32c-tdep.c (m32c_gdbarch_init): Likewise.
* m68hc11-tdep.c (m68hc11_gdbarch_init): Likewise.
* m68k-tdep.c (m68k_gdbarch_init): Likewise.
* m88k-tdep.c (m88k_analyze_prologue): Likewise.
* macrocmd.c (macro_define_command): Likewise.
* macroexp.c (gather_arguments): Likewise.
* macroscope.c (sal_macro_scope): Likewise.
* macrotab.c (new_macro_table): Likewise.
* mdebugread.c (push_parse_stack): Likewise.
(parse_partial_symbols): Likewise.
(parse_symbol): Likewise.
(psymtab_to_symtab_1): Likewise.
(new_block): Likewise.
(new_psymtab): Likewise.
(mdebug_build_psymtabs): Likewise.
(add_pending): Likewise.
(elfmdebug_build_psymtabs): Likewise.
* mep-tdep.c (mep_gdbarch_init): Likewise.
* mi/mi-main.c (mi_execute_command): Likewise.
* mi/mi-parse.c (mi_parse_argv): Likewise.
* minidebug.c (lzma_open): Likewise.
* minsyms.c (terminate_minimal_symbol_table): Likewise.
* mips-linux-nat.c (mips_linux_insert_watchpoint): Likewise.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* mn10300-tdep.c (mn10300_gdbarch_init): Likewise.
* msp430-tdep.c (msp430_gdbarch_init): Likewise.
* mt-tdep.c (mt_registers_info): Likewise.
* nat/aarch64-linux.c (aarch64_linux_new_thread): Likewise.
* nat/linux-btrace.c (linux_enable_bts): Likewise.
(linux_enable_pt): Likewise.
* nat/linux-osdata.c (linux_xfer_osdata_processes): Likewise.
(linux_xfer_osdata_processgroups): Likewise.
* nios2-tdep.c (nios2_gdbarch_init): Likewise.
* nto-procfs.c (procfs_meminfo): Likewise.
* objc-lang.c (start_msglist): Likewise.
(selectors_info): Likewise.
(classes_info): Likewise.
(find_methods): Likewise.
* objfiles.c (allocate_objfile): Likewise.
(update_section_map): Likewise.
* osabi.c (gdbarch_register_osabi): Likewise.
(gdbarch_register_osabi_sniffer): Likewise.
* parse.c (start_arglist): Likewise.
* ppc-linux-nat.c (hwdebug_find_thread_points_by_tid): Likewise.
(hwdebug_insert_point): Likewise.
* printcmd.c (display_command): Likewise.
(ui_printf): Likewise.
* procfs.c (create_procinfo): Likewise.
(load_syscalls): Likewise.
(proc_get_LDT_entry): Likewise.
(proc_update_threads): Likewise.
* prologue-value.c (make_pv_area): Likewise.
(pv_area_store): Likewise.
* psymtab.c (extend_psymbol_list): Likewise.
(init_psymbol_list): Likewise.
(allocate_psymtab): Likewise.
* python/py-inferior.c (add_thread_object): Likewise.
* python/py-param.c (compute_enum_values): Likewise.
* python/py-value.c (valpy_call): Likewise.
* python/py-varobj.c (py_varobj_iter_next): Likewise.
* python/python.c (ensure_python_env): Likewise.
* record-btrace.c (record_btrace_start_replaying): Likewise.
* record-full.c (record_full_reg_alloc): Likewise.
(record_full_mem_alloc): Likewise.
(record_full_end_alloc): Likewise.
(record_full_core_xfer_partial): Likewise.
* regcache.c (get_thread_arch_aspace_regcache): Likewise.
* remote-fileio.c (remote_fileio_init_fd_map): Likewise.
* remote-notif.c (remote_notif_state_allocate): Likewise.
* remote.c (demand_private_info): Likewise.
(remote_notif_stop_alloc_reply): Likewise.
(remote_enable_btrace): Likewise.
* reverse.c (save_bookmark_command): Likewise.
* rl78-tdep.c (rl78_gdbarch_init): Likewise.
* rx-tdep.c (rx_gdbarch_init): Likewise.
* s390-linux-nat.c (s390_insert_watchpoint): Likewise.
* ser-go32.c (dos_get_tty_state): Likewise.
(dos_copy_tty_state): Likewise.
* ser-mingw.c (ser_windows_open): Likewise.
(ser_console_wait_handle): Likewise.
(ser_console_get_tty_state): Likewise.
(make_pipe_state): Likewise.
(net_windows_open): Likewise.
* ser-unix.c (hardwire_get_tty_state): Likewise.
(hardwire_copy_tty_state): Likewise.
* solib-aix.c (solib_aix_new_lm_info): Likewise.
* solib-dsbt.c (dsbt_current_sos): Likewise.
(dsbt_relocate_main_executable): Likewise.
* solib-frv.c (frv_current_sos): Likewise.
(frv_relocate_main_executable): Likewise.
* solib-spu.c (spu_bfd_fopen): Likewise.
* solib-svr4.c (lm_info_read): Likewise.
(svr4_copy_library_list): Likewise.
(svr4_default_sos): Likewise.
* source.c (find_source_lines): Likewise.
(line_info): Likewise.
(add_substitute_path_rule): Likewise.
* spu-linux-nat.c (spu_bfd_open): Likewise.
* spu-tdep.c (info_spu_dma_cmdlist): Likewise.
* stabsread.c (dbx_lookup_type): Likewise.
(read_type): Likewise.
(read_member_functions): Likewise.
(read_struct_fields): Likewise.
(read_baseclasses): Likewise.
(read_args): Likewise.
(_initialize_stabsread): Likewise.
* stack.c (func_command): Likewise.
* stap-probe.c (handle_stap_probe): Likewise.
* symfile.c (addrs_section_sort): Likewise.
(addr_info_make_relative): Likewise.
(load_section_callback): Likewise.
(add_symbol_file_command): Likewise.
(init_filename_language_table): Likewise.
* symtab.c (create_filename_seen_cache): Likewise.
(sort_search_symbols_remove_dups): Likewise.
(search_symbols): Likewise.
* target.c (make_cleanup_restore_target_terminal): Likewise.
* thread.c (new_thread): Likewise.
(enable_thread_stack_temporaries): Likewise.
(make_cleanup_restore_current_thread): Likewise.
(thread_apply_all_command): Likewise.
* tic6x-tdep.c (tic6x_gdbarch_init): Likewise.
* top.c (gdb_readline_wrapper): Likewise.
* tracefile-tfile.c (tfile_trace_file_writer_new): Likewise.
* tracepoint.c (trace_find_line_command): Likewise.
(all_tracepoint_actions_and_cleanup): Likewise.
(make_cleanup_restore_current_traceframe): Likewise.
(get_uploaded_tp): Likewise.
(get_uploaded_tsv): Likewise.
* tui/tui-data.c (tui_alloc_generic_win_info): Likewise.
(tui_alloc_win_info): Likewise.
(tui_alloc_content): Likewise.
(tui_add_content_elements): Likewise.
* tui/tui-disasm.c (tui_find_disassembly_address): Likewise.
(tui_set_disassem_content): Likewise.
* ui-file.c (ui_file_new): Likewise.
(stdio_file_new): Likewise.
(tee_file_new): Likewise.
* utils.c (make_cleanup_restore_integer): Likewise.
(add_internal_problem_command): Likewise.
* v850-tdep.c (v850_gdbarch_init): Likewise.
* valops.c (find_oload_champ): Likewise.
* value.c (allocate_value_lazy): Likewise.
(record_latest_value): Likewise.
(create_internalvar): Likewise.
* varobj.c (install_variable): Likewise.
(new_variable): Likewise.
(new_root_variable): Likewise.
(cppush): Likewise.
(_initialize_varobj): Likewise.
* windows-nat.c (windows_make_so): Likewise.
* x86-nat.c (x86_add_process): Likewise.
* xcoffread.c (arrange_linetable): Likewise.
(allocate_include_entry): Likewise.
(process_linenos): Likewise.
(SYMBOL_DUP): Likewise.
(xcoff_start_psymtab): Likewise.
(xcoff_end_psymtab): Likewise.
* xml-support.c (gdb_xml_parse_attr_ulongest): Likewise.
* xtensa-tdep.c (xtensa_register_type): Likewise.
* gdbarch.c: Regenerate.
* gdbarch.h: Regenerate.
gdb/gdbserver/ChangeLog:
* ax.c (gdb_parse_agent_expr): Likewise.
(compile_bytecodes): Likewise.
* dll.c (loaded_dll): Likewise.
* event-loop.c (append_callback_event): Likewise.
(create_file_handler): Likewise.
(create_file_event): Likewise.
* hostio.c (handle_open): Likewise.
* inferiors.c (add_thread): Likewise.
(add_process): Likewise.
* linux-aarch64-low.c (aarch64_linux_new_process): Likewise.
* linux-arm-low.c (arm_new_process): Likewise.
(arm_new_thread): Likewise.
* linux-low.c (add_to_pid_list): Likewise.
(linux_add_process): Likewise.
(handle_extended_wait): Likewise.
(add_lwp): Likewise.
(enqueue_one_deferred_signal): Likewise.
(enqueue_pending_signal): Likewise.
(linux_resume_one_lwp_throw): Likewise.
(linux_resume_one_thread): Likewise.
(linux_read_memory): Likewise.
(linux_write_memory): Likewise.
* linux-mips-low.c (mips_linux_new_process): Likewise.
(mips_linux_new_thread): Likewise.
(mips_add_watchpoint): Likewise.
* linux-x86-low.c (initialize_low_arch): Likewise.
* lynx-low.c (lynx_add_process): Likewise.
* mem-break.c (set_raw_breakpoint_at): Likewise.
(set_breakpoint): Likewise.
(add_condition_to_breakpoint): Likewise.
(add_commands_to_breakpoint): Likewise.
(clone_agent_expr): Likewise.
(clone_one_breakpoint): Likewise.
* regcache.c (new_register_cache): Likewise.
* remote-utils.c (look_up_one_symbol): Likewise.
* server.c (queue_stop_reply): Likewise.
(start_inferior): Likewise.
(queue_stop_reply_callback): Likewise.
(handle_target_event): Likewise.
* spu-low.c (fetch_ppc_memory): Likewise.
(store_ppc_memory): Likewise.
* target.c (set_target_ops): Likewise.
* thread-db.c (thread_db_load_search): Likewise.
(try_thread_db_load_1): Likewise.
* tracepoint.c (add_tracepoint): Likewise.
(add_tracepoint_action): Likewise.
(create_trace_state_variable): Likewise.
(cmd_qtdpsrc): Likewise.
(cmd_qtro): Likewise.
(add_while_stepping_state): Likewise.
* win32-low.c (child_add_thread): Likewise.
(get_image_name): Likewise.
2015-08-27 05:16:07 +08:00
|
|
|
|
region_element = XOBNEW (®ion_obstack, struct vm_region_list);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
region_element->protection = protection;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
region_element->start = region_address;
|
|
|
|
|
region_element->length = region_length;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Chain the regions along with protections. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
region_element->next = region_head;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
region_head = region_element;
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
region_address += region_length;
|
|
|
|
|
remaining_length = remaining_length - region_length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* If things fail after this, we give up.
|
2000-02-26 23:04:30 +08:00
|
|
|
|
Somebody is messing up inferior_task's mappings. */
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Enable writes to the chained vm regions. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
for (scan = region_head; scan; scan = scan->next)
|
|
|
|
|
{
|
|
|
|
|
if (!(scan->protection & VM_PROT_WRITE))
|
|
|
|
|
{
|
|
|
|
|
err = vm_protect (task,
|
|
|
|
|
scan->start,
|
|
|
|
|
scan->length,
|
|
|
|
|
FALSE,
|
|
|
|
|
scan->protection | VM_PROT_WRITE);
|
|
|
|
|
CHK_GOTO_OUT ("vm_protect: enable write failed", err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = vm_write (task,
|
|
|
|
|
low_address,
|
|
|
|
|
copied,
|
|
|
|
|
aligned_length);
|
|
|
|
|
CHK_GOTO_OUT ("vm_write failed", err);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* Set up the original region protections, if they were changed. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
for (scan = region_head; scan; scan = scan->next)
|
|
|
|
|
{
|
|
|
|
|
if (!(scan->protection & VM_PROT_WRITE))
|
|
|
|
|
{
|
|
|
|
|
err = vm_protect (task,
|
|
|
|
|
scan->start,
|
|
|
|
|
scan->length,
|
|
|
|
|
FALSE,
|
|
|
|
|
scan->protection);
|
|
|
|
|
CHK_GOTO_OUT ("vm_protect: enable write failed", err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
out:
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (deallocate)
|
|
|
|
|
{
|
|
|
|
|
obstack_free (®ion_obstack, 0);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
(void) vm_deallocate (mach_task_self (),
|
|
|
|
|
copied,
|
|
|
|
|
copy_count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (err != KERN_SUCCESS)
|
|
|
|
|
{
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("%s: %s"), errstr, mach_error_string (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return length;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2013-09-19 21:40:38 +08:00
|
|
|
|
|
2014-01-30 08:23:14 +08:00
|
|
|
|
/* Implement the to_xfer_partial target_ops method for
|
|
|
|
|
TARGET_OBJECT_MEMORY. */
|
2013-09-19 21:40:38 +08: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 20:35:33 +08:00
|
|
|
|
static enum target_xfer_status
|
2013-09-19 21:40:38 +08:00
|
|
|
|
gnu_xfer_memory (gdb_byte *readbuf, 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 20:35:33 +08:00
|
|
|
|
CORE_ADDR memaddr, ULONGEST len, ULONGEST *xfered_len)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2008-10-08 02:42:42 +08:00
|
|
|
|
task_t task = (gnu_current_inf
|
|
|
|
|
? (gnu_current_inf->task
|
|
|
|
|
? gnu_current_inf->task->port : 0)
|
2000-02-26 23:04:30 +08:00
|
|
|
|
: 0);
|
2013-09-19 21:40:38 +08:00
|
|
|
|
int res;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (task == MACH_PORT_NULL)
|
2013-09-19 21:40:38 +08:00
|
|
|
|
return TARGET_XFER_E_IO;
|
|
|
|
|
|
|
|
|
|
if (writebuf != NULL)
|
|
|
|
|
{
|
|
|
|
|
inf_debug (gnu_current_inf, "writing %s[%s] <-- %s",
|
2014-01-03 21:11:46 +08:00
|
|
|
|
paddress (target_gdbarch (), memaddr), pulongest (len),
|
2013-09-19 21:40:38 +08:00
|
|
|
|
host_address_to_string (writebuf));
|
|
|
|
|
res = gnu_write_inferior (task, memaddr, writebuf, len);
|
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
2013-09-19 21:40:38 +08:00
|
|
|
|
inf_debug (gnu_current_inf, "reading %s[%s] --> %s",
|
2014-01-03 21:11:46 +08:00
|
|
|
|
paddress (target_gdbarch (), memaddr), pulongest (len),
|
2013-09-19 21:40:38 +08:00
|
|
|
|
host_address_to_string (readbuf));
|
|
|
|
|
res = gnu_read_inferior (task, memaddr, readbuf, len);
|
|
|
|
|
}
|
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 20:35:33 +08:00
|
|
|
|
gdb_assert (res >= 0);
|
2013-09-19 21:40:38 +08:00
|
|
|
|
if (res == 0)
|
|
|
|
|
return TARGET_XFER_E_IO;
|
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 20:35:33 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
*xfered_len = (ULONGEST) res;
|
|
|
|
|
return TARGET_XFER_OK;
|
|
|
|
|
}
|
2013-09-19 21:40:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Target to_xfer_partial implementation. */
|
|
|
|
|
|
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 20:35:33 +08:00
|
|
|
|
static enum target_xfer_status
|
2013-09-19 21:40:38 +08:00
|
|
|
|
gnu_xfer_partial (struct target_ops *ops, enum target_object object,
|
|
|
|
|
const char *annex, gdb_byte *readbuf,
|
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 20:35:33 +08:00
|
|
|
|
const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
|
|
|
|
|
ULONGEST *xfered_len)
|
2013-09-19 21:40:38 +08:00
|
|
|
|
{
|
|
|
|
|
switch (object)
|
|
|
|
|
{
|
|
|
|
|
case TARGET_OBJECT_MEMORY:
|
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 20:35:33 +08:00
|
|
|
|
return gnu_xfer_memory (readbuf, writebuf, offset, len, xfered_len);
|
2013-09-19 21:40:38 +08:00
|
|
|
|
default:
|
2014-01-27 17:32:33 +08:00
|
|
|
|
return TARGET_XFER_E_IO;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
2002-04-25 05:44:47 +08:00
|
|
|
|
/* Call FUNC on each memory region in the task. */
|
|
|
|
|
static int
|
2013-12-18 12:35:39 +08:00
|
|
|
|
gnu_find_memory_regions (struct target_ops *self,
|
|
|
|
|
find_memory_region_ftype func, void *data)
|
2002-04-25 05:44:47 +08:00
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err;
|
2002-04-25 05:44:47 +08:00
|
|
|
|
task_t task;
|
|
|
|
|
vm_address_t region_address, last_region_address, last_region_end;
|
|
|
|
|
vm_prot_t last_protection;
|
|
|
|
|
|
2008-10-08 02:42:42 +08:00
|
|
|
|
if (gnu_current_inf == 0 || gnu_current_inf->task == 0)
|
2002-04-25 05:44:47 +08:00
|
|
|
|
return 0;
|
2008-10-08 02:42:42 +08:00
|
|
|
|
task = gnu_current_inf->task->port;
|
2002-04-25 05:44:47 +08:00
|
|
|
|
if (task == MACH_PORT_NULL)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
region_address = last_region_address = last_region_end = VM_MIN_ADDRESS;
|
|
|
|
|
last_protection = VM_PROT_NONE;
|
|
|
|
|
while (region_address < VM_MAX_ADDRESS)
|
|
|
|
|
{
|
|
|
|
|
vm_prot_t protection;
|
|
|
|
|
vm_prot_t max_protection;
|
|
|
|
|
vm_inherit_t inheritance;
|
|
|
|
|
boolean_t shared;
|
|
|
|
|
mach_port_t object_name;
|
|
|
|
|
vm_offset_t offset;
|
|
|
|
|
vm_size_t region_length = VM_MAX_ADDRESS - region_address;
|
|
|
|
|
vm_address_t old_address = region_address;
|
|
|
|
|
|
|
|
|
|
err = vm_region (task,
|
|
|
|
|
®ion_address,
|
|
|
|
|
®ion_length,
|
|
|
|
|
&protection,
|
|
|
|
|
&max_protection,
|
|
|
|
|
&inheritance,
|
|
|
|
|
&shared,
|
|
|
|
|
&object_name,
|
|
|
|
|
&offset);
|
|
|
|
|
if (err == KERN_NO_SPACE)
|
|
|
|
|
break;
|
|
|
|
|
if (err != KERN_SUCCESS)
|
|
|
|
|
{
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("vm_region failed: %s"), mach_error_string (err));
|
2002-04-25 05:44:47 +08:00
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (protection == last_protection && region_address == last_region_end)
|
|
|
|
|
/* This region is contiguous with and indistinguishable from
|
|
|
|
|
the previous one, so we just extend that one. */
|
|
|
|
|
last_region_end = region_address += region_length;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/* This region is distinct from the last one we saw, so report
|
|
|
|
|
that previous one. */
|
|
|
|
|
if (last_protection != VM_PROT_NONE)
|
|
|
|
|
(*func) (last_region_address,
|
|
|
|
|
last_region_end - last_region_address,
|
|
|
|
|
last_protection & VM_PROT_READ,
|
|
|
|
|
last_protection & VM_PROT_WRITE,
|
|
|
|
|
last_protection & VM_PROT_EXECUTE,
|
2012-08-07 21:26:33 +08:00
|
|
|
|
1, /* MODIFIED is unknown, pass it as true. */
|
2002-04-25 05:44:47 +08:00
|
|
|
|
data);
|
|
|
|
|
last_region_address = region_address;
|
|
|
|
|
last_region_end = region_address += region_length;
|
|
|
|
|
last_protection = protection;
|
|
|
|
|
}
|
|
|
|
|
}
|
2002-05-01 05:12:30 +08:00
|
|
|
|
|
2002-05-01 03:01:57 +08:00
|
|
|
|
/* Report the final region. */
|
|
|
|
|
if (last_region_end > last_region_address && last_protection != VM_PROT_NONE)
|
|
|
|
|
(*func) (last_region_address, last_region_end - last_region_address,
|
|
|
|
|
last_protection & VM_PROT_READ,
|
|
|
|
|
last_protection & VM_PROT_WRITE,
|
|
|
|
|
last_protection & VM_PROT_EXECUTE,
|
2012-08-07 21:26:33 +08:00
|
|
|
|
1, /* MODIFIED is unknown, pass it as true. */
|
2002-05-01 03:01:57 +08:00
|
|
|
|
data);
|
2002-05-01 05:12:30 +08:00
|
|
|
|
|
|
|
|
|
return 0;
|
2002-04-25 05:44:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-12-23 05:45:38 +08:00
|
|
|
|
/* Return printable description of proc. */
|
2000-02-11 14:34:58 +08:00
|
|
|
|
char *
|
1999-12-23 05:45:38 +08:00
|
|
|
|
proc_string (struct proc *proc)
|
|
|
|
|
{
|
|
|
|
|
static char tid_str[80];
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-12-23 05:45:38 +08:00
|
|
|
|
if (proc_is_task (proc))
|
2012-11-21 06:51:05 +08:00
|
|
|
|
xsnprintf (tid_str, sizeof (tid_str), "process %d", proc->inf->pid);
|
1999-12-23 05:45:38 +08:00
|
|
|
|
else
|
2012-11-21 06:51:05 +08:00
|
|
|
|
xsnprintf (tid_str, sizeof (tid_str), "Thread %d.%d",
|
|
|
|
|
proc->inf->pid, proc->tid);
|
1999-12-23 05:45:38 +08:00
|
|
|
|
return tid_str;
|
|
|
|
|
}
|
|
|
|
|
|
2017-04-06 02:21:34 +08:00
|
|
|
|
static const 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-07 06:21:26 +08:00
|
|
|
|
gnu_pid_to_str (struct target_ops *ops, ptid_t ptid)
|
1999-12-23 05:45:38 +08:00
|
|
|
|
{
|
2008-10-08 02:42:42 +08:00
|
|
|
|
struct inf *inf = gnu_current_inf;
|
2013-09-18 22:47:51 +08:00
|
|
|
|
int tid = ptid_get_lwp (ptid);
|
1999-12-23 05:45:38 +08:00
|
|
|
|
struct proc *thread = inf_tid_to_thread (inf, tid);
|
|
|
|
|
|
|
|
|
|
if (thread)
|
|
|
|
|
return proc_string (thread);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
static char tid_str[80];
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
2012-11-21 06:51:05 +08:00
|
|
|
|
xsnprintf (tid_str, sizeof (tid_str), "bogus thread id %d", tid);
|
1999-12-23 05:45:38 +08:00
|
|
|
|
return tid_str;
|
|
|
|
|
}
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-12-23 05:45:38 +08:00
|
|
|
|
|
2009-07-20 23:18:24 +08:00
|
|
|
|
/* Create a prototype generic GNU/Hurd target. The client can
|
|
|
|
|
override it with local methods. */
|
|
|
|
|
|
|
|
|
|
struct target_ops *
|
|
|
|
|
gnu_target (void)
|
|
|
|
|
{
|
|
|
|
|
struct target_ops *t = inf_child_target ();
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2009-07-20 23:18:24 +08:00
|
|
|
|
t->to_attach = gnu_attach;
|
|
|
|
|
t->to_attach_no_wait = 1;
|
|
|
|
|
t->to_detach = gnu_detach;
|
|
|
|
|
t->to_resume = gnu_resume;
|
|
|
|
|
t->to_wait = gnu_wait;
|
2013-09-19 21:40:38 +08:00
|
|
|
|
t->to_xfer_partial = gnu_xfer_partial;
|
2009-07-20 23:18:24 +08:00
|
|
|
|
t->to_find_memory_regions = gnu_find_memory_regions;
|
2014-03-14 08:06:45 +08:00
|
|
|
|
t->to_terminal_init = gnu_terminal_init;
|
2009-07-20 23:18:24 +08:00
|
|
|
|
t->to_kill = gnu_kill_inferior;
|
|
|
|
|
t->to_create_inferior = gnu_create_inferior;
|
|
|
|
|
t->to_mourn_inferior = gnu_mourn_inferior;
|
|
|
|
|
t->to_thread_alive = gnu_thread_alive;
|
|
|
|
|
t->to_pid_to_str = gnu_pid_to_str;
|
|
|
|
|
t->to_stop = gnu_stop;
|
|
|
|
|
|
|
|
|
|
return t;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* User task commands. */
|
|
|
|
|
|
2012-08-09 14:26:25 +08:00
|
|
|
|
static struct cmd_list_element *set_task_cmd_list = 0;
|
|
|
|
|
static struct cmd_list_element *show_task_cmd_list = 0;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* User thread commands. */
|
|
|
|
|
|
|
|
|
|
/* Commands with a prefix of `set/show thread'. */
|
|
|
|
|
extern struct cmd_list_element *thread_cmd_list;
|
|
|
|
|
struct cmd_list_element *set_thread_cmd_list = NULL;
|
|
|
|
|
struct cmd_list_element *show_thread_cmd_list = NULL;
|
|
|
|
|
|
|
|
|
|
/* Commands with a prefix of `set/show thread default'. */
|
|
|
|
|
struct cmd_list_element *set_thread_default_cmd_list = NULL;
|
|
|
|
|
struct cmd_list_element *show_thread_default_cmd_list = NULL;
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_thread_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
2011-01-08 03:36:19 +08:00
|
|
|
|
printf_unfiltered ("\"set thread\" must be followed by the "
|
|
|
|
|
"name of a thread property, or \"default\".\n");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_thread_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
2011-01-08 03:36:19 +08:00
|
|
|
|
printf_unfiltered ("\"show thread\" must be followed by the "
|
|
|
|
|
"name of a thread property, or \"default\".\n");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_thread_default_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
2011-01-08 03:36:19 +08:00
|
|
|
|
printf_unfiltered ("\"set thread default\" must be followed "
|
|
|
|
|
"by the name of a thread property.\n");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_thread_default_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
2011-01-08 03:36:19 +08:00
|
|
|
|
printf_unfiltered ("\"show thread default\" must be followed "
|
|
|
|
|
"by the name of a thread property.\n");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
parse_int_arg (char *args, char *cmd_prefix)
|
|
|
|
|
{
|
|
|
|
|
if (args)
|
|
|
|
|
{
|
|
|
|
|
char *arg_end;
|
|
|
|
|
int val = strtoul (args, &arg_end, 10);
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (*args && *arg_end == '\0')
|
|
|
|
|
return val;
|
|
|
|
|
}
|
2011-01-08 03:36:19 +08:00
|
|
|
|
error (_("Illegal argument for \"%s\" command, should be an integer."),
|
|
|
|
|
cmd_prefix);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
_parse_bool_arg (char *args, char *t_val, char *f_val, char *cmd_prefix)
|
|
|
|
|
{
|
|
|
|
|
if (!args || strcmp (args, t_val) == 0)
|
|
|
|
|
return 1;
|
|
|
|
|
else if (strcmp (args, f_val) == 0)
|
|
|
|
|
return 0;
|
|
|
|
|
else
|
2011-01-08 03:36:19 +08:00
|
|
|
|
error (_("Illegal argument for \"%s\" command, "
|
|
|
|
|
"should be \"%s\" or \"%s\"."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
cmd_prefix, t_val, f_val);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define parse_bool_arg(args, cmd_prefix) \
|
|
|
|
|
_parse_bool_arg (args, "on", "off", cmd_prefix)
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
check_empty (char *args, char *cmd_prefix)
|
|
|
|
|
{
|
|
|
|
|
if (args)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("Garbage after \"%s\" command: `%s'"), cmd_prefix, args);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Returns the alive thread named by INFERIOR_PID, or signals an error. */
|
|
|
|
|
static struct proc *
|
2000-07-30 09:48:28 +08:00
|
|
|
|
cur_thread (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2008-09-09 05:33:25 +08:00
|
|
|
|
struct proc *thread = inf_tid_to_thread (inf,
|
2013-09-18 22:47:51 +08:00
|
|
|
|
ptid_get_lwp (inferior_ptid));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (!thread)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("No current thread."));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
return thread;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Returns the current inferior, but signals an error if it has no task. */
|
|
|
|
|
static struct inf *
|
2000-07-30 09:48:28 +08:00
|
|
|
|
active_inf (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!inf->task)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("No current process."));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
return inf;
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2016-11-25 22:16:13 +08:00
|
|
|
|
set_task_pause_cmd (int arg, int from_tty)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
|
|
|
|
int old_sc = inf->pause_sc;
|
|
|
|
|
|
2016-11-25 22:16:13 +08:00
|
|
|
|
inf->pause_sc = arg;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (old_sc == 0 && inf->pause_sc != 0)
|
|
|
|
|
/* If the task is currently unsuspended, immediately suspend it,
|
|
|
|
|
otherwise wait until the next time it gets control. */
|
|
|
|
|
inf_suspend (inf);
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-25 22:16:13 +08:00
|
|
|
|
static void
|
|
|
|
|
set_task_pause_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
set_task_pause_cmd (parse_bool_arg (args, "set task pause"), from_tty);
|
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
|
|
|
|
show_task_pause_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show task pause");
|
|
|
|
|
printf_unfiltered ("The inferior task %s suspended while gdb has control.\n",
|
|
|
|
|
inf->task
|
|
|
|
|
? (inf->pause_sc == 0 ? "isn't" : "is")
|
|
|
|
|
: (inf->pause_sc == 0 ? "won't be" : "will be"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_task_detach_sc_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
2011-01-08 03:36:19 +08:00
|
|
|
|
cur_inf ()->detach_sc = parse_int_arg (args,
|
|
|
|
|
"set task detach-suspend-count");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_task_detach_sc_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
check_empty (args, "show task detach-suspend-count");
|
2011-01-08 03:36:19 +08:00
|
|
|
|
printf_unfiltered ("The inferior task will be left with a "
|
|
|
|
|
"suspend count of %d when detaching.\n",
|
1999-04-16 09:35:26 +08:00
|
|
|
|
cur_inf ()->detach_sc);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_thread_default_pause_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf->default_thread_pause_sc =
|
|
|
|
|
parse_bool_arg (args, "set thread default pause") ? 0 : 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_thread_default_pause_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
|
|
|
|
int sc = inf->default_thread_pause_sc;
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show thread default pause");
|
|
|
|
|
printf_unfiltered ("New threads %s suspended while gdb has control%s.\n",
|
|
|
|
|
sc ? "are" : "aren't",
|
|
|
|
|
!sc && inf->pause_sc ? " (but the task is)" : "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_thread_default_run_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
inf->default_thread_run_sc =
|
|
|
|
|
parse_bool_arg (args, "set thread default run") ? 0 : 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_thread_default_run_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show thread default run");
|
|
|
|
|
printf_unfiltered ("New threads %s allowed to run.\n",
|
|
|
|
|
inf->default_thread_run_sc == 0 ? "are" : "aren't");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_thread_default_detach_sc_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
cur_inf ()->default_thread_detach_sc =
|
|
|
|
|
parse_int_arg (args, "set thread default detach-suspend-count");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_thread_default_detach_sc_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
check_empty (args, "show thread default detach-suspend-count");
|
|
|
|
|
printf_unfiltered ("New threads will get a detach-suspend-count of %d.\n",
|
|
|
|
|
cur_inf ()->default_thread_detach_sc);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Steal a send right called NAME in the inferior task, and make it PROC's
|
|
|
|
|
saved exception port. */
|
|
|
|
|
static void
|
|
|
|
|
steal_exc_port (struct proc *proc, mach_port_t name)
|
|
|
|
|
{
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
mach_port_t port;
|
|
|
|
|
mach_msg_type_name_t port_type;
|
|
|
|
|
|
|
|
|
|
if (!proc || !proc->inf->task)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("No inferior task."));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
err = mach_port_extract_right (proc->inf->task->port,
|
|
|
|
|
name, MACH_MSG_TYPE_COPY_SEND,
|
|
|
|
|
&port, &port_type);
|
|
|
|
|
if (err)
|
Fix -Wformat warnings in gnu-nat.c
I've seen some -Wformat warnings when build native gdb for hurd.
../../../git/gdb/gnu-nat.c:2384:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c:2394:8: error: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Werror=format]
../../../git/gdb/gnu-nat.c: In function 'steal_exc_port':
../../../git/gdb/gnu-nat.c:2898:5: error: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Werror=format]
in usr/include/mach/port.h, we have:
typedef vm_offset_t mach_port_t;
and in usr/include/mach/machine/vm_types.h, we have:
typedef unsigned long vm_offset_t;
so this patch changes '%d' to '%lu' in format string for mach_port_t
variables.
Similarly, in usr/include/mach/std_types.h, we have,
typedef vm_offset_t vm_address_t;
this patch also changes '%x' to '%lx' in gnu_write_inferior.
gdb:
2014-02-17 Yao Qi <yao@codesourcery.com>
* gnu-nat.c (proc_get_exception_port): Use 'lu' insetad of 'd'
in format string.
(proc_steal_exc_port, make_proc, inf_set_pid): Likewise.
(inf_validate_procs, inf_signal): Likewise.
(S_exception_raise_request): Likewise.
(do_mach_notify_dead_name): Likewise.
(steal_exc_port): Likewise.
(gnu_read_inferior): Change 'copy_count''s type to
mach_msg_type_number_t.
(gnu_write_inferior): Likewise. Use 'lx' instead of 'x' in
format string.
2014-01-05 19:37:27 +08:00
|
|
|
|
error (_("Couldn't extract send right %lu from inferior: %s"),
|
2002-03-28 05:35:35 +08:00
|
|
|
|
name, safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (proc->saved_exc_port)
|
|
|
|
|
/* Get rid of our reference to the old one. */
|
|
|
|
|
mach_port_deallocate (mach_task_self (), proc->saved_exc_port);
|
|
|
|
|
|
|
|
|
|
proc->saved_exc_port = port;
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!proc->exc_port)
|
2011-01-08 03:36:19 +08:00
|
|
|
|
/* If PROC is a thread, we may not have set its exception port
|
|
|
|
|
before. We can't use proc_steal_exc_port because it also sets
|
|
|
|
|
saved_exc_port. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
1999-07-08 04:19:36 +08:00
|
|
|
|
proc->exc_port = proc->inf->event_port;
|
|
|
|
|
err = proc_set_exception_port (proc, proc->exc_port);
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("Can't set exception port for %s: %s"),
|
2002-03-28 05:35:35 +08:00
|
|
|
|
proc_string (proc), safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
|
|
|
|
set_task_exc_port_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (!args)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("No argument to \"set task exception-port\" command."));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
steal_exc_port (inf->task, parse_and_eval_address (args));
|
|
|
|
|
}
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
static void
|
1999-04-16 09:35:26 +08:00
|
|
|
|
set_stopped_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
cur_inf ()->stopped = _parse_bool_arg (args, "yes", "no", "set stopped");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_stopped_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = active_inf ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show stopped");
|
|
|
|
|
printf_unfiltered ("The inferior process %s stopped.\n",
|
|
|
|
|
inf->stopped ? "is" : "isn't");
|
|
|
|
|
}
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
static void
|
1999-04-16 09:35:26 +08:00
|
|
|
|
set_sig_thread_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (!args || (!isdigit (*args) && strcmp (args, "none") != 0))
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("Illegal argument to \"set signal-thread\" command.\n"
|
2016-12-08 16:45:59 +08:00
|
|
|
|
"Should be a thread ID, or \"none\"."));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (strcmp (args, "none") == 0)
|
|
|
|
|
inf->signal_thread = 0;
|
|
|
|
|
else
|
|
|
|
|
{
|
2016-12-08 16:45:59 +08:00
|
|
|
|
struct thread_info *tp = parse_thread_id (args, NULL);
|
|
|
|
|
inf->signal_thread = inf_tid_to_thread (inf, ptid_get_lwp (tp->ptid));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_sig_thread_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = active_inf ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show signal-thread");
|
|
|
|
|
if (inf->signal_thread)
|
|
|
|
|
printf_unfiltered ("The signal thread is %s.\n",
|
|
|
|
|
proc_string (inf->signal_thread));
|
|
|
|
|
else
|
|
|
|
|
printf_unfiltered ("There is no signal thread.\n");
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
static void
|
2016-11-25 22:16:13 +08:00
|
|
|
|
set_signals_cmd (int arg, int from_tty)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
|
|
|
|
|
2016-11-25 22:16:13 +08:00
|
|
|
|
inf->want_signals = arg;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (inf->task && inf->want_signals != inf->traced)
|
|
|
|
|
/* Make this take effect immediately in a running process. */
|
|
|
|
|
inf_set_traced (inf, inf->want_signals);
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-25 22:16:13 +08:00
|
|
|
|
static void
|
|
|
|
|
set_signals_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
set_signals_cmd(parse_bool_arg (args, "set signals"), from_tty);
|
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
|
|
|
|
show_signals_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show signals");
|
|
|
|
|
printf_unfiltered ("The inferior process's signals %s intercepted.\n",
|
|
|
|
|
inf->task
|
|
|
|
|
? (inf->traced ? "are" : "aren't")
|
|
|
|
|
: (inf->want_signals ? "will be" : "won't be"));
|
|
|
|
|
}
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
static void
|
2016-11-25 22:16:13 +08:00
|
|
|
|
set_exceptions_cmd (int arg, int from_tty)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
|
|
|
|
|
2014-01-05 19:32:51 +08:00
|
|
|
|
/* Make this take effect immediately in a running process. */
|
|
|
|
|
/* XXX */ ;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2016-11-25 22:16:13 +08:00
|
|
|
|
inf->want_exceptions = arg;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_exceptions_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
set_exceptions_cmd (parse_bool_arg (args, "set exceptions"), from_tty);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_exceptions_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show exceptions");
|
|
|
|
|
printf_unfiltered ("Exceptions in the inferior %s trapped.\n",
|
|
|
|
|
inf->task
|
|
|
|
|
? (inf->want_exceptions ? "are" : "aren't")
|
|
|
|
|
: (inf->want_exceptions ? "will be" : "won't be"));
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_task_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
2000-02-26 23:04:30 +08:00
|
|
|
|
printf_unfiltered ("\"set task\" must be followed by the name"
|
|
|
|
|
" of a task property.\n");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_task_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct inf *inf = cur_inf ();
|
|
|
|
|
|
|
|
|
|
check_empty (args, "show task");
|
|
|
|
|
|
|
|
|
|
show_signals_cmd (0, from_tty);
|
|
|
|
|
show_exceptions_cmd (0, from_tty);
|
|
|
|
|
show_task_pause_cmd (0, from_tty);
|
|
|
|
|
|
|
|
|
|
if (inf->pause_sc == 0)
|
|
|
|
|
show_thread_default_pause_cmd (0, from_tty);
|
|
|
|
|
show_thread_default_run_cmd (0, from_tty);
|
|
|
|
|
|
|
|
|
|
if (inf->task)
|
|
|
|
|
{
|
|
|
|
|
show_stopped_cmd (0, from_tty);
|
|
|
|
|
show_sig_thread_cmd (0, from_tty);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (inf->detach_sc != 0)
|
|
|
|
|
show_task_detach_sc_cmd (0, from_tty);
|
|
|
|
|
if (inf->default_thread_detach_sc != 0)
|
|
|
|
|
show_thread_default_detach_sc_cmd (0, from_tty);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_noninvasive_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
/* Invert the sense of the arg for each component. */
|
2016-11-25 22:16:13 +08:00
|
|
|
|
int inv_arg = parse_bool_arg (args, "set noninvasive") ? 0 : 1;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2016-11-25 22:16:13 +08:00
|
|
|
|
set_task_pause_cmd (inv_arg, from_tty);
|
|
|
|
|
set_signals_cmd (inv_arg, from_tty);
|
|
|
|
|
set_exceptions_cmd (inv_arg, from_tty);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2014-01-05 19:36:51 +08:00
|
|
|
|
info_port_rights (const char *args, mach_port_type_t only)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct inf *inf = active_inf ();
|
2001-11-11 05:34:56 +08:00
|
|
|
|
struct value *vmark = value_mark ();
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
if (args)
|
|
|
|
|
/* Explicit list of port rights. */
|
|
|
|
|
{
|
|
|
|
|
while (*args)
|
|
|
|
|
{
|
2001-11-11 05:34:56 +08:00
|
|
|
|
struct value *val = parse_to_comma_and_eval (&args);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
long right = value_as_long (val);
|
|
|
|
|
error_t err =
|
2010-05-15 04:17:37 +08:00
|
|
|
|
print_port_info (right, 0, inf->task->port, PORTINFO_DETAILS,
|
|
|
|
|
stdout);
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("%ld: %s."), right, safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
/* Print all of them. */
|
|
|
|
|
{
|
|
|
|
|
error_t err =
|
2010-05-15 04:17:37 +08:00
|
|
|
|
print_task_ports_info (inf->task->port, only, PORTINFO_DETAILS,
|
|
|
|
|
stdout);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("%s."), safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
value_free_to_mark (vmark);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
info_send_rights_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
info_port_rights (args, MACH_PORT_TYPE_SEND);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
|
|
|
|
info_recv_rights_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
info_port_rights (args, MACH_PORT_TYPE_RECEIVE);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
|
|
|
|
info_port_sets_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
info_port_rights (args, MACH_PORT_TYPE_PORT_SET);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
|
|
|
|
info_dead_names_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
info_port_rights (args, MACH_PORT_TYPE_DEAD_NAME);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
|
|
|
|
info_port_rights_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
info_port_rights (args, ~0);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
static void
|
2000-02-26 23:04:30 +08:00
|
|
|
|
add_task_commands (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("pause", class_run, set_thread_default_pause_cmd, _("\
|
|
|
|
|
Set whether the new threads are suspended while gdb has control.\n\
|
2000-02-26 23:04:30 +08:00
|
|
|
|
This property normally has no effect because the whole task is\n\
|
|
|
|
|
suspended, however, that may be disabled with \"set task pause off\".\n\
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
The default value is \"off\"."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_thread_default_cmd_list);
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("pause", no_class, show_thread_default_pause_cmd, _("\
|
|
|
|
|
Show whether new threads are suspended while gdb has control."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_thread_default_cmd_list);
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("run", class_run, set_thread_default_run_cmd, _("\
|
|
|
|
|
Set whether new threads are allowed to run (once gdb has noticed them)."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_thread_default_cmd_list);
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("run", no_class, show_thread_default_run_cmd, _("\
|
|
|
|
|
Show whether new threads are allowed to run (once gdb has noticed them)."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_thread_default_cmd_list);
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
add_cmd ("detach-suspend-count", class_run, set_thread_default_detach_sc_cmd,
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
_("Set the default detach-suspend-count value for new threads."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_thread_default_cmd_list);
|
|
|
|
|
add_cmd ("detach-suspend-count", no_class, show_thread_default_detach_sc_cmd,
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
_("Show the default detach-suspend-count value for new threads."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_thread_default_cmd_list);
|
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("signals", class_run, set_signals_cmd, _("\
|
|
|
|
|
Set whether the inferior process's signals will be intercepted.\n\
|
|
|
|
|
Mach exceptions (such as breakpoint traps) are not affected."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&setlist);
|
|
|
|
|
add_alias_cmd ("sigs", "signals", class_run, 1, &setlist);
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("signals", no_class, show_signals_cmd, _("\
|
|
|
|
|
Show whether the inferior process's signals will be intercepted."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&showlist);
|
|
|
|
|
add_alias_cmd ("sigs", "signals", no_class, 1, &showlist);
|
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("signal-thread", class_run, set_sig_thread_cmd, _("\
|
|
|
|
|
Set the thread that gdb thinks is the libc signal thread.\n\
|
|
|
|
|
This thread is run when delivering a signal to a non-stopped process."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&setlist);
|
|
|
|
|
add_alias_cmd ("sigthread", "signal-thread", class_run, 1, &setlist);
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("signal-thread", no_class, show_sig_thread_cmd, _("\
|
|
|
|
|
Set the thread that gdb thinks is the libc signal thread."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&showlist);
|
|
|
|
|
add_alias_cmd ("sigthread", "signal-thread", no_class, 1, &showlist);
|
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("stopped", class_run, set_stopped_cmd, _("\
|
|
|
|
|
Set whether gdb thinks the inferior process is stopped as with SIGSTOP.\n\
|
|
|
|
|
Stopped process will be continued by sending them a signal."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&setlist);
|
2009-07-31 01:42:24 +08:00
|
|
|
|
add_cmd ("stopped", no_class, show_stopped_cmd, _("\
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
Show whether gdb thinks the inferior process is stopped as with SIGSTOP."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&showlist);
|
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("exceptions", class_run, set_exceptions_cmd, _("\
|
|
|
|
|
Set whether exceptions in the inferior process will be trapped.\n\
|
2000-02-26 23:04:30 +08:00
|
|
|
|
When exceptions are turned off, neither breakpoints nor single-stepping\n\
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
will work."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&setlist);
|
|
|
|
|
/* Allow `set exc' despite conflict with `set exception-port'. */
|
|
|
|
|
add_alias_cmd ("exc", "exceptions", class_run, 1, &setlist);
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("exceptions", no_class, show_exceptions_cmd, _("\
|
|
|
|
|
Show whether exceptions in the inferior process will be trapped."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&showlist);
|
|
|
|
|
|
|
|
|
|
add_prefix_cmd ("task", no_class, set_task_cmd,
|
2005-02-15 Andrew Cagney <cagney@gnu.org>
Mark up add_com, add_info and add_prefix_cmd.
* breakpoint.c, cp-support.c, dcache.c, dwarf2read.c: Update.
* exec.c, f-valprint.c, frame.c, gcore.c, gnu-nat.c: Update.
* go32-nat.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* kod.c, language.c, linux-nat.c, m32r-rom.c, macrocmd.c: Update.
* maint.c, memattr.c, mips-tdep.c, nto-procfs.c, objc-lang.c: Update.
* ocd.c, pa64solib.c, printcmd.c, procfs.c, regcache.c: Update.
* remote-e7000.c, remote-m32r-sdi.c, remote-mips.c: Update.
* remote-sds.c, remote-sim.c, remote-st.c, remote-utils.c: Update.
* remote.c, rs6000-tdep.c, ser-go32.c, serial.c: Update.
* sh-tdep.c, solib.c, somsolib.c, source.c, stack.c: Update.
* symfile.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, typeprint.c, utils.c, valprint.c: Update.
* win32-nat.c, xcoffsolib.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-layout.c, tui/tui-regs.c: Update.
* tui/tui-stack.c, tui/tui-win.c: Update.
2005-02-15 23:49:28 +08:00
|
|
|
|
_("Command prefix for setting task attributes."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_task_cmd_list, "set task ", 0, &setlist);
|
|
|
|
|
add_prefix_cmd ("task", no_class, show_task_cmd,
|
2005-02-15 Andrew Cagney <cagney@gnu.org>
Mark up add_com, add_info and add_prefix_cmd.
* breakpoint.c, cp-support.c, dcache.c, dwarf2read.c: Update.
* exec.c, f-valprint.c, frame.c, gcore.c, gnu-nat.c: Update.
* go32-nat.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* kod.c, language.c, linux-nat.c, m32r-rom.c, macrocmd.c: Update.
* maint.c, memattr.c, mips-tdep.c, nto-procfs.c, objc-lang.c: Update.
* ocd.c, pa64solib.c, printcmd.c, procfs.c, regcache.c: Update.
* remote-e7000.c, remote-m32r-sdi.c, remote-mips.c: Update.
* remote-sds.c, remote-sim.c, remote-st.c, remote-utils.c: Update.
* remote.c, rs6000-tdep.c, ser-go32.c, serial.c: Update.
* sh-tdep.c, solib.c, somsolib.c, source.c, stack.c: Update.
* symfile.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, typeprint.c, utils.c, valprint.c: Update.
* win32-nat.c, xcoffsolib.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-layout.c, tui/tui-regs.c: Update.
* tui/tui-stack.c, tui/tui-win.c: Update.
2005-02-15 23:49:28 +08:00
|
|
|
|
_("Command prefix for showing task attributes."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_task_cmd_list, "show task ", 0, &showlist);
|
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("pause", class_run, set_task_pause_cmd, _("\
|
|
|
|
|
Set whether the task is suspended while gdb has control.\n\
|
2000-02-26 23:04:30 +08:00
|
|
|
|
A value of \"on\" takes effect immediately, otherwise nothing happens\n\
|
|
|
|
|
until the next time the program is continued.\n\
|
|
|
|
|
When setting this to \"off\", \"set thread default pause on\" can be\n\
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
used to pause individual threads by default instead."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_task_cmd_list);
|
|
|
|
|
add_cmd ("pause", no_class, show_task_pause_cmd,
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
_("Show whether the task is suspended while gdb has control."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_task_cmd_list);
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
add_cmd ("detach-suspend-count", class_run, set_task_detach_sc_cmd,
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
_("Set the suspend count will leave on the thread when detaching."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_task_cmd_list);
|
|
|
|
|
add_cmd ("detach-suspend-count", no_class, show_task_detach_sc_cmd,
|
2011-01-08 03:36:19 +08:00
|
|
|
|
_("Show the suspend count will leave "
|
|
|
|
|
"on the thread when detaching."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_task_cmd_list);
|
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("exception-port", no_class, set_task_exc_port_cmd, _("\
|
|
|
|
|
Set the task exception port to which we forward exceptions.\n\
|
|
|
|
|
The argument should be the value of the send right in the task."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_task_cmd_list);
|
|
|
|
|
add_alias_cmd ("excp", "exception-port", no_class, 1, &set_task_cmd_list);
|
2000-02-26 23:04:30 +08:00
|
|
|
|
add_alias_cmd ("exc-port", "exception-port", no_class, 1,
|
|
|
|
|
&set_task_cmd_list);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* A convenient way of turning on all options require to noninvasively
|
|
|
|
|
debug running tasks. */
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("noninvasive", no_class, set_noninvasive_cmd, _("\
|
|
|
|
|
Set task options so that we interfere as little as possible.\n\
|
2000-02-26 23:04:30 +08:00
|
|
|
|
This is the same as setting `task pause', `exceptions', and\n\
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
`signals' to the opposite value."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&setlist);
|
|
|
|
|
|
|
|
|
|
/* Commands to show information about the task's ports. */
|
2015-11-10 04:27:55 +08:00
|
|
|
|
add_info ("send-rights", info_send_rights_cmd,
|
|
|
|
|
_("Show information about the task's send rights"));
|
|
|
|
|
add_info ("receive-rights", info_recv_rights_cmd,
|
|
|
|
|
_("Show information about the task's receive rights"));
|
|
|
|
|
add_info ("port-rights", info_port_rights_cmd,
|
|
|
|
|
_("Show information about the task's port rights"));
|
|
|
|
|
add_info ("port-sets", info_port_sets_cmd,
|
|
|
|
|
_("Show information about the task's port sets"));
|
|
|
|
|
add_info ("dead-names", info_dead_names_cmd,
|
|
|
|
|
_("Show information about the task's dead names"));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
add_info_alias ("ports", "port-rights", 1);
|
|
|
|
|
add_info_alias ("port", "port-rights", 1);
|
|
|
|
|
add_info_alias ("psets", "port-sets", 1);
|
|
|
|
|
}
|
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
static void
|
|
|
|
|
set_thread_pause_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = cur_thread ();
|
|
|
|
|
int old_sc = thread->pause_sc;
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
thread->pause_sc = parse_bool_arg (args, "set thread pause");
|
|
|
|
|
if (old_sc == 0 && thread->pause_sc != 0 && thread->inf->pause_sc == 0)
|
|
|
|
|
/* If the task is currently unsuspended, immediately suspend it,
|
|
|
|
|
otherwise wait until the next time it gets control. */
|
|
|
|
|
inf_suspend (thread->inf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_thread_pause_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = cur_thread ();
|
|
|
|
|
int sc = thread->pause_sc;
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show task pause");
|
|
|
|
|
printf_unfiltered ("Thread %s %s suspended while gdb has control%s.\n",
|
|
|
|
|
proc_string (thread),
|
|
|
|
|
sc ? "is" : "isn't",
|
2000-02-26 23:04:30 +08:00
|
|
|
|
!sc && thread->inf->pause_sc ? " (but the task is)" : "");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_thread_run_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = cur_thread ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
thread->run_sc = parse_bool_arg (args, "set thread run") ? 0 : 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_thread_run_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = cur_thread ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show thread run");
|
|
|
|
|
printf_unfiltered ("Thread %s %s allowed to run.",
|
|
|
|
|
proc_string (thread),
|
|
|
|
|
thread->run_sc == 0 ? "is" : "isn't");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_thread_detach_sc_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
2000-02-26 23:04:30 +08:00
|
|
|
|
cur_thread ()->detach_sc = parse_int_arg (args,
|
|
|
|
|
"set thread detach-suspend-count");
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
show_thread_detach_sc_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = cur_thread ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show thread detach-suspend-count");
|
2000-02-26 23:04:30 +08:00
|
|
|
|
printf_unfiltered ("Thread %s will be left with a suspend count"
|
|
|
|
|
" of %d when detaching.\n",
|
1999-04-16 09:35:26 +08:00
|
|
|
|
proc_string (thread),
|
|
|
|
|
thread->detach_sc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
set_thread_exc_port_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = cur_thread ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (!args)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("No argument to \"set thread exception-port\" command."));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
steal_exc_port (thread, parse_and_eval_address (args));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
static void
|
|
|
|
|
show_thread_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = cur_thread ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
check_empty (args, "show thread");
|
|
|
|
|
show_thread_run_cmd (0, from_tty);
|
|
|
|
|
show_thread_pause_cmd (0, from_tty);
|
|
|
|
|
if (thread->detach_sc != 0)
|
|
|
|
|
show_thread_detach_sc_cmd (0, from_tty);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
thread_takeover_sc_cmd (char *args, int from_tty)
|
|
|
|
|
{
|
|
|
|
|
struct proc *thread = cur_thread ();
|
2010-05-15 04:17:37 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
thread_basic_info_data_t _info;
|
|
|
|
|
thread_basic_info_t info = &_info;
|
|
|
|
|
mach_msg_type_number_t info_len = THREAD_BASIC_INFO_COUNT;
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t err =
|
1999-07-08 04:19:36 +08:00
|
|
|
|
thread_info (thread->port, THREAD_BASIC_INFO, (int *) &info, &info_len);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (err)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (("%s."), safe_strerror (err));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
thread->sc = info->suspend_count;
|
|
|
|
|
if (from_tty)
|
|
|
|
|
printf_unfiltered ("Suspend count was %d.\n", thread->sc);
|
|
|
|
|
if (info != &_info)
|
2000-02-26 23:04:30 +08:00
|
|
|
|
vm_deallocate (mach_task_self (), (vm_address_t) info,
|
|
|
|
|
info_len * sizeof (int));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
add_thread_commands (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
add_prefix_cmd ("thread", no_class, set_thread_cmd,
|
2005-02-15 Andrew Cagney <cagney@gnu.org>
Mark up add_com, add_info and add_prefix_cmd.
* breakpoint.c, cp-support.c, dcache.c, dwarf2read.c: Update.
* exec.c, f-valprint.c, frame.c, gcore.c, gnu-nat.c: Update.
* go32-nat.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* kod.c, language.c, linux-nat.c, m32r-rom.c, macrocmd.c: Update.
* maint.c, memattr.c, mips-tdep.c, nto-procfs.c, objc-lang.c: Update.
* ocd.c, pa64solib.c, printcmd.c, procfs.c, regcache.c: Update.
* remote-e7000.c, remote-m32r-sdi.c, remote-mips.c: Update.
* remote-sds.c, remote-sim.c, remote-st.c, remote-utils.c: Update.
* remote.c, rs6000-tdep.c, ser-go32.c, serial.c: Update.
* sh-tdep.c, solib.c, somsolib.c, source.c, stack.c: Update.
* symfile.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, typeprint.c, utils.c, valprint.c: Update.
* win32-nat.c, xcoffsolib.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-layout.c, tui/tui-regs.c: Update.
* tui/tui-stack.c, tui/tui-win.c: Update.
2005-02-15 23:49:28 +08:00
|
|
|
|
_("Command prefix for setting thread properties."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_thread_cmd_list, "set thread ", 0, &setlist);
|
|
|
|
|
add_prefix_cmd ("default", no_class, show_thread_cmd,
|
2005-02-15 Andrew Cagney <cagney@gnu.org>
Mark up add_com, add_info and add_prefix_cmd.
* breakpoint.c, cp-support.c, dcache.c, dwarf2read.c: Update.
* exec.c, f-valprint.c, frame.c, gcore.c, gnu-nat.c: Update.
* go32-nat.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* kod.c, language.c, linux-nat.c, m32r-rom.c, macrocmd.c: Update.
* maint.c, memattr.c, mips-tdep.c, nto-procfs.c, objc-lang.c: Update.
* ocd.c, pa64solib.c, printcmd.c, procfs.c, regcache.c: Update.
* remote-e7000.c, remote-m32r-sdi.c, remote-mips.c: Update.
* remote-sds.c, remote-sim.c, remote-st.c, remote-utils.c: Update.
* remote.c, rs6000-tdep.c, ser-go32.c, serial.c: Update.
* sh-tdep.c, solib.c, somsolib.c, source.c, stack.c: Update.
* symfile.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, typeprint.c, utils.c, valprint.c: Update.
* win32-nat.c, xcoffsolib.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-layout.c, tui/tui-regs.c: Update.
* tui/tui-stack.c, tui/tui-win.c: Update.
2005-02-15 23:49:28 +08:00
|
|
|
|
_("Command prefix for setting default thread properties."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_thread_default_cmd_list, "set thread default ", 0,
|
|
|
|
|
&set_thread_cmd_list);
|
|
|
|
|
add_prefix_cmd ("thread", no_class, set_thread_default_cmd,
|
2005-02-15 Andrew Cagney <cagney@gnu.org>
Mark up add_com, add_info and add_prefix_cmd.
* breakpoint.c, cp-support.c, dcache.c, dwarf2read.c: Update.
* exec.c, f-valprint.c, frame.c, gcore.c, gnu-nat.c: Update.
* go32-nat.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* kod.c, language.c, linux-nat.c, m32r-rom.c, macrocmd.c: Update.
* maint.c, memattr.c, mips-tdep.c, nto-procfs.c, objc-lang.c: Update.
* ocd.c, pa64solib.c, printcmd.c, procfs.c, regcache.c: Update.
* remote-e7000.c, remote-m32r-sdi.c, remote-mips.c: Update.
* remote-sds.c, remote-sim.c, remote-st.c, remote-utils.c: Update.
* remote.c, rs6000-tdep.c, ser-go32.c, serial.c: Update.
* sh-tdep.c, solib.c, somsolib.c, source.c, stack.c: Update.
* symfile.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, typeprint.c, utils.c, valprint.c: Update.
* win32-nat.c, xcoffsolib.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-layout.c, tui/tui-regs.c: Update.
* tui/tui-stack.c, tui/tui-win.c: Update.
2005-02-15 23:49:28 +08:00
|
|
|
|
_("Command prefix for showing thread properties."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_thread_cmd_list, "show thread ", 0, &showlist);
|
|
|
|
|
add_prefix_cmd ("default", no_class, show_thread_default_cmd,
|
2005-02-15 Andrew Cagney <cagney@gnu.org>
Mark up add_com, add_info and add_prefix_cmd.
* breakpoint.c, cp-support.c, dcache.c, dwarf2read.c: Update.
* exec.c, f-valprint.c, frame.c, gcore.c, gnu-nat.c: Update.
* go32-nat.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* kod.c, language.c, linux-nat.c, m32r-rom.c, macrocmd.c: Update.
* maint.c, memattr.c, mips-tdep.c, nto-procfs.c, objc-lang.c: Update.
* ocd.c, pa64solib.c, printcmd.c, procfs.c, regcache.c: Update.
* remote-e7000.c, remote-m32r-sdi.c, remote-mips.c: Update.
* remote-sds.c, remote-sim.c, remote-st.c, remote-utils.c: Update.
* remote.c, rs6000-tdep.c, ser-go32.c, serial.c: Update.
* sh-tdep.c, solib.c, somsolib.c, source.c, stack.c: Update.
* symfile.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, typeprint.c, utils.c, valprint.c: Update.
* win32-nat.c, xcoffsolib.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-layout.c, tui/tui-regs.c: Update.
* tui/tui-stack.c, tui/tui-win.c: Update.
2005-02-15 23:49:28 +08:00
|
|
|
|
_("Command prefix for showing default thread properties."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_thread_default_cmd_list, "show thread default ", 0,
|
|
|
|
|
&show_thread_cmd_list);
|
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("pause", class_run, set_thread_pause_cmd, _("\
|
|
|
|
|
Set whether the current thread is suspended while gdb has control.\n\
|
2000-02-26 23:04:30 +08:00
|
|
|
|
A value of \"on\" takes effect immediately, otherwise nothing happens\n\
|
|
|
|
|
until the next time the program is continued. This property normally\n\
|
|
|
|
|
has no effect because the whole task is suspended, however, that may\n\
|
|
|
|
|
be disabled with \"set task pause off\".\n\
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
The default value is \"off\"."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_thread_cmd_list);
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("pause", no_class, show_thread_pause_cmd, _("\
|
|
|
|
|
Show whether the current thread is suspended while gdb has control."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_thread_cmd_list);
|
|
|
|
|
|
|
|
|
|
add_cmd ("run", class_run, set_thread_run_cmd,
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
_("Set whether the current thread is allowed to run."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_thread_cmd_list);
|
|
|
|
|
add_cmd ("run", no_class, show_thread_run_cmd,
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
_("Show whether the current thread is allowed to run."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_thread_cmd_list);
|
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("detach-suspend-count", class_run, set_thread_detach_sc_cmd, _("\
|
|
|
|
|
Set the suspend count will leave on the thread when detaching.\n\
|
2000-02-26 23:04:30 +08:00
|
|
|
|
Note that this is relative to suspend count when gdb noticed the thread;\n\
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
use the `thread takeover-suspend-count' to force it to an absolute value."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_thread_cmd_list);
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("detach-suspend-count", no_class, show_thread_detach_sc_cmd, _("\
|
|
|
|
|
Show the suspend count will leave on the thread when detaching.\n\
|
2000-02-26 23:04:30 +08:00
|
|
|
|
Note that this is relative to suspend count when gdb noticed the thread;\n\
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
use the `thread takeover-suspend-count' to force it to an absolute value."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&show_thread_cmd_list);
|
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("exception-port", no_class, set_thread_exc_port_cmd, _("\
|
|
|
|
|
Set the thread exception port to which we forward exceptions.\n\
|
2000-02-26 23:04:30 +08:00
|
|
|
|
This overrides the task exception port.\n\
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
The argument should be the value of the send right in the task."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&set_thread_cmd_list);
|
|
|
|
|
add_alias_cmd ("excp", "exception-port", no_class, 1, &set_thread_cmd_list);
|
2000-02-26 23:04:30 +08:00
|
|
|
|
add_alias_cmd ("exc-port", "exception-port", no_class, 1,
|
|
|
|
|
&set_thread_cmd_list);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
add_cmd ("takeover-suspend-count", no_class, thread_takeover_sc_cmd, _("\
|
|
|
|
|
Force the threads absolute suspend-count to be gdb's.\n\
|
2000-02-26 23:04:30 +08:00
|
|
|
|
Prior to giving this command, gdb's thread suspend-counts are relative\n\
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-15 02:10:11 +08:00
|
|
|
|
to the thread's initial suspend-count when gdb notices the threads."),
|
1999-04-16 09:35:26 +08:00
|
|
|
|
&thread_cmd_list);
|
|
|
|
|
}
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2014-01-05 15:05:44 +08:00
|
|
|
|
|
|
|
|
|
/* -Wmissing-prototypes */
|
|
|
|
|
extern initialize_file_ftype _initialize_gnu_nat;
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
void
|
2000-02-26 23:04:30 +08:00
|
|
|
|
_initialize_gnu_nat (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
proc_server = getproc ();
|
2000-02-26 23:04:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
add_task_commands ();
|
|
|
|
|
add_thread_commands ();
|
2009-05-13 00:51:13 +08:00
|
|
|
|
add_setshow_boolean_cmd ("gnu-nat", class_maintenance,
|
|
|
|
|
&gnu_debug_flag,
|
|
|
|
|
_("Set debugging output for the gnu backend."),
|
|
|
|
|
_("Show debugging output for the gnu backend."),
|
|
|
|
|
NULL,
|
|
|
|
|
NULL,
|
|
|
|
|
NULL,
|
|
|
|
|
&setdebuglist,
|
|
|
|
|
&showdebuglist);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef FLUSH_INFERIOR_CACHE
|
|
|
|
|
|
|
|
|
|
/* When over-writing code on some machines the I-Cache must be flushed
|
|
|
|
|
explicitly, because it is not kept coherent by the lazy hardware.
|
|
|
|
|
This definitely includes breakpoints, for instance, or else we
|
2011-01-08 03:36:19 +08:00
|
|
|
|
end up looping in mysterious Bpt traps. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
void
|
2000-07-30 09:48:28 +08:00
|
|
|
|
flush_inferior_icache (CORE_ADDR pc, int amount)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
vm_machine_attribute_val_t flush = MATTR_VAL_ICACHE_FLUSH;
|
Hurd, C++: kern_return_t vs. error_t
GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
"typedef int error_t;" ([glibc]/stdlib/errno.h).
The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'". Instead of
casting all these RPC return values to "error_t", just use "kern_return_t"
variables:
gdb/
* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
(proc_steal_exc_port, proc_restore_exc_port, make_proc)
(inf_startup, inf_set_pid, inf_validate_procinfo)
(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
(do_mach_notify_dead_name, S_proc_wait_reply)
(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
(i386_gnu_dr_set): Likewise.
2016-11-25 18:02:17 +08:00
|
|
|
|
kern_return_t ret;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
2008-10-08 02:42:42 +08:00
|
|
|
|
ret = vm_machine_attribute (gnu_current_inf->task->port,
|
1999-04-16 09:35:26 +08:00
|
|
|
|
pc,
|
|
|
|
|
amount,
|
|
|
|
|
MATTR_CACHE,
|
|
|
|
|
&flush);
|
|
|
|
|
if (ret != KERN_SUCCESS)
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
warning (_("Error flushing inferior's cache : %s"), safe_strerror (ret));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
1999-07-08 04:19:36 +08:00
|
|
|
|
#endif /* FLUSH_INFERIOR_CACHE */
|