/* QNX Neutrino specific low level interface, for the remote server
for GDB.
- Copyright (C) 2009-2017 Free Software Foundation, Inc.
+ Copyright (C) 2009-2020 Free Software Foundation, Inc.
This file is part of GDB.
#include "gdbthread.h"
#include "nto-low.h"
#include "hostio.h"
+#include "debug.h"
#include <limits.h>
#include <fcntl.h>
#include <sys/neutrino.h>
-extern int using_threads;
int using_threads = 1;
const struct target_desc *nto_tdesc;
{
int res = 0;
- TRACE ("%s pid: %d tid: %ld\n", __func__, ptid_get_pid (ptid),
- ptid_get_lwp (ptid));
+ TRACE ("%s pid: %d tid: %ld\n", __func__, ptid.pid (),
+ ptid.lwp ());
if (nto_inferior.ctl_fd != -1
- && !ptid_equal (ptid, null_ptid)
- && !ptid_equal (ptid, minus_one_ptid))
+ && ptid != null_ptid
+ && ptid != minus_one_ptid)
{
- pthread_t tid = ptid_get_lwp (ptid);
+ pthread_t tid = ptid.lwp ();
if (EOK == devctl (nto_inferior.ctl_fd, DCMD_PROC_CURTHREAD, &tid,
sizeof (tid), 0))
{
struct thread_info *ti;
- ptid = ptid_build (nto_inferior->pid, tid, 0);
+ ptid = ptid_t (nto_inferior->pid, tid, 0);
ti = find_thread_ptid (ptid);
if (ti != NULL)
{
if (status.state != STATE_DEAD)
{
TRACE ("Adding thread %d\n", tid);
- ptid = ptid_build (nto_inferior->pid, tid, 0);
+ ptid = ptid_t (nto_inferior->pid, tid, 0);
if (!find_thread_ptid (ptid))
add_thread (ptid, NULL);
}
struct process_info *proc;
kill (pid, SIGCONT);
- ptid = ptid_build (status.pid, status.tid, 0);
+ ptid = ptid_t (status.pid, status.tid, 0);
the_low_target.arch_setup ();
proc = add_process (status.pid, 1);
proc->tdesc = nto_tdesc;
TRACE ("Adding thread: pid=%d tid=%ld\n", status.pid,
- ptid_get_lwp (ptid));
+ ptid.lwp ());
nto_find_new_threads (&nto_inferior);
}
else
if (nbytes == 0)
{
int e = errno;
- TRACE ("Error in %s : errno=%d (%s)\n", __func__, e, strerror (e));
+ TRACE ("Error in %s : errno=%d (%s)\n", __func__, e, safe_strerror (e));
}
return nbytes;
}
/* Send signal to process PID. */
static int
-nto_kill (int pid)
+nto_kill (process_info *proc)
{
+ int pid = proc->pid;
+
TRACE ("%s %d\n", __func__, pid);
kill (pid, SIGKILL);
do_detach ();
/* Detach from process PID. */
static int
-nto_detach (int pid)
+nto_detach (process_info *proc)
{
- TRACE ("%s %d\n", __func__, pid);
+ TRACE ("%s %d\n", __func__, proc->pid);
do_detach ();
return 0;
}
{
int res;
- TRACE ("%s pid:%d tid:%d\n", __func__, ptid_get_pid (ptid),
- ptid_get_lwp (ptid));
- if (SignalKill (0, ptid_get_pid (ptid), ptid_get_lwp (ptid),
+ TRACE ("%s pid:%d tid:%d\n", __func__, ptid.pid (),
+ ptid.lwp ());
+ if (SignalKill (0, ptid.pid (), ptid.lwp (),
0, 0, 0) == -1)
res = 0;
else
err = devctl (nto_inferior.ctl_fd, DCMD_PROC_RUN, &run, sizeof (run), 0);
if (err != EOK)
- TRACE ("Error: %d \"%s\"\n", err, strerror (err));
+ TRACE ("Error: %d \"%s\"\n", err, safe_strerror (err));
}
/* Wait for inferior's event.
int waitval = 0;
TRACE (" TERMINATED\n");
- waitpid (ptid_get_pid (ptid), &waitval, WNOHANG);
+ waitpid (ptid.pid (), &waitval, WNOHANG);
if (nto_inferior.exit_signo)
{
/* Abnormal death. */
}
}
- return ptid_build (status.pid, status.tid, 0);
+ return ptid_t (status.pid, status.tid, 0);
}
/* Fetch inferior's registers for currently selected thread (CURRENT_INFERIOR).
{
int regsize;
procfs_greg greg;
- ptid_t ptid;
TRACE ("%s (regno=%d)\n", __func__, regno);
if (regno >= the_low_target.num_regs)
TRACE ("current_thread is NULL\n");
return;
}
- ptid = thread_to_gdb_id (current_thread);
+ ptid_t ptid = ptid_of (current_thread);
if (!nto_set_thread (ptid))
return;
{
procfs_greg greg;
int err;
- ptid_t ptid;
TRACE ("%s (regno:%d)\n", __func__, regno);
TRACE ("current_thread is NULL\n");
return;
}
- ptid = thread_to_gdb_id (current_thread);
+ ptid_t ptid = ptid_of (current_thread);
if (!nto_set_thread (ptid))
return;
nto_request_interrupt (void)
{
TRACE ("%s\n", __func__);
- nto_set_thread (ptid_build (nto_inferior.pid, 1, 0));
+ nto_set_thread (ptid_t (nto_inferior.pid, 1, 0));
if (EOK != devctl (nto_inferior.ctl_fd, DCMD_PROC_STOP, NULL, 0, 0))
TRACE ("Error stopping inferior.\n");
}
TRACE ("%s\n", __func__);
if (nto_inferior.ctl_fd != -1 && current_thread != NULL)
{
- ptid_t ptid;
-
- ptid = thread_to_gdb_id (current_thread);
+ ptid_t ptid = ptid_of (current_thread);
if (nto_set_thread (ptid))
{
const int watchmask = _DEBUG_FLAG_TRACE_RD | _DEBUG_FLAG_TRACE_WR
TRACE ("%s\n", __func__);
if (nto_inferior.ctl_fd != -1 && current_thread != NULL)
{
- ptid_t ptid;
-
- ptid = thread_to_gdb_id (current_thread);
+ ptid_t ptid = ptid_of (current_thread);
if (nto_set_thread (ptid))
{
}
-static struct target_ops nto_target_ops = {
+static process_stratum_target nto_target_ops = {
nto_create_inferior,
NULL, /* post_create_inferior */
nto_attach,
nto_stopped_data_address,
NULL, /* nto_read_offsets */
NULL, /* thread_db_set_tls_address */
- NULL,
hostio_last_error_from_errno,
NULL, /* nto_qxfer_osdata */
NULL, /* xfer_siginfo */
NULL, /* get_min_fast_tracepoint_insn_len */
NULL, /* qxfer_libraries_svr4 */
NULL, /* support_agent */
- NULL, /* support_btrace */
NULL, /* enable_btrace */
NULL, /* disable_btrace */
NULL, /* read_btrace */