GDB (xrefs)
Classes | Defines | Functions | Variables
/home/stan/gdb/src/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 "gdb.h"
#include "gdbcmd.h"
#include "gdbcore.h"
#include "gdbthread.h"
#include "regcache.h"
#include "event-top.h"
#include "inf-loop.h"
#include "gdb_stat.h"
#include "exceptions.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 <machine/setjmp.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <string.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"

Go to the source code of this file.

Classes

struct  resume_inferior_threads_param

Defines

#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

boolean_t exc_server (mach_msg_header_t *in, mach_msg_header_t *out)
static void darwin_stop (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, char *exec_file, char *allargs, char **env, int from_tty)
static void darwin_files_info (struct target_ops *ops)
static 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 const unsigned char
info_plist[] 
__attribute__ ((section("__TEXT,__info_plist"), used))
static void inferior_debug (int level, const char *fmt,...)
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, PTRACE_TYPE_ARG3 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_notify_it (struct inferior *inf, void *port_ptr)
static struct inferiordarwin_find_inferior_by_task (task_t port)
static struct inferiordarwin_find_inferior_by_notify (mach_port_t port)
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 int darwin_decode_exception_message (mach_msg_header_t *hdr, struct inferior **pinf, darwin_thread_t **pthread)
static void darwin_encode_reply (mig_reply_error_t *reply, mach_msg_header_t *hdr, integer_t code)
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 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, char *args, int from_tty)
static void darwin_detach (struct target_ops *ops, char *args, int from_tty)
static int darwin_read_write_inferior (task_t task, CORE_ADDR addr, gdb_byte *rdaddr, const gdb_byte *wraddr, int length)
static LONGEST darwin_xfer_partial (struct target_ops *ops, enum target_object object, const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
static void set_enable_mach_exceptions (char *args, int from_tty, struct cmd_list_element *c)
static char * darwin_pid_to_exec_file (int pid)
static ptid_t darwin_get_ada_task_ptid (long lwp, long thread)
static int darwin_supports_multi_process (void)
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]
initialize_file_ftype _initialize_darwin_inferior

Define Documentation

#define _POSIX_SPAWN_DISABLE_ASLR   0x0100

Referenced by darwin_execvp().

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

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

Referenced by darwin_read_write_inferior().

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

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

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

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

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


Function Documentation

static const unsigned char info_plist [] __attribute__ ( (section("__TEXT,__info_plist"), used)  ) [static]
void _initialize_darwin_inferior ( void  )
static int cancel_breakpoint ( ptid_t  ptid) [static]
static int cmp_thread_t ( const void *  l,
const void *  r 
) [static]

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

Referenced by darwin_check_new_threads().

static void darwin_attach ( struct target_ops ops,
char *  args,
int  from_tty 
) [static]
static void darwin_attach_pid ( struct inferior inf) [static]
static void darwin_check_new_threads ( struct inferior inf) [static]
static void darwin_create_inferior ( struct target_ops ops,
char *  exec_file,
char *  allargs,
char **  env,
int  from_tty 
) [static]
static int darwin_decode_exception_message ( mach_msg_header_t *  hdr,
struct inferior **  pinf,
darwin_thread_t **  pthread 
) [static]
static ptid_t darwin_decode_message ( mach_msg_header_t *  hdr,
darwin_thread_t **  pthread,
struct inferior **  pinf,
struct target_waitstatus status 
) [static]
static void darwin_detach ( struct target_ops ops,
char *  args,
int  from_tty 
) [static]
static void darwin_dump_message ( mach_msg_header_t *  hdr,
int  disp_body 
) [static]

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

References _, gdb::printing::long, name, printf_unfiltered(), and size.

Referenced by darwin_wait().

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

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

References code.

Referenced by darwin_send_reply().

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

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

References _POSIX_SPAWN_DISABLE_ASLR, fprintf_unfiltered(), and gdb_stderr.

Referenced by darwin_create_inferior().

static void darwin_files_info ( struct target_ops ops) [static]

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

Referenced by _initialize_darwin_inferior().

static struct inferior* darwin_find_inferior_by_notify ( mach_port_t  port) [static, read]

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

References find_inferior_notify_it(), and iterate_over_inferiors().

Referenced by darwin_decode_message().

static struct inferior* darwin_find_inferior_by_task ( task_t  port) [static, read]

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

References find_inferior_task_it(), and iterate_over_inferiors().

Referenced by darwin_decode_exception_message().

static darwin_thread_t* darwin_find_thread ( struct inferior inf,
thread_t  thread 
) [static]
static ptid_t darwin_get_ada_task_ptid ( long  lwp,
long  thread 
) [static]
static void darwin_init_thread_list ( struct inferior inf) [static]
static void darwin_kill_inferior ( struct target_ops ops) [static]
static void darwin_mourn_inferior ( struct target_ops ops) [static]
static char* darwin_pid_to_exec_file ( int  pid) [static]

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

References make_cleanup(), xfree(), and xmalloc().

Referenced by _initialize_darwin_inferior().

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

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

References _, normal_pid_to_str(), ptid_get_pid(), and ptid_get_tid().

Referenced by _initialize_darwin_inferior().

static void darwin_pre_ptrace ( void  ) [static]

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

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

Referenced by darwin_create_inferior().

static int darwin_ptrace ( const char *  name,
int  request,
int  pid,
PTRACE_TYPE_ARG3  arg3,
int  arg4 
) [static]

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

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

static void darwin_ptrace_him ( int  pid) [static]
static void darwin_ptrace_me ( void  ) [static]

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

References _, error(), PT_TRACE_ME, PTRACE, and read().

Referenced by darwin_create_inferior().

static int darwin_read_write_inferior ( task_t  task,
CORE_ADDR  addr,
gdb_byte rdaddr,
const gdb_byte wraddr,
int  length 
) [static]
static void darwin_reply_to_all_pending_messages ( struct inferior inf) [static]
static kern_return_t darwin_restore_exception_ports ( darwin_inferior inf) [static]
static void darwin_resume ( ptid_t  ptid,
int  step,
enum gdb_signal  signal 
) [static]
static void darwin_resume_inferior ( struct inferior inf) [static]
static int darwin_resume_inferior_it ( struct inferior inf,
void *  arg 
) [static]

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

References darwin_resume_inferior().

Referenced by darwin_resume().

static void darwin_resume_inferior_threads ( struct inferior inf,
int  step,
int  nsignal 
) [static]
static int darwin_resume_inferior_threads_it ( struct inferior inf,
void *  param 
) [static]
static void darwin_resume_thread ( struct inferior inf,
darwin_thread_t thread,
int  step,
int  nsignal 
) [static]
static void darwin_resume_to ( struct target_ops ops,
ptid_t  ptid,
int  step,
enum gdb_signal  signal 
) [static]

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

References darwin_resume().

Referenced by _initialize_darwin_inferior().

static kern_return_t darwin_save_exception_ports ( darwin_inferior inf) [static]
static void darwin_send_reply ( struct inferior inf,
darwin_thread_t thread 
) [static]
static void darwin_setup_fake_stop_event ( struct inferior inf) [static]
static void darwin_stop ( ptid_t  t) [static]
static void darwin_stop_inferior ( struct inferior inf) [static]
static int darwin_supports_multi_process ( void  ) [static]

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

Referenced by _initialize_darwin_inferior().

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

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

References darwin_check_new_threads(), and darwin_suspend_inferior().

Referenced by darwin_wait().

static void darwin_suspend_inferior_threads ( struct inferior inf) [static]
static int darwin_thread_alive ( struct target_ops ops,
ptid_t  tpid 
) [static]

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

Referenced by _initialize_darwin_inferior().

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

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

References darwin_wait().

Referenced by _initialize_darwin_inferior().

static LONGEST darwin_xfer_partial ( struct target_ops ops,
enum target_object  object,
const char *  annex,
gdb_byte readbuf,
const gdb_byte writebuf,
ULONGEST  offset,
LONGEST  len 
) [static]
boolean_t exc_server ( mach_msg_header_t *  in,
mach_msg_header_t *  out 
)

Referenced by gnu_wait().

static int find_inferior_notify_it ( struct inferior inf,
void *  port_ptr 
) [static]

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

References private_inferior::notify_port, and inferior::private.

Referenced by darwin_find_inferior_by_notify().

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

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

References inferior::private, and private_inferior::task.

Referenced by darwin_find_inferior_by_task().

static void inferior_debug ( int  level,
const char *  fmt,
  ... 
) [static]
void mach_check_error ( kern_return_t  ret,
const char *  file,
unsigned int  line,
const char *  func 
)

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

References _, and warning().

static void set_enable_mach_exceptions ( char *  args,
int  from_tty,
struct cmd_list_element c 
) [static]
static const char* unparse_exception_type ( unsigned int  i) [static]

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

References _.

Referenced by darwin_decode_message().


Variable Documentation

unsigned int darwin_debug_flag = 0 [static]

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

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

mach_port_t darwin_ex_port
mach_port_t darwin_host_self
struct inferior* darwin_inf_fake_stop [static]

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

Referenced by darwin_wait().

struct target_ops* darwin_ops [static]

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

mach_port_t darwin_port_set

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

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

task_t gdb_task [static]
vm_size_t mach_page_size [static]

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

Referenced by _initialize_darwin_inferior(), and darwin_read_write_inferior().

int ptrace_fds[2] [static]

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

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines