From: Amin Khorsandi <amin.khorsa...@infinera.com>

---
 strace.1  |  5 +++++
 syscall.c | 26 +++++++++++++++++++++++++-
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/strace.1 b/strace.1
index b7dddc0..c2088fa 100644
--- a/strace.1
+++ b/strace.1
@@ -403,6 +403,11 @@ Furthermore, using the abbreviation will ensure that you 
don't
 accidentally forget to include a call like
 .B lstat
 in the list.  Betchya woulda forgot that one.
+To see a list of all system calls in a class you can use
+.BR "-e\ trace?" = classname .
+For example you can see what are the system calls in the network
+class running strace using the option
+.BR "-e\ trace?" = network .
 .TP
 .BR "\-e\ trace" = process
 Trace all system calls which involve process management.  This
diff --git a/syscall.c b/syscall.c
index c61f827..fb20f65 100644
--- a/syscall.c
+++ b/syscall.c
@@ -503,6 +503,25 @@ lookup_class(const char *s)
        return -1;
 }
 
+static void
+print_trace_class(const char* trace_class)
+{
+       unsigned int i;
+       unsigned pers = 0; /* only print system calls in personality 0 */
+       int class = lookup_class(trace_class);
+
+       if (class != -1) {
+               printf("List of system calls in %s class\n", trace_class);
+               printf("%s\n", "-------------------------------------");
+               for (i = 0; i < nsyscall_vec[pers]; i++)
+                       if (sysent_vec[pers][i].sys_flags & class) {
+                       printf("\t%s \n", sysent_vec[pers][i].sys_name);
+               }
+       } else {
+               error_msg_and_die("invalid class name '%s'", trace_class);
+       }
+}
+
 void
 qualify(const char *s)
 {
@@ -518,7 +537,12 @@ qualify(const char *s)
        opt = &qual_options[0];
        for (i = 0; (p = qual_options[i].option_name); i++) {
                unsigned int len = strlen(p);
-               if (strncmp(s, p, len) == 0 && s[len] == '=') {
+               if (strncmp(s, p, len) == 0 && s[len] == '?' && s[len + 1] == 
'=') {
+                       s += len + 2;
+                       print_trace_class(s);
+                       exit(0);
+               }
+               else if (strncmp(s, p, len) == 0 && s[len] == '=') {
                        opt = &qual_options[i];
                        s += len + 1;
                        break;
-- 
2.4.10


------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to