[RFA,3/5,v4] Darwin: set startup-with-shell to off on Sierra and later.
Commit Message
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. This disabling is done temporary before forking
inferior and restored after the fork.
gdb/ChangeLog:
* darwin-nat.c (should_disable_startup_with_shell):
New function.
(darwin_nat_target::create_inferior): Add call.
Change-Id: Ie4d9090f65fdf2e83ecf7a0f9d0647fb1c27cdcc
---
gdb/darwin-nat.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
Comments
>>>>> "Xavier" == Xavier Roirand <roirand@adacore.com> writes:
Xavier> On Mac OS X Sierra and later, the shell is not allowed to be
Xavier> debug so add a check and disable startup with shell in that
Xavier> case. This disabling is done temporary before forking
Xavier> inferior and restored after the fork.
I believe Simon approved this version, but in case you're unsure, it is
ok.
Thank you for this series.
Has everything been approved or are you waiting for more reviews?
Tom
Hello,
Le 9/10/18 à 4:03 PM, Tom Tromey a écrit :
>>>>>> "Xavier" == Xavier Roirand <roirand@adacore.com> writes:
>
> Xavier> On Mac OS X Sierra and later, the shell is not allowed to be
> Xavier> debug so add a check and disable startup with shell in that
> Xavier> case. This disabling is done temporary before forking
> Xavier> inferior and restored after the fork.
>
> I believe Simon approved this version, but in case you're unsure, it is
> ok.
>
> Thank you for this series.
> Has everything been approved or are you waiting for more reviews?
Most of patches (2 on 3) have been approved, I only need to resubmit
the "Handle unrelocated dyld" one for a minor change.
Xavier
>
> Tom
>
@@ -1854,11 +1854,38 @@ darwin_execvp (const char *file, char * const argv[], char * const env[])
posix_spawnp (NULL, argv[0], NULL, &attr, argv, env);
}
+/* Read kernel version, and return TRUE on Sierra or later. */
+
+static bool
+should_disable_startup_with_shell ()
+{
+ char str[16];
+ size_t sz = sizeof (str);
+ int ret;
+
+ ret = sysctlbyname ("kern.osrelease", str, &sz, NULL, 0);
+ if (ret == 0 && sz < sizeof (str))
+ {
+ unsigned long ver = strtoul (str, NULL, 10);
+ if (ver >= 16)
+ return true;
+ }
+ return false;
+}
+
void
darwin_nat_target::create_inferior (const char *exec_file,
const std::string &allargs,
char **env, int from_tty)
{
+ gdb::optional<scoped_restore_tmpl<int>> 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);
+ }
+
/* Do the hard work. */
fork_inferior (exec_file, allargs, env, darwin_ptrace_me,
darwin_ptrace_him, darwin_pre_ptrace, NULL,