
On macOS 10.14 Apple changed the command line tools so that system headers now need to be manually installed. Instead of adding one extra install step to the install procedure add a build tag to allow compilation of delve without the native backend on macOS. By default (i.e. when using `go get`) this is how delve will be compiled on macOS, the make script is changed to enable compiling the native backend if the required dependencies have been installed. Insure that both configuration still build correctly on Travis CI and change the documentation to describe how to compile the native backend and that it isn't normally needed. Fixes #1359
771 lines
20 KiB
C
771 lines
20 KiB
C
//+build darwin,macnative
|
|
|
|
/*
|
|
* IDENTIFICATION:
|
|
* stub generated Sat Feb 21 18:10:52 2015
|
|
* with a MiG generated by bootstrap_cmds-91
|
|
* OPTIONS:
|
|
*/
|
|
#define __MIG_check__Reply__mach_exc_subsystem__ 1
|
|
|
|
#include "mach_exc.h"
|
|
|
|
|
|
#ifndef mig_internal
|
|
#define mig_internal static __inline__
|
|
#endif /* mig_internal */
|
|
|
|
#ifndef mig_external
|
|
#define mig_external
|
|
#endif /* mig_external */
|
|
|
|
#if !defined(__MigTypeCheck) && defined(TypeCheck)
|
|
#define __MigTypeCheck TypeCheck /* Legacy setting */
|
|
#endif /* !defined(__MigTypeCheck) */
|
|
|
|
#if !defined(__MigKernelSpecificCode) && defined(_MIG_KERNEL_SPECIFIC_CODE_)
|
|
#define __MigKernelSpecificCode _MIG_KERNEL_SPECIFIC_CODE_ /* Legacy setting */
|
|
#endif /* !defined(__MigKernelSpecificCode) */
|
|
|
|
#ifndef LimitCheck
|
|
#define LimitCheck 0
|
|
#endif /* LimitCheck */
|
|
|
|
#ifndef min
|
|
#define min(a,b) ( ((a) < (b))? (a): (b) )
|
|
#endif /* min */
|
|
|
|
#if !defined(_WALIGN_)
|
|
#define _WALIGN_(x) (((x) + 3) & ~3)
|
|
#endif /* !defined(_WALIGN_) */
|
|
|
|
#if !defined(_WALIGNSZ_)
|
|
#define _WALIGNSZ_(x) _WALIGN_(sizeof(x))
|
|
#endif /* !defined(_WALIGNSZ_) */
|
|
|
|
#ifndef UseStaticTemplates
|
|
#define UseStaticTemplates 0
|
|
#endif /* UseStaticTemplates */
|
|
|
|
#ifndef __MachMsgErrorWithTimeout
|
|
#define __MachMsgErrorWithTimeout(_R_) { \
|
|
switch (_R_) { \
|
|
case MACH_SEND_INVALID_DATA: \
|
|
case MACH_SEND_INVALID_DEST: \
|
|
case MACH_SEND_INVALID_HEADER: \
|
|
mig_put_reply_port(InP->Head.msgh_reply_port); \
|
|
break; \
|
|
case MACH_SEND_TIMED_OUT: \
|
|
case MACH_RCV_TIMED_OUT: \
|
|
default: \
|
|
mig_dealloc_reply_port(InP->Head.msgh_reply_port); \
|
|
} \
|
|
}
|
|
#endif /* __MachMsgErrorWithTimeout */
|
|
|
|
#ifndef __MachMsgErrorWithoutTimeout
|
|
#define __MachMsgErrorWithoutTimeout(_R_) { \
|
|
switch (_R_) { \
|
|
case MACH_SEND_INVALID_DATA: \
|
|
case MACH_SEND_INVALID_DEST: \
|
|
case MACH_SEND_INVALID_HEADER: \
|
|
mig_put_reply_port(InP->Head.msgh_reply_port); \
|
|
break; \
|
|
default: \
|
|
mig_dealloc_reply_port(InP->Head.msgh_reply_port); \
|
|
} \
|
|
}
|
|
#endif /* __MachMsgErrorWithoutTimeout */
|
|
|
|
#ifndef __DeclareSendRpc
|
|
#define __DeclareSendRpc(_NUM_, _NAME_)
|
|
#endif /* __DeclareSendRpc */
|
|
|
|
#ifndef __BeforeSendRpc
|
|
#define __BeforeSendRpc(_NUM_, _NAME_)
|
|
#endif /* __BeforeSendRpc */
|
|
|
|
#ifndef __AfterSendRpc
|
|
#define __AfterSendRpc(_NUM_, _NAME_)
|
|
#endif /* __AfterSendRpc */
|
|
|
|
#ifndef __DeclareSendSimple
|
|
#define __DeclareSendSimple(_NUM_, _NAME_)
|
|
#endif /* __DeclareSendSimple */
|
|
|
|
#ifndef __BeforeSendSimple
|
|
#define __BeforeSendSimple(_NUM_, _NAME_)
|
|
#endif /* __BeforeSendSimple */
|
|
|
|
#ifndef __AfterSendSimple
|
|
#define __AfterSendSimple(_NUM_, _NAME_)
|
|
#endif /* __AfterSendSimple */
|
|
|
|
#define msgh_request_port msgh_remote_port
|
|
#define msgh_reply_port msgh_local_port
|
|
|
|
|
|
|
|
#if ( __MigTypeCheck )
|
|
#if __MIG_check__Reply__mach_exc_subsystem__
|
|
#if !defined(__MIG_check__Reply__mach_exception_raise_t__defined)
|
|
#define __MIG_check__Reply__mach_exception_raise_t__defined
|
|
|
|
mig_internal kern_return_t __MIG_check__Reply__mach_exception_raise_t(__Reply__mach_exception_raise_t *Out0P)
|
|
{
|
|
|
|
typedef __Reply__mach_exception_raise_t __Reply;
|
|
if (Out0P->Head.msgh_id != 2505) {
|
|
if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)
|
|
{ return MIG_SERVER_DIED; }
|
|
else
|
|
{ return MIG_REPLY_MISMATCH; }
|
|
}
|
|
|
|
#if __MigTypeCheck
|
|
if ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
|
|
(Out0P->Head.msgh_size != (mach_msg_size_t)sizeof(__Reply)))
|
|
{ return MIG_TYPE_ERROR ; }
|
|
#endif /* __MigTypeCheck */
|
|
|
|
{
|
|
return Out0P->RetCode;
|
|
}
|
|
}
|
|
#endif /* !defined(__MIG_check__Reply__mach_exception_raise_t__defined) */
|
|
#endif /* __MIG_check__Reply__mach_exc_subsystem__ */
|
|
#endif /* ( __MigTypeCheck ) */
|
|
|
|
|
|
/* Routine mach_exception_raise */
|
|
mig_external kern_return_t mach_exception_raise
|
|
(
|
|
mach_port_t exception_port,
|
|
mach_port_t thread,
|
|
mach_port_t task,
|
|
exception_type_t exception,
|
|
mach_exception_data_t code,
|
|
mach_msg_type_number_t codeCnt
|
|
)
|
|
{
|
|
|
|
#ifdef __MigPackStructs
|
|
#pragma pack(4)
|
|
#endif
|
|
typedef struct {
|
|
mach_msg_header_t Head;
|
|
/* start of the kernel processed data */
|
|
mach_msg_body_t msgh_body;
|
|
mach_msg_port_descriptor_t thread;
|
|
mach_msg_port_descriptor_t task;
|
|
/* end of the kernel processed data */
|
|
NDR_record_t NDR;
|
|
exception_type_t exception;
|
|
mach_msg_type_number_t codeCnt;
|
|
int64_t code[2];
|
|
} Request;
|
|
#ifdef __MigPackStructs
|
|
#pragma pack()
|
|
#endif
|
|
|
|
#ifdef __MigPackStructs
|
|
#pragma pack(4)
|
|
#endif
|
|
typedef struct {
|
|
mach_msg_header_t Head;
|
|
NDR_record_t NDR;
|
|
kern_return_t RetCode;
|
|
mach_msg_trailer_t trailer;
|
|
} Reply;
|
|
#ifdef __MigPackStructs
|
|
#pragma pack()
|
|
#endif
|
|
|
|
#ifdef __MigPackStructs
|
|
#pragma pack(4)
|
|
#endif
|
|
typedef struct {
|
|
mach_msg_header_t Head;
|
|
NDR_record_t NDR;
|
|
kern_return_t RetCode;
|
|
} __Reply;
|
|
#ifdef __MigPackStructs
|
|
#pragma pack()
|
|
#endif
|
|
/*
|
|
* typedef struct {
|
|
* mach_msg_header_t Head;
|
|
* NDR_record_t NDR;
|
|
* kern_return_t RetCode;
|
|
* } mig_reply_error_t;
|
|
*/
|
|
|
|
union {
|
|
Request In;
|
|
Reply Out;
|
|
} Mess;
|
|
|
|
Request *InP = &Mess.In;
|
|
Reply *Out0P = &Mess.Out;
|
|
|
|
mach_msg_return_t msg_result;
|
|
unsigned int msgh_size;
|
|
|
|
#ifdef __MIG_check__Reply__mach_exception_raise_t__defined
|
|
kern_return_t check_result;
|
|
#endif /* __MIG_check__Reply__mach_exception_raise_t__defined */
|
|
|
|
__DeclareSendRpc(2405, "mach_exception_raise")
|
|
|
|
#if UseStaticTemplates
|
|
const static mach_msg_port_descriptor_t threadTemplate = {
|
|
/* name = */ MACH_PORT_NULL,
|
|
/* pad1 = */ 0,
|
|
/* pad2 = */ 0,
|
|
/* disp = */ 19,
|
|
/* type = */ MACH_MSG_PORT_DESCRIPTOR,
|
|
};
|
|
#endif /* UseStaticTemplates */
|
|
|
|
#if UseStaticTemplates
|
|
const static mach_msg_port_descriptor_t taskTemplate = {
|
|
/* name = */ MACH_PORT_NULL,
|
|
/* pad1 = */ 0,
|
|
/* pad2 = */ 0,
|
|
/* disp = */ 19,
|
|
/* type = */ MACH_MSG_PORT_DESCRIPTOR,
|
|
};
|
|
#endif /* UseStaticTemplates */
|
|
|
|
InP->msgh_body.msgh_descriptor_count = 2;
|
|
#if UseStaticTemplates
|
|
InP->thread = threadTemplate;
|
|
InP->thread.name = thread;
|
|
#else /* UseStaticTemplates */
|
|
InP->thread.name = thread;
|
|
InP->thread.disposition = 19;
|
|
InP->thread.type = MACH_MSG_PORT_DESCRIPTOR;
|
|
#endif /* UseStaticTemplates */
|
|
|
|
#if UseStaticTemplates
|
|
InP->task = taskTemplate;
|
|
InP->task.name = task;
|
|
#else /* UseStaticTemplates */
|
|
InP->task.name = task;
|
|
InP->task.disposition = 19;
|
|
InP->task.type = MACH_MSG_PORT_DESCRIPTOR;
|
|
#endif /* UseStaticTemplates */
|
|
|
|
InP->NDR = NDR_record;
|
|
|
|
InP->exception = exception;
|
|
|
|
if (codeCnt > 2) {
|
|
{ return MIG_ARRAY_TOO_LARGE; }
|
|
}
|
|
(void)memcpy((char *) InP->code, (const char *) code, 8 * codeCnt);
|
|
|
|
InP->codeCnt = codeCnt;
|
|
|
|
msgh_size = (mach_msg_size_t)(sizeof(Request) - 16) + ((8 * codeCnt));
|
|
InP->Head.msgh_bits = MACH_MSGH_BITS_COMPLEX|
|
|
MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);
|
|
/* msgh_size passed as argument */
|
|
InP->Head.msgh_request_port = exception_port;
|
|
InP->Head.msgh_reply_port = mig_get_reply_port();
|
|
InP->Head.msgh_id = 2405;
|
|
|
|
/* BEGIN VOUCHER CODE */
|
|
|
|
#ifdef USING_VOUCHERS
|
|
if (voucher_mach_msg_set != NULL) {
|
|
voucher_mach_msg_set(&InP->Head);
|
|
}
|
|
#endif // USING_VOUCHERS
|
|
|
|
/* END VOUCHER CODE */
|
|
|
|
__BeforeSendRpc(2405, "mach_exception_raise")
|
|
msg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, msgh_size, (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
|
|
__AfterSendRpc(2405, "mach_exception_raise")
|
|
if (msg_result != MACH_MSG_SUCCESS) {
|
|
__MachMsgErrorWithoutTimeout(msg_result);
|
|
{ return msg_result; }
|
|
}
|
|
|
|
|
|
#if defined(__MIG_check__Reply__mach_exception_raise_t__defined)
|
|
check_result = __MIG_check__Reply__mach_exception_raise_t((__Reply__mach_exception_raise_t *)Out0P);
|
|
if (check_result != MACH_MSG_SUCCESS)
|
|
{ return check_result; }
|
|
#endif /* defined(__MIG_check__Reply__mach_exception_raise_t__defined) */
|
|
|
|
return KERN_SUCCESS;
|
|
}
|
|
|
|
#if ( __MigTypeCheck )
|
|
#if __MIG_check__Reply__mach_exc_subsystem__
|
|
#if !defined(__MIG_check__Reply__mach_exception_raise_state_t__defined)
|
|
#define __MIG_check__Reply__mach_exception_raise_state_t__defined
|
|
|
|
mig_internal kern_return_t __MIG_check__Reply__mach_exception_raise_state_t(__Reply__mach_exception_raise_state_t *Out0P)
|
|
{
|
|
|
|
typedef __Reply__mach_exception_raise_state_t __Reply;
|
|
#if __MigTypeCheck
|
|
unsigned int msgh_size;
|
|
#endif /* __MigTypeCheck */
|
|
|
|
if (Out0P->Head.msgh_id != 2506) {
|
|
if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)
|
|
{ return MIG_SERVER_DIED; }
|
|
else
|
|
{ return MIG_REPLY_MISMATCH; }
|
|
}
|
|
|
|
#if __MigTypeCheck
|
|
msgh_size = Out0P->Head.msgh_size;
|
|
|
|
if ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
|
|
((msgh_size > (mach_msg_size_t)sizeof(__Reply) || msgh_size < (mach_msg_size_t)(sizeof(__Reply) - 896)) &&
|
|
(msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) ||
|
|
Out0P->RetCode == KERN_SUCCESS)))
|
|
{ return MIG_TYPE_ERROR ; }
|
|
#endif /* __MigTypeCheck */
|
|
|
|
if (Out0P->RetCode != KERN_SUCCESS) {
|
|
return ((mig_reply_error_t *)Out0P)->RetCode;
|
|
}
|
|
|
|
#if __MigTypeCheck
|
|
if ( Out0P->new_stateCnt > 224 )
|
|
return MIG_TYPE_ERROR;
|
|
if (((msgh_size - (mach_msg_size_t)(sizeof(__Reply) - 896)) / 4< Out0P->new_stateCnt) ||
|
|
(msgh_size != (mach_msg_size_t)(sizeof(__Reply) - 896) + Out0P->new_stateCnt * 4))
|
|
{ return MIG_TYPE_ERROR ; }
|
|
#endif /* __MigTypeCheck */
|
|
|
|
return MACH_MSG_SUCCESS;
|
|
}
|
|
#endif /* !defined(__MIG_check__Reply__mach_exception_raise_state_t__defined) */
|
|
#endif /* __MIG_check__Reply__mach_exc_subsystem__ */
|
|
#endif /* ( __MigTypeCheck ) */
|
|
|
|
|
|
/* Routine mach_exception_raise_state */
|
|
mig_external kern_return_t mach_exception_raise_state
|
|
(
|
|
mach_port_t exception_port,
|
|
exception_type_t exception,
|
|
const mach_exception_data_t code,
|
|
mach_msg_type_number_t codeCnt,
|
|
int *flavor,
|
|
const thread_state_t old_state,
|
|
mach_msg_type_number_t old_stateCnt,
|
|
thread_state_t new_state,
|
|
mach_msg_type_number_t *new_stateCnt
|
|
)
|
|
{
|
|
|
|
#ifdef __MigPackStructs
|
|
#pragma pack(4)
|
|
#endif
|
|
typedef struct {
|
|
mach_msg_header_t Head;
|
|
NDR_record_t NDR;
|
|
exception_type_t exception;
|
|
mach_msg_type_number_t codeCnt;
|
|
int64_t code[2];
|
|
int flavor;
|
|
mach_msg_type_number_t old_stateCnt;
|
|
natural_t old_state[224];
|
|
} Request;
|
|
#ifdef __MigPackStructs
|
|
#pragma pack()
|
|
#endif
|
|
|
|
#ifdef __MigPackStructs
|
|
#pragma pack(4)
|
|
#endif
|
|
typedef struct {
|
|
mach_msg_header_t Head;
|
|
NDR_record_t NDR;
|
|
kern_return_t RetCode;
|
|
int flavor;
|
|
mach_msg_type_number_t new_stateCnt;
|
|
natural_t new_state[224];
|
|
mach_msg_trailer_t trailer;
|
|
} Reply;
|
|
#ifdef __MigPackStructs
|
|
#pragma pack()
|
|
#endif
|
|
|
|
#ifdef __MigPackStructs
|
|
#pragma pack(4)
|
|
#endif
|
|
typedef struct {
|
|
mach_msg_header_t Head;
|
|
NDR_record_t NDR;
|
|
kern_return_t RetCode;
|
|
int flavor;
|
|
mach_msg_type_number_t new_stateCnt;
|
|
natural_t new_state[224];
|
|
} __Reply;
|
|
#ifdef __MigPackStructs
|
|
#pragma pack()
|
|
#endif
|
|
/*
|
|
* typedef struct {
|
|
* mach_msg_header_t Head;
|
|
* NDR_record_t NDR;
|
|
* kern_return_t RetCode;
|
|
* } mig_reply_error_t;
|
|
*/
|
|
|
|
union {
|
|
Request In;
|
|
Reply Out;
|
|
} Mess;
|
|
|
|
Request *InP = &Mess.In;
|
|
Reply *Out0P = &Mess.Out;
|
|
|
|
mach_msg_return_t msg_result;
|
|
unsigned int msgh_size;
|
|
unsigned int msgh_size_delta;
|
|
|
|
|
|
#ifdef __MIG_check__Reply__mach_exception_raise_state_t__defined
|
|
kern_return_t check_result;
|
|
#endif /* __MIG_check__Reply__mach_exception_raise_state_t__defined */
|
|
|
|
__DeclareSendRpc(2406, "mach_exception_raise_state")
|
|
|
|
InP->NDR = NDR_record;
|
|
|
|
InP->exception = exception;
|
|
|
|
if (codeCnt > 2) {
|
|
{ return MIG_ARRAY_TOO_LARGE; }
|
|
}
|
|
(void)memcpy((char *) InP->code, (const char *) code, 8 * codeCnt);
|
|
|
|
InP->codeCnt = codeCnt;
|
|
|
|
msgh_size_delta = (8 * codeCnt);
|
|
msgh_size = (mach_msg_size_t)(sizeof(Request) - 912) + msgh_size_delta;
|
|
InP = (Request *) ((pointer_t) InP + msgh_size_delta - 16);
|
|
|
|
InP->flavor = *flavor;
|
|
|
|
if (old_stateCnt > 224) {
|
|
{ return MIG_ARRAY_TOO_LARGE; }
|
|
}
|
|
(void)memcpy((char *) InP->old_state, (const char *) old_state, 4 * old_stateCnt);
|
|
|
|
InP->old_stateCnt = old_stateCnt;
|
|
|
|
msgh_size += (4 * old_stateCnt);
|
|
InP = &Mess.In;
|
|
InP->Head.msgh_bits =
|
|
MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);
|
|
/* msgh_size passed as argument */
|
|
InP->Head.msgh_request_port = exception_port;
|
|
InP->Head.msgh_reply_port = mig_get_reply_port();
|
|
InP->Head.msgh_id = 2406;
|
|
|
|
/* BEGIN VOUCHER CODE */
|
|
|
|
#ifdef USING_VOUCHERS
|
|
if (voucher_mach_msg_set != NULL) {
|
|
voucher_mach_msg_set(&InP->Head);
|
|
}
|
|
#endif // USING_VOUCHERS
|
|
|
|
/* END VOUCHER CODE */
|
|
|
|
__BeforeSendRpc(2406, "mach_exception_raise_state")
|
|
msg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, msgh_size, (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
|
|
__AfterSendRpc(2406, "mach_exception_raise_state")
|
|
if (msg_result != MACH_MSG_SUCCESS) {
|
|
__MachMsgErrorWithoutTimeout(msg_result);
|
|
{ return msg_result; }
|
|
}
|
|
|
|
|
|
#if defined(__MIG_check__Reply__mach_exception_raise_state_t__defined)
|
|
check_result = __MIG_check__Reply__mach_exception_raise_state_t((__Reply__mach_exception_raise_state_t *)Out0P);
|
|
if (check_result != MACH_MSG_SUCCESS)
|
|
{ return check_result; }
|
|
#endif /* defined(__MIG_check__Reply__mach_exception_raise_state_t__defined) */
|
|
|
|
*flavor = Out0P->flavor;
|
|
|
|
if (Out0P->new_stateCnt > 224) {
|
|
(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 * 224);
|
|
*new_stateCnt = Out0P->new_stateCnt;
|
|
{ return MIG_ARRAY_TOO_LARGE; }
|
|
}
|
|
(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 * Out0P->new_stateCnt);
|
|
|
|
*new_stateCnt = Out0P->new_stateCnt;
|
|
|
|
return KERN_SUCCESS;
|
|
}
|
|
|
|
#if ( __MigTypeCheck )
|
|
#if __MIG_check__Reply__mach_exc_subsystem__
|
|
#if !defined(__MIG_check__Reply__mach_exception_raise_state_identity_t__defined)
|
|
#define __MIG_check__Reply__mach_exception_raise_state_identity_t__defined
|
|
|
|
mig_internal kern_return_t __MIG_check__Reply__mach_exception_raise_state_identity_t(__Reply__mach_exception_raise_state_identity_t *Out0P)
|
|
{
|
|
|
|
typedef __Reply__mach_exception_raise_state_identity_t __Reply;
|
|
#if __MigTypeCheck
|
|
unsigned int msgh_size;
|
|
#endif /* __MigTypeCheck */
|
|
|
|
if (Out0P->Head.msgh_id != 2507) {
|
|
if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)
|
|
{ return MIG_SERVER_DIED; }
|
|
else
|
|
{ return MIG_REPLY_MISMATCH; }
|
|
}
|
|
|
|
#if __MigTypeCheck
|
|
msgh_size = Out0P->Head.msgh_size;
|
|
|
|
if ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
|
|
((msgh_size > (mach_msg_size_t)sizeof(__Reply) || msgh_size < (mach_msg_size_t)(sizeof(__Reply) - 896)) &&
|
|
(msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) ||
|
|
Out0P->RetCode == KERN_SUCCESS)))
|
|
{ return MIG_TYPE_ERROR ; }
|
|
#endif /* __MigTypeCheck */
|
|
|
|
if (Out0P->RetCode != KERN_SUCCESS) {
|
|
return ((mig_reply_error_t *)Out0P)->RetCode;
|
|
}
|
|
|
|
#if __MigTypeCheck
|
|
if ( Out0P->new_stateCnt > 224 )
|
|
return MIG_TYPE_ERROR;
|
|
if (((msgh_size - (mach_msg_size_t)(sizeof(__Reply) - 896)) / 4< Out0P->new_stateCnt) ||
|
|
(msgh_size != (mach_msg_size_t)(sizeof(__Reply) - 896) + Out0P->new_stateCnt * 4))
|
|
{ return MIG_TYPE_ERROR ; }
|
|
#endif /* __MigTypeCheck */
|
|
|
|
return MACH_MSG_SUCCESS;
|
|
}
|
|
#endif /* !defined(__MIG_check__Reply__mach_exception_raise_state_identity_t__defined) */
|
|
#endif /* __MIG_check__Reply__mach_exc_subsystem__ */
|
|
#endif /* ( __MigTypeCheck ) */
|
|
|
|
|
|
/* Routine mach_exception_raise_state_identity */
|
|
mig_external kern_return_t mach_exception_raise_state_identity
|
|
(
|
|
mach_port_t exception_port,
|
|
mach_port_t thread,
|
|
mach_port_t task,
|
|
exception_type_t exception,
|
|
mach_exception_data_t code,
|
|
mach_msg_type_number_t codeCnt,
|
|
int *flavor,
|
|
thread_state_t old_state,
|
|
mach_msg_type_number_t old_stateCnt,
|
|
thread_state_t new_state,
|
|
mach_msg_type_number_t *new_stateCnt
|
|
)
|
|
{
|
|
|
|
#ifdef __MigPackStructs
|
|
#pragma pack(4)
|
|
#endif
|
|
typedef struct {
|
|
mach_msg_header_t Head;
|
|
/* start of the kernel processed data */
|
|
mach_msg_body_t msgh_body;
|
|
mach_msg_port_descriptor_t thread;
|
|
mach_msg_port_descriptor_t task;
|
|
/* end of the kernel processed data */
|
|
NDR_record_t NDR;
|
|
exception_type_t exception;
|
|
mach_msg_type_number_t codeCnt;
|
|
int64_t code[2];
|
|
int flavor;
|
|
mach_msg_type_number_t old_stateCnt;
|
|
natural_t old_state[224];
|
|
} Request;
|
|
#ifdef __MigPackStructs
|
|
#pragma pack()
|
|
#endif
|
|
|
|
#ifdef __MigPackStructs
|
|
#pragma pack(4)
|
|
#endif
|
|
typedef struct {
|
|
mach_msg_header_t Head;
|
|
NDR_record_t NDR;
|
|
kern_return_t RetCode;
|
|
int flavor;
|
|
mach_msg_type_number_t new_stateCnt;
|
|
natural_t new_state[224];
|
|
mach_msg_trailer_t trailer;
|
|
} Reply;
|
|
#ifdef __MigPackStructs
|
|
#pragma pack()
|
|
#endif
|
|
|
|
#ifdef __MigPackStructs
|
|
#pragma pack(4)
|
|
#endif
|
|
typedef struct {
|
|
mach_msg_header_t Head;
|
|
NDR_record_t NDR;
|
|
kern_return_t RetCode;
|
|
int flavor;
|
|
mach_msg_type_number_t new_stateCnt;
|
|
natural_t new_state[224];
|
|
} __Reply;
|
|
#ifdef __MigPackStructs
|
|
#pragma pack()
|
|
#endif
|
|
/*
|
|
* typedef struct {
|
|
* mach_msg_header_t Head;
|
|
* NDR_record_t NDR;
|
|
* kern_return_t RetCode;
|
|
* } mig_reply_error_t;
|
|
*/
|
|
|
|
union {
|
|
Request In;
|
|
Reply Out;
|
|
} Mess;
|
|
|
|
Request *InP = &Mess.In;
|
|
Reply *Out0P = &Mess.Out;
|
|
|
|
mach_msg_return_t msg_result;
|
|
unsigned int msgh_size;
|
|
unsigned int msgh_size_delta;
|
|
|
|
|
|
#ifdef __MIG_check__Reply__mach_exception_raise_state_identity_t__defined
|
|
kern_return_t check_result;
|
|
#endif /* __MIG_check__Reply__mach_exception_raise_state_identity_t__defined */
|
|
|
|
__DeclareSendRpc(2407, "mach_exception_raise_state_identity")
|
|
|
|
#if UseStaticTemplates
|
|
const static mach_msg_port_descriptor_t threadTemplate = {
|
|
/* name = */ MACH_PORT_NULL,
|
|
/* pad1 = */ 0,
|
|
/* pad2 = */ 0,
|
|
/* disp = */ 19,
|
|
/* type = */ MACH_MSG_PORT_DESCRIPTOR,
|
|
};
|
|
#endif /* UseStaticTemplates */
|
|
|
|
#if UseStaticTemplates
|
|
const static mach_msg_port_descriptor_t taskTemplate = {
|
|
/* name = */ MACH_PORT_NULL,
|
|
/* pad1 = */ 0,
|
|
/* pad2 = */ 0,
|
|
/* disp = */ 19,
|
|
/* type = */ MACH_MSG_PORT_DESCRIPTOR,
|
|
};
|
|
#endif /* UseStaticTemplates */
|
|
|
|
InP->msgh_body.msgh_descriptor_count = 2;
|
|
#if UseStaticTemplates
|
|
InP->thread = threadTemplate;
|
|
InP->thread.name = thread;
|
|
#else /* UseStaticTemplates */
|
|
InP->thread.name = thread;
|
|
InP->thread.disposition = 19;
|
|
InP->thread.type = MACH_MSG_PORT_DESCRIPTOR;
|
|
#endif /* UseStaticTemplates */
|
|
|
|
#if UseStaticTemplates
|
|
InP->task = taskTemplate;
|
|
InP->task.name = task;
|
|
#else /* UseStaticTemplates */
|
|
InP->task.name = task;
|
|
InP->task.disposition = 19;
|
|
InP->task.type = MACH_MSG_PORT_DESCRIPTOR;
|
|
#endif /* UseStaticTemplates */
|
|
|
|
InP->NDR = NDR_record;
|
|
|
|
InP->exception = exception;
|
|
|
|
if (codeCnt > 2) {
|
|
{ return MIG_ARRAY_TOO_LARGE; }
|
|
}
|
|
(void)memcpy((char *) InP->code, (const char *) code, 8 * codeCnt);
|
|
|
|
InP->codeCnt = codeCnt;
|
|
|
|
msgh_size_delta = (8 * codeCnt);
|
|
msgh_size = (mach_msg_size_t)(sizeof(Request) - 912) + msgh_size_delta;
|
|
InP = (Request *) ((pointer_t) InP + msgh_size_delta - 16);
|
|
|
|
InP->flavor = *flavor;
|
|
|
|
if (old_stateCnt > 224) {
|
|
{ return MIG_ARRAY_TOO_LARGE; }
|
|
}
|
|
(void)memcpy((char *) InP->old_state, (const char *) old_state, 4 * old_stateCnt);
|
|
|
|
InP->old_stateCnt = old_stateCnt;
|
|
|
|
msgh_size += (4 * old_stateCnt);
|
|
InP = &Mess.In;
|
|
InP->Head.msgh_bits = MACH_MSGH_BITS_COMPLEX|
|
|
MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);
|
|
/* msgh_size passed as argument */
|
|
InP->Head.msgh_request_port = exception_port;
|
|
InP->Head.msgh_reply_port = mig_get_reply_port();
|
|
InP->Head.msgh_id = 2407;
|
|
|
|
/* BEGIN VOUCHER CODE */
|
|
|
|
#ifdef USING_VOUCHERS
|
|
if (voucher_mach_msg_set != NULL) {
|
|
voucher_mach_msg_set(&InP->Head);
|
|
}
|
|
#endif // USING_VOUCHERS
|
|
|
|
/* END VOUCHER CODE */
|
|
|
|
__BeforeSendRpc(2407, "mach_exception_raise_state_identity")
|
|
msg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, msgh_size, (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
|
|
__AfterSendRpc(2407, "mach_exception_raise_state_identity")
|
|
if (msg_result != MACH_MSG_SUCCESS) {
|
|
__MachMsgErrorWithoutTimeout(msg_result);
|
|
{ return msg_result; }
|
|
}
|
|
|
|
|
|
#if defined(__MIG_check__Reply__mach_exception_raise_state_identity_t__defined)
|
|
check_result = __MIG_check__Reply__mach_exception_raise_state_identity_t((__Reply__mach_exception_raise_state_identity_t *)Out0P);
|
|
if (check_result != MACH_MSG_SUCCESS)
|
|
{ return check_result; }
|
|
#endif /* defined(__MIG_check__Reply__mach_exception_raise_state_identity_t__defined) */
|
|
|
|
*flavor = Out0P->flavor;
|
|
|
|
if (Out0P->new_stateCnt > 224) {
|
|
(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 * 224);
|
|
*new_stateCnt = Out0P->new_stateCnt;
|
|
{ return MIG_ARRAY_TOO_LARGE; }
|
|
}
|
|
(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 * Out0P->new_stateCnt);
|
|
|
|
*new_stateCnt = Out0P->new_stateCnt;
|
|
|
|
return KERN_SUCCESS;
|
|
}
|