GDB (xrefs)
Classes | Macros | Functions | Variables
/tmp/gdb-8.1/gdb/darwin-nat.c File Reference
#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 <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_vm.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/port.h>
#include "darwin-nat.h"
#include "common/filestuff.h"
#include "nat/fork-inferior.h"

Go to the source code of this file.

Classes

struct  resume_inferior_threads_param
 

Macros

#define PTRACE(CMD, PID, ADDR, SIG)   darwin_ptrace(#CMD, CMD, (PID), (ADDR), (SIG))
 
#define PAGE_TRUNC(x)   ((x) & ~(mach_page_size - 1))
 
#define PAGE_ROUND(x)   PAGE_TRUNC((x) + mach_page_size - 1)
 
#define _POSIX_SPAWN_DISABLE_ASLR   0x0100
 

Functions

static void darwin_interrupt (struct target_ops *self, ptid_t)
 
static void darwin_resume_to (struct target_ops *ops, ptid_t ptid, int step, enum gdb_signal signal)
 
static void darwin_resume (ptid_t ptid, int step, enum gdb_signal signal)
 
static ptid_t darwin_wait_to (struct target_ops *ops, ptid_t ptid, struct target_waitstatus *status, int options)
 
static ptid_t darwin_wait (ptid_t ptid, struct target_waitstatus *status)
 
static void darwin_mourn_inferior (struct target_ops *ops)
 
static void darwin_kill_inferior (struct target_ops *ops)
 
static void darwin_ptrace_me (void)
 
static void darwin_ptrace_him (int pid)
 
static void darwin_create_inferior (struct target_ops *ops, const char *exec_file, const std::string &allargs, char **env, int from_tty)
 
static void darwin_files_info (struct target_ops *ops)
 
static const char * darwin_pid_to_str (struct target_ops *ops, ptid_t tpid)
 
static int darwin_thread_alive (struct target_ops *ops, ptid_t tpid)
 
static void darwin_encode_reply (mig_reply_error_t *reply, mach_msg_header_t *hdr, integer_t code)
 
static void darwin_setup_request_notification (struct inferior *inf)
 
static void darwin_deallocate_exception_ports (darwin_inferior *inf)
 
static void darwin_setup_exceptions (struct inferior *inf)
 
static void darwin_deallocate_threads (struct inferior *inf)
 
static const unsigned char info_plist [] __attribute__ ((section("__TEXT,__info_plist"), used))
 
static void inferior_debug (int level, const char *fmt,...) ATTRIBUTE_PRINTF(2
 
void mach_check_error (kern_return_t ret, const char *file, unsigned int line, const char *func)
 
static const char * unparse_exception_type (unsigned int i)
 
static int darwin_ptrace (const char *name, int request, int pid, caddr_t arg3, int arg4)
 
static int cmp_thread_t (const void *l, const void *r)
 
static void darwin_check_new_threads (struct inferior *inf)
 
static int find_inferior_task_it (struct inferior *inf, void *port_ptr)
 
static int find_inferior_pid_it (struct inferior *inf, void *pid_ptr)
 
static struct inferiordarwin_find_inferior_by_task (task_t port)
 
static struct inferiordarwin_find_inferior_by_pid (int pid)
 
static darwin_thread_tdarwin_find_thread (struct inferior *inf, thread_t thread)
 
static void darwin_suspend_inferior (struct inferior *inf)
 
static void darwin_resume_inferior (struct inferior *inf)
 
static int darwin_suspend_inferior_it (struct inferior *inf, void *arg)
 
static int darwin_resume_inferior_it (struct inferior *inf, void *arg)
 
static void darwin_dump_message (mach_msg_header_t *hdr, int disp_body)
 
static struct inferiordarwin_find_new_inferior (task_t task_port, thread_t thread_port)
 
static int darwin_check_message_ndr (NDR_record_t *ndr)
 
static int darwin_decode_exception_message (mach_msg_header_t *hdr, struct inferior **pinf, darwin_thread_t **pthread)
 
static int darwin_decode_notify_message (mach_msg_header_t *hdr, struct inferior **pinf)
 
static void darwin_send_reply (struct inferior *inf, darwin_thread_t *thread)
 
static void darwin_resume_thread (struct inferior *inf, darwin_thread_t *thread, int step, int nsignal)
 
static void darwin_resume_inferior_threads (struct inferior *inf, int step, int nsignal)
 
static int darwin_resume_inferior_threads_it (struct inferior *inf, void *param)
 
static void darwin_suspend_inferior_threads (struct inferior *inf)
 
static ptid_t darwin_decode_message (mach_msg_header_t *hdr, darwin_thread_t **pthread, struct inferior **pinf, struct target_waitstatus *status)
 
static int cancel_breakpoint (ptid_t ptid)
 
static void darwin_reply_to_all_pending_messages (struct inferior *inf)
 
static void darwin_stop_inferior (struct inferior *inf)
 
static kern_return_t darwin_save_exception_ports (darwin_inferior *inf)
 
static kern_return_t darwin_restore_exception_ports (darwin_inferior *inf)
 
static void darwin_attach_pid (struct inferior *inf)
 
static struct thread_infothread_info_from_private_thread_info (darwin_thread_info *pti)
 
static void darwin_init_thread_list (struct inferior *inf)
 
static void darwin_pre_ptrace (void)
 
static void darwin_execvp (const char *file, char *const argv[], char *const env[])
 
static void darwin_setup_fake_stop_event (struct inferior *inf)
 
static void darwin_attach (struct target_ops *ops, const char *args, int from_tty)
 
static void darwin_detach (struct target_ops *ops, const char *args, int from_tty)
 
static int darwin_read_write_inferior (task_t task, CORE_ADDR addr, gdb_byte *rdaddr, const gdb_byte *wraddr, ULONGEST length)
 
static enum target_xfer_status darwin_xfer_partial (struct target_ops *ops, enum target_object object, const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
 
static void set_enable_mach_exceptions (const char *args, int from_tty, struct cmd_list_element *c)
 
static char * darwin_pid_to_exec_file (struct target_ops *self, int pid)
 
static ptid_t darwin_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
 
static int darwin_supports_multi_process (struct target_ops *self)
 
void _initialize_darwin_inferior (void)
 

Variables

static struct target_opsdarwin_ops
 
static task_t gdb_task
 
mach_port_t darwin_host_self
 
mach_port_t darwin_ex_port
 
mach_port_t darwin_port_set
 
static vm_size_t mach_page_size
 
static int enable_mach_exceptions
 
static struct inferiordarwin_inf_fake_stop
 
static unsigned int darwin_debug_flag = 0
 
static int ptrace_fds [2]
 

Macro Definition Documentation

◆ _POSIX_SPAWN_DISABLE_ASLR

#define _POSIX_SPAWN_DISABLE_ASLR   0x0100

Referenced by darwin_execvp().

◆ PAGE_ROUND

#define PAGE_ROUND (   x)    PAGE_TRUNC((x) + mach_page_size - 1)

Definition at line 150 of file darwin-nat.c.

Referenced by darwin_read_write_inferior().

◆ PAGE_TRUNC

#define PAGE_TRUNC (   x)    ((x) & ~(mach_page_size - 1))

Definition at line 149 of file darwin-nat.c.

◆ PTRACE

#define PTRACE (   CMD,
  PID,
  ADDR,
  SIG 
)    darwin_ptrace(#CMD, CMD, (PID), (ADDR), (SIG))

Definition at line 83 of file darwin-nat.c.

Referenced by darwin_detach(), darwin_ptrace_me(), and darwin_resume_thread().

Function Documentation

◆ __attribute__()

static const unsigned char info_plist [] __attribute__ ( (section("__TEXT,__info_plist"), used)  )
static

◆ _initialize_darwin_inferior()

void _initialize_darwin_inferior ( void  )

◆ cancel_breakpoint()

static int cancel_breakpoint ( ptid_t  ptid)
static

◆ cmp_thread_t()

static int cmp_thread_t ( const void *  l,
const void *  r 
)
static

Definition at line 271 of file darwin-nat.c.

Referenced by darwin_check_new_threads().

◆ darwin_attach()

static void darwin_attach ( struct target_ops ops,
const char *  args,
int  from_tty 
)
static

◆ darwin_attach_pid()

static void darwin_attach_pid ( struct inferior inf)
static

◆ darwin_check_message_ndr()

static int darwin_check_message_ndr ( NDR_record_t *  ndr)
static

Definition at line 611 of file darwin-nat.c.

Referenced by darwin_decode_exception_message(), and darwin_decode_notify_message().

◆ darwin_check_new_threads()

static void darwin_check_new_threads ( struct inferior inf)
static

◆ darwin_create_inferior()

static void darwin_create_inferior ( struct target_ops ops,
const char *  exec_file,
const std::string allargs,
char **  env,
int  from_tty 
)
static

◆ darwin_deallocate_exception_ports()

static void darwin_deallocate_exception_ports ( darwin_inferior inf)
static

Definition at line 1501 of file darwin-nat.c.

References gdb_task, and MACH_CHECK_ERROR.

Referenced by darwin_find_new_inferior(), and darwin_mourn_inferior().

◆ darwin_deallocate_threads()

static void darwin_deallocate_threads ( struct inferior inf)
static

◆ darwin_decode_exception_message()

static int darwin_decode_exception_message ( mach_msg_header_t *  hdr,
struct inferior **  pinf,
darwin_thread_t **  pthread 
)
static

◆ darwin_decode_message()

static ptid_t darwin_decode_message ( mach_msg_header_t *  hdr,
darwin_thread_t **  pthread,
struct inferior **  pinf,
struct target_waitstatus status 
)
static

◆ darwin_decode_notify_message()

static int darwin_decode_notify_message ( mach_msg_header_t *  hdr,
struct inferior **  pinf 
)
static

◆ darwin_detach()

static void darwin_detach ( struct target_ops ops,
const char *  args,
int  from_tty 
)
static

◆ darwin_dump_message()

static void darwin_dump_message ( mach_msg_header_t *  hdr,
int  disp_body 
)
static

Definition at line 494 of file darwin-nat.c.

References _, name, printf_unfiltered(), and size.

Referenced by darwin_wait().

◆ darwin_encode_reply()

static void darwin_encode_reply ( mig_reply_error_t *  reply,
mach_msg_header_t *  hdr,
integer_t  code 
)
static

Definition at line 804 of file darwin-nat.c.

References code.

Referenced by darwin_decode_exception_message(), and darwin_send_reply().

◆ darwin_execvp()

static void darwin_execvp ( const char *  file,
char *const  argv[],
char *const  env[] 
)
static

Definition at line 1805 of file darwin-nat.c.

References _POSIX_SPAWN_DISABLE_ASLR, gdb::argv, fprintf_unfiltered(), and gdb_stderr.

Referenced by darwin_create_inferior().

◆ darwin_files_info()

static void darwin_files_info ( struct target_ops ops)
static

Definition at line 1979 of file darwin-nat.c.

Referenced by _initialize_darwin_inferior().

◆ darwin_find_inferior_by_pid()

static struct inferior* darwin_find_inferior_by_pid ( int  pid)
static

Definition at line 420 of file darwin-nat.c.

References find_inferior_pid_it(), iterate_over_inferiors(), and pid.

Referenced by darwin_find_new_inferior().

◆ darwin_find_inferior_by_task()

static struct inferior* darwin_find_inferior_by_task ( task_t  port)
static

◆ darwin_find_new_inferior()

static struct inferior* darwin_find_new_inferior ( task_t  task_port,
thread_t  thread_port 
)
static

◆ darwin_find_thread()

static darwin_thread_t* darwin_find_thread ( struct inferior inf,
thread_t  thread 
)
static

◆ darwin_get_ada_task_ptid()

static ptid_t darwin_get_ada_task_ptid ( struct target_ops self,
long  lwp,
long  thread 
)
static

◆ darwin_init_thread_list()

static void darwin_init_thread_list ( struct inferior inf)
static

◆ darwin_interrupt()

static void darwin_interrupt ( struct target_ops self,
ptid_t  t 
)
static

◆ darwin_kill_inferior()

static void darwin_kill_inferior ( struct target_ops ops)
static

◆ darwin_mourn_inferior()

static void darwin_mourn_inferior ( struct target_ops ops)
static

◆ darwin_pid_to_exec_file()

static char* darwin_pid_to_exec_file ( struct target_ops self,
int  pid 
)
static

Definition at line 2269 of file darwin-nat.c.

References pid.

Referenced by _initialize_darwin_inferior().

◆ darwin_pid_to_str()

static const char * darwin_pid_to_str ( struct target_ops ops,
ptid_t  tpid 
)
static

◆ darwin_pre_ptrace()

static void darwin_pre_ptrace ( void  )
static

Definition at line 1768 of file darwin-nat.c.

References _, error(), mark_fd_no_cloexec(), ptrace_fds, and safe_strerror().

Referenced by darwin_create_inferior().

◆ darwin_ptrace()

static int darwin_ptrace ( const char *  name,
int  request,
int  pid,
caddr_t  arg3,
int  arg4 
)
static

Definition at line 254 of file darwin-nat.c.

References _, inferior_debug(), name, pid, ptrace(), and safe_strerror().

◆ darwin_ptrace_him()

static void darwin_ptrace_him ( int  pid)
static

◆ darwin_ptrace_me()

static void darwin_ptrace_me ( void  )
static

◆ darwin_read_write_inferior()

static int darwin_read_write_inferior ( task_t  task,
CORE_ADDR  addr,
gdb_byte rdaddr,
const gdb_byte wraddr,
ULONGEST  length 
)
static

◆ darwin_reply_to_all_pending_messages()

static void darwin_reply_to_all_pending_messages ( struct inferior inf)
static

◆ darwin_restore_exception_ports()

static kern_return_t darwin_restore_exception_ports ( darwin_inferior inf)
static

Definition at line 1481 of file darwin-nat.c.

References inf::task.

Referenced by darwin_detach(), darwin_kill_inferior(), and set_enable_mach_exceptions().

◆ darwin_resume()

static void darwin_resume ( ptid_t  ptid,
int  step,
enum gdb_signal  signal 
)
static

◆ darwin_resume_inferior()

static void darwin_resume_inferior ( struct inferior inf)
static

◆ darwin_resume_inferior_it()

static int darwin_resume_inferior_it ( struct inferior inf,
void *  arg 
)
static

Definition at line 487 of file darwin-nat.c.

References darwin_resume_inferior().

Referenced by darwin_resume().

◆ darwin_resume_inferior_threads()

static void darwin_resume_inferior_threads ( struct inferior inf,
int  step,
int  nsignal 
)
static

◆ darwin_resume_inferior_threads_it()

static int darwin_resume_inferior_threads_it ( struct inferior inf,
void *  param 
)
static

◆ darwin_resume_thread()

static void darwin_resume_thread ( struct inferior inf,
darwin_thread_t thread,
int  step,
int  nsignal 
)
static

◆ darwin_resume_to()

static void darwin_resume_to ( struct target_ops ops,
ptid_t  ptid,
int  step,
enum gdb_signal  signal 
)
static

Definition at line 1011 of file darwin-nat.c.

References darwin_resume().

Referenced by _initialize_darwin_inferior().

◆ darwin_save_exception_ports()

static kern_return_t darwin_save_exception_ports ( darwin_inferior inf)
static

Definition at line 1466 of file darwin-nat.c.

References inf::task.

Referenced by darwin_setup_exceptions().

◆ darwin_send_reply()

static void darwin_send_reply ( struct inferior inf,
darwin_thread_t thread 
)
static

◆ darwin_setup_exceptions()

static void darwin_setup_exceptions ( struct inferior inf)
static

◆ darwin_setup_fake_stop_event()

static void darwin_setup_fake_stop_event ( struct inferior inf)
static

◆ darwin_setup_request_notification()

static void darwin_setup_request_notification ( struct inferior inf)
static

◆ darwin_stop_inferior()

static void darwin_stop_inferior ( struct inferior inf)
static

◆ darwin_supports_multi_process()

static int darwin_supports_multi_process ( struct target_ops self)
static

Definition at line 2347 of file darwin-nat.c.

Referenced by _initialize_darwin_inferior().

◆ darwin_suspend_inferior()

static void darwin_suspend_inferior ( struct inferior inf)
static

◆ darwin_suspend_inferior_it()

static int darwin_suspend_inferior_it ( struct inferior inf,
void *  arg 
)
static

Definition at line 479 of file darwin-nat.c.

References darwin_check_new_threads(), and darwin_suspend_inferior().

Referenced by darwin_wait().

◆ darwin_suspend_inferior_threads()

static void darwin_suspend_inferior_threads ( struct inferior inf)
static

◆ darwin_thread_alive()

static int darwin_thread_alive ( struct target_ops ops,
ptid_t  tpid 
)
static

Definition at line 2000 of file darwin-nat.c.

Referenced by _initialize_darwin_inferior().

◆ darwin_wait()

static ptid_t darwin_wait ( ptid_t  ptid,
struct target_waitstatus status 
)
static

◆ darwin_wait_to()

static ptid_t darwin_wait_to ( struct target_ops ops,
ptid_t  ptid,
struct target_waitstatus status,
int  options 
)
static

Definition at line 1338 of file darwin-nat.c.

References darwin_wait(), and status.

Referenced by _initialize_darwin_inferior().

◆ darwin_xfer_partial()

static enum target_xfer_status darwin_xfer_partial ( struct target_ops ops,
enum target_object  object,
const char *  annex,
gdb_byte readbuf,
const gdb_byte writebuf,
ULONGEST  offset,
ULONGEST  len,
ULONGEST xfered_len 
)
static

◆ find_inferior_pid_it()

static int find_inferior_pid_it ( struct inferior inf,
void *  pid_ptr 
)
static

Definition at line 406 of file darwin-nat.c.

References inf::pid.

Referenced by darwin_find_inferior_by_pid().

◆ find_inferior_task_it()

static int find_inferior_task_it ( struct inferior inf,
void *  port_ptr 
)
static

Definition at line 398 of file darwin-nat.c.

References get_darwin_inferior(), and inferior::priv.

Referenced by darwin_find_inferior_by_task().

◆ inferior_debug()

static void static void inferior_debug ( int  level,
const char *  fmt,
  ... 
)
static

◆ mach_check_error()

void mach_check_error ( kern_return_t  ret,
const char *  file,
unsigned int  line,
const char *  func 
)

Definition at line 199 of file darwin-nat.c.

References _, func, and warning().

◆ set_enable_mach_exceptions()

static void set_enable_mach_exceptions ( const char *  args,
int  from_tty,
struct cmd_list_element c 
)
static

◆ thread_info_from_private_thread_info()

static struct thread_info* thread_info_from_private_thread_info ( darwin_thread_info pti)
static

◆ unparse_exception_type()

static const char* unparse_exception_type ( unsigned int  i)
static

Definition at line 212 of file darwin-nat.c.

References _.

Referenced by darwin_decode_message().

Variable Documentation

◆ darwin_debug_flag

unsigned int darwin_debug_flag = 0
static

Definition at line 153 of file darwin-nat.c.

Referenced by _initialize_darwin_inferior(), darwin_wait(), and inferior_debug().

◆ darwin_ex_port

mach_port_t darwin_ex_port

◆ darwin_host_self

mach_port_t darwin_host_self

◆ darwin_inf_fake_stop

struct inferior* darwin_inf_fake_stop
static

Definition at line 147 of file darwin-nat.c.

Referenced by darwin_setup_fake_stop_event(), and darwin_wait().

◆ darwin_ops

struct target_ops* darwin_ops
static

Definition at line 125 of file darwin-nat.c.

Referenced by _initialize_darwin_inferior(), and darwin_attach_pid().

◆ darwin_port_set

mach_port_t darwin_port_set

Definition at line 137 of file darwin-nat.c.

Referenced by darwin_attach_pid(), darwin_wait(), and info_mach_ports_command().

◆ enable_mach_exceptions

int enable_mach_exceptions
static

◆ gdb_task

task_t gdb_task
static

◆ mach_page_size

vm_size_t mach_page_size
static

Definition at line 140 of file darwin-nat.c.

Referenced by _initialize_darwin_inferior(), and darwin_read_write_inferior().

◆ ptrace_fds

int ptrace_fds[2]
static

Definition at line 1733 of file darwin-nat.c.

Referenced by darwin_pre_ptrace(), darwin_ptrace_him(), and darwin_ptrace_me().