/***************************************************************************** * * * Copyright 2002 Compaq Information Technologies Group, L.P. * * Compaq and the Compaq logo are trademarks of Compaq Information * Technologies Group, L.P. in the U.S. and/or other countries. * * Confidential computer software. Valid license from Compaq required for * possession, use or copying. Consistent with FAR 12.211 and 12.212, * Commercial Computer Software, Computer Software Documentation, and * Technical Data for Commercial Items are licensed to the U.S. Government * under vendor's standard commercial license. * * *****************************************************************************/ /* *++ * FACILITY: * * VMS Executive (LIB) * * ABSTRACT: * * This header file will do some of the setup necessary for system services. * It is ONLY for use in setting up change-mode services. If you are creating * a mode-of-the-caller system service, it must have a SYS$xxx routine name. * All callers will use that name. If you are creating a change-mode service, * then you may have an "internal" name as well as the public, SYS$xxx name. * You need only create the routine with your internal name and define * special symbols (see below) for the name and prefix you're using. Note that * your "internal" routine must be a standard call and should not make any * assumptions about where it was called from (like the change-mode dispatcher). * * Before including this header file, the programmer needs to #define symbols * for those routines and how they're called. This is different from how the * setup works from MACRO or BLISS, where a nice macro takes care of ALL of * the ugly stuff. * * Multiple inclusions of this header file would introduce padding between * the contributions to the EXEC$INIT_SSTBL_001 PSECT. The system service * loader interprets the padding (a longword of zeroes) as the termination of * the system service vector list. To avoid the run-time problems, this header * file will generate compile-time errors when included more than once. * * It is still possible to declare multiple system services from the same C * module. The symbols must be defined for all such services prior to inclusion * of this header file so that the initialization can take place all at once. * * The way you use this include file DOES matter. It can ONLY be invoked from * the outer most scope of your C module, and that includes outside of main{}. * You must also have already declared the system service routines. * ************************************************************************* * This should not be true anymore since we specify these attributes * (except MOD) in this header file. I left this comment here for posterity so * you will know why there are all the PSECT_ATTR statements in link commands. * * You must * also be sure that the link option file for your image specifies the correct * PSECT attributes for the EXEC$INIT_SSTBL_001 PSECT. What is generated by * DECC will NOT be correct. The attributes should be: * * LONG,PIC,CON,REL,GBL,NOSHR,EXE,WRT,NOVEC,MOD * * **************************************************************************** * The following examples show what to do in your C code to emulate what * you used to do in MACRO and BLISS (note that the IMASK, FLAGS, and TYPE * fields are specifying the default values and could be omitted). You must * define several "temporary" symbols prior to including this header file. * These symbols will be "undefined" by this header file. This header file * currently supports up to 5 system service definitions. The symbol * SYSRVC_NUMBER is defined to be the number of system service vectors needed * (defaults to 1). * * To setup a single kernel-mode system service: * * exe$krnl_sysrvc_rtn() * { } * * #define SYSRVC_PREFIX_NAME exe$ * #define SYSRVC_ROUTINE_NAME krnl_sysrvc_rtn * #define SYSRVC_MODE MODE_K_KERNEL * #define SYSRVC_IMASK 129 * #define SYSRVC_FLAGS 0 * #define SYSRVC_TYPE TYPE_K_NORMAL * #include * * To setup three kernel-mode system services: * * exe$krnl_sysrvc_rtn1() * { } * exe$krnl_sysrvc_rtn2() * { } * exe$krnl_sysrvc_rtn3() * { } * * #define SYSRVC_PREFIX_NAME exe$ * #define SYSRVC_ROUTINE_NAME krnl_sysrvc_rtn1 * #define SYSRVC_MODE MODE_K_KERNEL * #define SYSRVC_IMASK 129 * #define SYSRVC_FLAGS 0 * #define SYSRVC_TYPE TYPE_K_NORMAL * * #define SYSRVC_NUMBER 2 * #define SYSRVC2_PREFIX_NAME exe$ * #define SYSRVC2_ROUTINE_NAME krnl_sysrvc_rtn2 * #define SYSRVC2_MODE MODE_K_KERNEL * #define SYSRVC2_IMASK 129 * #define SYSRVC2_FLAGS 0 * #define SYSRVC2_TYPE TYPE_K_NORMAL * * #define SYSRVC_NUMBER 3 * #define SYSRVC3_PREFIX_NAME exe$ * #define SYSRVC3_ROUTINE_NAME krnl_sysrvc_rtn3 * #define SYSRVC3_MODE MODE_K_KERNEL * #define SYSRVC3_IMASK 129 * #define SYSRVC3_FLAGS 0 * #define SYSRVC3_TYPE TYPE_K_NORMAL * * #include * * This header file includes starlet.h to define the system service prototypes. * * If a service in the module is in starlet.h, but has a different declaration, * define __STARLET_LOADED before inluding system_service_setup.h. This will * disable all declarations from starlet.h. * * #define __STARLET_LOADED * * If a service being setup is not in starlet.h or if you defined * __STARLET_LOADED because of a conflict, declare the service in the source * module before including system_service_setup.h as follows: * * int sys$krnl_sysrvc_rtn (proper arguments...); * #include * * AUTHOR: * * Steve DiPirro * * CREATION DATE: 29-Jan-1993 * * MODIFICATION HISTORY: * * X-13 WBF Burns Fisher 8-Jan-2009 * Disable superfluous alignment messages from latest C compiler * * X-12 GHJ Gregory H. Jordan 9-Apr-2004 * Increase the number of system services that can be defined * to 6. * * X-11 KLN3057 Karen L. Noel 18-Apr-2002 * We can no longer declare sys$ routines without arguments. * The compiler complains when the declarations don't match * existing ones. So we define them by including starlet.h. * Those services not in starlet.h require a definition in the * source module. Those modules that contain defintions that * conflict with starlet.h need to define __STARLET_LOADED to * disable the include of starlet.h. * * X-10 WBF Burns Fisher 04-Aug-1999 * Add psect attributes to the extern psects, since the * compiler now supports it. That should prevent the * occasional mysterious system service failures-to- * load that we see. Problem was that the alignment * was OCTA if you did not explictly force it to long * with a PSECT_ATTR statement in the linker. This might * sometimes cause the linker to insert an extra longword. * * X-9 KLN2077 Karen L. Noel 21-May-1998 * Disable the information about no parameter list. * * X-8 DMB Dave Bernardo 03-Jan-1996 * Fix bogus characters at end of lines. * * X-7 DMB Dave Bernardo 20-Dec-1996 * Turn the pad longword at the end of a system service * discriptor into a longword flags field. The FLAGS * byte still gets the first 8 bits for compatibility. * The longword field also contains this byte, plus * any new bits above 8. * * X-6 KLN1400 Karen L. Noel 2-Mar-1995 * Change external declarations of sys$ routines to take * an unknown number of arguments instead of void. * * X-5 KLN1347 Karen L. Noel 7-Dec-1994 * Rename blocks so more than one C module can define * system services within the same execlet. * * X-4 SDD Steve DiPirro 20-May-1994 * Fix usage of #error directive * * X-3 SDD Steve DiPirro 28-Dec-1993 * Use new, modified SSDESCR structure definition in LIB. * Initialize unused padding field to zero. * * X-2 SDD Steve DiPirro 15-Sep-1993 * Completed redesigned mechanism for multiple system service * declarations (since previous one didn't work correctly at * run-time with the system service loader). * *-- */ /* Some compilers warn if an array is allocated on too small an alignment. We must allocate on an exact alignment for the init processing to work, so we must do it this way. Disable the warning. */ #pragma message save #pragma message disable UNKMSGID /* Don't complain about the next line even on compilers without ALIGNNOTSTD message*/ #pragma message disable ALIGNNOTSTD /* We don't want to allow multiple inclusions of this header file since it will result in run-time problems with the system service loader. */ #ifdef __SYSTEM_SERVICE_SETUP #error "Cannot include SYSTEM_SERVICE_SETUP.H more than once" #else #define __SYSTEM_SERVICE_SETUP 1 #endif #include #define ssxconcat(a,b) a ## b #define ssconcat(a,b) ssxconcat(a,b) #define SYSRVC_VECTOR_NAME sys$ #define SSDATA_PREFIX sysvec_data_ #define SSDATA_SUFFIX SYSRVC_ROUTINE_NAME /* Make sure the system service number is something reasonable */ #ifndef SYSRVC_NUMBER #define SYSRVC_NUMBER 1 #else #if SYSRVC_NUMBER > 6 #error "Too many system services for this hack header file to support" #endif #endif /* These are constants which we need defined (and which, luckily, don't change much. If they're not defined at this point, we'll define them here but set a flag to realize we did it and need to undefine them later. */ #ifndef MODE_K_CALLERS_MODE #define __MODE_DEFINED 1 #define MODE_K_KERNEL 0 #define MODE_K_EXEC 1 #define MODE_K_SUPER 2 #define MODE_K_USER 3 #define MODE_K_CALLERS_MODE 4 #endif /* Setup any defaulted parameters (note that an undefined mode or mode we don't like will cause an error). */ #ifndef SYSRVC_PREFIX_NAME #error "System service name prefix must be specified" #endif #if SYSRVC_NUMBER > 1 #ifndef SYSRVC2_PREFIX_NAME #error "Second system service name prefix must be specified" #endif #endif #if SYSRVC_NUMBER > 2 #ifndef SYSRVC3_PREFIX_NAME #error "Third system service name prefix must be specified" #endif #endif #if SYSRVC_NUMBER > 3 #ifndef SYSRVC4_PREFIX_NAME #error "Fourth system service name prefix must be specified" #endif #endif #if SYSRVC_NUMBER > 4 #ifndef SYSRVC5_PREFIX_NAME #error "Fifth system service name prefix must be specified" #endif #endif #if SYSRVC_NUMBER > 5 #ifndef SYSRVC6_PREFIX_NAME #error "Sixth system service name prefix must be specified" #endif #endif #ifndef SYSRVC_ROUTINE_NAME #error "System service routine name must be specified" #endif #if SYSRVC_NUMBER > 1 #ifndef SYSRVC2_ROUTINE_NAME #error "Second system service routine name must be specified" #endif #endif #if SYSRVC_NUMBER > 2 #ifndef SYSRVC3_ROUTINE_NAME #error "Third system service routine name must be specified" #endif #endif #if SYSRVC_NUMBER > 3 #ifndef SYSRVC4_ROUTINE_NAME #error "Fourth system service routine name must be specified" #endif #endif #if SYSRVC_NUMBER > 4 #ifndef SYSRVC5_ROUTINE_NAME #error "Fifth system service routine name must be specified" #endif #endif #if SYSRVC_NUMBER > 5 #ifndef SYSRVC6_ROUTINE_NAME #error "Sixth system service routine name must be specified" #endif #endif #ifndef SYSRVC_MODE #error "System service mode must be specified" #else #if (SYSRVC_MODE != MODE_K_KERNEL) && (SYSRVC_MODE != MODE_K_EXEC) #error "System service mode must be MODE_K_KERNEL or MODE_K_EXEC" #endif #endif #if SYSRVC_NUMBER > 1 #ifndef SYSRVC2_MODE #error "Second system service mode must be specified" #else #if (SYSRVC2_MODE != MODE_K_KERNEL) && (SYSRVC2_MODE != MODE_K_EXEC) #error "Second system service mode must be MODE_K_KERNEL or MODE_K_EXEC" #endif #endif #endif #if SYSRVC_NUMBER > 2 #ifndef SYSRVC3_MODE #error "Third system service mode must be specified" #else #if (SYSRVC3_MODE != MODE_K_KERNEL) && (SYSRVC3_MODE != MODE_K_EXEC) #error "Third system service mode must be MODE_K_KERNEL or MODE_K_EXEC" #endif #endif #endif #if SYSRVC_NUMBER > 3 #ifndef SYSRVC4_MODE #error "Fourth system service mode must be specified" #else #if (SYSRVC4_MODE != MODE_K_KERNEL) && (SYSRVC4_MODE != MODE_K_EXEC) #error "Fourth system service mode must be MODE_K_KERNEL or MODE_K_EXEC" #endif #endif #endif #if SYSRVC_NUMBER > 4 #ifndef SYSRVC5_MODE #error "Fifth system service mode must be specified" #else #if (SYSRVC5_MODE != MODE_K_KERNEL) && (SYSRVC5_MODE != MODE_K_EXEC) #error "Fifth system service mode must be MODE_K_KERNEL or MODE_K_EXEC" #endif #endif #endif #if SYSRVC_NUMBER > 5 #ifndef SYSRVC6_MODE #error "Sixth system service mode must be specified" #else #if (SYSRVC6_MODE != MODE_K_KERNEL) && (SYSRVC6_MODE != MODE_K_EXEC) #error "Sixth system service mode must be MODE_K_KERNEL or MODE_K_EXEC" #endif #endif #endif #ifndef SYSRVC_IMASK #define SYSRVC_IMASK 129 #endif #if SYSRVC_NUMBER > 1 #ifndef SYSRVC2_IMASK #define SYSRVC2_IMASK 129 #endif #endif #if SYSRVC_NUMBER > 2 #ifndef SYSRVC3_IMASK #define SYSRVC3_IMASK 129 #endif #endif #if SYSRVC_NUMBER > 3 #ifndef SYSRVC4_IMASK #define SYSRVC4_IMASK 129 #endif #endif #if SYSRVC_NUMBER > 4 #ifndef SYSRVC5_IMASK #define SYSRVC5_IMASK 129 #endif #endif #if SYSRVC_NUMBER > 5 #ifndef SYSRVC6_IMASK #define SYSRVC6_IMASK 129 #endif #endif #ifndef SYSRVC_FLAGS #define SYSRVC_FLAGS 0 #endif #if SYSRVC_NUMBER > 1 #ifndef SYSRVC2_FLAGS #define SYSRVC2_FLAGS 0 #endif #endif #if SYSRVC_NUMBER > 2 #ifndef SYSRVC3_FLAGS #define SYSRVC3_FLAGS 0 #endif #endif #if SYSRVC_NUMBER > 3 #ifndef SYSRVC4_FLAGS #define SYSRVC4_FLAGS 0 #endif #endif #if SYSRVC_NUMBER > 4 #ifndef SYSRVC5_FLAGS #define SYSRVC5_FLAGS 0 #endif #endif #if SYSRVC_NUMBER > 5 #ifndef SYSRVC6_FLAGS #define SYSRVC6_FLAGS 0 #endif #endif #ifndef SYSRVC_TYPE #define SYSRVC_TYPE 0 #endif #if SYSRVC_NUMBER > 1 #ifndef SYSRVC2_TYPE #define SYSRVC2_TYPE 0 #endif #endif #if SYSRVC_NUMBER > 2 #ifndef SYSRVC3_TYPE #define SYSRVC3_TYPE 0 #endif #endif #if SYSRVC_NUMBER > 3 #ifndef SYSRVC4_TYPE #define SYSRVC4_TYPE 0 #endif #endif #if SYSRVC_NUMBER > 4 #ifndef SYSRVC5_TYPE #define SYSRVC5_TYPE 0 #endif #endif #if SYSRVC_NUMBER > 5 #ifndef SYSRVC6_TYPE #define SYSRVC6_TYPE 0 #endif #endif /* Define system services. */ #include /* For exec or kernel mode services, we need to construct a system service descriptor table entry (or entries) in the EXEC$INIT_SSTBL_001 PSECT (of all places). */ #pragma extern_model save #pragma extern_model strict_refdef "EXEC$INIT_SSTBL_001" LONG,PIC,CON,REL,GBL,NOSHR,EXE,WRT,NOVEC #if SYSRVC_NUMBER == 1 SSDESCR ssconcat(SSDATA_PREFIX,SSDATA_SUFFIX)={ ssconcat(SYSRVC_VECTOR_NAME,SYSRVC_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC_ROUTINE_NAME), SYSRVC_TYPE,(SYSRVC_FLAGS) & 255,SYSRVC_IMASK,SYSRVC_MODE, SYSRVC_FLAGS}; #else #if SYSRVC_NUMBER == 2 SSDESCR ssconcat(SSDATA_PREFIX,SSDATA_SUFFIX)[2]={ ssconcat(SYSRVC_VECTOR_NAME,SYSRVC_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC_ROUTINE_NAME), SYSRVC_TYPE,(SYSRVC_FLAGS) & 255,SYSRVC_IMASK,SYSRVC_MODE, SYSRVC_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC2_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC2_ROUTINE_NAME), SYSRVC2_TYPE,(SYSRVC2_FLAGS) & 255,SYSRVC2_IMASK,SYSRVC2_MODE, SYSRVC2_FLAGS}; #else #if SYSRVC_NUMBER == 3 SSDESCR ssconcat(SSDATA_PREFIX,SSDATA_SUFFIX)[3]={ ssconcat(SYSRVC_VECTOR_NAME,SYSRVC_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC_ROUTINE_NAME), SYSRVC_TYPE,(SYSRVC_FLAGS) & 255,SYSRVC_IMASK,SYSRVC_MODE, SYSRVC_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC2_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC2_ROUTINE_NAME), SYSRVC2_TYPE,(SYSRVC2_FLAGS) & 255,SYSRVC2_IMASK,SYSRVC2_MODE, SYSRVC2_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC3_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC3_ROUTINE_NAME), SYSRVC3_TYPE,(SYSRVC3_FLAGS) & 255,SYSRVC3_IMASK,SYSRVC3_MODE, SYSRVC3_FLAGS}; #else #if SYSRVC_NUMBER == 4 SSDESCR ssconcat(SSDATA_PREFIX,SSDATA_SUFFIX)[4]={ ssconcat(SYSRVC_VECTOR_NAME,SYSRVC_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC_ROUTINE_NAME), SYSRVC_TYPE,(SYSRVC_FLAGS) & 255,SYSRVC_IMASK,SYSRVC_MODE, SYSRVC_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC2_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC2_ROUTINE_NAME), SYSRVC2_TYPE,(SYSRVC2_FLAGS) & 255,SYSRVC2_IMASK,SYSRVC2_MODE, SYSRVC2_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC3_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC3_ROUTINE_NAME), SYSRVC3_TYPE,(SYSRVC3_FLAGS) & 255,SYSRVC3_IMASK,SYSRVC3_MODE, SYSRVC3_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC4_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC4_ROUTINE_NAME), SYSRVC4_TYPE,(SYSRVC4_FLAGS) & 255,SYSRVC4_IMASK,SYSRVC4_MODE, SYSRVC4_FLAGS}; #else #if SYSRVC_NUMBER == 5 SSDESCR ssconcat(SSDATA_PREFIX,SSDATA_SUFFIX)[5]={ ssconcat(SYSRVC_VECTOR_NAME,SYSRVC_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC_ROUTINE_NAME), SYSRVC_TYPE,(SYSRVC_FLAGS) & 255,SYSRVC_IMASK,SYSRVC_MODE, SYSRVC_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC2_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC2_ROUTINE_NAME), SYSRVC2_TYPE,(SYSRVC2_FLAGS) & 255,SYSRVC2_IMASK,SYSRVC2_MODE, SYSRVC2_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC3_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC3_ROUTINE_NAME), SYSRVC3_TYPE,(SYSRVC3_FLAGS) & 255,SYSRVC3_IMASK,SYSRVC3_MODE, SYSRVC3_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC4_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC4_ROUTINE_NAME), SYSRVC4_TYPE,(SYSRVC4_FLAGS) & 255,SYSRVC4_IMASK,SYSRVC4_MODE, SYSRVC4_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC5_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC5_ROUTINE_NAME), SYSRVC5_TYPE,(SYSRVC5_FLAGS) & 255,SYSRVC5_IMASK,SYSRVC5_MODE, SYSRVC5_FLAGS}; #else #if SYSRVC_NUMBER == 6 SSDESCR ssconcat(SSDATA_PREFIX,SSDATA_SUFFIX)[6]={ ssconcat(SYSRVC_VECTOR_NAME,SYSRVC_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC_ROUTINE_NAME), SYSRVC_TYPE,(SYSRVC_FLAGS) & 255,SYSRVC_IMASK,SYSRVC_MODE, SYSRVC_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC2_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC2_ROUTINE_NAME), SYSRVC2_TYPE,(SYSRVC2_FLAGS) & 255,SYSRVC2_IMASK,SYSRVC2_MODE, SYSRVC2_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC3_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC3_ROUTINE_NAME), SYSRVC3_TYPE,(SYSRVC3_FLAGS) & 255,SYSRVC3_IMASK,SYSRVC3_MODE, SYSRVC3_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC4_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC4_ROUTINE_NAME), SYSRVC4_TYPE,(SYSRVC4_FLAGS) & 255,SYSRVC4_IMASK,SYSRVC4_MODE, SYSRVC4_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC5_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC5_ROUTINE_NAME), SYSRVC5_TYPE,(SYSRVC5_FLAGS) & 255,SYSRVC5_IMASK,SYSRVC5_MODE, SYSRVC5_FLAGS, ssconcat(SYSRVC_VECTOR_NAME,SYSRVC6_ROUTINE_NAME), ssconcat(SYSRVC_PREFIX_NAME,SYSRVC6_ROUTINE_NAME), SYSRVC6_TYPE,(SYSRVC6_FLAGS) & 255,SYSRVC6_IMASK,SYSRVC6_MODE, SYSRVC6_FLAGS}; #endif #endif #endif #endif #endif #endif #pragma extern_model restore /* Undefine all the temporary symbols */ #ifdef __MODE_DEFINED #undef __MODE_DEFINED #undef MODE_K_KERNEL #undef MODE_K_EXEC #undef MODE_K_SUPER #undef MODE_K_USER #undef MODE_K_CALLERS_MODE #endif #undef SYSRVC_PREFIX_NAME #undef SYSRVC_ROUTINE_NAME #undef SYSRVC_TYPE #undef SYSRVC_MODE #undef SYSRVC_IMASK #undef SYSRVC_FLAGS #undef SYSRVC_TYPE #undef SYSRVC2_PREFIX_NAME #undef SYSRVC2_ROUTINE_NAME #undef SYSRVC2_TYPE #undef SYSRVC2_MODE #undef SYSRVC2_IMASK #undef SYSRVC2_FLAGS #undef SYSRVC2_TYPE #undef SYSRVC3_PREFIX_NAME #undef SYSRVC3_ROUTINE_NAME #undef SYSRVC3_TYPE #undef SYSRVC3_MODE #undef SYSRVC3_IMASK #undef SYSRVC3_FLAGS #undef SYSRVC3_TYPE #undef SYSRVC4_PREFIX_NAME #undef SYSRVC4_ROUTINE_NAME #undef SYSRVC4_TYPE #undef SYSRVC4_MODE #undef SYSRVC4_IMASK #undef SYSRVC4_FLAGS #undef SYSRVC4_TYPE #undef SYSRVC5_PREFIX_NAME #undef SYSRVC5_ROUTINE_NAME #undef SYSRVC5_TYPE #undef SYSRVC5_MODE #undef SYSRVC5_IMASK #undef SYSRVC5_FLAGS #undef SYSRVC5_TYPE #undef SYSRVC6_PREFIX_NAME #undef SYSRVC6_ROUTINE_NAME #undef SYSRVC6_TYPE #undef SYSRVC6_MODE #undef SYSRVC6_IMASK #undef SYSRVC6_FLAGS #undef SYSRVC6_TYPE #pragma message restore