mirror of
				https://github.com/go-delve/delve.git
				synced 2025-10-31 02:36:18 +08:00 
			
		
		
		
	 910f90c3c8
			
		
	
	910f90c3c8
	
	
	
		
			
			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 Sun Feb 22 20:54:31 2015
 | |
|  * with a MiG generated by bootstrap_cmds-91
 | |
|  * OPTIONS: 
 | |
|  */
 | |
| #define	__MIG_check__Reply__exc_subsystem__ 1
 | |
| 
 | |
| #include "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__exc_subsystem__
 | |
| #if !defined(__MIG_check__Reply__exception_raise_t__defined)
 | |
| #define __MIG_check__Reply__exception_raise_t__defined
 | |
| 
 | |
| mig_internal kern_return_t __MIG_check__Reply__exception_raise_t(__Reply__exception_raise_t *Out0P)
 | |
| {
 | |
| 
 | |
| 	typedef __Reply__exception_raise_t __Reply;
 | |
| 	if (Out0P->Head.msgh_id != 2501) {
 | |
| 	    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__exception_raise_t__defined) */
 | |
| #endif /* __MIG_check__Reply__exc_subsystem__ */
 | |
| #endif /* ( __MigTypeCheck ) */
 | |
| 
 | |
| 
 | |
| /* Routine exception_raise */
 | |
| mig_external kern_return_t exception_raise
 | |
| (
 | |
| 	mach_port_t exception_port,
 | |
| 	mach_port_t thread,
 | |
| 	mach_port_t task,
 | |
| 	exception_type_t exception,
 | |
| 	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;
 | |
| 		integer_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__exception_raise_t__defined
 | |
| 	kern_return_t check_result;
 | |
| #endif	/* __MIG_check__Reply__exception_raise_t__defined */
 | |
| 
 | |
| 	__DeclareSendRpc(2401, "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, 4 * codeCnt);
 | |
| 
 | |
| 	InP->codeCnt = codeCnt;
 | |
| 
 | |
| 	msgh_size = (mach_msg_size_t)(sizeof(Request) - 8) + ((4 * 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 = 2401;
 | |
| 	
 | |
| /* 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(2401, "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(2401, "exception_raise")
 | |
| 	if (msg_result != MACH_MSG_SUCCESS) {
 | |
| 		__MachMsgErrorWithoutTimeout(msg_result);
 | |
| 		{ return msg_result; }
 | |
| 	}
 | |
| 
 | |
| 
 | |
| #if	defined(__MIG_check__Reply__exception_raise_t__defined)
 | |
| 	check_result = __MIG_check__Reply__exception_raise_t((__Reply__exception_raise_t *)Out0P);
 | |
| 	if (check_result != MACH_MSG_SUCCESS)
 | |
| 		{ return check_result; }
 | |
| #endif	/* defined(__MIG_check__Reply__exception_raise_t__defined) */
 | |
| 
 | |
| 	return KERN_SUCCESS;
 | |
| }
 | |
| 
 | |
| #if ( __MigTypeCheck )
 | |
| #if __MIG_check__Reply__exc_subsystem__
 | |
| #if !defined(__MIG_check__Reply__exception_raise_state_t__defined)
 | |
| #define __MIG_check__Reply__exception_raise_state_t__defined
 | |
| 
 | |
| mig_internal kern_return_t __MIG_check__Reply__exception_raise_state_t(__Reply__exception_raise_state_t *Out0P)
 | |
| {
 | |
| 
 | |
| 	typedef __Reply__exception_raise_state_t __Reply;
 | |
| #if	__MigTypeCheck
 | |
| 	unsigned int msgh_size;
 | |
| #endif	/* __MigTypeCheck */
 | |
| 
 | |
| 	if (Out0P->Head.msgh_id != 2502) {
 | |
| 	    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__exception_raise_state_t__defined) */
 | |
| #endif /* __MIG_check__Reply__exc_subsystem__ */
 | |
| #endif /* ( __MigTypeCheck ) */
 | |
| 
 | |
| 
 | |
| /* Routine exception_raise_state */
 | |
| mig_external kern_return_t exception_raise_state
 | |
| (
 | |
| 	mach_port_t exception_port,
 | |
| 	exception_type_t exception,
 | |
| 	const 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;
 | |
| 		integer_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__exception_raise_state_t__defined
 | |
| 	kern_return_t check_result;
 | |
| #endif	/* __MIG_check__Reply__exception_raise_state_t__defined */
 | |
| 
 | |
| 	__DeclareSendRpc(2402, "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, 4 * codeCnt);
 | |
| 
 | |
| 	InP->codeCnt = codeCnt;
 | |
| 
 | |
| 	msgh_size_delta = (4 * codeCnt);
 | |
| 	msgh_size = (mach_msg_size_t)(sizeof(Request) - 904) + msgh_size_delta;
 | |
| 	InP = (Request *) ((pointer_t) InP + msgh_size_delta - 8);
 | |
| 
 | |
| 	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 = 2402;
 | |
| 	
 | |
| /* 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(2402, "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(2402, "exception_raise_state")
 | |
| 	if (msg_result != MACH_MSG_SUCCESS) {
 | |
| 		__MachMsgErrorWithoutTimeout(msg_result);
 | |
| 		{ return msg_result; }
 | |
| 	}
 | |
| 
 | |
| 
 | |
| #if	defined(__MIG_check__Reply__exception_raise_state_t__defined)
 | |
| 	check_result = __MIG_check__Reply__exception_raise_state_t((__Reply__exception_raise_state_t *)Out0P);
 | |
| 	if (check_result != MACH_MSG_SUCCESS)
 | |
| 		{ return check_result; }
 | |
| #endif	/* defined(__MIG_check__Reply__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__exc_subsystem__
 | |
| #if !defined(__MIG_check__Reply__exception_raise_state_identity_t__defined)
 | |
| #define __MIG_check__Reply__exception_raise_state_identity_t__defined
 | |
| 
 | |
| mig_internal kern_return_t __MIG_check__Reply__exception_raise_state_identity_t(__Reply__exception_raise_state_identity_t *Out0P)
 | |
| {
 | |
| 
 | |
| 	typedef __Reply__exception_raise_state_identity_t __Reply;
 | |
| #if	__MigTypeCheck
 | |
| 	unsigned int msgh_size;
 | |
| #endif	/* __MigTypeCheck */
 | |
| 
 | |
| 	if (Out0P->Head.msgh_id != 2503) {
 | |
| 	    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__exception_raise_state_identity_t__defined) */
 | |
| #endif /* __MIG_check__Reply__exc_subsystem__ */
 | |
| #endif /* ( __MigTypeCheck ) */
 | |
| 
 | |
| 
 | |
| /* Routine exception_raise_state_identity */
 | |
| mig_external kern_return_t exception_raise_state_identity
 | |
| (
 | |
| 	mach_port_t exception_port,
 | |
| 	mach_port_t thread,
 | |
| 	mach_port_t task,
 | |
| 	exception_type_t exception,
 | |
| 	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;
 | |
| 		integer_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__exception_raise_state_identity_t__defined
 | |
| 	kern_return_t check_result;
 | |
| #endif	/* __MIG_check__Reply__exception_raise_state_identity_t__defined */
 | |
| 
 | |
| 	__DeclareSendRpc(2403, "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, 4 * codeCnt);
 | |
| 
 | |
| 	InP->codeCnt = codeCnt;
 | |
| 
 | |
| 	msgh_size_delta = (4 * codeCnt);
 | |
| 	msgh_size = (mach_msg_size_t)(sizeof(Request) - 904) + msgh_size_delta;
 | |
| 	InP = (Request *) ((pointer_t) InP + msgh_size_delta - 8);
 | |
| 
 | |
| 	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 = 2403;
 | |
| 	
 | |
| /* 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(2403, "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(2403, "exception_raise_state_identity")
 | |
| 	if (msg_result != MACH_MSG_SUCCESS) {
 | |
| 		__MachMsgErrorWithoutTimeout(msg_result);
 | |
| 		{ return msg_result; }
 | |
| 	}
 | |
| 
 | |
| 
 | |
| #if	defined(__MIG_check__Reply__exception_raise_state_identity_t__defined)
 | |
| 	check_result = __MIG_check__Reply__exception_raise_state_identity_t((__Reply__exception_raise_state_identity_t *)Out0P);
 | |
| 	if (check_result != MACH_MSG_SUCCESS)
 | |
| 		{ return check_result; }
 | |
| #endif	/* defined(__MIG_check__Reply__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;
 | |
| }
 |