From d6be54ef73eacaaf5bf28bafc7dfebc80ebac832 Mon Sep 17 00:00:00 2001 From: Xavier Roirand Date: Sat, 8 Sep 2018 16:51:21 +0200 Subject: [PATCH] Darwin: set startup-with-shell to off on Sierra and later. 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/ChangeLog | 6 ++++++ gdb/darwin-nat.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1469366..5f84805 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2018-09-11 Xavier Roirand + * darwin-nat.c (should_disable_startup_with_shell): + New function. + (darwin_nat_target::create_inferior): Add call. + +2018-09-11 Xavier Roirand + * darwin-nat.h (struct darwin_thread_info) : Initialize. (struct darwin_thread_info) : Change diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c index be80163..eee9380 100644 --- a/gdb/darwin-nat.c +++ b/gdb/darwin-nat.c @@ -1854,11 +1854,39 @@ 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> 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, -- 2.7.4