This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFC] Wording of "catch syscall <number>" warning
- From: Sérgio Durigan Júnior <sergiodj at linux dot vnet dot ibm dot com>
- To: Doug Evans <dje at google dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Thu, 24 Sep 2009 22:57:11 -0300
- Subject: Re: [RFC] Wording of "catch syscall <number>" warning
- References: <20090925003107.87780843AC@ruffy.mtv.corp.google.com>
Hi Doug,
On Thursday 24 September 2009, Doug Evans wrote:
> The current wording of this warning feels clumsy if syscall names
> are unavailable. It implies there are known syscalls, when there is not.
>
> I'll leave this for a few days and then check it in if there
> are no objections.
Thank you for this. I have one minor comment, though.
> + if (get_syscall_names () != NULL)
> + warning (_("The number '%d' does not represent a known syscall."),
> + syscall_number);
I agree with you, there should be warnings covering both cases. However, this
patch of yours made me think about performance, specially because you are
calling get_syscall_names every time you make this check, and I came up with
another patch. What do you think about it?
Regards,
--
Sérgio Durigan Júnior
Linux on Power Toolchain - Software Engineer
Linux Technology Center - LTC
IBM Brazil
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 811cdfb..1d35336 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -7486,9 +7486,16 @@ catch_syscall_split_args (char *arg)
/* We can issue just a warning, but still create the catchpoint.
This is because, even not knowing the syscall name that
this number represents, we can still try to catch the syscall
- number. */
- warning (_("The number '%d' does not represent a known syscall."),
- syscall_number);
+ number. If system call names are unavailable, use a different
+ wording though. */
+ {
+ if (syscall_names_available_p ())
+ warning (_("The number '%d' does not represent a known syscall."),
+ syscall_number);
+ else
+ warning (_("Syscall names are unavailable, assuming '%d' is valid."),
+ syscall_number);
+ }
}
else
{
diff --git a/gdb/xml-syscall.c b/gdb/xml-syscall.c
index 15bfe6f..86336b5 100644
--- a/gdb/xml-syscall.c
+++ b/gdb/xml-syscall.c
@@ -80,6 +80,11 @@ get_syscall_names (void)
return NULL;
}
+int
+syscall_names_available_p (void)
+{
+ return 0;
+}
#else /* ! HAVE_LIBEXPAT */
@@ -429,4 +434,10 @@ get_syscall_names (void)
return xml_list_of_syscalls (_sysinfo);
}
+int
+syscall_names_available_p (void)
+{
+ return _sysinfo == NULL ? 0 : 1;
+}
+
#endif /* ! HAVE_LIBEXPAT */
diff --git a/gdb/xml-syscall.h b/gdb/xml-syscall.h
index 00d3a54..326a856 100644
--- a/gdb/xml-syscall.h
+++ b/gdb/xml-syscall.h
@@ -47,4 +47,8 @@ void get_syscall_by_name (const char *syscall_name, struct
syscall *s);
const char **get_syscall_names (void);
+/* Function used to tell if syscalls names are available. Returns 1 if
+ they are, 0 otherwise. */
+int syscall_names_available_p (void);
+
#endif /* XML_SYSCALL_H */