X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fdarwin-nat.h;h=7a174764f89584c278aa63f0ee3c79e51c5a630c;hb=d66ff635bec25bf940cc6d173a92f7796f18b310;hp=43e48dda5a51cb6c8c00e9d4573c2c6e7879d610;hpb=a80b95ba67e2bcdda3a8437c23a8cab7fafd33db;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/darwin-nat.h b/gdb/darwin-nat.h index 43e48dda5a..7a174764f8 100644 --- a/gdb/darwin-nat.h +++ b/gdb/darwin-nat.h @@ -1,6 +1,5 @@ /* Common things used by the various darwin files - Copyright (C) 1995, 1996, 1997, 1999, 2000, 2007, 2008 - Free Software Foundation, Inc. + Copyright (C) 1995-2016 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,17 +12,12 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ + along with this program. If not, see . */ #ifndef __DARWIN_NAT_H__ #define __DARWIN_NAT_H__ #include -#include "gdb_assert.h" - -/* Define the threads vector type. */ -DEF_VEC_I (thread_t); /* Describe the mach exception handling state for a task. This state is saved before being changed and restored when a process is detached. @@ -48,45 +42,103 @@ struct darwin_exception_info }; typedef struct darwin_exception_info darwin_exception_info; -/* Describe an inferior. */ -struct darwin_inferior +struct darwin_exception_msg { - /* Inferior PID. */ - int pid; + mach_msg_header_t header; + + /* Thread and task taking the exception. */ + mach_port_t thread_port; + mach_port_t task_port; + + /* Type of the exception. */ + exception_type_t ex_type; + + /* Machine dependent details. */ + mach_msg_type_number_t data_count; + integer_t ex_data[2]; +}; + +enum darwin_msg_state +{ + /* The thread is running. */ + DARWIN_RUNNING, + + /* The thread is stopped. */ + DARWIN_STOPPED, + + /* The thread has sent a message and waits for a reply. */ + DARWIN_MESSAGE +}; + +struct private_thread_info +{ + /* The thread port from a GDB point of view. */ + thread_t gdb_port; + + /* The thread port from the inferior point of view. Not to be used inside + gdb except for get_ada_task_ptid. */ + thread_t inf_port; + /* Current message state. + If the kernel has sent a message it expects a reply and the inferior + can't be killed before. */ + enum darwin_msg_state msg_state; + + /* True if this thread is single-stepped. */ + unsigned char single_step; + + /* True if a signal was manually sent to the thread. */ + unsigned char signaled; + + /* The last exception received. */ + struct darwin_exception_msg event; +}; +typedef struct private_thread_info darwin_thread_t; + +/* Define the threads vector type. */ +DEF_VEC_O (darwin_thread_t); + + +/* Describe an inferior. */ +struct private_inferior +{ /* Corresponding task port. */ task_t task; - /* Previous port for request notification on task. */ - mach_port_t prev_not_port; + /* Port which will receive the dead-name notification for the task port. + This is used to detect the death of the task. */ + mach_port_t notify_port; /* Initial exception handling. */ darwin_exception_info exception_info; + /* Number of messages that have been received but not yet replied. */ + unsigned int pending_messages; + + /* Set if inferior is not controlled by ptrace(2) but through Mach. */ + unsigned char no_ptrace; + + /* True if this task is suspended. */ + unsigned char suspended; + /* Sorted vector of known threads. */ - VEC(thread_t) *threads; + VEC(darwin_thread_t) *threads; }; -typedef struct darwin_inferior darwin_inferior; - -/* Current inferior. */ -extern darwin_inferior *darwin_inf; +typedef struct private_inferior darwin_inferior; /* Exception port. */ extern mach_port_t darwin_ex_port; -/* Notification port. */ -extern mach_port_t darwin_not_port; - /* Port set. */ extern mach_port_t darwin_port_set; /* A copy of mach_host_self (). */ extern mach_port_t darwin_host_self; -/* ASSERT_FUNCTION is defined in gdb_assert.h (or not). */ -#ifdef ASSERT_FUNCTION +/* FUNCTION_NAME is defined in common-utils.h (or not). */ +#ifdef FUNCTION_NAME #define MACH_CHECK_ERROR(ret) \ - mach_check_error (ret, __FILE__, __LINE__, ASSERT_FUNCTION) + mach_check_error (ret, __FILE__, __LINE__, FUNCTION_NAME) #else #define MACH_CHECK_ERROR(ret) \ mach_check_error (ret, __FILE__, __LINE__, "??")