This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] Wording of "catch syscall <number>" warning


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 */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]