along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
+#include "top.h"
+#include "inferior.h"
+#include "target.h"
+#include "symfile.h"
+#include "symtab.h"
+#include "objfiles.h"
+#include "gdbcmd.h"
+#include "gdbcore.h"
+#include "gdbthread.h"
+#include "regcache.h"
+#include "event-top.h"
+#include "inf-loop.h"
+#include <sys/stat.h>
+#include "inf-child.h"
+#include "value.h"
+#include "arch-utils.h"
+#include "bfd.h"
+#include "bfd/mach-o.h"
+#include "gdbarch.h"
-/* Standard C includes. */
#include <copyfile.h>
+#include <sys/ptrace.h>
+#include <sys/signal.h>
+#include <setjmp.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <signal.h>
#include <ctype.h>
+#include <sys/sysctl.h>
+#include <sys/proc.h>
#include <libproc.h>
+#include <sys/syscall.h>
+#include <spawn.h>
+
#include <mach/mach_error.h>
-#include <mach/mach_init.h>
-#include <mach/mach_port.h>
#include <mach/mach_vm.h>
-#include <mach/port.h>
+#include <mach/mach_init.h>
+#include <mach/vm_map.h>
#include <mach/task.h>
+#include <mach/mach_port.h>
#include <mach/thread_act.h>
-#include <mach/vm_map.h>
-#include <setjmp.h>
-#include <signal.h>
-#include <spawn.h>
-#include <sys/proc.h>
-#include <sys/ptrace.h>
-#include <sys/signal.h>
-#include <sys/stat.h>
-#include <sys/syscall.h>
-#include <sys/sysctl.h>
-#include <sys/types.h>
-#include <unistd.h>
+#include <mach/port.h>
-/* Local non-gdb includes. */
-#include "arch-utils.h"
-#include "bfd.h"
-#include "bfd/mach-o.h"
-#include "common/filestuff.h"
-#include "common/gdb_unlinker.h"
-#include "common/pathstuff.h"
-#include "common/scoped_fd.h"
#include "darwin-nat.h"
-#include "event-top.h"
#include "filenames.h"
-#include "gdbcmd.h"
-#include "gdbcore.h"
-#include "gdbthread.h"
-#include "inf-child.h"
-#include "inf-loop.h"
-#include "inferior.h"
+#include "gdbsupport/filestuff.h"
+#include "gdbsupport/gdb_unlinker.h"
+#include "gdbsupport/pathstuff.h"
+#include "gdbsupport/scoped_fd.h"
#include "nat/fork-inferior.h"
-#include "objfiles.h"
-#include "regcache.h"
-#include "symfile.h"
-#include "symtab.h"
-#include "target.h"
-#include "top.h"
-#include "value.h"
/* Quick overview.
Darwin kernel is Mach + BSD derived kernel. Note that they share the
/* If Set, catch all mach exceptions (before they are converted to signals
by the kernel). */
-static int enable_mach_exceptions;
+static bool enable_mach_exceptions;
/* Inferior that should report a fake stop event. */
static struct inferior *darwin_inf_fake_stop;
/* Not a known inferior. This could happen if the child fork, as
the created process will inherit its exception port.
FIXME: should the exception port be restored ? */
- kern_return_t kret;
mig_reply_error_t reply;
inferior_debug
if (!priv->no_ptrace)
{
- pid_t res;
+ pid_t res_pid;
int wstatus;
- res = wait4 (inf->pid, &wstatus, 0, NULL);
- if (res < 0 || res != inf->pid)
+ res_pid = wait4 (inf->pid, &wstatus, 0, NULL);
+ if (res_pid < 0 || res_pid != inf->pid)
{
printf_unfiltered (_("wait4: res=%d: %s\n"),
- res, safe_strerror (errno));
+ res_pid, safe_strerror (errno));
status->kind = TARGET_WAITKIND_IGNORE;
return minus_one_ptid;
}
}
inferior_debug (4, _("darwin_wait: pid=%d exit, status=0x%x\n"),
- res, wstatus);
+ res_pid, wstatus);
/* Looks necessary on Leopard and harmless... */
wait4 (inf->pid, &wstatus, 0, NULL);
signaled thus darwin_decode_message function knows that the kill
signal was sent by gdb and will take the appropriate action
(cancel signal and reply to the signal message). */
- darwin_inferior *priv = get_darwin_inferior (inf);
for (darwin_thread_t *thread : priv->threads)
thread->signaled = 1;
darwin_inferior *priv = new darwin_inferior;
inf->priv.reset (priv);
- TRY
+ try
{
kret = task_for_pid (gdb_task, inf->pid, &priv->task);
if (kret != KERN_SUCCESS)
darwin_setup_exceptions (inf);
}
- CATCH (ex, RETURN_MASK_ALL)
+ catch (const gdb_exception &ex)
{
exit_inferior (inf);
inferior_ptid = null_ptid;
- throw_exception (ex);
+ throw;
}
- END_CATCH
target_ops *darwin_ops = get_native_target ();
if (!target_is_pushed (darwin_ops))
/* Maybe it was cached by some earlier gdb. */
if (stat (new_name.c_str (), &sb) != 0 || !S_ISREG (sb.st_mode))
{
- TRY
+ try
{
copy_shell_to_cache (shell, new_name);
}
- CATCH (ex, RETURN_MASK_ERROR)
+ catch (const gdb_exception_error &ex)
{
warning (_("This version of macOS has System Integrity Protection.\n\
Because `startup-with-shell' is enabled, gdb tried to work around SIP by\n\
If you correct the problem, gdb will automatically try again the next time\n\
you \"run\". To prevent these attempts, you can use:\n\
set startup-with-shell off"),
- ex.message);
+ ex.what ());
return false;
}
- END_CATCH
printf_filtered (_("Note: this version of macOS has System Integrity Protection.\n\
Because `startup-with-shell' is enabled, gdb has worked around this by\n\
const std::string &allargs,
char **env, int from_tty)
{
- gdb::optional<scoped_restore_tmpl<int>> restore_startup_with_shell;
+ gdb::optional<scoped_restore_tmpl<bool>> restore_startup_with_shell;
if (startup_with_shell && may_have_sip ())
{
copy it to RDADDR in gdb's address space.
If WRADDR is not NULL, write gdb's LEN bytes from WRADDR and copy it
to ADDR in inferior task's address space.
- Return 0 on failure; number of bytes read / writen otherwise. */
+ Return 0 on failure; number of bytes read / written otherwise. */
static int
darwin_read_write_inferior (task_t task, CORE_ADDR addr,