GDB (xrefs)
Loading...
Searching...
No Matches
Macros | Functions | Variables
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 "gdbarch.h"
#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_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 "filenames.h"
#include "gdbsupport/filestuff.h"
#include "gdbsupport/gdb_unlinker.h"
#include "gdbsupport/pathstuff.h"
#include "gdbsupport/scoped_fd.h"
#include "nat/fork-inferior.h"

Go to the source code of this file.

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_ptrace_me (void)
 
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 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 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_notify_message (mach_msg_header_t *hdr, struct inferior **pinf)
 
static void darwin_send_reply (struct inferior *inf, darwin_thread_t *thread)
 
static int darwin_pthread_kill (darwin_thread_t *thread, int nsignal)
 
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 void darwin_suspend_inferior_threads (struct inferior *inf)
 
static void darwin_reply_to_all_pending_messages (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_pre_ptrace (void)
 
static void darwin_execvp (const char *file, char *const argv[], char *const env[])
 
static bool may_have_sip ()
 
static void copy_shell_to_cache (const char *shell, const std::string &new_name)
 
static bool maybe_cache_shell ()
 
static void darwin_setup_fake_stop_event (struct inferior *inf)
 
static int darwin_read_write_inferior (task_t task, CORE_ADDR addr, gdb_byte *rdaddr, const gdb_byte *wraddr, ULONGEST length)
 
static void set_enable_mach_exceptions (const char *args, int from_tty, struct cmd_list_element *c)
 
void _initialize_darwin_nat ()
 

Variables

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 bool enable_mach_exceptions
 
static struct inferiordarwin_inf_fake_stop
 
static const char * copied_shell
 
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

◆ PAGE_ROUND

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

Definition at line 129 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 128 of file darwin-nat.c.

◆ PTRACE

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

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

Referenced by darwin_ptrace_me(), darwin_resume_thread(), and darwin_nat_target::detach().

Function Documentation

◆ __attribute__()

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

◆ _initialize_darwin_nat()

void _initialize_darwin_nat ( )

◆ cmp_thread_t()

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

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

Referenced by darwin_nat_target::check_new_threads().

◆ copy_shell_to_cache()

static void copy_shell_to_cache ( const char * shell,
const std::string & new_name )
static

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

References ldirname().

Referenced by maybe_cache_shell().

◆ 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

◆ darwin_deallocate_exception_ports()

static void darwin_deallocate_exception_ports ( darwin_inferior * inf)
static

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

References gdb_task, and MACH_CHECK_ERROR.

Referenced by darwin_find_new_inferior(), and darwin_nat_target::mourn_inferior().

◆ darwin_deallocate_threads()

static void darwin_deallocate_threads ( struct inferior * inf)
static

◆ darwin_decode_notify_message()

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

◆ darwin_dump_message()

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

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

References gdb_printf(), gdb_stdlog, name, and size.

Referenced by darwin_nat_target::wait_1().

◆ 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 779 of file darwin-nat.c.

References code.

Referenced by darwin_send_reply(), and darwin_nat_target::decode_exception_message().

◆ darwin_execvp()

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

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

References _POSIX_SPAWN_DISABLE_ASLR, gdb_printf(), and gdb_stderr.

Referenced by darwin_nat_target::create_inferior().

◆ darwin_find_inferior_by_pid()

static struct inferior * darwin_find_inferior_by_pid ( int pid)
static

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

References all_inferiors(), inf::pid, 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_pre_ptrace()

static void darwin_pre_ptrace ( void )
static

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

References ptrace_fds.

Referenced by darwin_nat_target::create_inferior().

◆ darwin_pthread_kill()

static int darwin_pthread_kill ( darwin_thread_t * thread,
int nsignal )
static

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

References darwin_thread_info::gdb_port.

Referenced by darwin_resume_thread().

◆ darwin_ptrace()

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

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

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

◆ 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

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

References inferior_debug(), mach_page_size, and PAGE_ROUND.

Referenced by darwin_nat_target::xfer_partial().

◆ 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

◆ darwin_resume_inferior()

static void darwin_resume_inferior ( struct inferior * inf)
static

◆ darwin_resume_inferior_threads()

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

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

References darwin_resume_thread(), get_darwin_inferior(), and inferior::priv.

Referenced by darwin_nat_target::resume().

◆ darwin_resume_thread()

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

◆ darwin_save_exception_ports()

static kern_return_t darwin_save_exception_ports ( darwin_inferior * inf)
static

Definition at line 1432 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_suspend_inferior()

static void darwin_suspend_inferior ( struct inferior * inf)
static

◆ darwin_suspend_inferior_threads()

static void darwin_suspend_inferior_threads ( struct inferior * inf)
static

◆ 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 178 of file darwin-nat.c.

References func.

◆ may_have_sip()

static bool may_have_sip ( )
static

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

Referenced by darwin_nat_target::create_inferior().

◆ maybe_cache_shell()

static bool maybe_cache_shell ( )
static

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

References copied_shell, copy_shell_to_cache(), and gdb_printf().

Referenced by darwin_nat_target::create_inferior().

◆ 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 191 of file darwin-nat.c.

Referenced by darwin_nat_target::decode_message().

Variable Documentation

◆ copied_shell

const char* copied_shell
static

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

Referenced by darwin_nat_target::create_inferior(), and maybe_cache_shell().

◆ darwin_debug_flag

unsigned int darwin_debug_flag = 0
static

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

Referenced by _initialize_darwin_nat(), inferior_debug(), and darwin_nat_target::wait_1().

◆ 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 122 of file darwin-nat.c.

Referenced by darwin_setup_fake_stop_event(), and darwin_nat_target::wait_1().

◆ darwin_port_set

mach_port_t darwin_port_set

◆ enable_mach_exceptions

bool enable_mach_exceptions
static

◆ gdb_task

task_t gdb_task
static

◆ mach_page_size

vm_size_t mach_page_size
static

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

Referenced by _initialize_darwin_nat(), and darwin_read_write_inferior().

◆ ptrace_fds

int ptrace_fds[2]
static