X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Flinux-nat.c;h=e996dc264ae631dc53facb246335247e0a05ef44;hb=c6826062e510add65c65379ed490b4eedfa71620;hp=9c40f772e64305eec16c5417ffba9953790d85ae;hpb=c8e73a318e2b3249c7e197e78208f3420021f493;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 9c40f772e6..e996dc264a 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -1,6 +1,6 @@ /* GNU/Linux native-dependent code common to multiple platforms. - Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GDB. @@ -69,7 +69,7 @@ #define PTRACE_EVENT_VFORK 2 #define PTRACE_EVENT_CLONE 3 #define PTRACE_EVENT_EXEC 4 -#define PTRACE_EVENT_VFORKDONE 5 +#define PTRACE_EVENT_VFORK_DONE 5 #define PTRACE_EVENT_EXIT 6 #endif /* PTRACE_EVENT_FORK */ @@ -82,6 +82,13 @@ #endif static int debug_linux_nat; +static void +show_debug_linux_nat (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Debugging of GNU/Linux lwp module is %s.\n"), + value); +} static int linux_parent_pid; @@ -147,43 +154,82 @@ linux_tracefork_child (void) ptrace (PTRACE_TRACEME, 0, 0, 0); kill (getpid (), SIGSTOP); fork (); - exit (0); + _exit (0); +} + +/* Wrapper function for waitpid which handles EINTR. */ + +static int +my_waitpid (int pid, int *status, int flags) +{ + int ret; + do + { + ret = waitpid (pid, status, flags); + } + while (ret == -1 && errno == EINTR); + + return ret; } -/* Determine if PTRACE_O_TRACEFORK can be used to follow fork events. We +/* Determine if PTRACE_O_TRACEFORK can be used to follow fork events. + + First, we try to enable fork tracing on ORIGINAL_PID. If this fails, + we know that the feature is not available. This may change the tracing + options for ORIGINAL_PID, but we'll be setting them shortly anyway. + + However, if it succeeds, we don't know for sure that the feature is + available; old versions of PTRACE_SETOPTIONS ignored unknown options. We create a child process, attach to it, use PTRACE_SETOPTIONS to enable - fork tracing, and let it fork. If the process exits, we assume that - we can't use TRACEFORK; if we get the fork notification, and we can - extract the new child's PID, then we assume that we can. */ + fork tracing, and let it fork. If the process exits, we assume that we + can't use TRACEFORK; if we get the fork notification, and we can extract + the new child's PID, then we assume that we can. */ static void -linux_test_for_tracefork (void) +linux_test_for_tracefork (int original_pid) { int child_pid, ret, status; long second_pid; + linux_supports_tracefork_flag = 0; + linux_supports_tracevforkdone_flag = 0; + + ret = ptrace (PTRACE_SETOPTIONS, original_pid, 0, PTRACE_O_TRACEFORK); + if (ret != 0) + return; + child_pid = fork (); if (child_pid == -1) - perror_with_name ("linux_test_for_tracefork: fork"); + perror_with_name (("fork")); if (child_pid == 0) linux_tracefork_child (); - ret = waitpid (child_pid, &status, 0); + ret = my_waitpid (child_pid, &status, 0); if (ret == -1) - perror_with_name ("linux_test_for_tracefork: waitpid"); + perror_with_name (("waitpid")); else if (ret != child_pid) - error ("linux_test_for_tracefork: waitpid: unexpected result %d.", ret); + error (_("linux_test_for_tracefork: waitpid: unexpected result %d."), ret); if (! WIFSTOPPED (status)) - error ("linux_test_for_tracefork: waitpid: unexpected status %d.", status); - - linux_supports_tracefork_flag = 0; + error (_("linux_test_for_tracefork: waitpid: unexpected status %d."), status); ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK); if (ret != 0) { - ptrace (PTRACE_KILL, child_pid, 0, 0); - waitpid (child_pid, &status, 0); + ret = ptrace (PTRACE_KILL, child_pid, 0, 0); + if (ret != 0) + { + warning (_("linux_test_for_tracefork: failed to kill child")); + return; + } + + ret = my_waitpid (child_pid, &status, 0); + if (ret != child_pid) + warning (_("linux_test_for_tracefork: failed to wait for killed child")); + else if (!WIFSIGNALED (status)) + warning (_("linux_test_for_tracefork: unexpected wait status 0x%x from " + "killed child"), status); + return; } @@ -192,8 +238,12 @@ linux_test_for_tracefork (void) PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORKDONE); linux_supports_tracevforkdone_flag = (ret == 0); - ptrace (PTRACE_CONT, child_pid, 0, 0); - ret = waitpid (child_pid, &status, 0); + ret = ptrace (PTRACE_CONT, child_pid, 0, 0); + if (ret != 0) + warning (_("linux_test_for_tracefork: failed to resume child")); + + ret = my_waitpid (child_pid, &status, 0); + if (ret == child_pid && WIFSTOPPED (status) && status >> 16 == PTRACE_EVENT_FORK) { @@ -204,34 +254,38 @@ linux_test_for_tracefork (void) int second_status; linux_supports_tracefork_flag = 1; - waitpid (second_pid, &second_status, 0); - ptrace (PTRACE_DETACH, second_pid, 0, 0); + my_waitpid (second_pid, &second_status, 0); + ret = ptrace (PTRACE_KILL, second_pid, 0, 0); + if (ret != 0) + warning (_("linux_test_for_tracefork: failed to kill second child")); } } + else + warning (_("linux_test_for_tracefork: unexpected result from waitpid " + "(%d, status 0x%x)"), ret, status); - if (WIFSTOPPED (status)) - { - ptrace (PTRACE_DETACH, child_pid, 0, 0); - waitpid (child_pid, &status, 0); - } + ret = ptrace (PTRACE_KILL, child_pid, 0, 0); + if (ret != 0) + warning (_("linux_test_for_tracefork: failed to kill child")); + my_waitpid (child_pid, &status, 0); } /* Return non-zero iff we have tracefork functionality available. This function also sets linux_supports_tracefork_flag. */ static int -linux_supports_tracefork (void) +linux_supports_tracefork (int pid) { if (linux_supports_tracefork_flag == -1) - linux_test_for_tracefork (); + linux_test_for_tracefork (pid); return linux_supports_tracefork_flag; } static int -linux_supports_tracevforkdone (void) +linux_supports_tracevforkdone (int pid) { if (linux_supports_tracefork_flag == -1) - linux_test_for_tracefork (); + linux_test_for_tracefork (pid); return linux_supports_tracevforkdone_flag; } @@ -239,15 +293,18 @@ linux_supports_tracevforkdone (void) void linux_enable_event_reporting (ptid_t ptid) { - int pid = ptid_get_pid (ptid); + int pid = ptid_get_lwp (ptid); int options; - if (! linux_supports_tracefork ()) + if (pid == 0) + pid = ptid_get_pid (ptid); + + if (! linux_supports_tracefork (pid)) return; options = PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACEEXEC | PTRACE_O_TRACECLONE; - if (linux_supports_tracevforkdone ()) + if (linux_supports_tracevforkdone (pid)) options |= PTRACE_O_TRACEVFORKDONE; /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to support @@ -286,7 +343,9 @@ child_follow_fork (int follow_child) get_last_target_status (&last_ptid, &last_status); has_vforked = (last_status.kind == TARGET_WAITKIND_VFORKED); - parent_pid = ptid_get_pid (last_ptid); + parent_pid = ptid_get_lwp (last_ptid); + if (parent_pid == 0) + parent_pid = ptid_get_pid (last_ptid); child_pid = last_status.value.related_pid; if (! follow_child) @@ -300,23 +359,28 @@ child_follow_fork (int follow_child) also, but they'll be reinserted below. */ detach_breakpoints (child_pid); - fprintf_filtered (gdb_stdout, - "Detaching after fork from child process %d.\n", - child_pid); + if (debug_linux_nat) + { + target_terminal_ours (); + fprintf_unfiltered (gdb_stdlog, + "Detaching after fork from child process %d.\n", + child_pid); + } ptrace (PTRACE_DETACH, child_pid, 0, 0); if (has_vforked) { - if (linux_supports_tracevforkdone ()) + gdb_assert (linux_supports_tracefork_flag >= 0); + if (linux_supports_tracevforkdone (0)) { int status; ptrace (PTRACE_CONT, parent_pid, 0, 0); - waitpid (parent_pid, &status, __WALL); - if ((status >> 16) != PTRACE_EVENT_VFORKDONE) - warning ("Unexpected waitpid result %06x when waiting for " - "vfork-done", status); + my_waitpid (parent_pid, &status, __WALL); + if ((status >> 16) != PTRACE_EVENT_VFORK_DONE) + warning (_("Unexpected waitpid result %06x when waiting for " + "vfork-done"), status); } else { @@ -370,9 +434,13 @@ child_follow_fork (int follow_child) /* Before detaching from the parent, remove all breakpoints from it. */ remove_breakpoints (); - fprintf_filtered (gdb_stdout, - "Attaching after fork to child process %d.\n", - child_pid); + if (debug_linux_nat) + { + target_terminal_ours (); + fprintf_unfiltered (gdb_stdlog, + "Attaching after fork to child process %d.\n", + child_pid); + } /* If we're vforking, we may want to hold on to the parent until the child exits or execs. At exec time we can remove the old @@ -426,18 +494,16 @@ linux_handle_extended_wait (int pid, int status, { /* The new child has a pending SIGSTOP. We can't affect it until it hits the SIGSTOP, but we're already attached. */ - do { - ret = waitpid (new_pid, &status, - (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0); - } while (ret == -1 && errno == EINTR); + ret = my_waitpid (new_pid, &status, + (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0); if (ret == -1) - perror_with_name ("waiting for new child"); + perror_with_name (_("waiting for new child")); else if (ret != new_pid) internal_error (__FILE__, __LINE__, - "wait returned unexpected PID %d", ret); + _("wait returned unexpected PID %d"), ret); else if (!WIFSTOPPED (status) || WSTOPSIG (status) != SIGSTOP) internal_error (__FILE__, __LINE__, - "wait returned unexpected status 0x%x", status); + _("wait returned unexpected status 0x%x"), status); } if (event == PTRACE_EVENT_FORK) @@ -469,35 +535,29 @@ linux_handle_extended_wait (int pid, int status, } internal_error (__FILE__, __LINE__, - "unknown ptrace event %d", event); + _("unknown ptrace event %d"), event); } -int +void child_insert_fork_catchpoint (int pid) { - if (! linux_supports_tracefork ()) - error ("Your system does not support fork catchpoints."); - - return 0; + if (! linux_supports_tracefork (pid)) + error (_("Your system does not support fork catchpoints.")); } -int +void child_insert_vfork_catchpoint (int pid) { - if (!linux_supports_tracefork ()) - error ("Your system does not support vfork catchpoints."); - - return 0; + if (!linux_supports_tracefork (pid)) + error (_("Your system does not support vfork catchpoints.")); } -int +void child_insert_exec_catchpoint (int pid) { - if (!linux_supports_tracefork ()) - error ("Your system does not support exec catchpoints."); - - return 0; + if (!linux_supports_tracefork (pid)) + error (_("Your system does not support exec catchpoints.")); } void @@ -780,7 +840,7 @@ lin_lwp_attach_lwp (ptid_t ptid, int verbose) } if (verbose) - printf_filtered ("[New %s]\n", target_pid_to_str (ptid)); + printf_filtered (_("[New %s]\n"), target_pid_to_str (ptid)); found_lp = lp = find_lwp_pid (ptid); if (lp == NULL) @@ -798,7 +858,7 @@ lin_lwp_attach_lwp (ptid_t ptid, int verbose) int status; if (ptrace (PTRACE_ATTACH, GET_LWP (ptid), 0, 0) < 0) - error ("Can't attach %s: %s", target_pid_to_str (ptid), + error (_("Can't attach %s: %s"), target_pid_to_str (ptid), safe_strerror (errno)); if (debug_linux_nat) @@ -806,11 +866,11 @@ lin_lwp_attach_lwp (ptid_t ptid, int verbose) "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n", target_pid_to_str (ptid)); - pid = waitpid (GET_LWP (ptid), &status, 0); + pid = my_waitpid (GET_LWP (ptid), &status, 0); if (pid == -1 && errno == ECHILD) { /* Try again with __WCLONE to check cloned processes. */ - pid = waitpid (GET_LWP (ptid), &status, __WCLONE); + pid = my_waitpid (GET_LWP (ptid), &status, __WCLONE); lp->cloned = 1; } @@ -858,13 +918,13 @@ linux_nat_attach (char *args, int from_tty) /* Make sure the initial process is stopped. The user-level threads layer might want to poke around in the inferior, and that won't work if things haven't stabilized yet. */ - pid = waitpid (GET_PID (inferior_ptid), &status, 0); + pid = my_waitpid (GET_PID (inferior_ptid), &status, 0); if (pid == -1 && errno == ECHILD) { - warning ("%s is a cloned process", target_pid_to_str (inferior_ptid)); + warning (_("%s is a cloned process"), target_pid_to_str (inferior_ptid)); /* Try again with __WCLONE to check cloned processes. */ - pid = waitpid (GET_PID (inferior_ptid), &status, __WCLONE); + pid = my_waitpid (GET_PID (inferior_ptid), &status, __WCLONE); lp->cloned = 1; } @@ -898,7 +958,7 @@ detach_callback (struct lwp_info *lp, void *data) errno = 0; if (ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, WSTOPSIG (lp->status)) < 0) - error ("Can't continue %s: %s", target_pid_to_str (lp->ptid), + error (_("Can't continue %s: %s"), target_pid_to_str (lp->ptid), safe_strerror (errno)); if (debug_linux_nat) @@ -927,7 +987,7 @@ detach_callback (struct lwp_info *lp, void *data) errno = 0; if (ptrace (PTRACE_DETACH, GET_LWP (lp->ptid), 0, WSTOPSIG (lp->status)) < 0) - error ("Can't detach %s: %s", target_pid_to_str (lp->ptid), + error (_("Can't detach %s: %s"), target_pid_to_str (lp->ptid), safe_strerror (errno)); if (debug_linux_nat) @@ -1129,10 +1189,10 @@ wait_lwp (struct lwp_info *lp) gdb_assert (!lp->stopped); gdb_assert (lp->status == 0); - pid = waitpid (GET_LWP (lp->ptid), &status, 0); + pid = my_waitpid (GET_LWP (lp->ptid), &status, 0); if (pid == -1 && errno == ECHILD) { - pid = waitpid (GET_LWP (lp->ptid), &status, __WCLONE); + pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE); if (pid == -1 && errno == ECHILD) { /* The thread has previously exited. We need to delete it @@ -1176,7 +1236,7 @@ wait_lwp (struct lwp_info *lp) /* Core GDB cannot deal with us deleting the current thread. */ if (!ptid_equal (lp->ptid, inferior_ptid)) delete_thread (lp->ptid); - printf_unfiltered ("[%s exited]\n", + printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (lp->ptid)); } @@ -1428,7 +1488,7 @@ flush_callback (struct lwp_info *lp, void *data) if (lp->status) { if (debug_linux_nat) - printf_unfiltered ("FC: LP has pending status %06x\n", lp->status); + printf_unfiltered (_("FC: LP has pending status %06x\n"), lp->status); if (WIFSTOPPED (lp->status) && sigismember (flush_mask, WSTOPSIG (lp->status))) lp->status = 0; } @@ -1644,10 +1704,10 @@ child_wait (ptid_t ptid, struct target_waitstatus *ourstatus) attached process. */ set_sigio_trap (); - pid = waitpid (GET_PID (ptid), &status, 0); + pid = my_waitpid (GET_PID (ptid), &status, 0); if (pid == -1 && errno == ECHILD) /* Try again with __WCLONE to check cloned processes. */ - pid = waitpid (GET_PID (ptid), &status, __WCLONE); + pid = my_waitpid (GET_PID (ptid), &status, __WCLONE); if (debug_linux_nat) { @@ -1711,7 +1771,7 @@ child_wait (ptid_t ptid, struct target_waitstatus *ourstatus) if (pid == -1) { - warning ("Child process unexpectedly missing: %s", + warning (_("Child process unexpectedly missing: %s"), safe_strerror (errno)); /* Claim it exited with unknown signal. */ @@ -1858,7 +1918,7 @@ retry: { pid_t lwpid; - lwpid = waitpid (pid, &status, options); + lwpid = my_waitpid (pid, &status, options); if (lwpid > 0) { gdb_assert (pid == -1 || lwpid == pid); @@ -1925,7 +1985,7 @@ retry: } add_thread (lp->ptid); - printf_unfiltered ("[New %s]\n", + printf_unfiltered (_("[New %s]\n"), target_pid_to_str (lp->ptid)); } } @@ -1953,7 +2013,7 @@ retry: thread. */ if (!ptid_equal (lp->ptid, inferior_ptid)) delete_thread (lp->ptid); - printf_unfiltered ("[%s exited]\n", + printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (lp->ptid)); } @@ -2006,7 +2066,7 @@ retry: thread. */ if (!ptid_equal (lp->ptid, inferior_ptid)) delete_thread (lp->ptid); - printf_unfiltered ("[%s exited]\n", + printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (lp->ptid)); } if (debug_linux_nat) @@ -2202,7 +2262,7 @@ kill_wait_callback (struct lwp_info *lp, void *data) { do { - pid = waitpid (GET_LWP (lp->ptid), NULL, __WCLONE); + pid = my_waitpid (GET_LWP (lp->ptid), NULL, __WCLONE); if (pid != (pid_t) -1 && debug_linux_nat) { fprintf_unfiltered (gdb_stdlog, @@ -2217,7 +2277,7 @@ kill_wait_callback (struct lwp_info *lp, void *data) do { - pid = waitpid (GET_LWP (lp->ptid), NULL, 0); + pid = my_waitpid (GET_LWP (lp->ptid), NULL, 0); if (pid != (pid_t) -1 && debug_linux_nat) { fprintf_unfiltered (gdb_stdlog, @@ -2266,8 +2326,9 @@ linux_nat_mourn_inferior (void) } static int -linux_nat_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write, - struct mem_attrib *attrib, struct target_ops *target) +linux_nat_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, + int write, struct mem_attrib *attrib, + struct target_ops *target) { struct cleanup *old_chain = save_inferior_ptid (); int xfer; @@ -2391,7 +2452,8 @@ read_mapping (FILE *mapfile, int ret = fscanf (mapfile, "%llx-%llx %s %llx %s %llx", addr, endaddr, permissions, offset, device, inode); - if (ret > 0 && ret != EOF && *inode != 0) + filename[0] = '\0'; + if (ret > 0 && ret != EOF) { /* Eat everything up to EOL for the filename. This will prevent weird filenames (such as one with embedded whitespace) from @@ -2402,11 +2464,7 @@ read_mapping (FILE *mapfile, only. */ ret += fscanf (mapfile, "%[^\n]\n", filename); } - else - { - filename[0] = '\0'; /* no filename */ - fscanf (mapfile, "\n"); - } + return (ret != 0 && ret != EOF); } @@ -2429,7 +2487,7 @@ linux_nat_find_memory_regions (int (*func) (CORE_ADDR, /* Compose the filename for the /proc memory map, and open it. */ sprintf (mapsfilename, "/proc/%lld/maps", pid); if ((mapsfile = fopen (mapsfilename, "r")) == NULL) - error ("Could not open %s\n", mapsfilename); + error (_("Could not open %s."), mapsfilename); if (info_verbose) fprintf_filtered (gdb_stdout, @@ -2564,7 +2622,7 @@ linux_nat_make_corefile_notes (bfd *obfd, int *note_size) char psargs[80] = { '\0' }; char *note_data = NULL; ptid_t current_ptid = inferior_ptid; - char *auxv; + gdb_byte *auxv; int auxv_len; if (get_exec_file (0)) @@ -2681,13 +2739,13 @@ linux_nat_info_proc_cmd (char *args, int from_tty) argv++; } if (pid == 0) - error ("No current process: you must name one."); + error (_("No current process: you must name one.")); sprintf (fname1, "/proc/%lld", pid); if (stat (fname1, &dummy) != 0) - error ("No /proc directory: '%s'", fname1); + error (_("No /proc directory: '%s'"), fname1); - printf_filtered ("process %lld\n", pid); + printf_filtered (_("process %lld\n"), pid); if (cmdline_f || all) { sprintf (fname1, "/proc/%lld/cmdline", pid); @@ -2698,7 +2756,7 @@ linux_nat_info_proc_cmd (char *args, int from_tty) fclose (procfile); } else - warning ("unable to open /proc file '%s'", fname1); + warning (_("unable to open /proc file '%s'"), fname1); } if (cwd_f || all) { @@ -2707,7 +2765,7 @@ linux_nat_info_proc_cmd (char *args, int from_tty) if (readlink (fname1, fname2, sizeof (fname2)) > 0) printf_filtered ("cwd = '%s'\n", fname2); else - warning ("unable to read link '%s'", fname1); + warning (_("unable to read link '%s'"), fname1); } if (exe_f || all) { @@ -2716,7 +2774,7 @@ linux_nat_info_proc_cmd (char *args, int from_tty) if (readlink (fname1, fname2, sizeof (fname2)) > 0) printf_filtered ("exe = '%s'\n", fname2); else - warning ("unable to read link '%s'", fname1); + warning (_("unable to read link '%s'"), fname1); } if (mappings_f || all) { @@ -2726,7 +2784,7 @@ linux_nat_info_proc_cmd (char *args, int from_tty) long long addr, endaddr, size, offset, inode; char permissions[8], device[8], filename[MAXPATHLEN]; - printf_filtered ("Mapped address spaces:\n\n"); + printf_filtered (_("Mapped address spaces:\n\n")); if (TARGET_ADDR_BIT == 32) { printf_filtered ("\t%10s %10s %10s %10s %7s\n", @@ -2776,7 +2834,7 @@ linux_nat_info_proc_cmd (char *args, int from_tty) fclose (procfile); } else - warning ("unable to open /proc file '%s'", fname1); + warning (_("unable to open /proc file '%s'"), fname1); } if (status_f || all) { @@ -2788,7 +2846,7 @@ linux_nat_info_proc_cmd (char *args, int from_tty) fclose (procfile); } else - warning ("unable to open /proc file '%s'", fname1); + warning (_("unable to open /proc file '%s'"), fname1); } if (stat_f || all) { @@ -2799,34 +2857,34 @@ linux_nat_info_proc_cmd (char *args, int from_tty) char ctmp; if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("Process: %d\n", itmp); + printf_filtered (_("Process: %d\n"), itmp); if (fscanf (procfile, "%s ", &buffer[0]) > 0) - printf_filtered ("Exec file: %s\n", buffer); + printf_filtered (_("Exec file: %s\n"), buffer); if (fscanf (procfile, "%c ", &ctmp) > 0) - printf_filtered ("State: %c\n", ctmp); + printf_filtered (_("State: %c\n"), ctmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("Parent process: %d\n", itmp); + printf_filtered (_("Parent process: %d\n"), itmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("Process group: %d\n", itmp); + printf_filtered (_("Process group: %d\n"), itmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("Session id: %d\n", itmp); + printf_filtered (_("Session id: %d\n"), itmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("TTY: %d\n", itmp); + printf_filtered (_("TTY: %d\n"), itmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("TTY owner process group: %d\n", itmp); + printf_filtered (_("TTY owner process group: %d\n"), itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("Flags: 0x%x\n", itmp); + printf_filtered (_("Flags: 0x%x\n"), itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("Minor faults (no memory page): %u\n", + printf_filtered (_("Minor faults (no memory page): %u\n"), (unsigned int) itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("Minor faults, children: %u\n", + printf_filtered (_("Minor faults, children: %u\n"), (unsigned int) itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("Major faults (memory page faults): %u\n", + printf_filtered (_("Major faults (memory page faults): %u\n"), (unsigned int) itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("Major faults, children: %u\n", + printf_filtered (_("Major faults, children: %u\n"), (unsigned int) itmp); if (fscanf (procfile, "%d ", &itmp) > 0) printf_filtered ("utime: %d\n", itmp); @@ -2837,53 +2895,53 @@ linux_nat_info_proc_cmd (char *args, int from_tty) if (fscanf (procfile, "%d ", &itmp) > 0) printf_filtered ("stime, children: %d\n", itmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("jiffies remaining in current time slice: %d\n", + printf_filtered (_("jiffies remaining in current time slice: %d\n"), itmp); if (fscanf (procfile, "%d ", &itmp) > 0) printf_filtered ("'nice' value: %d\n", itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("jiffies until next timeout: %u\n", + printf_filtered (_("jiffies until next timeout: %u\n"), (unsigned int) itmp); if (fscanf (procfile, "%u ", &itmp) > 0) printf_filtered ("jiffies until next SIGALRM: %u\n", (unsigned int) itmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("start time (jiffies since system boot): %d\n", + printf_filtered (_("start time (jiffies since system boot): %d\n"), itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("Virtual memory size: %u\n", + printf_filtered (_("Virtual memory size: %u\n"), (unsigned int) itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("Resident set size: %u\n", (unsigned int) itmp); + printf_filtered (_("Resident set size: %u\n"), (unsigned int) itmp); if (fscanf (procfile, "%u ", &itmp) > 0) printf_filtered ("rlim: %u\n", (unsigned int) itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("Start of text: 0x%x\n", itmp); + printf_filtered (_("Start of text: 0x%x\n"), itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("End of text: 0x%x\n", itmp); + printf_filtered (_("End of text: 0x%x\n"), itmp); if (fscanf (procfile, "%u ", &itmp) > 0) - printf_filtered ("Start of stack: 0x%x\n", itmp); + printf_filtered (_("Start of stack: 0x%x\n"), itmp); #if 0 /* Don't know how architecture-dependent the rest is... Anyway the signal bitmap info is available from "status". */ if (fscanf (procfile, "%u ", &itmp) > 0) /* FIXME arch? */ - printf_filtered ("Kernel stack pointer: 0x%x\n", itmp); + printf_filtered (_("Kernel stack pointer: 0x%x\n"), itmp); if (fscanf (procfile, "%u ", &itmp) > 0) /* FIXME arch? */ - printf_filtered ("Kernel instr pointer: 0x%x\n", itmp); + printf_filtered (_("Kernel instr pointer: 0x%x\n"), itmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("Pending signals bitmap: 0x%x\n", itmp); + printf_filtered (_("Pending signals bitmap: 0x%x\n"), itmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("Blocked signals bitmap: 0x%x\n", itmp); + printf_filtered (_("Blocked signals bitmap: 0x%x\n"), itmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("Ignored signals bitmap: 0x%x\n", itmp); + printf_filtered (_("Ignored signals bitmap: 0x%x\n"), itmp); if (fscanf (procfile, "%d ", &itmp) > 0) - printf_filtered ("Catched signals bitmap: 0x%x\n", itmp); + printf_filtered (_("Catched signals bitmap: 0x%x\n"), itmp); if (fscanf (procfile, "%u ", &itmp) > 0) /* FIXME arch? */ - printf_filtered ("wchan (system call): 0x%x\n", itmp); + printf_filtered (_("wchan (system call): 0x%x\n"), itmp); #endif fclose (procfile); } else - warning ("unable to open /proc file '%s'", fname1); + warning (_("unable to open /proc file '%s'"), fname1); } } @@ -2935,7 +2993,7 @@ add_line_to_sigset (const char *line, sigset_t *sigs) int signum; if (line[len] != '\n') - error ("Could not parse signal set: %s", line); + error (_("Could not parse signal set: %s"), line); p = line; signum = len * 4; @@ -2948,7 +3006,7 @@ add_line_to_sigset (const char *line, sigset_t *sigs) else if (*p >= 'a' && *p <= 'f') digit = *p - 'a' + 10; else - error ("Could not parse signal set: %s", line); + error (_("Could not parse signal set: %s"), line); signum -= 4; @@ -2981,7 +3039,7 @@ linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigse sprintf (fname, "/proc/%d/status", pid); procfile = fopen (fname, "r"); if (procfile == NULL) - error ("Could not open %s", fname); + error (_("Could not open %s"), fname); while (fgets (buffer, MAXPATHLEN, procfile) != NULL) { @@ -3015,14 +3073,14 @@ _initialize_linux_nat (void) deprecated_child_ops.to_find_memory_regions = linux_nat_find_memory_regions; deprecated_child_ops.to_make_corefile_notes = linux_nat_make_corefile_notes; - add_info ("proc", linux_nat_info_proc_cmd, - "Show /proc process information about any running process.\n\ + add_info ("proc", linux_nat_info_proc_cmd, _("\ +Show /proc process information about any running process.\n\ Specify any process id, or use the program being debugged by default.\n\ Specify any of the following keywords for detailed info:\n\ mappings -- list of mapped memory regions.\n\ stat -- list a bunch of random process info.\n\ status -- list a different bunch of random process info.\n\ - all -- list all available /proc info."); + all -- list all available /proc info.")); init_linux_nat_ops (); add_target (&linux_nat_ops); @@ -3033,7 +3091,7 @@ Specify any of the following keywords for detailed info:\n\ action.sa_handler = sigchld_handler; sigemptyset (&action.sa_mask); - action.sa_flags = 0; + action.sa_flags = SA_RESTART; sigaction (SIGCHLD, &action, NULL); /* Make sure we don't block SIGCHLD during a sigsuspend. */ @@ -3042,11 +3100,13 @@ Specify any of the following keywords for detailed info:\n\ sigemptyset (&blocked_mask); - deprecated_add_show_from_set - (add_set_cmd ("lin-lwp", no_class, var_zinteger, - (char *) &debug_linux_nat, - "Set debugging of GNU/Linux lwp module.\n\ -Enables printf debugging output.\n", &setdebuglist), &showdebuglist); + add_setshow_zinteger_cmd ("lin-lwp", no_class, &debug_linux_nat, _("\ +Set debugging of GNU/Linux lwp module."), _("\ +Show debugging of GNU/Linux lwp module."), _("\ +Enables printf debugging output."), + NULL, + show_debug_linux_nat, + &setdebuglist, &showdebuglist); } @@ -3104,7 +3164,7 @@ lin_thread_get_thread_signals (sigset_t *set) action.sa_handler = sigchld_handler; sigemptyset (&action.sa_mask); - action.sa_flags = 0; + action.sa_flags = SA_RESTART; sigaction (cancel, &action, NULL); /* We block the "cancel" signal throughout this code ... */