diff options
author | Kris Warkentin <kewarken@qnx.com> | 2004-12-10 13:38:23 +0000 |
---|---|---|
committer | Kris Warkentin <kewarken@qnx.com> | 2004-12-10 13:38:23 +0000 |
commit | d737fd7f91e8282171e28b96156adbf8362293b8 (patch) | |
tree | 5ecc3c47500fdfa926bad38be76f3be8c753df73 /gdb/nto-procfs.c | |
parent | 0e2cfdce255a722d3b3d3cdadf227e3110ef64f8 (diff) | |
download | gdb-d737fd7f91e8282171e28b96156adbf8362293b8.zip gdb-d737fd7f91e8282171e28b96156adbf8362293b8.tar.gz gdb-d737fd7f91e8282171e28b96156adbf8362293b8.tar.bz2 |
* nto-tdep.h: Include osabi.h. Prototypes for generic Neutrino
osabi sniffer, signal handling initializer, 'in_dynsym_resolve_code'
function and nto_set_target function.
(struct nto_target_ops): Put comments inline with struct. Add osabi
sniffer hook. Redefine macros to permit testing/assignment. Remove
nto_ prefix from members.
* nto-tdep.c (nto_find_and_open_solib): Allocate all buffers
dynamically to support arbitrary root paths. Check for basename of
lib in search path and then check for absolute.
(nto_in_dynsym_resolve_code): New function.
(nto_core_sniffer): New function.
(regset_core_fns): Register core sniffer.
(nto_initialize_signals): New function.
(_initialize_nto_tdep): Move signal initialization code to above to
avoid initialization race conditions.
(nto_set_target): New function.
* nto-procfs.c: Minor formatting/indenting changes.
(procfs_is_nto_target): New function.
(procfs_open): Set nto_is_nto_target.
(_initialize_procfs): Ditto. Remove notice_signals() call to avoid
initialization race conditions.
(procfs_create_inferior): Resume inferior after creation.
* i386-nto-tdep.c: Declare i386_nto_target.
(init_i386nto_ops): Initialize i386_nto_target instead of
current_nto_target.
(i386nto_init_abi): Initialize signals. Call nto_set_target. Set
TARGET_SO_IN_DYNSYM_RESOLVE_CODE.
(_initialize_i386nto_tdep): Call init_i386nto_ops. Register osabi sniffer.
Diffstat (limited to 'gdb/nto-procfs.c')
-rw-r--r-- | gdb/nto-procfs.c | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/gdb/nto-procfs.c b/gdb/nto-procfs.c index 227d4e3..0b13d35 100644 --- a/gdb/nto-procfs.c +++ b/gdb/nto-procfs.c @@ -97,20 +97,26 @@ static unsigned nto_procfs_node = ND_LOCAL_NODE; is required is because QNX node descriptors are transient so we have to re-acquire them every time. */ static unsigned -nto_node(void) +nto_node (void) { unsigned node; - if (ND_NODE_CMP(nto_procfs_node, ND_LOCAL_NODE) == 0) + if (ND_NODE_CMP (nto_procfs_node, ND_LOCAL_NODE) == 0) return ND_LOCAL_NODE; - node = netmgr_strtond(nto_procfs_path,0); + node = netmgr_strtond (nto_procfs_path, 0); if (node == -1) - error ("Lost the QNX node. Debug session probably over."); + error ("Lost the QNX node. Debug session probably over."); return (node); } +static enum gdb_osabi +procfs_is_nto_target (bfd *abfd) +{ + return GDB_OSABI_QNXNTO; +} + /* This is called when we call 'target procfs <arg>' from the (gdb) prompt. For QNX6 (nto), the only valid arg will be a QNX node string, eg: "/net/some_node". If arg is not a valid QNX node, we will @@ -124,6 +130,8 @@ procfs_open (char *arg, int from_tty) int fd, total_size; procfs_sysinfo *sysinfo; + nto_is_nto_target = procfs_is_nto_target; + /* Set the default node used for spawning to this one, and only override it if there is a valid arg. */ @@ -153,7 +161,8 @@ procfs_open (char *arg, int from_tty) *endstr = 0; } } - snprintf (nto_procfs_path, PATH_MAX - 1, "%s%s", nodestr ? nodestr : "", "/proc"); + snprintf (nto_procfs_path, PATH_MAX - 1, "%s%s", nodestr ? nodestr : "", + "/proc"); if (nodestr) xfree (nodestr); @@ -271,7 +280,7 @@ procfs_pidlist (char *args, int from_tty) if (dp == NULL) { fprintf_unfiltered (gdb_stderr, "failed to opendir \"%s\" - %d (%s)", - nto_procfs_path, errno, safe_strerror (errno)); + nto_procfs_path, errno, safe_strerror (errno)); return; } @@ -299,7 +308,7 @@ procfs_pidlist (char *args, int from_tty) if (fd == -1) { fprintf_unfiltered (gdb_stderr, "failed to open %s - %d (%s)\n", - buf, errno, safe_strerror (errno)); + buf, errno, safe_strerror (errno)); closedir (dp); return; } @@ -308,8 +317,8 @@ procfs_pidlist (char *args, int from_tty) if (devctl (fd, DCMD_PROC_INFO, pidinfo, sizeof (buf), 0) != EOK) { fprintf_unfiltered (gdb_stderr, - "devctl DCMD_PROC_INFO failed - %d (%s)\n", errno, - safe_strerror (errno)); + "devctl DCMD_PROC_INFO failed - %d (%s)\n", + errno, safe_strerror (errno)); break; } num_threads = pidinfo->num_threads; @@ -375,7 +384,8 @@ procfs_meminfo (char *args, int from_tty) err = devctl (ctl_fd, DCMD_PROC_MAPINFO, NULL, 0, &num); if (err != EOK) { - printf ("failed devctl num mapinfos - %d (%s)\n", err, safe_strerror (err)); + printf ("failed devctl num mapinfos - %d (%s)\n", err, + safe_strerror (err)); return; } @@ -565,7 +575,7 @@ do_attach (ptid_t ptid) if (devctl (ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0) == EOK && status.flags & _DEBUG_FLAG_STOPPED) - SignalKill (nto_node(), PIDGET (ptid), 0, SIGCONT, 0, 0); + SignalKill (nto_node (), PIDGET (ptid), 0, SIGCONT, 0, 0); attach_flag = 1; nto_init_solib_absolute_prefix (); return ptid; @@ -778,7 +788,7 @@ procfs_detach (char *args, int from_tty) siggnal = atoi (args); if (siggnal) - SignalKill (nto_node(), PIDGET (inferior_ptid), 0, siggnal, 0, 0); + SignalKill (nto_node (), PIDGET (inferior_ptid), 0, siggnal, 0, 0); close (ctl_fd); ctl_fd = -1; @@ -868,8 +878,8 @@ procfs_resume (ptid_t ptid, int step, enum target_signal signo) { if (signal_to_pass != status.info.si_signo) { - SignalKill (nto_node(), PIDGET (inferior_ptid), 0, signal_to_pass, - 0, 0); + SignalKill (nto_node (), PIDGET (inferior_ptid), 0, + signal_to_pass, 0, 0); run.flags |= _DEBUG_RUN_CLRFLT | _DEBUG_RUN_CLRSIG; } else /* Let it kill the program without telling us. */ @@ -892,7 +902,7 @@ procfs_mourn_inferior (void) { if (!ptid_equal (inferior_ptid, null_ptid)) { - SignalKill (nto_node(), PIDGET (inferior_ptid), 0, SIGKILL, 0, 0); + SignalKill (nto_node (), PIDGET (inferior_ptid), 0, SIGKILL, 0, 0); close (ctl_fd); } inferior_ptid = null_ptid; @@ -1042,7 +1052,7 @@ procfs_create_inferior (char *exec_file, char *allargs, char **env, if (ND_NODE_CMP (nto_procfs_node, ND_LOCAL_NODE) != 0) { - inherit.nd = nto_node(); + inherit.nd = nto_node (); inherit.flags |= SPAWN_SETND; inherit.flags &= ~SPAWN_EXEC; } @@ -1055,7 +1065,8 @@ procfs_create_inferior (char *exec_file, char *allargs, char **env, sigprocmask (SIG_BLOCK, &set, NULL); if (pid == -1) - error ("Error spawning %s: %d (%s)", argv[0], errno, safe_strerror (errno)); + error ("Error spawning %s: %d (%s)", argv[0], errno, + safe_strerror (errno)); if (fds[0] != STDIN_FILENO) close (fds[0]); @@ -1083,6 +1094,8 @@ procfs_create_inferior (char *exec_file, char *allargs, char **env, || (symfile_objfile != NULL && symfile_objfile->obfd != NULL)) SOLIB_CREATE_INFERIOR_HOOK (pid); #endif + stop_soon = 0; + proceed (-1, TARGET_SIGNAL_DEFAULT, 0); } static void @@ -1324,7 +1337,6 @@ _initialize_procfs (void) /* Set up trace and fault sets, as gdb expects them. */ sigemptyset (&run.trace); - notice_signals (); /* Stuff some information. */ nto_cpuinfo_flags = SYSPAGE_ENTRY (cpuinfo)->flags; @@ -1332,6 +1344,8 @@ _initialize_procfs (void) add_info ("pidlist", procfs_pidlist, "pidlist"); add_info ("meminfo", procfs_meminfo, "memory information"); + + nto_is_nto_target = procfs_is_nto_target; } |