SVCTRACE CMS Transient command Use the SVCTRACE command to trace and record information about supervisor calls occurring in your virtual machine. The format of the SVCTRACE command is: +----------+------------------------------------------------------------------+ | SVCTrace | ON|OFF | +----------+------------------------------------------------------------------+ where: ON | OFF starts or stops tracing all SVC instructions issued within CMS. Usage notes: 1. The trace information recorded on the printer includes: o The virtual storage location of the calling SVC instruction and the name of the called program or routine o The normal and error return addresses o The contents of the general registers both before the SVC-called program is given control and after a return from that program o The contents of the general registers when the SVC handling routine is finished processing o The contents of the floating-point registers before the SVC-called program is given control and after a return from that program o The contents of the floating-point registers when the SVC handling routine is finished processing o The parameter list passed to the SVC 2. To terminate tracing previously established by the SVCTRACE command, issue the HO or SVCTRACE OFF commands. SVCTRACE OFF and HO cause all trace information recorded, up to the point they are issued, to be printed on the virtual spooled printer. On typewriter terminals SVCTRACE OFF can be issued only when the keyboard is unlocked to accept input to the CMS command environment. To terminate tracing at any other point in system processing, HO must be issued. To suspend tracing temporarily during a session, interrupt processing and enter the Immediate command SO (Suspend Tracing). To resume tracing that was suspended with the SO command, enter the Immediate command RO (Resume Tracing). If you issue the CMS Immediate command HX or you log off the VM/370 system before termination of tracing previously set by the SVCTRACE command, the switches are cleared automatically and all recorded trace information is printed on the virtual spooled printer. 3. If a user timer exit is activated while SVCTRACE is active, SVCTRACE is disabled for the duration of the timer exit. Any SVCs issued during the timer exit are not reflected in the SVCTRACE listing. 4. If your program must remain disabled for interrupts (in an interrupt handler, for example), it must not issue any SVC's while SVCTRACE is active. SVCTRACE enables the system for interrupts. Use the CP PER command instead. Responses: A variety of information is printed whenever the SVCTRACE ON command is issued. The first line of trace output starts with a dash or plus sign or an asterisk (- or + or *). The format of the first line of trace output is: -¦+¦* N/D = xxx/dd name FROM loc OLDPSW = psw1 GOPSW = psw2 (RC=rc) where: - indicates information recorded before processing the SVC. + indicates information recorded after processing the SVC, unless the asterisk (*) applies. * indicates information recorded after processing a CMS SVC that had an error return. N/D is an abbreviation for SVC number and depth (or level). xxx is the number of the SVC call (they are numbered sequentially). dd is the nesting level of the SVC call. name is the macro or routine being called. loc is the program location from which the SVC was issued. psw1 is the PSW at the time the SVC was called. psw2 is the PSW with which the routine being called is invoked, if the first character of this line is a dash (-). If the first character of this line is a plus sign or asterisk (+ or *), PSW2 represents the PSW that returns control to the user. rc is the return code from the SVC handling routine in general register 15. This field is omitted if the first character of this line is a dash (-), or if this is an OS SVC call. For a CMS SVC, this field is 0 if the line begins with a plus sign (+), and nonzero for an asterisk (*). Also, this field equals the contents of R15 in the "GPRS AFTER" line. The next two lines of output are the contents of the general registers when control is passed to the SVC handling routine. This output is identified at the left by ".GPRSB." The format of the output is: .GPRSB = h h h h h h h h *dddddddd* = h h h h h h h h *dddddddd* where h represents the contents of a general register in hexadecimal format and d represents the EBCDIC translation of the contents of a general register. The contents of general registers 0 through 7 are printed on the first line, with the contents of registers 8 through F on the second line. The hexadecimal contents of the registers are printed first, followed by the EBCDIC translation. The EBCDIC translation is preceded and followed by an asterisk(*). The next line of output is the contents of general registers 0, 1, and 15 when control is returned to your program. The output is identified at the left by ".GPRS AFTER :." The format of the output is: .GPRS AFTER : R0-R1 = h h *dd* R15 = h *d* where h represents the hexadecimal contents of a general register and d is the EBCDIC translation of the contents of a general register. The only general registers that CMS routines alter are registers 0, 1, and 15 so only those registers are printed when control returns to your program. The EBCDIC translation is preceded and followed by an asterisk (*). The next two lines of output are the contents of the general registers when the SVC handling routine is finished processing. This output is identified at the left by ".GPRSS." The format of the output is: .GPRSS = h h h h h h h h *dddddddd* = h h h h h h h h *dddddddd* where h represents the hexadecimal contents of a general register and d represents the EBCDIC translation of the contents of a general register. General registers 0 through 7 are printed on the first line with registers 8 through F on the second line. The EBCDIC translation is preceded and followed by an asterisk (*). The next line of output is the contents of the calling routine's floating-point registers. The output is identified at the left by ".FPRS." The format of the output is: .FPRS = f f f f *gggg* where f represents the hexadecimal contents of a floating-point register and g is the EBCDIC translation of a floating-point register. Each floating point register is a doubleword; each f and g represents a doubleword of data. The EBCDIC translation is preceded and followed by an asterisk (*). The next line of output is the contents of floating-point registers when the SVC handling routine is finished processing. The output is identified by ".FPRSS" at the left. The format of the output is: .FPRSS = f f f f *gggg* where f represents the hexadecimal contents of a floating-point register and g is the EBCDIC translation. Each floating-point register is a doubleword and each f and g represents a doubleword of data. The EBCDIC translation is preceded and followed by an asterisk (*). The last two lines of output are printed only if the address in register 1 is a valid address for the virtual machine. If printed, the output is the parameter list passed to the SVC. The output is identified by ".PARM" at the left. The output format is: .PARM = h h h h h h h h *dddddddd* = h h h h h h h h *dddddddd* where h represents a word of hexadecimal data and d is the EBCDIC translation. The parameter list is found at the address contained in register 1 before control is passed to the SVC handling program. The EBCDIC translation is preceded and followed by an asterisk (*). Below is a summary of the types of SVC trace output. +¦-¦* N/D The SVC and the routine that issued the SVC. .GPRSB Contents of general registers when control is passed to the SVC handling routine. .GPRS AFTER Contents of general registers 0, 1, and 15 when control is returned to your program. .GPRSS Contents of the general registers when the SVC handling routine is finished processing. .FPRS Contents of floating-point registers before the SVC-called program is given control and after returning from that program. .FPRSS Contents of the floating-point registers when the SVC handling routine is finished processing. .PARM The parameter list, when one is passed to the SVC.