From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 92246 invoked by alias); 22 Aug 2018 14:20:20 -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 92222 invoked by uid 89); 22 Aug 2018 14:20:20 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.9 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: smtp.polymtl.ca Received: from smtp.polymtl.ca (HELO smtp.polymtl.ca) (132.207.4.11) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 22 Aug 2018 14:20:18 +0000 Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id w7MEKCIi018775 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 22 Aug 2018 10:20:17 -0400 Received: by simark.ca (Postfix, from userid 112) id 44D6E1EABA; Wed, 22 Aug 2018 10:20:12 -0400 (EDT) Received: from simark.ca (localhost [127.0.0.1]) by simark.ca (Postfix) with ESMTP id 3FEDF1E76F; Wed, 22 Aug 2018 10:20:11 -0400 (EDT) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Wed, 22 Aug 2018 14:20:00 -0000 From: Simon Marchi To: Xavier Roirand Cc: gdb-patches@sourceware.org, brobecker@adacore.com Subject: Re: [RFA 3/5] Darwin: set startup-with-shell to off on Sierra and later. In-Reply-To: <1534932677-9496-4-git-send-email-roirand@adacore.com> References: <1534932677-9496-1-git-send-email-roirand@adacore.com> <1534932677-9496-4-git-send-email-roirand@adacore.com> Message-ID: <9a64f5298b404c3be126333b4287e390@polymtl.ca> X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.3.6 X-IsSubscribed: yes X-SW-Source: 2018-08/txt/msg00529.txt.bz2 On 2018-08-22 06:11, Xavier Roirand wrote: > On Mac OS X Sierra and later, the shell is not allowed to be > debug so add a check and disable startup with shell in that > case. Ah, that's a really good idea to do it automatically, instead of asking the user to do it. > gdb/ChangeLog: > * darwin-nat.c (disable_startup_with_shell): New function. > (_initialize_darwin_inferior): Add call. > > Change-Id: Ia3cbeaa89b2b44a173b93ee22cce0d3884a16924 > --- > gdb/darwin-nat.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c > index be80163..96f70cf 100644 > --- a/gdb/darwin-nat.c > +++ b/gdb/darwin-nat.c > @@ -2362,6 +2362,26 @@ darwin_nat_target::supports_multi_process () > return true; > } > > +/* Read kernel version, and set startup-with-shell to false on Sierra > or > + later. */ > + > +void > +disable_startup_with_shell () This function should be static. > +{ > + char str[16]; > + size_t sz = sizeof (str); > + int ret; > + unsigned long ver; > + > + ret = sysctlbyname ("kern.osrelease", str, &sz, NULL, 0); > + if (ret == 0 && sz < sizeof (str)) > + { > + ver = strtoul (str, NULL, 10); > + if (ver >= 16) > + startup_with_shell = 0; > + } > +} The indentation is not quite right. You can also declare variables when they are used/initialized. > + > void > _initialize_darwin_nat () > { > @@ -2396,4 +2416,6 @@ When this mode is on, all low level exceptions > are reported before being\n\ > reported by the kernel."), > &set_enable_mach_exceptions, NULL, > &setlist, &showlist); > + > + disable_startup_with_shell (); > } I don't think we should do that in _initialize_darwin_nat. Since startup-with-shell is supported with remote debugging, you could still use it when starting a Linux remote program from a macOS host. Instead, we should probably only disable it at the moment we create a new inferior in the darwin_nat target, so in darwin_nat_target::create_inferior. We also don't want to permanently change the setting, so we should restore the value. Presumably, putting something like this in darwin_nat_target::create_inferior should work (I haven't tested it, and sorry for the potential formatting mess my email client will do): gdb::optional> restore_startup_with_shell; if (startup_with_shell && should_disable_startup_with_shell ()) { warning (_("startup-with-shell not supported on this macOS version, disabling it.")); restore_startup_with_shell.emplace (&startup_with_shell, 0); } Instead of setting/restoring startup_with_shell, it might be better if its value was passed as a parameter all the way down instead of having functions read the global variable, but that's a bigger job. Simon