aboutsummaryrefslogtreecommitdiff
path: root/gdb/darwin-nat.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/darwin-nat.c')
-rw-r--r--gdb/darwin-nat.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c
index de661a3..010700c 100644
--- a/gdb/darwin-nat.c
+++ b/gdb/darwin-nat.c
@@ -39,6 +39,7 @@
#include "value.h"
#include "arch-utils.h"
#include "bfd.h"
+#include "bfd/mach-o.h"
#include <sys/ptrace.h>
#include <sys/signal.h>
@@ -1538,6 +1539,22 @@ darwin_execvp (const char *file, char * const argv[], char * const env[])
return;
}
+ /* Specify the same binary preference to spawn the shell as the
+ exec binary. This avoids spawning a 64bit shell while debugging
+ a 32bit program, which may confuse gdb.
+ Also, this slightly breaks internal layers as we suppose the binary
+ is Mach-O. Doesn't harm in practice. */
+ if (exec_bfd != NULL)
+ {
+ cpu_type_t pref;
+ size_t ocount;
+
+ pref = bfd_mach_o_get_data (exec_bfd)->header.cputype;
+ res = posix_spawnattr_setbinpref_np (&attr, 1, &pref, &ocount);
+ if (res != 0 || ocount != 1)
+ fprintf_unfiltered (gdb_stderr, "Cannot set posix_spawn binpref\n");
+ }
+
posix_spawnp (NULL, argv[0], NULL, &attr, argv, env);
}