EPRF%SNYCENVM.BITNET@MITVMA.MIT.EDU (Peter Flass) (02/15/89)
Here is documentation on a compiler abend in VMS GCC 1.22. The code is not mine. I believe it compiled successfully using the Whitesmiths' C compiler on the VAX, but I can't speak from personal knowledge. If you need any more doc., let me know. Thanks. - Pete (I hope everything made the transition from VMS to CMS with no character translations). VMS GCC 1.22 Compiler Abend The program compiles successfully when I change the line #define PRIV_MASK_0 from '<< PRV$V_SYSPRV' to '<< 6' (arbitrary constant). Attached: VMS Traceback info source and header files preprocessed source ---------------------- VMS GCC Stack Dump -------------------------------- %SYSTEM-F-OPCDEC, opcode reserved to DIGITAL fault at PC=0004BFD2, PSL=03C00000 %TRACE-F-TRACEBACK, symbolic stack dump follows module name routine name line rel PC abs PC GCCLIB _FIXUNS_TRUNCDFSI 0000000A 0004BFD2 EMIT-RTL gen_lowpart 420 000000C8 0002EF80 EXPR convert_move 559 000003A3 00022D9B OPTABS expand_binop 168 00000196 0002B226 EXPMED store_split_bit_field 975 00000A17 00029D8D EXPR emit_push_insn 2548 00001A5E 00024F2C EXPR emit_push_insn 2525 000019EB 00024EB9 EXPR preexpand_calls 4011 00000FE1 0002677F EXPR preexpand_calls 3857 00000D94 00026532 STMT expand_start_cond 687 00000061 00026EB1 PARSE_TAB yyparse 845 0000101F 00010C97 TOPLEV compile_file 793 0000052C 0000B880 TOPLEV main 1492 00000635 0000CC6D ----------------------- Source being compiled --------------------------- # include "protocol.h" # include "common.h" # include "vms.h" extern char prv$v_sysprv[]; # define PRV$V_SYSPRV (int)prv$v_sysprv # define PRIV_MASK_0 (1L << PRV$V_SYSPRV) # define PRIV_MASK_1 0L int chk_opr_prv() { struct { short j_buffer_length; short j_item_code; long *j_buffer_address; short *j_return_length_address; long j_zero; } j; long procpriv[2]; j.j_buffer_length = 8; j.j_item_code = JPI$_PROCPRIV; j.j_buffer_address = procpriv; j.j_return_length_address = 0; j.j_zero = 0; sys$getjpi(0, 0, 0, &j, 0, 0, 0); if ( ! (procpriv[0] & PRIV_MASK_0)) return (FAILURE); else return (SUCCESS); } --------------- protocol.h ------------------------------------------ /* protocol.h Date 1-Nov-1984 Edit 7 */ /*++ ************************************************* Copyright (C) 1983 by Software Results Corporation, Columbus, Ohio, USA This software is furnished under a license and may be used and copied only in accordance with the terms of such license and with the inclusion of the above copyright notice. This software or any other copies thereof may not be provided or otherwise made available to any other person. No title to and ownership of the software is hereby transferred. The information in this software is subject to change without notice and should not be construed as a commitment by Software Results Corporation. ************************************************* --*/ # define P_HASP # define P_NAME "HASP" # define P_LCNAME "hasp" /* # define SINGLE_CHANNEL */ /* # define REMOTE */ ------------------- common.h ------------------------------------------- /* common.h Date 19-Apr-1985 Edit 18 */ /*++ ************************************************* Copyright (C) 1983 by Software Results Corporation, Columbus, Ohio, USA This software is furnished under a license and may be used and copied only in accordance with the terms of such license and with the inclusion of the above copyright notice. This software or any other copies thereof may not be provided or otherwise made available to any other person. No title to and ownership of the software is hereby transferred. The information in this software is subject to change without notice and should not be construed as a commitment by Software Results Corporation. ************************************************* --*/ /*++ Module name: none File name: DEV$V51:[INDEP.UTIL]COMMON.H Product: Independent Code for RJE/COMBOARD Module history: When Who What 26-Apr-1983 KFF Created 19-Apr-1985 KJ Ruble Added MAX_STRLEN for UNIX Module Purpose: Define commonly used constants and types. Calling sequence: none. Called by: nobody. Calls: nobody. Input arguments: none. Output values: none. Side Effects: none Externals: none. Files referenced: none. Possible errors: none Things which need to be done: nothing Remarks: *********************************************** Module Design Description ************************************************* --*/ # ifdef vms # define STR_LEN 255 # else # define STR_LEN 132 # endif # ifdef UNIX # define MAX_STRLEN 100 /* Unix printf can't handle buffer */ /* size > 128,so leave a few for */ /* printing extras in addition to */ /* operator entered stuff */ # endif # define FAILURE 0 # define SUCCESS 1 # define BROKEN 2 # define END_OF_FILE 3 # define TRUNCATED 4 # define READ 0 # define WRITE 1 typedef int set; typedef int boolean; # define FALSE (boolean)0 # define TRUE (boolean)1 ---------------------- vms.h -------------------------------------- /* vms.h Date 21-Jan-1983 Edit 81 */ /*++ ************************************************* Copyright (C) 1983 by Software Results Corporation, Columbus, Ohio, USA This software is furnished under a license and may be used and copied only in accordance with the terms of such license and with the inclusion of the above copyright notice. This software or any other copies thereof may not be provided or otherwise made available to any other person. No title to and ownership of the software is hereby transferred. The information in this software is subject to change without notice and should not be construed as a commitment by Software Results Corporation. ************************************************* --*/ extern char ss$_normal[]; # define SS$_NORMAL (int)ss$_normal extern char ss$_cancel[]; # define SS$_CANCEL (int)ss$_cancel extern char ss$_abort[]; # define SS$_ABORT (int)ss$_abort extern char ss$_badescape[]; # define SS$_BADESCAPE (int)ss$_badescape extern char ss$_partescape[]; # define SS$_PARTESCAPE (int)ss$_partescape extern char ss$_nomoreproc[]; # define SS$_NOMOREPROC (int)ss$_nomoreproc extern char ss$_endoffile[]; # define SS$_ENDOFFILE (int)ss$_endoffile extern char ss$_nosuchdev[]; # define SS$_NOSUCHDEV (int)ss$_nosuchdev extern char ss$_devalloc[]; # define SS$_DEVALLOC (int)ss$_devalloc extern char ss$_nopriv[]; # define SS$_NOPRIV (int)ss$_nopriv extern char io$m_now[]; # define IO$M_NOW (int)io$m_now extern char io$_sensemode[]; # define IO$_SENSEMODE (int)io$_sensemode extern char io$_setmode[]; # define IO$_SETMODE (int)io$_setmode extern char io$_readpblk[]; # define IO$_READPBLK (int)io$_readpblk extern char io$_writepblk[]; # define IO$_WRITEPBLK (int)io$_writepblk extern char io$_readvblk[]; # define IO$_READVBLK (int)io$_readvblk extern char io$_writevblk[]; # define IO$_WRITEVBLK (int)io$_writevblk extern char io$m_noecho[]; # define IO$M_NOECHO (int)io$m_noecho extern char io$m_nofiltr[]; # define IO$M_NOFILTR (int)io$m_nofiltr extern char jpi$_prcnam[]; # define JPI$_PRCNAM (int)jpi$_prcnam extern char jpi$_uic[]; # define JPI$_UIC (int)jpi$_uic extern char jpi$_procpriv[]; # define JPI$_PROCPRIV (int)jpi$_procpriv extern char jpi$_terminal[]; # define JPI$_TERMINAL (int)jpi$_terminal extern char jpi$_username[]; # define JPI$_USERNAME (int)jpi$_username extern char tt$m_passall[]; # define TT$M_PASSALL (int)tt$m_passall extern char tt$m_noecho[]; # define TT$M_NOECHO (int)tt$m_noecho extern char tt$m_escape[]; # define TT$M_ESCAPE (int)tt$m_escape extern char tt$m_wrap[]; # define TT$M_WRAP (int)tt$m_wrap extern char tt$m_scope[]; # define TT$M_SCOPE (int)tt$m_scope struct vax_string { int v_length; char *v_text; }; /* * A descriptor block of the form required by dclexh(). */ struct desblk { struct desblk *d_forward_link; int (*d_exit_handler_address)(); unsigned char d_nargs; unsigned char d_pad[3]; long *d_reason_address; long d_arguments[1]; }; -------------- Preprocessed source ------------------------------- # 1 "checkpriv.c" # 1 "protocol.h" # 1 "checkpriv.c" # 1 "common.h" typedef int set; typedef int boolean; # 2 "checkpriv.c" # 1 "vms.h" extern char ss$_normal[]; extern char ss$_cancel[]; extern char ss$_abort[]; extern char ss$_badescape[]; extern char ss$_partescape[]; extern char ss$_nomoreproc[]; extern char ss$_endoffile[]; extern char ss$_nosuchdev[]; extern char ss$_devalloc[]; extern char ss$_nopriv[]; extern char io$m_now[]; extern char io$_sensemode[]; extern char io$_setmode[]; extern char io$_readpblk[]; extern char io$_writepblk[]; extern char io$_readvblk[]; extern char io$_writevblk[]; extern char io$m_noecho[]; extern char io$m_nofiltr[]; extern char jpi$_prcnam[]; extern char jpi$_uic[]; extern char jpi$_procpriv[]; extern char jpi$_terminal[]; extern char jpi$_username[]; extern char tt$m_passall[]; extern char tt$m_noecho[]; extern char tt$m_escape[]; extern char tt$m_wrap[]; extern char tt$m_scope[]; struct vax_string { int v_length; char *v_text; }; struct desblk { struct desblk *d_forward_link; int (*d_exit_handler_address)(); unsigned char d_nargs; unsigned char d_pad[3]; long *d_reason_address; long d_arguments[1]; }; # 3 "checkpriv.c" extern char prv$v_sysprv[]; int chk_opr_prv() { struct { short j_buffer_length; short j_item_code; long *j_buffer_address; short *j_return_length_address; long j_zero; } j; long procpriv[2]; j.j_buffer_length = 8; j.j_item_code = (int)jpi$_procpriv ; j.j_buffer_address = procpriv; j.j_return_length_address = 0; j.j_zero = 0; sys$getjpi(0, 0, 0, &j, 0, 0, 0); if ( ! (procpriv[0] & (1L << (int)prv$v_sysprv ) )) return ( 0 ); else return ( 1 ); } +-----------------------------------------------------------------------------+ | | | Peter Flass BITnet: EPRF@SNYCENVM (preferred) | | Director of Computing Services INTERnet: ESCFLASS@UBVM.CC.BUFFALO.EDU | | SUNY Empire State College AT&Tnet: (518)587-2100 X350 | | 2 Union Avenue | | Saratoga Springs NY 12866 "this space for rent" | | | +-----------------------------------------------------------------------------+