This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC] Make "run" work on macOS 10.13


I would like some feedback on this patch.

On macOS 10.13.5, "run" does not work in gdb.  There are two cases:

1. If I forget to "set startup-with-shell off", then gdb will fail due
   to the system integrity protection feature.  I believe this happens
   because gdb is not allowed to debug the shell.

   You can find many sites advocating "set startup-with-shell off",
   but it seems to me that it is friendlier for gdb to simply do it by
   default.

   One option here might be to do this conditionally based on the
   version of the OS.

2. I found that gdb was setting the solib breakpoint incorrectly,
   causing a failure.  Adding the load address to the notifier address
   makes this work for me.  I suspect this would regress earlier
   versions of macOS, but I have no way to test that; one idea might
   be to only do this when gdb_dyld_all_image_infos::version == 15.

gdb/ChangeLog
2018-06-29  Tom Tromey  <tom@tromey.com>

	* solib-darwin.c (darwin_solib_create_inferior_hook): Create solib
	breakpoint later.  Add load_addr to the notifier address.
	* darwin-nat.c (darwin_nat_target::create_inferior): Bind
	startup_with_shell to 0.
---
 gdb/ChangeLog      | 7 +++++++
 gdb/darwin-nat.c   | 5 +++++
 gdb/solib-darwin.c | 9 +++++----
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4c04d0ba728..c6462259fe0 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2018-06-29  Tom Tromey  <tom@tromey.com>
+
+	* solib-darwin.c (darwin_solib_create_inferior_hook): Create solib
+	breakpoint later.  Add load_addr to the notifier address.
+	* darwin-nat.c (darwin_nat_target::create_inferior): Bind
+	startup_with_shell to 0.
+
 2018-06-28  Tom Tromey  <tom@tromey.com>
 
 	* NEWS: Mention --enable-codesign.
diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c
index 7dccce73926..542c8389ef0 100644
--- a/gdb/darwin-nat.c
+++ b/gdb/darwin-nat.c
@@ -1809,6 +1809,11 @@ darwin_nat_target::create_inferior (const char *exec_file,
 				    const std::string &allargs,
 				    char **env, int from_tty)
 {
+  /* Starting with Sierra, SIP prevents gdb from attaching to the
+     shell, so users have to disable startup-with-shell.  */
+  scoped_restore save_startup
+    = make_scoped_restore (&startup_with_shell, 0);
+
   /* Do the hard work.  */
   fork_inferior (exec_file, allargs, env, darwin_ptrace_me,
 		 darwin_ptrace_him, darwin_pre_ptrace, NULL,
diff --git a/gdb/solib-darwin.c b/gdb/solib-darwin.c
index ed8e0c13365..a4e15dc6b5b 100644
--- a/gdb/solib-darwin.c
+++ b/gdb/solib-darwin.c
@@ -528,10 +528,6 @@ darwin_solib_create_inferior_hook (int from_tty)
       return;
     }
 
-  /* Add the breakpoint which is hit by dyld when the list of solib is
-     modified.  */
-  create_solib_event_breakpoint (target_gdbarch (), info->all_image.notifier);
-
   if (info->all_image.count != 0)
     {
       /* Possible relocate the main executable (PIE).  */
@@ -547,6 +543,11 @@ darwin_solib_create_inferior_hook (int from_tty)
       load_addr = darwin_read_exec_load_addr_at_init (info);
     }
 
+  /* Add the breakpoint which is hit by dyld when the list of solib is
+     modified.  */
+  create_solib_event_breakpoint (target_gdbarch (),
+				 info->all_image.notifier + load_addr);
+
   if (load_addr != 0 && symfile_objfile != NULL)
     {
       CORE_ADDR vmaddr;
-- 
2.17.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]