aboutsummaryrefslogtreecommitdiff
path: root/gdb/procfs.c
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2023-09-24 12:37:40 +0100
committerAndrew Burgess <aburgess@redhat.com>2023-10-05 12:21:46 +0100
commit3d38b301bb50f1822e9d07d2aacef1ebe1a97073 (patch)
tree95746bf7b46457396896ada812624039c830c04e /gdb/procfs.c
parentb09dba5a5fcf061bf93c1e5a5c9fd56928c6340c (diff)
downloadgdb-3d38b301bb50f1822e9d07d2aacef1ebe1a97073.zip
gdb-3d38b301bb50f1822e9d07d2aacef1ebe1a97073.tar.gz
gdb-3d38b301bb50f1822e9d07d2aacef1ebe1a97073.tar.bz2
gdb: remove print_sys_errmsg
This started with me running into this comment in symfile.c: /* FIXME, should use print_sys_errmsg but it's not filtered. */ gdb_printf (_("`%ps' has disappeared; keeping its symbols.\n"), styled_string (file_name_style.style (), filename)); In this particular case I think I disagree with the comment; I think the output should be a warning rather than just a message printed to gdb_stdout, I think when the executable, or some other objfile that is currently being debugged, disappears from disk, this is likely an unexpected situation, and worth warning the user about. So, in theory, I could just call print_sys_errmsg and remove the comment, but that would mean loosing the filename styling in the output... so in the end I remove the comment and updated the code to call warning. But that got me looking at print_sys_errmsg and how it's used. Currently the function takes a string and an errno, and prints, to stderr, the string followed by the result of calling strerror on the errno. In some places the string passed to print_sys_errmsg is just a filename, and this is used when something goes wrong. In these cases, I think calling warning rather than gdb_printf to gdb_stderr, would be better, and in fact, in a couple of places we manually print a "warning" prefix, and then call print_sys_errmsg. And so, for these users I have added a new function warning_filename_and_errno, which takes a filename, which is printed with styling, and an errno, which is passed through strerror and the resulting string printed. This new function calls warning to print its output. I then updated some of the print_sys_errmsg users to use this new function. Some other users of print_sys_errmsg are also emitting what is clearly a warning, however, the string being passed in is more than just a filename, so the new warning_filename_and_errno function can't be used, it would style the whole string. For these users I have switched to calling warning directly, this allows me to style the warning message correctly. Finally, in inflow.c there is one last call to print_sys_errmsg, in this case I just inlined the definition of print_sys_errmsg. This is a really weird case, as after printing this message GDB just does a hard exit. This is pretty old code, dating back to the initial GDB import, I guess it should be updated to call error() maybe, but I'm reluctant to make this change as part of this commit, just in case there's some reason why we can't throw an error at this point. With that done there are now no users of print_sys_errmsg, and so the old function can be removed. While I was doing all of the above I added some additional filename styling in soure.c, this is in an else block where the if contained the print_sys_errmsg call, so these felt related. And finally, while I was updating the uses of print_sys_errmsg in procfs.c, I noticed that we used a static errmsg buffer to format some error strings. As the above changes got rid of one of the users of errmsg I also removed the other two users, and the static buffer. There were a couple of tests that depended on the existing output message format that needed updating. In one case we gained an extra 'warning: ' prefix, and in the other 'Warning: ' becomes 'warning: ', I think in both cases the new output is an improvement. Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/procfs.c')
-rw-r--r--gdb/procfs.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/gdb/procfs.c b/gdb/procfs.c
index 706ccf0..48e9f3d 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -46,6 +46,7 @@
#include "gdbsupport/scoped_fd.h"
#include "gdbsupport/pathstuff.h"
#include "gdbsupport/buildargv.h"
+#include "cli/cli-style.h"
/* This module provides the interface between GDB and the
/proc file system, which is used on many versions of Unix
@@ -558,7 +559,7 @@ enum { NOKILL, KILL };
static void
dead_procinfo (procinfo *pi, const char *msg, int kill_p)
{
- print_sys_errmsg (pi->pathname, errno);
+ warning_filename_and_errno (pi->pathname, errno);
if (kill_p == KILL)
kill (pi->pid, SIGKILL);
@@ -594,18 +595,20 @@ static void
proc_warn (procinfo *pi, const char *func, int line)
{
int saved_errno = errno;
- std::string errmsg
- = string_printf ("procfs: %s line %d, %s", func, line, pi->pathname);
- print_sys_errmsg (errmsg.c_str (), saved_errno);
+ warning ("procfs: %s line %d, %ps: %s",
+ func, line, styled_string (file_name_style.style (),
+ pi->pathname),
+ safe_strerror (saved_errno));
}
static void
proc_error (procinfo *pi, const char *func, int line)
{
int saved_errno = errno;
- std::string errmsg
- = string_printf ("procfs: %s line %d, %s", func, line, pi->pathname);
- perror_with_name (errmsg.c_str (), saved_errno);
+ error ("procfs: %s line %d, %ps: %s",
+ func, line, styled_string (file_name_style.style (),
+ pi->pathname),
+ safe_strerror (saved_errno));
}
/* Updates the status struct in the procinfo. There is a 'valid'