From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 103294 invoked by alias); 21 Apr 2019 10:18:21 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 103285 invoked by uid 89); 21 Apr 2019 10:18:20 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-3.1 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.1 spammy=terminating, rare X-HELO: eggs.gnu.org Received: from eggs.gnu.org (HELO eggs.gnu.org) (209.51.188.92) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 21 Apr 2019 10:18:19 +0000 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47691) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hI9Y9-0007yU-4E; Sun, 21 Apr 2019 06:18:17 -0400 Received: from [176.228.60.248] (port=2363 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1hI9Y8-00073t-HZ; Sun, 21 Apr 2019 06:18:16 -0400 Date: Sun, 21 Apr 2019 10:18:00 -0000 Message-Id: <838sw3acgz.fsf@gnu.org> From: Eli Zaretskii To: Philippe Waroquiers CC: gdb-patches@sourceware.org In-reply-to: <1555839622.6208.17.camel@skynet.be> (message from Philippe Waroquiers on Sun, 21 Apr 2019 11:40:22 +0200) Subject: Re: [RFA 2/4] Implement | (pipe) command. References: <20190420212153.30934-1-philippe.waroquiers@skynet.be> <20190420212153.30934-3-philippe.waroquiers@skynet.be> <83r29w9bpw.fsf@gnu.org> <1555839622.6208.17.camel@skynet.be> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-IsSubscribed: yes X-SW-Source: 2019-04/txt/msg00404.txt.bz2 > From: Philippe Waroquiers > Cc: gdb-patches@sourceware.org > Date: Sun, 21 Apr 2019 11:40:22 +0200 > > > > + if (shell_command_status > 0) > > > + { > > > + if (WIFEXITED (shell_command_status)) > > > + warning (_("shell command \"%s\" exit status %d"), shell_command, > > > + WEXITSTATUS (shell_command_status)); > > > + else if (WIFSIGNALED (shell_command_status)) > > > + warning (_("shell command \"%s\" exit with signal %d"), shell_command, > > > + WTERMSIG (shell_command_status)); > > > > These macros will need to be ported to MinGW, since the current > > definitions in gdb_wait.h are for Posix systems (and never used on > > anything other than that). Gnulib has replacements, but they are less > > functional on Windows than I'd like them to be, in particular when the > > shell program exited due to a signal. I can provide better > > replacements if you want. > It would be nice to have better replacement for Windows, > as I do not have the knowledge and needed setup to test > for this platform. Here's my proposal: #define WIFEXITED(stat_val) (((stat_val) & 0xC0000000) == 0) #define WIFSIGNALED(stat_val) (((stat_val) & 0xC0000000) == 0xC0000000) #define WEXITSTATUS(stat_val) ((stat_val) & 255) #define WTERMSIG(stat_val) windows_status_to_termsig (stat_val) where windows_status_to_termsig should use the xlate[] array defined in windows-nat.c, like the (ifdef'ed away) code in windows_nat_target::resume does. The underlying idea is that when a Windows program is terminated by a fatal exception, its exit code is the value of that exception, as defined by the various STATUS_* symbols in the Windows API headers. The above is not perfect, because a program could legitimately exit normally with a status whose value happens to have the high bits set, but that's extremely rare, to say the least, and I think such a negligibly small probability of false positives is justified by the utility of reporting the terminating signal in the "normal" cases.