From patchwork Tue Sep 20 17:31:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Helge Deller X-Patchwork-Id: 12982780 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EF88FC54EE9 for ; Tue, 20 Sep 2022 23:24:32 +0000 (UTC) Received: from localhost ([::1]:57548 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oambP-0000LL-LS for qemu-devel@archiver.kernel.org; Tue, 20 Sep 2022 19:24:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52872) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oah6M-00049i-Az for qemu-devel@nongnu.org; Tue, 20 Sep 2022 13:32:09 -0400 Received: from mout.gmx.net ([212.227.17.22]:56561) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oah6D-0003Ih-Tx for qemu-devel@nongnu.org; Tue, 20 Sep 2022 13:32:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1663695113; bh=7aS2o35HsYTsCq2IrHBGKkUUxkKyHtWnOczIq8CEF3Q=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=Z1EYK39+FAYLS2ZMYTqbIMB3qK09GIZLO/cxtZgHu91QRTXXDBzy9BRIjZJs/FjF7 6WANQKi/BkKSY+2hs+yrI+weRlrTTHQuxigY1zFsbu0zPKUEQMOIKRWIbnNUi6UkV4 HuqdJBPKtAZDR1R8CBmXC+fgYKNJUETyH+kS+tCw= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from p100.fritz.box ([92.116.174.94]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MHXFx-1oVy120gy1-00DVJM; Tue, 20 Sep 2022 19:31:53 +0200 From: Helge Deller To: qemu-devel@nongnu.org, Laurent Vivier , Richard Henderson , Stefan Hajnoczi Cc: deller@gmx.de Subject: [PULL 01/12] linux-user: Add missing signals in strace output Date: Tue, 20 Sep 2022 19:31:41 +0200 Message-Id: <20220920173152.199359-2-deller@gmx.de> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220920173152.199359-1-deller@gmx.de> References: <20220920173152.199359-1-deller@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:pCu7hugRgnxCbWkJZYVblsOSnq1qb8SW25wJSAMmngCOgJtbl0q VVT2S93Q8KdSByJzINdXwlJcuc4GhNXCMX2xJdJfn+R7m3IjPHlqS3u4QI6Vl9xRCn895c+ Zim+bNr2/IzMBtYCH6qGpmkke3ql8LbR7QH1C3PKnPx2uTg/Ds5FTjLp7ArW1OaFDNK7J0X 5RtQKb2HP7I8ch//Qdu6A== X-UI-Out-Filterresults: notjunk:1;V03:K0:hE/V6ylBjag=:/Vf6idBE8EMeo6X8Cv6wur 8JSTr/SPcbx8uq1RzvECsH6K4Yo8ZJxFVgjBt7bYt0Jp1wVEzGoaD/jFZcoVfJ1D+fW/7gfAd ELX62fQvEZSY4Wu519qh1FEofhmUWQiVyEANuh7gDop5+WzCSMcISQM0C0XQhPOqxTbSFNZr0 VafEEMAOgmGvybQd+DKLxtHKW5Fx6kAmdRIpA9oxa9MsdOwiRskJLHsUKNnHiVMo0vc18xQKh Jucd0dl4g+IiE6pvWTHq4HfABekABpk61arx7Kto3g7x4bHvRkc1ftUXaNCyMw7Ok3ICS5Fn9 Emx5nUvbVUWF9NRpEnk8Mec1kJUcD+HFKs0UZhBHh4rMzrwP1X/pX7naKmusYgAixyE3Jk3+I WO20G9uIHtRN8poK9WJArkFzUn7moChD5/JLnxMFTyERcQsHFtLYlUg5M/TRVz97Rg6VO4CQq GTh6W2FbbPwq9cCX3aeAg/JpZDdtTywTQYXHQQz5w8GH83Kuwuqpnqw61fdMWPNeyluJiXV+q iuvfN7JN/V+4bg9jSxKwojeBO1IXW51iNXpc288r3QqeQzCfgHrm+Mp6hgsuxNryOI8msuJWY Gm3yQEjwfDNvL0KoSDJ1GSn1uFpxllPLp3KRQykeyDDXciy7mTaa4s3K0bw9r/E8zZQAAP3WX 5/UwpZFb642LNQEIVtmRVpBzz9CeB3KOLGWKz7ORx45RbVlCQxR0I8O/YPYEb7dvjZMScXOUO wsgL+VA/+DuRkWF86IfQ5v5l/7vh6P/yxIjblL/U8Ig80xJs8lb5p+uweGrg9WJ0wBvNCo9j6 RLIg5c2b1JJoLyXJlMOgzaZjRjR/c+Nrqrm6wcODNdntH9Qss+t8S9f7R/inZOtVfHvXak6gi HrhDlsyfFLjcOzI1zkWoF4d28raXZRO5kT40JGIlsmx+XDaKROVfg4VGUcNpuIB7ZvI71crNS wXlOJXHi5F7P0JAySajKK5S1ldv7u+N3tiGk1dZQ6gqL/+256BbwDBoi6f+Ci5DCKYi22z20k Zq7UE1hqU5owqP5bV4Kr9L9/qTcXvdP81rnyPY3ZURaz7YGFQovde/Ed2Ed0Jx5koyCQGtISK jU5+fxkUNI2QA658cNxB5Vc0JyPhoRq4/FMTark2UMCriCat2/Hquk8VHlWhcryFYD+9GGha/ lrUus= Received-SPF: pass client-ip=212.227.17.22; envelope-from=deller@gmx.de; helo=mout.gmx.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, UPPERCASE_50_75=0.008 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Some of the guest signal numbers are currently not converted to their representative names in the strace output, e.g. SIGVTALRM. This patch introduces a smart way to generate and keep in sync the host-to-guest and guest-to-host signal conversion tables for usage in the qemu signal and strace code. This ensures that any signals will now show up in both tables. There is no functional change in this patch - with the exception that yet missing signal names now show up in the strace code too. Signed-off-by: Helge Deller --- linux-user/signal-common.h | 46 ++++++++++++++++++++++++++++++++++++++ linux-user/signal.c | 37 +++--------------------------- linux-user/strace.c | 30 +++++++++---------------- 3 files changed, 60 insertions(+), 53 deletions(-) -- 2.37.3 diff --git a/linux-user/signal-common.h b/linux-user/signal-common.h index 6a7e4a93fc..3e2dc604c2 100644 --- a/linux-user/signal-common.h +++ b/linux-user/signal-common.h @@ -118,4 +118,50 @@ static inline void finish_sigsuspend_mask(int ret) } } +#if defined(SIGSTKFLT) && defined(TARGET_SIGSTKFLT) +#define MAKE_SIG_ENTRY_SIGSTKFLT MAKE_SIG_ENTRY(SIGSTKFLT) +#else +#define MAKE_SIG_ENTRY_SIGSTKFLT +#endif + +#if defined(SIGIOT) && defined(TARGET_SIGIOT) +#define MAKE_SIG_ENTRY_SIGIOT MAKE_SIG_ENTRY(SIGIOT) +#else +#define MAKE_SIG_ENTRY_SIGIOT +#endif + +#define MAKE_SIGNAL_LIST \ + MAKE_SIG_ENTRY(SIGHUP) \ + MAKE_SIG_ENTRY(SIGINT) \ + MAKE_SIG_ENTRY(SIGQUIT) \ + MAKE_SIG_ENTRY(SIGILL) \ + MAKE_SIG_ENTRY(SIGTRAP) \ + MAKE_SIG_ENTRY(SIGABRT) \ + MAKE_SIG_ENTRY(SIGBUS) \ + MAKE_SIG_ENTRY(SIGFPE) \ + MAKE_SIG_ENTRY(SIGKILL) \ + MAKE_SIG_ENTRY(SIGUSR1) \ + MAKE_SIG_ENTRY(SIGSEGV) \ + MAKE_SIG_ENTRY(SIGUSR2) \ + MAKE_SIG_ENTRY(SIGPIPE) \ + MAKE_SIG_ENTRY(SIGALRM) \ + MAKE_SIG_ENTRY(SIGTERM) \ + MAKE_SIG_ENTRY(SIGCHLD) \ + MAKE_SIG_ENTRY(SIGCONT) \ + MAKE_SIG_ENTRY(SIGSTOP) \ + MAKE_SIG_ENTRY(SIGTSTP) \ + MAKE_SIG_ENTRY(SIGTTIN) \ + MAKE_SIG_ENTRY(SIGTTOU) \ + MAKE_SIG_ENTRY(SIGURG) \ + MAKE_SIG_ENTRY(SIGXCPU) \ + MAKE_SIG_ENTRY(SIGXFSZ) \ + MAKE_SIG_ENTRY(SIGVTALRM) \ + MAKE_SIG_ENTRY(SIGPROF) \ + MAKE_SIG_ENTRY(SIGWINCH) \ + MAKE_SIG_ENTRY(SIGIO) \ + MAKE_SIG_ENTRY(SIGPWR) \ + MAKE_SIG_ENTRY(SIGSYS) \ + MAKE_SIG_ENTRY_SIGSTKFLT \ + MAKE_SIG_ENTRY_SIGIOT + #endif diff --git a/linux-user/signal.c b/linux-user/signal.c index 8d29bfaa6b..61c6fa3fcf 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -53,40 +53,9 @@ abi_ulong default_rt_sigreturn; QEMU_BUILD_BUG_ON(__SIGRTMAX + 1 != _NSIG); #endif static uint8_t host_to_target_signal_table[_NSIG] = { - [SIGHUP] = TARGET_SIGHUP, - [SIGINT] = TARGET_SIGINT, - [SIGQUIT] = TARGET_SIGQUIT, - [SIGILL] = TARGET_SIGILL, - [SIGTRAP] = TARGET_SIGTRAP, - [SIGABRT] = TARGET_SIGABRT, -/* [SIGIOT] = TARGET_SIGIOT,*/ - [SIGBUS] = TARGET_SIGBUS, - [SIGFPE] = TARGET_SIGFPE, - [SIGKILL] = TARGET_SIGKILL, - [SIGUSR1] = TARGET_SIGUSR1, - [SIGSEGV] = TARGET_SIGSEGV, - [SIGUSR2] = TARGET_SIGUSR2, - [SIGPIPE] = TARGET_SIGPIPE, - [SIGALRM] = TARGET_SIGALRM, - [SIGTERM] = TARGET_SIGTERM, -#ifdef SIGSTKFLT - [SIGSTKFLT] = TARGET_SIGSTKFLT, -#endif - [SIGCHLD] = TARGET_SIGCHLD, - [SIGCONT] = TARGET_SIGCONT, - [SIGSTOP] = TARGET_SIGSTOP, - [SIGTSTP] = TARGET_SIGTSTP, - [SIGTTIN] = TARGET_SIGTTIN, - [SIGTTOU] = TARGET_SIGTTOU, - [SIGURG] = TARGET_SIGURG, - [SIGXCPU] = TARGET_SIGXCPU, - [SIGXFSZ] = TARGET_SIGXFSZ, - [SIGVTALRM] = TARGET_SIGVTALRM, - [SIGPROF] = TARGET_SIGPROF, - [SIGWINCH] = TARGET_SIGWINCH, - [SIGIO] = TARGET_SIGIO, - [SIGPWR] = TARGET_SIGPWR, - [SIGSYS] = TARGET_SIGSYS, +#define MAKE_SIG_ENTRY(sig) [sig] = TARGET_##sig, + MAKE_SIGNAL_LIST +#undef MAKE_SIG_ENTRY /* next signals stay the same */ }; diff --git a/linux-user/strace.c b/linux-user/strace.c index 7d882526da..a4eeef7ae1 100644 --- a/linux-user/strace.c +++ b/linux-user/strace.c @@ -17,6 +17,7 @@ #include "qemu.h" #include "user-internals.h" #include "strace.h" +#include "signal-common.h" struct syscallname { int nr; @@ -141,30 +142,21 @@ if( cmd == val ) { \ qemu_log("%d", cmd); } +static const char * const target_signal_name[] = { +#define MAKE_SIG_ENTRY(sig) [TARGET_##sig] = #sig, + MAKE_SIGNAL_LIST +#undef MAKE_SIG_ENTRY +}; + static void print_signal(abi_ulong arg, int last) { const char *signal_name = NULL; - switch(arg) { - case TARGET_SIGHUP: signal_name = "SIGHUP"; break; - case TARGET_SIGINT: signal_name = "SIGINT"; break; - case TARGET_SIGQUIT: signal_name = "SIGQUIT"; break; - case TARGET_SIGILL: signal_name = "SIGILL"; break; - case TARGET_SIGABRT: signal_name = "SIGABRT"; break; - case TARGET_SIGFPE: signal_name = "SIGFPE"; break; - case TARGET_SIGKILL: signal_name = "SIGKILL"; break; - case TARGET_SIGSEGV: signal_name = "SIGSEGV"; break; - case TARGET_SIGPIPE: signal_name = "SIGPIPE"; break; - case TARGET_SIGALRM: signal_name = "SIGALRM"; break; - case TARGET_SIGTERM: signal_name = "SIGTERM"; break; - case TARGET_SIGUSR1: signal_name = "SIGUSR1"; break; - case TARGET_SIGUSR2: signal_name = "SIGUSR2"; break; - case TARGET_SIGCHLD: signal_name = "SIGCHLD"; break; - case TARGET_SIGCONT: signal_name = "SIGCONT"; break; - case TARGET_SIGSTOP: signal_name = "SIGSTOP"; break; - case TARGET_SIGTTIN: signal_name = "SIGTTIN"; break; - case TARGET_SIGTTOU: signal_name = "SIGTTOU"; break; + + if (arg < ARRAY_SIZE(target_signal_name)) { + signal_name = target_signal_name[arg]; } + if (signal_name == NULL) { print_raw_param("%ld", arg, last); return;