qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Aleksandar Markovic <aleksandar.m.mail@gmail.com>
To: Helge Deller <deller@gmx.de>
Cc: "Laurent Vivier" <laurent@vivier.eu>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"QEMU Developers" <qemu-devel@nongnu.org>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: Re: [PATCH v2] linux-user/strace: Add missing signal strings
Date: Thu, 21 Nov 2019 19:43:48 +0100	[thread overview]
Message-ID: <CAL1e-=i1N4YSf6E8-5_b5N0qaKBB5hqMtm6A-+LnfY-ckS33gQ@mail.gmail.com> (raw)
In-Reply-To: <20191120145555.GA15154@ls3530.fritz.box>

On Wed, Nov 20, 2019 at 3:57 PM Helge Deller <deller@gmx.de> wrote:
>
> Add the textual representations of some missing target signals.
>
> Signed-off-by: Helge Deller <deller@gmx.de>
>
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index 3d4d684450..de43238fa4 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -146,6 +146,19 @@ print_signal(abi_ulong arg, int last)
>      case TARGET_SIGSTOP: signal_name = "SIGSTOP"; break;
>      case TARGET_SIGTTIN: signal_name = "SIGTTIN"; break;
>      case TARGET_SIGTTOU: signal_name = "SIGTTOU"; break;
> +    case TARGET_SIGIO: signal_name = "SIGIO"; break;
> +    case TARGET_SIGBUS: signal_name = "SIGBUS"; break;
> +    case TARGET_SIGPWR: signal_name = "SIGPWR"; break;
> +    case TARGET_SIGURG: signal_name = "SIGURG"; break;
> +    case TARGET_SIGSYS: signal_name = "SIGSYS"; break;
> +    case TARGET_SIGTRAP: signal_name = "SIGTRAP"; break;
> +    case TARGET_SIGXCPU: signal_name = "SIGXCPU"; break;
> +    case TARGET_SIGPROF: signal_name = "SIGPROF"; break;
> +    case TARGET_SIGTSTP: signal_name = "SIGTSTP"; break;
> +    case TARGET_SIGXFSZ: signal_name = "SIGXFSZ"; break;
> +    case TARGET_SIGWINCH: signal_name = "SIGWINCH"; break;
> +    case TARGET_SIGVTALRM: signal_name = "SIGVTALRM"; break;
> +    case TARGET_SIGSTKFLT: signal_name = "SIGSTKFLT"; break;

What about TARGET_SIGEMT, TARGET_SIGIOT ? Those are missing from
MIPS-specific list of signals, and they won't be printed as strings. I
think you should add:

#if defined TARGET_SIGEMT
    case TARGET_SIGEMT: signal_name = "SIGEMT"; break;
#endif
case TARGET_SIGIOT: signal_name = "SIGIOT"; break;

(I believe "#if defined"s is needed only for SIG_EMT, but doublecheck.)

Without this, this patch favors other platforms over MIPS, which is
certainly not a good/fair thing.

There might be some similar case or two for other platforms too
(alpha, sparc perhaps).

Your reference should be kernel files:

arch/<platform>/include/uapi/asm/sighal.h.

In fact, there is some peace of kernell code that exactly deal with
the same problem - getting the names of the signals. It is in
security/apparmor/include/sig_names.h

( https://elixir.bootlin.com/linux/v5.4-rc8/source/security/apparmor/include/sig_names.h
)

Since the file is short, I am inserting the whole content here:

#include <linux/signal.h>

#define SIGUNKNOWN 0
#define MAXMAPPED_SIG 35
#define MAXMAPPED_SIGNAME (MAXMAPPED_SIG + 1)
#define SIGRT_BASE 128

/* provide a mapping of arch signal to internal signal # for mediation
 * those that are always an alias SIGCLD for SIGCLHD and SIGPOLL for SIGIO
 * map to the same entry those that may/or may not get a separate entry
 */
static const int sig_map[MAXMAPPED_SIG] = {
[0] = MAXMAPPED_SIG, /* existence test */
[SIGHUP] = 1,
[SIGINT] = 2,
[SIGQUIT] = 3,
[SIGILL] = 4,
[SIGTRAP] = 5, /* -, 5, - */
[SIGABRT] = 6, /*  SIGIOT: -, 6, - */
[SIGBUS] = 7, /* 10, 7, 10 */
[SIGFPE] = 8,
[SIGKILL] = 9,
[SIGUSR1] = 10, /* 30, 10, 16 */
[SIGSEGV] = 11,
[SIGUSR2] = 12, /* 31, 12, 17 */
[SIGPIPE] = 13,
[SIGALRM] = 14,
[SIGTERM] = 15,
#ifdef SIGSTKFLT
[SIGSTKFLT] = 16, /* -, 16, - */
#endif
[SIGCHLD] = 17, /* 20, 17, 18.  SIGCHLD -, -, 18 */
[SIGCONT] = 18, /* 19, 18, 25 */
[SIGSTOP] = 19, /* 17, 19, 23 */
[SIGTSTP] = 20, /* 18, 20, 24 */
[SIGTTIN] = 21, /* 21, 21, 26 */
[SIGTTOU] = 22, /* 22, 22, 27 */
[SIGURG] = 23, /* 16, 23, 21 */
[SIGXCPU] = 24, /* 24, 24, 30 */
[SIGXFSZ] = 25, /* 25, 25, 31 */
[SIGVTALRM] = 26, /* 26, 26, 28 */
[SIGPROF] = 27, /* 27, 27, 29 */
[SIGWINCH] = 28, /* 28, 28, 20 */
[SIGIO] = 29, /* SIGPOLL: 23, 29, 22 */
[SIGPWR] = 30, /* 29, 30, 19.  SIGINFO 29, -, - */
#ifdef SIGSYS
[SIGSYS] = 31, /* 12, 31, 12. often SIG LOST/UNUSED */
#endif
#ifdef SIGEMT
[SIGEMT] = 32, /* 7, - , 7 */
#endif
#if defined(SIGLOST) && SIGPWR != SIGLOST /* sparc */
[SIGLOST] = 33, /* unused on Linux */
#endif
#if defined(SIGUNUSED) && \
    defined(SIGLOST) && defined(SIGSYS) && SIGLOST != SIGSYS
[SIGUNUSED] = 34, /* -, 31, - */
#endif
};

/* this table is ordered post sig_map[sig] mapping */
static const char *const sig_names[MAXMAPPED_SIGNAME] = {
"unknown",
"hup",
"int",
"quit",
"ill",
"trap",
"abrt",
"bus",
"fpe",
"kill",
"usr1",
"segv",
"usr2",
"pipe",
"alrm",
"term",
"stkflt",
"chld",
"cont",
"stop",
"stp",
"ttin",
"ttou",
"urg",
"xcpu",
"xfsz",
"vtalrm",
"prof",
"winch",
"io",
"pwr",
"sys",
"emt",
"lost",
"unused",

"exists", /* always last existence test mapped to MAXMAPPED_SIG */
};

I think you should mirror the functionality from that file.

Yours,
Aleksandar


>      }
>      if (signal_name == NULL) {
>          print_raw_param("%ld", arg, last);
>


  parent reply	other threads:[~2019-11-21 18:45 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-20 14:55 [PATCH v2] linux-user/strace: Add missing signal strings Helge Deller
2019-11-21 12:04 ` Richard Henderson
2019-11-21 16:34 ` Philippe Mathieu-Daudé
2019-11-21 17:26 ` Laurent Vivier
2019-11-21 18:53   ` Aleksandar Markovic
2019-11-21 18:43 ` Aleksandar Markovic [this message]
2019-11-22  7:43   ` Helge Deller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAL1e-=i1N4YSf6E8-5_b5N0qaKBB5hqMtm6A-+LnfY-ckS33gQ@mail.gmail.com' \
    --to=aleksandar.m.mail@gmail.com \
    --cc=deller@gmx.de \
    --cc=f4bug@amsat.org \
    --cc=laurent@vivier.eu \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).