[RFA,3/5,v4] Darwin: set startup-with-shell to off on Sierra and later.

Message ID 1536500785-10409-1-git-send-email-roirand@adacore.com
State New, archived
Headers

Commit Message

Xavier Roirand Sept. 9, 2018, 1:46 p.m. UTC
  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

Tom Tromey Sept. 10, 2018, 2:03 p.m. UTC | #1
>>>>> "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
  
Xavier Roirand Sept. 11, 2018, 10:24 a.m. UTC | #2
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
>
  

Patch

diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c
index be80163d22e..c83c5854da6 100644
--- a/gdb/darwin-nat.c
+++ b/gdb/darwin-nat.c
@@ -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,