github.com/undoio/delve@v1.9.0/pkg/proc/native/exc_user_darwin.c (about)

     1  //+build darwin,macnative
     2  
     3  /*
     4   * IDENTIFICATION:
     5   * stub generated Sun Feb 22 20:54:31 2015
     6   * with a MiG generated by bootstrap_cmds-91
     7   * OPTIONS: 
     8   */
     9  #define	__MIG_check__Reply__exc_subsystem__ 1
    10  
    11  #include "exc.h"
    12  
    13  
    14  #ifndef	mig_internal
    15  #define	mig_internal	static __inline__
    16  #endif	/* mig_internal */
    17  
    18  #ifndef	mig_external
    19  #define mig_external
    20  #endif	/* mig_external */
    21  
    22  #if	!defined(__MigTypeCheck) && defined(TypeCheck)
    23  #define	__MigTypeCheck		TypeCheck	/* Legacy setting */
    24  #endif	/* !defined(__MigTypeCheck) */
    25  
    26  #if	!defined(__MigKernelSpecificCode) && defined(_MIG_KERNEL_SPECIFIC_CODE_)
    27  #define	__MigKernelSpecificCode	_MIG_KERNEL_SPECIFIC_CODE_	/* Legacy setting */
    28  #endif	/* !defined(__MigKernelSpecificCode) */
    29  
    30  #ifndef	LimitCheck
    31  #define	LimitCheck 0
    32  #endif	/* LimitCheck */
    33  
    34  #ifndef	min
    35  #define	min(a,b)  ( ((a) < (b))? (a): (b) )
    36  #endif	/* min */
    37  
    38  #if !defined(_WALIGN_)
    39  #define _WALIGN_(x) (((x) + 3) & ~3)
    40  #endif /* !defined(_WALIGN_) */
    41  
    42  #if !defined(_WALIGNSZ_)
    43  #define _WALIGNSZ_(x) _WALIGN_(sizeof(x))
    44  #endif /* !defined(_WALIGNSZ_) */
    45  
    46  #ifndef	UseStaticTemplates
    47  #define	UseStaticTemplates	0
    48  #endif	/* UseStaticTemplates */
    49  
    50  #ifndef	__MachMsgErrorWithTimeout
    51  #define	__MachMsgErrorWithTimeout(_R_) { \
    52  	switch (_R_) { \
    53  	case MACH_SEND_INVALID_DATA: \
    54  	case MACH_SEND_INVALID_DEST: \
    55  	case MACH_SEND_INVALID_HEADER: \
    56  		mig_put_reply_port(InP->Head.msgh_reply_port); \
    57  		break; \
    58  	case MACH_SEND_TIMED_OUT: \
    59  	case MACH_RCV_TIMED_OUT: \
    60  	default: \
    61  		mig_dealloc_reply_port(InP->Head.msgh_reply_port); \
    62  	} \
    63  }
    64  #endif	/* __MachMsgErrorWithTimeout */
    65  
    66  #ifndef	__MachMsgErrorWithoutTimeout
    67  #define	__MachMsgErrorWithoutTimeout(_R_) { \
    68  	switch (_R_) { \
    69  	case MACH_SEND_INVALID_DATA: \
    70  	case MACH_SEND_INVALID_DEST: \
    71  	case MACH_SEND_INVALID_HEADER: \
    72  		mig_put_reply_port(InP->Head.msgh_reply_port); \
    73  		break; \
    74  	default: \
    75  		mig_dealloc_reply_port(InP->Head.msgh_reply_port); \
    76  	} \
    77  }
    78  #endif	/* __MachMsgErrorWithoutTimeout */
    79  
    80  #ifndef	__DeclareSendRpc
    81  #define	__DeclareSendRpc(_NUM_, _NAME_)
    82  #endif	/* __DeclareSendRpc */
    83  
    84  #ifndef	__BeforeSendRpc
    85  #define	__BeforeSendRpc(_NUM_, _NAME_)
    86  #endif	/* __BeforeSendRpc */
    87  
    88  #ifndef	__AfterSendRpc
    89  #define	__AfterSendRpc(_NUM_, _NAME_)
    90  #endif	/* __AfterSendRpc */
    91  
    92  #ifndef	__DeclareSendSimple
    93  #define	__DeclareSendSimple(_NUM_, _NAME_)
    94  #endif	/* __DeclareSendSimple */
    95  
    96  #ifndef	__BeforeSendSimple
    97  #define	__BeforeSendSimple(_NUM_, _NAME_)
    98  #endif	/* __BeforeSendSimple */
    99  
   100  #ifndef	__AfterSendSimple
   101  #define	__AfterSendSimple(_NUM_, _NAME_)
   102  #endif	/* __AfterSendSimple */
   103  
   104  #define msgh_request_port	msgh_remote_port
   105  #define msgh_reply_port		msgh_local_port
   106  
   107  
   108  
   109  #if ( __MigTypeCheck )
   110  #if __MIG_check__Reply__exc_subsystem__
   111  #if !defined(__MIG_check__Reply__exception_raise_t__defined)
   112  #define __MIG_check__Reply__exception_raise_t__defined
   113  
   114  mig_internal kern_return_t __MIG_check__Reply__exception_raise_t(__Reply__exception_raise_t *Out0P)
   115  {
   116  
   117  	typedef __Reply__exception_raise_t __Reply;
   118  	if (Out0P->Head.msgh_id != 2501) {
   119  	    if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)
   120  		{ return MIG_SERVER_DIED; }
   121  	    else
   122  		{ return MIG_REPLY_MISMATCH; }
   123  	}
   124  
   125  #if	__MigTypeCheck
   126  	if ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
   127  	    (Out0P->Head.msgh_size != (mach_msg_size_t)sizeof(__Reply)))
   128  		{ return MIG_TYPE_ERROR ; }
   129  #endif	/* __MigTypeCheck */
   130  
   131  	{
   132  		return Out0P->RetCode;
   133  	}
   134  }
   135  #endif /* !defined(__MIG_check__Reply__exception_raise_t__defined) */
   136  #endif /* __MIG_check__Reply__exc_subsystem__ */
   137  #endif /* ( __MigTypeCheck ) */
   138  
   139  
   140  /* Routine exception_raise */
   141  mig_external kern_return_t exception_raise
   142  (
   143  	mach_port_t exception_port,
   144  	mach_port_t thread,
   145  	mach_port_t task,
   146  	exception_type_t exception,
   147  	exception_data_t code,
   148  	mach_msg_type_number_t codeCnt
   149  )
   150  {
   151  
   152  #ifdef  __MigPackStructs
   153  #pragma pack(4)
   154  #endif
   155  	typedef struct {
   156  		mach_msg_header_t Head;
   157  		/* start of the kernel processed data */
   158  		mach_msg_body_t msgh_body;
   159  		mach_msg_port_descriptor_t thread;
   160  		mach_msg_port_descriptor_t task;
   161  		/* end of the kernel processed data */
   162  		NDR_record_t NDR;
   163  		exception_type_t exception;
   164  		mach_msg_type_number_t codeCnt;
   165  		integer_t code[2];
   166  	} Request;
   167  #ifdef  __MigPackStructs
   168  #pragma pack()
   169  #endif
   170  
   171  #ifdef  __MigPackStructs
   172  #pragma pack(4)
   173  #endif
   174  	typedef struct {
   175  		mach_msg_header_t Head;
   176  		NDR_record_t NDR;
   177  		kern_return_t RetCode;
   178  		mach_msg_trailer_t trailer;
   179  	} Reply;
   180  #ifdef  __MigPackStructs
   181  #pragma pack()
   182  #endif
   183  
   184  #ifdef  __MigPackStructs
   185  #pragma pack(4)
   186  #endif
   187  	typedef struct {
   188  		mach_msg_header_t Head;
   189  		NDR_record_t NDR;
   190  		kern_return_t RetCode;
   191  	} __Reply;
   192  #ifdef  __MigPackStructs
   193  #pragma pack()
   194  #endif
   195  	/*
   196  	 * typedef struct {
   197  	 * 	mach_msg_header_t Head;
   198  	 * 	NDR_record_t NDR;
   199  	 * 	kern_return_t RetCode;
   200  	 * } mig_reply_error_t;
   201  	 */
   202  
   203  	union {
   204  		Request In;
   205  		Reply Out;
   206  	} Mess;
   207  
   208  	Request *InP = &Mess.In;
   209  	Reply *Out0P = &Mess.Out;
   210  
   211  	mach_msg_return_t msg_result;
   212  	unsigned int msgh_size;
   213  
   214  #ifdef	__MIG_check__Reply__exception_raise_t__defined
   215  	kern_return_t check_result;
   216  #endif	/* __MIG_check__Reply__exception_raise_t__defined */
   217  
   218  	__DeclareSendRpc(2401, "exception_raise")
   219  
   220  #if	UseStaticTemplates
   221  	const static mach_msg_port_descriptor_t threadTemplate = {
   222  		/* name = */		MACH_PORT_NULL,
   223  		/* pad1 = */		0,
   224  		/* pad2 = */		0,
   225  		/* disp = */		19,
   226  		/* type = */		MACH_MSG_PORT_DESCRIPTOR,
   227  	};
   228  #endif	/* UseStaticTemplates */
   229  
   230  #if	UseStaticTemplates
   231  	const static mach_msg_port_descriptor_t taskTemplate = {
   232  		/* name = */		MACH_PORT_NULL,
   233  		/* pad1 = */		0,
   234  		/* pad2 = */		0,
   235  		/* disp = */		19,
   236  		/* type = */		MACH_MSG_PORT_DESCRIPTOR,
   237  	};
   238  #endif	/* UseStaticTemplates */
   239  
   240  	InP->msgh_body.msgh_descriptor_count = 2;
   241  #if	UseStaticTemplates
   242  	InP->thread = threadTemplate;
   243  	InP->thread.name = thread;
   244  #else	/* UseStaticTemplates */
   245  	InP->thread.name = thread;
   246  	InP->thread.disposition = 19;
   247  	InP->thread.type = MACH_MSG_PORT_DESCRIPTOR;
   248  #endif	/* UseStaticTemplates */
   249  
   250  #if	UseStaticTemplates
   251  	InP->task = taskTemplate;
   252  	InP->task.name = task;
   253  #else	/* UseStaticTemplates */
   254  	InP->task.name = task;
   255  	InP->task.disposition = 19;
   256  	InP->task.type = MACH_MSG_PORT_DESCRIPTOR;
   257  #endif	/* UseStaticTemplates */
   258  
   259  	InP->NDR = NDR_record;
   260  
   261  	InP->exception = exception;
   262  
   263  	if (codeCnt > 2) {
   264  		{ return MIG_ARRAY_TOO_LARGE; }
   265  	}
   266  	(void)memcpy((char *) InP->code, (const char *) code, 4 * codeCnt);
   267  
   268  	InP->codeCnt = codeCnt;
   269  
   270  	msgh_size = (mach_msg_size_t)(sizeof(Request) - 8) + ((4 * codeCnt));
   271  	InP->Head.msgh_bits = MACH_MSGH_BITS_COMPLEX|
   272  		MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);
   273  	/* msgh_size passed as argument */
   274  	InP->Head.msgh_request_port = exception_port;
   275  	InP->Head.msgh_reply_port = mig_get_reply_port();
   276  	InP->Head.msgh_id = 2401;
   277  	
   278  /* BEGIN VOUCHER CODE */
   279  
   280  #ifdef USING_VOUCHERS
   281  	if (voucher_mach_msg_set != NULL) {
   282  		voucher_mach_msg_set(&InP->Head);
   283  	}
   284  #endif // USING_VOUCHERS
   285  	
   286  /* END VOUCHER CODE */
   287  
   288  	__BeforeSendRpc(2401, "exception_raise")
   289  	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);
   290  	__AfterSendRpc(2401, "exception_raise")
   291  	if (msg_result != MACH_MSG_SUCCESS) {
   292  		__MachMsgErrorWithoutTimeout(msg_result);
   293  		{ return msg_result; }
   294  	}
   295  
   296  
   297  #if	defined(__MIG_check__Reply__exception_raise_t__defined)
   298  	check_result = __MIG_check__Reply__exception_raise_t((__Reply__exception_raise_t *)Out0P);
   299  	if (check_result != MACH_MSG_SUCCESS)
   300  		{ return check_result; }
   301  #endif	/* defined(__MIG_check__Reply__exception_raise_t__defined) */
   302  
   303  	return KERN_SUCCESS;
   304  }
   305  
   306  #if ( __MigTypeCheck )
   307  #if __MIG_check__Reply__exc_subsystem__
   308  #if !defined(__MIG_check__Reply__exception_raise_state_t__defined)
   309  #define __MIG_check__Reply__exception_raise_state_t__defined
   310  
   311  mig_internal kern_return_t __MIG_check__Reply__exception_raise_state_t(__Reply__exception_raise_state_t *Out0P)
   312  {
   313  
   314  	typedef __Reply__exception_raise_state_t __Reply;
   315  #if	__MigTypeCheck
   316  	unsigned int msgh_size;
   317  #endif	/* __MigTypeCheck */
   318  
   319  	if (Out0P->Head.msgh_id != 2502) {
   320  	    if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)
   321  		{ return MIG_SERVER_DIED; }
   322  	    else
   323  		{ return MIG_REPLY_MISMATCH; }
   324  	}
   325  
   326  #if	__MigTypeCheck
   327  	msgh_size = Out0P->Head.msgh_size;
   328  
   329  	if ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
   330  	    ((msgh_size > (mach_msg_size_t)sizeof(__Reply) || msgh_size < (mach_msg_size_t)(sizeof(__Reply) - 896)) &&
   331  	     (msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) ||
   332  	      Out0P->RetCode == KERN_SUCCESS)))
   333  		{ return MIG_TYPE_ERROR ; }
   334  #endif	/* __MigTypeCheck */
   335  
   336  	if (Out0P->RetCode != KERN_SUCCESS) {
   337  		return ((mig_reply_error_t *)Out0P)->RetCode;
   338  	}
   339  
   340  #if	__MigTypeCheck
   341  	if ( Out0P->new_stateCnt > 224 )
   342  		return MIG_TYPE_ERROR;
   343  	if (((msgh_size - (mach_msg_size_t)(sizeof(__Reply) - 896)) / 4< Out0P->new_stateCnt) ||
   344  	    (msgh_size != (mach_msg_size_t)(sizeof(__Reply) - 896) + Out0P->new_stateCnt * 4))
   345  		{ return MIG_TYPE_ERROR ; }
   346  #endif	/* __MigTypeCheck */
   347  
   348  	return MACH_MSG_SUCCESS;
   349  }
   350  #endif /* !defined(__MIG_check__Reply__exception_raise_state_t__defined) */
   351  #endif /* __MIG_check__Reply__exc_subsystem__ */
   352  #endif /* ( __MigTypeCheck ) */
   353  
   354  
   355  /* Routine exception_raise_state */
   356  mig_external kern_return_t exception_raise_state
   357  (
   358  	mach_port_t exception_port,
   359  	exception_type_t exception,
   360  	const exception_data_t code,
   361  	mach_msg_type_number_t codeCnt,
   362  	int *flavor,
   363  	const thread_state_t old_state,
   364  	mach_msg_type_number_t old_stateCnt,
   365  	thread_state_t new_state,
   366  	mach_msg_type_number_t *new_stateCnt
   367  )
   368  {
   369  
   370  #ifdef  __MigPackStructs
   371  #pragma pack(4)
   372  #endif
   373  	typedef struct {
   374  		mach_msg_header_t Head;
   375  		NDR_record_t NDR;
   376  		exception_type_t exception;
   377  		mach_msg_type_number_t codeCnt;
   378  		integer_t code[2];
   379  		int flavor;
   380  		mach_msg_type_number_t old_stateCnt;
   381  		natural_t old_state[224];
   382  	} Request;
   383  #ifdef  __MigPackStructs
   384  #pragma pack()
   385  #endif
   386  
   387  #ifdef  __MigPackStructs
   388  #pragma pack(4)
   389  #endif
   390  	typedef struct {
   391  		mach_msg_header_t Head;
   392  		NDR_record_t NDR;
   393  		kern_return_t RetCode;
   394  		int flavor;
   395  		mach_msg_type_number_t new_stateCnt;
   396  		natural_t new_state[224];
   397  		mach_msg_trailer_t trailer;
   398  	} Reply;
   399  #ifdef  __MigPackStructs
   400  #pragma pack()
   401  #endif
   402  
   403  #ifdef  __MigPackStructs
   404  #pragma pack(4)
   405  #endif
   406  	typedef struct {
   407  		mach_msg_header_t Head;
   408  		NDR_record_t NDR;
   409  		kern_return_t RetCode;
   410  		int flavor;
   411  		mach_msg_type_number_t new_stateCnt;
   412  		natural_t new_state[224];
   413  	} __Reply;
   414  #ifdef  __MigPackStructs
   415  #pragma pack()
   416  #endif
   417  	/*
   418  	 * typedef struct {
   419  	 * 	mach_msg_header_t Head;
   420  	 * 	NDR_record_t NDR;
   421  	 * 	kern_return_t RetCode;
   422  	 * } mig_reply_error_t;
   423  	 */
   424  
   425  	union {
   426  		Request In;
   427  		Reply Out;
   428  	} Mess;
   429  
   430  	Request *InP = &Mess.In;
   431  	Reply *Out0P = &Mess.Out;
   432  
   433  	mach_msg_return_t msg_result;
   434  	unsigned int msgh_size;
   435  	unsigned int msgh_size_delta;
   436  
   437  
   438  #ifdef	__MIG_check__Reply__exception_raise_state_t__defined
   439  	kern_return_t check_result;
   440  #endif	/* __MIG_check__Reply__exception_raise_state_t__defined */
   441  
   442  	__DeclareSendRpc(2402, "exception_raise_state")
   443  
   444  	InP->NDR = NDR_record;
   445  
   446  	InP->exception = exception;
   447  
   448  	if (codeCnt > 2) {
   449  		{ return MIG_ARRAY_TOO_LARGE; }
   450  	}
   451  	(void)memcpy((char *) InP->code, (const char *) code, 4 * codeCnt);
   452  
   453  	InP->codeCnt = codeCnt;
   454  
   455  	msgh_size_delta = (4 * codeCnt);
   456  	msgh_size = (mach_msg_size_t)(sizeof(Request) - 904) + msgh_size_delta;
   457  	InP = (Request *) ((pointer_t) InP + msgh_size_delta - 8);
   458  
   459  	InP->flavor = *flavor;
   460  
   461  	if (old_stateCnt > 224) {
   462  		{ return MIG_ARRAY_TOO_LARGE; }
   463  	}
   464  	(void)memcpy((char *) InP->old_state, (const char *) old_state, 4 * old_stateCnt);
   465  
   466  	InP->old_stateCnt = old_stateCnt;
   467  
   468  	msgh_size += (4 * old_stateCnt);
   469  	InP = &Mess.In;
   470  	InP->Head.msgh_bits =
   471  		MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);
   472  	/* msgh_size passed as argument */
   473  	InP->Head.msgh_request_port = exception_port;
   474  	InP->Head.msgh_reply_port = mig_get_reply_port();
   475  	InP->Head.msgh_id = 2402;
   476  	
   477  /* BEGIN VOUCHER CODE */
   478  
   479  #ifdef USING_VOUCHERS
   480  	if (voucher_mach_msg_set != NULL) {
   481  		voucher_mach_msg_set(&InP->Head);
   482  	}
   483  #endif // USING_VOUCHERS
   484  	
   485  /* END VOUCHER CODE */
   486  
   487  	__BeforeSendRpc(2402, "exception_raise_state")
   488  	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);
   489  	__AfterSendRpc(2402, "exception_raise_state")
   490  	if (msg_result != MACH_MSG_SUCCESS) {
   491  		__MachMsgErrorWithoutTimeout(msg_result);
   492  		{ return msg_result; }
   493  	}
   494  
   495  
   496  #if	defined(__MIG_check__Reply__exception_raise_state_t__defined)
   497  	check_result = __MIG_check__Reply__exception_raise_state_t((__Reply__exception_raise_state_t *)Out0P);
   498  	if (check_result != MACH_MSG_SUCCESS)
   499  		{ return check_result; }
   500  #endif	/* defined(__MIG_check__Reply__exception_raise_state_t__defined) */
   501  
   502  	*flavor = Out0P->flavor;
   503  
   504  	if (Out0P->new_stateCnt > 224) {
   505  		(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 *  224);
   506  		*new_stateCnt = Out0P->new_stateCnt;
   507  		{ return MIG_ARRAY_TOO_LARGE; }
   508  	}
   509  	(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 * Out0P->new_stateCnt);
   510  
   511  	*new_stateCnt = Out0P->new_stateCnt;
   512  
   513  	return KERN_SUCCESS;
   514  }
   515  
   516  #if ( __MigTypeCheck )
   517  #if __MIG_check__Reply__exc_subsystem__
   518  #if !defined(__MIG_check__Reply__exception_raise_state_identity_t__defined)
   519  #define __MIG_check__Reply__exception_raise_state_identity_t__defined
   520  
   521  mig_internal kern_return_t __MIG_check__Reply__exception_raise_state_identity_t(__Reply__exception_raise_state_identity_t *Out0P)
   522  {
   523  
   524  	typedef __Reply__exception_raise_state_identity_t __Reply;
   525  #if	__MigTypeCheck
   526  	unsigned int msgh_size;
   527  #endif	/* __MigTypeCheck */
   528  
   529  	if (Out0P->Head.msgh_id != 2503) {
   530  	    if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)
   531  		{ return MIG_SERVER_DIED; }
   532  	    else
   533  		{ return MIG_REPLY_MISMATCH; }
   534  	}
   535  
   536  #if	__MigTypeCheck
   537  	msgh_size = Out0P->Head.msgh_size;
   538  
   539  	if ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
   540  	    ((msgh_size > (mach_msg_size_t)sizeof(__Reply) || msgh_size < (mach_msg_size_t)(sizeof(__Reply) - 896)) &&
   541  	     (msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) ||
   542  	      Out0P->RetCode == KERN_SUCCESS)))
   543  		{ return MIG_TYPE_ERROR ; }
   544  #endif	/* __MigTypeCheck */
   545  
   546  	if (Out0P->RetCode != KERN_SUCCESS) {
   547  		return ((mig_reply_error_t *)Out0P)->RetCode;
   548  	}
   549  
   550  #if	__MigTypeCheck
   551  	if ( Out0P->new_stateCnt > 224 )
   552  		return MIG_TYPE_ERROR;
   553  	if (((msgh_size - (mach_msg_size_t)(sizeof(__Reply) - 896)) / 4< Out0P->new_stateCnt) ||
   554  	    (msgh_size != (mach_msg_size_t)(sizeof(__Reply) - 896) + Out0P->new_stateCnt * 4))
   555  		{ return MIG_TYPE_ERROR ; }
   556  #endif	/* __MigTypeCheck */
   557  
   558  	return MACH_MSG_SUCCESS;
   559  }
   560  #endif /* !defined(__MIG_check__Reply__exception_raise_state_identity_t__defined) */
   561  #endif /* __MIG_check__Reply__exc_subsystem__ */
   562  #endif /* ( __MigTypeCheck ) */
   563  
   564  
   565  /* Routine exception_raise_state_identity */
   566  mig_external kern_return_t exception_raise_state_identity
   567  (
   568  	mach_port_t exception_port,
   569  	mach_port_t thread,
   570  	mach_port_t task,
   571  	exception_type_t exception,
   572  	exception_data_t code,
   573  	mach_msg_type_number_t codeCnt,
   574  	int *flavor,
   575  	thread_state_t old_state,
   576  	mach_msg_type_number_t old_stateCnt,
   577  	thread_state_t new_state,
   578  	mach_msg_type_number_t *new_stateCnt
   579  )
   580  {
   581  
   582  #ifdef  __MigPackStructs
   583  #pragma pack(4)
   584  #endif
   585  	typedef struct {
   586  		mach_msg_header_t Head;
   587  		/* start of the kernel processed data */
   588  		mach_msg_body_t msgh_body;
   589  		mach_msg_port_descriptor_t thread;
   590  		mach_msg_port_descriptor_t task;
   591  		/* end of the kernel processed data */
   592  		NDR_record_t NDR;
   593  		exception_type_t exception;
   594  		mach_msg_type_number_t codeCnt;
   595  		integer_t code[2];
   596  		int flavor;
   597  		mach_msg_type_number_t old_stateCnt;
   598  		natural_t old_state[224];
   599  	} Request;
   600  #ifdef  __MigPackStructs
   601  #pragma pack()
   602  #endif
   603  
   604  #ifdef  __MigPackStructs
   605  #pragma pack(4)
   606  #endif
   607  	typedef struct {
   608  		mach_msg_header_t Head;
   609  		NDR_record_t NDR;
   610  		kern_return_t RetCode;
   611  		int flavor;
   612  		mach_msg_type_number_t new_stateCnt;
   613  		natural_t new_state[224];
   614  		mach_msg_trailer_t trailer;
   615  	} Reply;
   616  #ifdef  __MigPackStructs
   617  #pragma pack()
   618  #endif
   619  
   620  #ifdef  __MigPackStructs
   621  #pragma pack(4)
   622  #endif
   623  	typedef struct {
   624  		mach_msg_header_t Head;
   625  		NDR_record_t NDR;
   626  		kern_return_t RetCode;
   627  		int flavor;
   628  		mach_msg_type_number_t new_stateCnt;
   629  		natural_t new_state[224];
   630  	} __Reply;
   631  #ifdef  __MigPackStructs
   632  #pragma pack()
   633  #endif
   634  	/*
   635  	 * typedef struct {
   636  	 * 	mach_msg_header_t Head;
   637  	 * 	NDR_record_t NDR;
   638  	 * 	kern_return_t RetCode;
   639  	 * } mig_reply_error_t;
   640  	 */
   641  
   642  	union {
   643  		Request In;
   644  		Reply Out;
   645  	} Mess;
   646  
   647  	Request *InP = &Mess.In;
   648  	Reply *Out0P = &Mess.Out;
   649  
   650  	mach_msg_return_t msg_result;
   651  	unsigned int msgh_size;
   652  	unsigned int msgh_size_delta;
   653  
   654  
   655  #ifdef	__MIG_check__Reply__exception_raise_state_identity_t__defined
   656  	kern_return_t check_result;
   657  #endif	/* __MIG_check__Reply__exception_raise_state_identity_t__defined */
   658  
   659  	__DeclareSendRpc(2403, "exception_raise_state_identity")
   660  
   661  #if	UseStaticTemplates
   662  	const static mach_msg_port_descriptor_t threadTemplate = {
   663  		/* name = */		MACH_PORT_NULL,
   664  		/* pad1 = */		0,
   665  		/* pad2 = */		0,
   666  		/* disp = */		19,
   667  		/* type = */		MACH_MSG_PORT_DESCRIPTOR,
   668  	};
   669  #endif	/* UseStaticTemplates */
   670  
   671  #if	UseStaticTemplates
   672  	const static mach_msg_port_descriptor_t taskTemplate = {
   673  		/* name = */		MACH_PORT_NULL,
   674  		/* pad1 = */		0,
   675  		/* pad2 = */		0,
   676  		/* disp = */		19,
   677  		/* type = */		MACH_MSG_PORT_DESCRIPTOR,
   678  	};
   679  #endif	/* UseStaticTemplates */
   680  
   681  	InP->msgh_body.msgh_descriptor_count = 2;
   682  #if	UseStaticTemplates
   683  	InP->thread = threadTemplate;
   684  	InP->thread.name = thread;
   685  #else	/* UseStaticTemplates */
   686  	InP->thread.name = thread;
   687  	InP->thread.disposition = 19;
   688  	InP->thread.type = MACH_MSG_PORT_DESCRIPTOR;
   689  #endif	/* UseStaticTemplates */
   690  
   691  #if	UseStaticTemplates
   692  	InP->task = taskTemplate;
   693  	InP->task.name = task;
   694  #else	/* UseStaticTemplates */
   695  	InP->task.name = task;
   696  	InP->task.disposition = 19;
   697  	InP->task.type = MACH_MSG_PORT_DESCRIPTOR;
   698  #endif	/* UseStaticTemplates */
   699  
   700  	InP->NDR = NDR_record;
   701  
   702  	InP->exception = exception;
   703  
   704  	if (codeCnt > 2) {
   705  		{ return MIG_ARRAY_TOO_LARGE; }
   706  	}
   707  	(void)memcpy((char *) InP->code, (const char *) code, 4 * codeCnt);
   708  
   709  	InP->codeCnt = codeCnt;
   710  
   711  	msgh_size_delta = (4 * codeCnt);
   712  	msgh_size = (mach_msg_size_t)(sizeof(Request) - 904) + msgh_size_delta;
   713  	InP = (Request *) ((pointer_t) InP + msgh_size_delta - 8);
   714  
   715  	InP->flavor = *flavor;
   716  
   717  	if (old_stateCnt > 224) {
   718  		{ return MIG_ARRAY_TOO_LARGE; }
   719  	}
   720  	(void)memcpy((char *) InP->old_state, (const char *) old_state, 4 * old_stateCnt);
   721  
   722  	InP->old_stateCnt = old_stateCnt;
   723  
   724  	msgh_size += (4 * old_stateCnt);
   725  	InP = &Mess.In;
   726  	InP->Head.msgh_bits = MACH_MSGH_BITS_COMPLEX|
   727  		MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);
   728  	/* msgh_size passed as argument */
   729  	InP->Head.msgh_request_port = exception_port;
   730  	InP->Head.msgh_reply_port = mig_get_reply_port();
   731  	InP->Head.msgh_id = 2403;
   732  	
   733  /* BEGIN VOUCHER CODE */
   734  
   735  #ifdef USING_VOUCHERS
   736  	if (voucher_mach_msg_set != NULL) {
   737  		voucher_mach_msg_set(&InP->Head);
   738  	}
   739  #endif // USING_VOUCHERS
   740  	
   741  /* END VOUCHER CODE */
   742  
   743  	__BeforeSendRpc(2403, "exception_raise_state_identity")
   744  	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);
   745  	__AfterSendRpc(2403, "exception_raise_state_identity")
   746  	if (msg_result != MACH_MSG_SUCCESS) {
   747  		__MachMsgErrorWithoutTimeout(msg_result);
   748  		{ return msg_result; }
   749  	}
   750  
   751  
   752  #if	defined(__MIG_check__Reply__exception_raise_state_identity_t__defined)
   753  	check_result = __MIG_check__Reply__exception_raise_state_identity_t((__Reply__exception_raise_state_identity_t *)Out0P);
   754  	if (check_result != MACH_MSG_SUCCESS)
   755  		{ return check_result; }
   756  #endif	/* defined(__MIG_check__Reply__exception_raise_state_identity_t__defined) */
   757  
   758  	*flavor = Out0P->flavor;
   759  
   760  	if (Out0P->new_stateCnt > 224) {
   761  		(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 *  224);
   762  		*new_stateCnt = Out0P->new_stateCnt;
   763  		{ return MIG_ARRAY_TOO_LARGE; }
   764  	}
   765  	(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 * Out0P->new_stateCnt);
   766  
   767  	*new_stateCnt = Out0P->new_stateCnt;
   768  
   769  	return KERN_SUCCESS;
   770  }