Re: [PATCH] Refactor common sa_handler printing code

2016-08-31 Thread Dmitry V. Levin
On Wed, Aug 31, 2016 at 07:04:21PM +0300, Eugene Syromyatnikov wrote:
> * xlat/sa_handler_values.in: New file.
> * signal.c: Include "xlat/sa_handler_values.h".
> (get_sa_handler_str, print_sa_handler): New functions.
> (SYS_FUNC(sigsetmask), SYS_FUNC(signal), decode_new_sigaction): Use them.
> ---
>  signal.c  |   64 
> -
>  xlat/sa_handler_values.in |4 +++
>  2 files changed, 27 insertions(+), 41 deletions(-)
>  create mode 100644 xlat/sa_handler_values.in

Applied, thanks.


-- 
ldv


pgpjm8dXlS_Mr.pgp
Description: PGP signature
--
___
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel


[PATCH] Refactor common sa_handler printing code

2016-08-31 Thread Eugene Syromyatnikov
* xlat/sa_handler_values.in: New file.
* signal.c: Include "xlat/sa_handler_values.h".
(get_sa_handler_str, print_sa_handler): New functions.
(SYS_FUNC(sigsetmask), SYS_FUNC(signal), decode_new_sigaction): Use them.
---
 signal.c  |   64 -
 xlat/sa_handler_values.in |4 +++
 2 files changed, 27 insertions(+), 41 deletions(-)
 create mode 100644 xlat/sa_handler_values.in

diff --git a/signal.c b/signal.c
index 5b530cf..b796b10 100644
--- a/signal.c
+++ b/signal.c
@@ -70,6 +70,7 @@
 # endif
 #endif
 
+#include "xlat/sa_handler_values.h"
 #include "xlat/sigact_flags.h"
 #include "xlat/sigprocmaskcmds.h"
 
@@ -113,6 +114,23 @@
  * Use (NSIG / 8) as a size instead.
  */
 
+static const char *
+get_sa_handler_str(unsigned long handler)
+{
+   return xlookup(sa_handler_values, handler);
+}
+
+static void
+print_sa_handler(unsigned long handler)
+{
+   const char *sa_handler_str = get_sa_handler_str(handler);
+
+   if (sa_handler_str)
+   tprints(sa_handler_str);
+   else
+   printaddr(handler);
+}
+
 const char *
 signame(const int sig)
 {
@@ -320,14 +338,7 @@ decode_old_sigaction(struct tcb *tcp, long addr)
 * compiler from generating code to manipulate
 * __sa_handler we cast the function pointers to long. */
tprints("{");
-   if ((long)sa.__sa_handler == (long)SIG_ERR)
-   tprints("SIG_ERR");
-   else if ((long)sa.__sa_handler == (long)SIG_DFL)
-   tprints("SIG_DFL");
-   else if ((long)sa.__sa_handler == (long)SIG_IGN)
-   tprints("SIG_IGN");
-   else
-   printaddr((long) sa.__sa_handler);
+   print_sa_handler((unsigned long)sa.__sa_handler);
tprints(", ");
 #ifdef MIPS
tprintsigmask_addr("", sa.sa_mask);
@@ -360,32 +371,10 @@ SYS_FUNC(signal)
if (entering(tcp)) {
printsignal(tcp->u_arg[0]);
tprints(", ");
-   switch (tcp->u_arg[1]) {
-   case (long) SIG_ERR:
-   tprints("SIG_ERR");
-   break;
-   case (long) SIG_DFL:
-   tprints("SIG_DFL");
-   break;
-   case (long) SIG_IGN:
-   tprints("SIG_IGN");
-   break;
-   default:
-   printaddr(tcp->u_arg[1]);
-   }
+   print_sa_handler(tcp->u_arg[1]);
return 0;
-   }
-   else if (!syserror(tcp)) {
-   switch (tcp->u_rval) {
-   case (long) SIG_ERR:
-   tcp->auxstr = "SIG_ERR"; break;
-   case (long) SIG_DFL:
-   tcp->auxstr = "SIG_DFL"; break;
-   case (long) SIG_IGN:
-   tcp->auxstr = "SIG_IGN"; break;
-   default:
-   tcp->auxstr = NULL;
-   }
+   } else if (!syserror(tcp)) {
+   tcp->auxstr = get_sa_handler_str(tcp->u_rval);
return RVAL_HEX | RVAL_STR;
}
return 0;
@@ -560,14 +549,7 @@ decode_new_sigaction(struct tcb *tcp, long addr)
 * compiler from generating code to manipulate
 * __sa_handler we cast the function pointers to long. */
tprints("{");
-   if ((long)sa.__sa_handler == (long)SIG_ERR)
-   tprints("SIG_ERR");
-   else if ((long)sa.__sa_handler == (long)SIG_DFL)
-   tprints("SIG_DFL");
-   else if ((long)sa.__sa_handler == (long)SIG_IGN)
-   tprints("SIG_IGN");
-   else
-   printaddr((unsigned long) sa.__sa_handler);
+   print_sa_handler((unsigned long)sa.__sa_handler);
tprints(", ");
/*
 * Sigset size is in tcp->u_arg[4] (SPARC)
diff --git a/xlat/sa_handler_values.in b/xlat/sa_handler_values.in
new file mode 100644
index 000..e907611
--- /dev/null
+++ b/xlat/sa_handler_values.in
@@ -0,0 +1,4 @@
+#val_type unsigned long
+SIG_ERR
+SIG_DFL
+SIG_IGN
-- 
1.7.10.4


--
___
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel