SYMRBLD — Building a symptom record

Description

The SYMRBLD macro generates code to build a symptom record. A symptom record is a data area that contains a description of a program failure combined with a description of the environment where the failure occurred. The symptom record consists of six sections. These sections are numbered 1 through 5, including an additional section that is numbered 2.1. The purpose of each section is as follows:
  • Section 1 (Environmental Data) - This section is filled in by the SYMREC macro. The environmental data the SYMREC macro stores in this section includes the processor model and serial numbers, data and time, name of the customer installation, and the product ID of the control program.
  • Section 2 (Control Data) - This section contains the lengths and offsets of the remaining sections.
  • Section 2.1 (Component Data) - This section identifies the application in which the error occurred.
  • Section 3 (Primary SDB symptoms) - This section contains the primary string of problem symptoms. This data is used for duplicate problem recognition.
  • Section 4 (Secondary SDB symptoms) - This section contains any additional diagnostic values saved at the time of the error.
  • Section 5 (Variable Data) - This section contains diagnostic data, such as portions of data areas or parameter lists pertinent to the error.
Input to the SYMRBLD macro is a storage area for the symptom record, and the diagnostic data for sections 2.1, 3, 4, and 5 of the symptom record. The SYMRBLD macro must be invoked several times to build a complete symptom record. The following describes the sequence:
  1. Invoke SYMRBLD with the INITIAL parameter to initialize sections 1 and 2, and provide application data for section 2.1.
  2. Invoke SYMRBLD with the PRIMARY parameter to store symptoms into section 3. You may invoke this parameter more than once for one error.
  3. Optionally invoke SYMRBLD with the SECONDARY parameter to store symptoms into section 4.
  4. Optionally invoke SYMRBLD with the VARIABLE parameter to store data into section 5.
  5. Invoke SYMRBLD with the COMPLETE parameter to set the lengths of sections 3, 4, and 5 in section 2.1 and optionally code SYMRBLD to invoke the SYMREC macro for recording to the logrec data set. If you do not code SYMRBLD to invoke the SYMREC macro, your records will not be recorded to the logrec data set.
  6. Invoke SYMRBLD with the RESET parameter to rebuild the symptom record using the same storage area and application information that was specified using the INITIAL parameter. The RESET parameter is useful when the primary, secondary, and variable sections of the symptom record are to be changed but the application information in section 2.1 remains the same.
The following description of the SYMRBLD macro is divided into six sections:
  • SYMRBLD with the INITIAL parameter
  • SYMRBLD with the PRIMARY parameter
  • SYMRBLD with the SECONDARY parameter
  • SYMRBLD with the VARIABLE parameter
  • SYMRBLD with the COMPLETE parameter
  • SYMRBLD with the RESET parameter

There is no list or execute form of the macro.

Environment

Requirements for the caller are:

Environmental factor Requirement
Minimum authorization: Problem state, and any PSW key.
Dispatchable unit mode: Task or SRB
Cross memory mode: Any PASN, any HASN, any SASN
AMODE: 24- or 31-bit
ASC mode: Primary, secondary, or access register (AR)
Interrupt status: Enabled or disabled for I/O and external interrupts
Locks: No locks held.
Control parameters: Must be in the primary address space or be in an address/data space that is addressable through a public entry on the caller's dispatchable unit access list (DU-AL).

Programming requirements

The maximum size of the symptom record is 1900 bytes. In addition to providing storage for the symptom record, 100 bytes must be provided for a work area; therefore, the maximum amount of storage needed is 2000 bytes.

The symptom record storage must reside in the primary address space.

Restrictions

None.

Input register information

When specifying SYMRBLD COMPLETE with INVOKE=YES (the default) the caller must ensure that register 13 points to a standard 72-byte save area.

Once you specify SR on SYMRBLD INITIAL and you plan to specify either SYMRBLD PRIMARY, SYMRBLD SECONDARY, SYMRBLD VARIABLE, or SYMRBLD COMPLETE without respecifying the SR parameter, you must put the address of the storage area into register 1.

Output register information

When control returns to the caller, the general purpose registers (GPRs) contain:
Register
Contents
0
Reason code from the SYMREC macro if you code SYMRBLD COMPLETE with INVOKE=YES; otherwise, used as a work register by the system.
1
Used as a work register by the system.
2-13
Unchanged.
14
Used as a work register by the system.
15
Return code from the SYMREC macro if you code SYMRBLD COMPLETE with INVOKE=YES; otherwise, used as a work register by the system.
When control returns to the caller, the access registers (ARs) contain:
Register
Contents
0-1
Used as work registers by the system
2-13
Unchanged
14-15
Used as work registers by the system

Some callers depend on register contents remaining the same before and after issuing a service. If the system changes the contents of registers on which the caller depends, the caller must save them before issuing the service, and restore them after the system returns control.

Performance implications

None.

Syntax

The standard form of the SYMRBLD macro with the INITIAL option is written as follows:

Syntax Description
   
   name name: Symbol. Begin name in column 1.
   
One or more blanks must precede SYMRBLD.
   
SYMRBLD  
   
One or more blanks must follow SYMRBLD.
   
INITIAL  
   
,SR=storage addr storage addr: RX-type address or address in register (2)-(12).
   
,PRIMLEN=primary length primary length: Decimal digit, RX-type address, or address in register (2)-(12).
   
   ,SECLEN=secondary length secondary length: Decimal digit, RX-type address, or address in register (2)-(12).
  Default: 0
   
   ,VARLEN=variable length variable length: Decimal digit, RX-type address, or address in register (2)-(12).
  Default: 0
   
,ARCHLEV=10 This is the architecture level of the symptom record.
   
   ,COMPDSC=comp desc comp desc: RX-type address or address in register (2)-(12).
   
   ,PROBLEM=problem id problem id: RX-type address or address in register (2)-(12).
   
   ,SERVLEV=service level service level: RX-type address or address in register (2)-(12).
   
   ,NOCONVERTS  
   
,PROGRAM=progname progname: RX-type address or address in register (2)-(12).
   
,PROGLEV=proglevel proglevel: RX-type address or address in register (2)-(12).
   

Parameters

The parameters for SYMRBLD INITIAL are explained as follows:

INITIAL
Sets sections 1, 2, and 2.1 of the symptom record to zero, and initializes the offsets of sections 3, 4, and 5 in section 2.1.
,SR=storage addr
Specifies the address of the storage area, on a doubleword boundary, used for the symptom record. The storage area must reside in the primary address space.

The maximum size of the symptom record is 1900 bytes. Sections 1, 2, and 2.1 use 212 bytes of the total 1900 bytes. Sections 3, 4, and 5 use the remaining 1688 bytes. In addition to providing storage for the symptom record, 100 bytes must be provided for a work area, therefore, the maximum amount of storage needed is 2000 bytes.

Use the PRIMLEN, SECLEN, and VARLEN parameters to specify the length of sections 3, 4, and 5, respectively.

,PRIMLEN=primary length
Specifies the address of a required halfword input variable that contains the maximum length in bytes of the primary symptom string. You can also directly specify a decimal digit for the length (for example, PRIMLEN=900). If you use register notation, the register contains the address of the length rather than the length itself.
The following formula calculates the length of the primary symptom string:
Lengths of all SDBKEYs + length of all data provided with
the DATA keyword + the number of times SDBKEY is specified
+ the length of all data specified with the SDBSTRING keyword
+ the number of times the SDBSTRING keyword is provided.

Note that this field cannot be zero and the maximum size of the entire symptom record is 1900 bytes.

,SECLEN=secondary length
Specifies the address of an optional halfword input variable that contains the maximum length in bytes of the secondary symptom string. You can also directly specify a decimal digit for the length (for example, SECLEN=900). If you use register notation, the register contains the address of the length rather than the length itself.
The following formula calculates the length of the secondary symptom string:
Lengths of all SDBKEYs + length of all data provided with
the DATA keyword + the number of times SDBKEY is specified
+ the length of all data specified with the SDBSTRING keyword
+ the number of times the SDBSTRING keyword is provided.

Note that the maximum size of the entire symptom record is 1900 bytes.

If a length of zero is specified, the secondary symptom string is ignored. If SECLEN is not specified, the default is zero.

,VARLEN=variable length
Specifies the address of an optional halfword input variable that contains the maximum length in bytes of the variable data section. You can also directly specify a decimal digit for the length (for example, VARLEN=900). If you use register notation, the register contains the address of the length rather than the length itself.
The following formula calculates the length of the variable data section:
The length provided must be the total length of the variable data items
+ the number of items (x) 4.

(The 4 is for the 2 byte key + 2 bytes for the length.) Note that the maximum size of the entire symptom record is 1900 bytes.

If a length of zero is specified, section 5 is ignored. If VARLEN is not specified, the default is zero.

,ARCHLEV=10
Specifies the architecture level of the symptom record. The only valid value is 10.
,COMPDSC=comp desc
Specifies the address of an optional 32-character input text description of the failing module's subfunction; for example, IOS - IOSB Analysis Routine.
,PROBLEM=problem id
Specifies the address of an optional 8-character input problem identifier used to associate the symptom record with other symptom records or with other problem indicators.
,SERVLEV=service level
Specifies the address of an optional 8-character input service level. When a value is provided, the code is normally at a higher level than the release level. The values of this field can be any information that is indicative of the service level; for example, PTF#, APAR#, or user modification number.
,NOCONVERTS
Indicates no data conversion from binary to hexadecimal EBCDIC is needed for this symptom record.
,PROGRAM=progname
Specifies the address of a required 8-character input variable that contains the name of the failing program. When this parameter is specified, the PIDS/aaaaaaaa SDB symptom is automatically put into section 3 of the symptom record. aaaaaaaa indicates the progname.
,PROGLEV=proglevel
Specifies the address of a required 8-character input variable that contains the name of the program major level.

Syntax

The standard form of the SYMRBLD macro with the PRIMARY option is written as follows:

Syntax Description
   
   name name: Symbol. Begin name in column 1.
   
One or more blanks must precede SYMRBLD.
   
SYMRBLD  
   
One or more blanks must follow SYMRBLD.
   
PRIMARY  
   
   ,SR=storage addr storage addr: RX-type address or address in register (2)-(12).
   
,SDBSTRING=SDB string SDB string: RX-type address or address in register (2)-(12).
,SDBKEY=SDB key SDB key: SDB key name, or SDB key literal in single quotation marks. See the parameter description for a list of valid SDB key names and literals.
Note: You must code either SDBSTRING or SDBKEY or both.
   
   ,SDBLEN=SDB length SDB length: Decimal digit 1-256, or register (2)-(12).
   ,SDBLENVAR=SDB variable SDB variable: RX-type address or address in register (2)-(12).
Note:
  1. If you use register notation for SDB length, the register contains the length itself rather than the address of the length.
  2. SDBLEN (or SDBLENVAR) is valid with SDBSTRING only.
   
   ,DATA=data data: RX-type address or address in register (2)-(12).
Note: DATA is required with SDBKEY only.
   
   ,LEN=data length data length: Decimal digit 1-13, or register (2)-(12).
   ,LENVAR=data variable data variable: RX-type address or address in register (2)-(12).
Note:
  1. If you use register notation for data length, the register contains the length itself rather than the address of the length.
  2. LEN (or LENVAR) is valid with DATA only.
   
   ,CONVERT=YES Default: CONVERT=NO
   ,CONVERT=NO Note: CONVERT is valid with DATA only.
   

   ,TYPE=TEST
   ,TYPE=NOTEST

Default: TYPE=TEST
   

Parameters

The parameters for SYMRBLD PRIMARY are explained as follows:

PRIMARY
Indicates that the symptom data provided is concatenated to section 3, the primary symptom string. The primary symptom string is an EBCDIC character string of problem symptoms. The primary symptom string is used to eliminate reporting duplicate problems repeatedly.

You would use the primary symptom string because, in most cases, the PIDS/aaaaaaaa symptom is in section 3 of the symptom record. When the symptom record is initialized by invoking SYMRBLD INITIAL, the symptom is created from the data supplied with the PROGRAM parameter and is placed as the first symptom in section 3.

The suggested minimum list of symptoms includes:
  • Return or reason codes - PRCS/aaaaaaaa
  • CSECT name - RIDS/aaaaaaaa
  • Load module name - RIDS/aaaaaaaa#L
Note: The following restrictions apply to symptoms in the primary symptom string:
  • The symptom data cannot contain imbedded blanks. The ‘#’ is used to substitute for desired blanks.
  • The total length of each symptom may not exceed 15 characters. The symptom length includes the SDB key, a slash, and the EBCDIC data. Remember that hexadecimal data doubles in length when converted to hexadecimal representation in EBCDIC.
,SR=storage addr
Specifies the address of the storage area, on a doubleword boundary, used for the symptom record. This is the same storage area you specified on SYMRBLD INITIAL. If you do not specify SR with SYMRBLD PRIMARY, the default is to use the storage area address you placed in register 1.
,SDBSTRING=SDB string
Specifies the address of an optional character input string to be added to the primary symptom string. The data is a list of symptoms separated by a blank. A symptom is an SDB key followed by a slash and EBCDIC data.

You must code either SDBSTRING or SDBKEY or both. When you code both on the same macro, the data provided with the SDBSTRING parameter is put into the symptom string first.

,SDBKEY=SDB key
Specifies an optional name from the set of SDB keys. You can provide the SDB key name, or specify the SDB key literal in single quotation marks (for example, specify either SDBKEY=SDBAB_S, or SDBKEY=‘AB/S’).

You must code either SDBSTRING or SDBKEY or both. When you code both on the same macro, the data provided with the SDBSTRING parameter is put into the symptom string first.

The following table contains the valid SDB key names and literals:

Table 1. Valid SDB Key Names and Literals
SDB Key Name SDB Key Literal Description
SDBAB_S AB/S System abend or program check.
SDBAB_U AB/U User abend code.
SDBADRS ADRS/ Any software routine, CSECT, or program address; displacement within a routine; or offset within a field or data area.
SDBDEVS DEVS/ IBM® device types.
SDBFLDS FLDS/ A field, data area, or label involved with the problem. If a field name is longer than 10 characters, use two keys and split the name of the field.
SDBLVLS LVLS/ The system release or program product/component level where the problem occurs.
SDBMS MS/ Program- or device-issued message. If there is no identifier, enter the message as it appears and MS/NOID to denote this.
SDBOPCS OPCS/ Software program operation code, I/O read/write command codes, teleprocessing operation codes and request codes.
SDBOVS OVS/ Overlaid storage.
SDBPCSS PCSS/ Any software statement, JCL, operator or user commands, parameters, program language statements, data set names, library names, teleprocessing logical and physical unit names, program function keys or other operator keys, environments, process names, procedures or other symptoms which do not fit other key descriptions in this table.
SDBPIDS PIDS/ Product identifier.
SDBPRCS PRCS/ Any program-generated return, reason, step, condition, or device status code.
SDBPTFS PTFS/ Program temporary fix (PTF) or Authorized Program Analysis Report (APAR) associated with the problem.
SDBPUBS PUBS/ Publication identifier.
SDBREGS REGS/ A register number associated with the problem, followed by the offset from the PSW.
SDBREGS_CR REGS/CR A control register associated with the problem. This symptom is followed with a symptom containing the value in the register.
SDBREGS_FP REGS/FP A floating point register associated with the problem. This symptom is followed with a symptom containing the value in the register.
SDBREGS_GR REGS/GR A general purpose register associated with the problem. This symptom is followed with a symptom containing the value in the register.
SDBREGS_AR REGS/AR An access register associated with the problem. This symptom is followed with a symptom containing the value in the register.
SDBRIDS RIDS/ Module CSECT name.
SDBRIDSL RIDS/ Load module name.
SDBRIDSR RIDS/ Recovery routine CSECT name.
SDBSIG SIG/ System- or device-issued operator warning signal.
SDBVALU VALU/ Contents of a register. This SDB keyword must be preceded with one of the following: REGS/CRhh, REGS/FPhh, or REGS/GRhh.
SDBVALU_B VALU/B Binary value of a field in error. This SDB key must be preceded by the name of the field. The most appropriate SDB key is FLDS/.
SDBVALU_C VALU/C Character value of a field in error. This SDB key must be preceded by the name of the field. The most appropriate SDB key is FLDS/.
SDBVALU_H VALU/H Hexadecimal value of a field in error. This SDB key must be preceded by the name of the field. The most appropriate SDB key is FLDS/.
SDBWS_D WS/D System- or device-issued disabled WAIT code.
SDBWS_E WS/E System- or device-issued enabled WAIT code.
,SDBLEN=SDB length
Specifies an optional decimal value from 1 to 256 that is the length of the data provided. If you use register notation, the register contains the length itself rather than the address of the length. This parameter is mutually exclusive with the SDBLENVAR parameter, and is valid with SDBSTRING only.
,SDBLENVAR=SDB variable
Specifies the address of an optional halfword that contains the length of the data provided. The length of the data must be from 1 to 256 bytes. This parameter is mutually exclusive with the SDBLEN parameter, and is valid with SDBSTRING only.
,DATA=data
Specifies the address of the area that contains the data associated with the key specified by the SDBKEY parameter. DATA is required with SDBKEY only.
,LEN=data length
Specifies an optional decimal value from 1 to 13 that is the length of the data provided. If you use register notation, the register contains the length itself rather than the address of the length. This parameter is mutually exclusive with the LENVAR parameter, and is valid with DATA only.
,LENVAR=data variable
Specifies the address of an optional halfword that contains the length of the data provided. The length of the data must be from 1 to 13 bytes. This parameter is mutually exclusive with the LEN parameter, and is valid with DATA only.
,CONVERT=YES
,CONVERT=NO
Indicates that one to four bytes of binary data specified by the DATA parameter should be converted to hexadecimal representation in EBCDIC. If the length of the binary data is greater than four bytes, the results of the conversion are unpredictable.

If CONVERT is specified with the user abend code SDB key, SDBAB_U, the binary data is converted to decimal EBCDIC.

The default is CONVERT=NO. CONVERT is valid with DATA only.

,TYPE=TEST
,TYPE=NOTEST
Specifies whether code is generated to test if the data fits in the symptom record before storing the data. TYPE=NOTEST indicates that the data and key are unconditionally moved into the symptom record.

The default is TYPE=TEST.

Syntax

The standard form of the SYMRBLD macro with the SECONDARY option is written as follows:

Syntax Description
   
   name name: Symbol. Begin name in column 1.
   
One or more blanks must precede SYMRBLD.
   
SYMRBLD  
   
One or more blanks must follow SYMRBLD.
   
SECONDARY  
   
   ,SR=storage addr storage addr: RX-type address or address in register (2)-(12).
   
,SDBSTRING=SDB string SDB string: RX-type address or address in register (2)-(12).
,SDBKEY=SDB key SDB key: SDB key name, or SDB key literal in single quotation marks. See the parameter description for a list of valid SDB key names and literals.
  Note: You must code either SDBSTRING or SDBKEY or both.
   
   ,SDBLEN=SDB length SDB length: Decimal digit 1-256, or register (2)-(12).
   ,SDBLENVAR=SDB variable SDB variable: RX-type address or address in register (2)-(12).
Note:
  1. If you use register notation for SDB length, the register contains the length itself rather than the address of the length.
  2. SDBLEN (or SDBLENVAR) is valid with SDBSTRING only.
   
   ,DATA=data

data:  RX-type address or address in register (2)-(12).
Note:  DATA is required with SDBKEY only.

   
   ,LEN=data length data length: Decimal digit 1-13, or register (2)-(12).
   ,LENVAR=data variable data variable: RX-type address or address in register (2)-(12).
Note:
  1. If you use register notation for data length, the register contains the length itself rather than the address of the length.
  2. LEN (or LENVAR) is valid with DATA only.
   
   ,CONVERT=YES Default: CONVERT=NO
   ,CONVERT=NO Note: CONVERT is valid with DATA only.
   

   ,TYPE=TEST
   ,TYPE=NOTEST

Default: TYPE=TEST
   

Parameters

The parameters for SYMRBLD SECONDARY are explained as follows:

SECONDARY
Indicates that the symptom data provided is concatenated to section 4, the secondary symptom string. The secondary symptom string is an EBCDIC character string of problem symptoms, SDB key/data pairs. The purpose of the secondary symptom string is to save diagnostic data at the time of the error. This data may not be duplicated for each instance of the problem.
The suggested minimum list of symptoms includes:
  • Module assembly level - LVLS/aaa
  • Field name related to the error and contents - FLDS/av10 VALU/Cav8

    Binary and hex data can be provided with the VALU/B and VALU/H keys.

Note: The following restrictions apply to symptoms in the secondary symptom string:
  • The symptom data cannot contain imbedded blanks. The ‘#’ is used to substitute for desired blanks.
  • The total length of each symptom (key/data) may not exceed 15 characters. The symptom length includes the SDB key, a slash, and the EBCDIC data. Remember that hexadecimal data doubles in length when converted to hexadecimal representation in EBCDIC.
,SR=storage addr
Specifies the address of the storage area, on a doubleword boundary, used for the symptom record. This is the same storage area you specified on SYMRBLD INITIAL. If you do not specify SR with SYMRBLD SECONDARY, the default is to use the storage area address you placed in register 1.
,SDBSTRING=SDB string
Specifies the address of an optional character input string to be added to the secondary symptom string. The data is a list of symptoms separated by a blank. A symptom is an SDB key followed by a slash and EBCDIC data.

You must code either SDBSTRING or SDBKEY or both. When you code both on the same macro, the data provided with the SDBSTRING parameter is put into the symptom string first.

,SDBKEY=SDB key
Specifies an optional name from the set of SDB keys. You can provide the SDB key name, or specify the SDB key literal in single quotation marks (for example, specify either SDBKEY=SDBAB_S, or SDBKEY=‘AB/S’). See Table 1 for valid SDB key names and literals.

You must code either SDBSTRING or SDBKEY or both. When you code both on the same macro, the data provided with the SDBSTRING parameter is put into the symptom string first.

,SDBLEN=SDB length
Specifies an optional decimal value from 1 to 256 that is the length of the data provided. If you use register notation, the register contains the length itself rather than the address of the length. This parameter is mutually exclusive with the SDBLENVAR parameter, and is valid with SDBSTRING only.
,SDBLENVAR=SDB variable
Specifies the address of an optional halfword that contains the length of the data provided. The length of the data must be from 1 to 256 bytes. This parameter is mutually exclusive with the SDBLEN parameter, and is valid with SDBSTRING only.
,DATA=data
Specifies the address of the area that contains the data associated with the key specified by the SDBKEY parameter. DATA is required with SDBKEY only.
,LEN=data length
Specifies an optional decimal value from 1 to 13 that is the length of the data provided. If you use register notation, the register contains the length itself rather than the address of the length. This parameter is mutually exclusive with the LENVAR parameter, and is valid with DATA only.
,LENVAR=data variable
Specifies the address of an optional halfword that contains the length of the data provided. The length of the data must be from 1 to 13 bytes. This parameter is mutually exclusive with the LEN parameter, and is valid with DATA only.
,CONVERT=YES
,CONVERT=NO
Indicates that one to four bytes of binary data specified by the DATA parameter should be converted to hexadecimal representation in EBCDIC. If the length of the binary data is greater than four bytes, the results of the conversion are unpredictable.

If CONVERT is specified with the user abend code SDB key, SDBAB_U, the binary data is converted to decimal EBCDIC.

The default is CONVERT=NO. CONVERT is valid with DATA only.

,TYPE=TEST
,TYPE=NOTEST
Specifies whether code is generated to test if the data fits in the symptom record before storing the data. TYPE=NOTEST indicates that the data and key are unconditionally moved into the symptom record.

The default is TYPE=TEST.

Syntax

The standard form of the SYMRBLD macro with the VARIABLE option is written as follows:

Syntax Description
   
   name name: Symbol. Begin name in column 1.
   
One or more blanks must precede SYMRBLD.
   
SYMRBLD  
   
One or more blanks must follow SYMRBLD.
   
VARIABLE  
   
   ,SR=storage addr storage addr: RX-type address or address in register (2)-(12).
   
,S5KEY=5key 5key: Section 5 key name, or section 5 key literal in single quotation marks. See the parameter description for valid section 5 key names and literals.
   
,DATA=data data: RX-type address or address in register (2)-(12).
   
   ,LEN=data length data length: Decimal digit 1-256, or register (2)-(12).
   ,LENVAR=data variable data variable: RX-type address or address in register (2)-(12).
Note: If you use register notation for data length, the register contains the length itself rather than the address of the length.
   
   ,TYPE=NOTEST Default: TYPE=TEST
   ,TYPE=TEST  
   

Parameters

The parameters for SYMRBLD VARIABLE are explained as follows:

VARIABLE
Indicates that the symptom data provided is concatenated to section 5, the variable data section. The variable data section is in key/length/data format. The purpose of the variable data section is to provide additional serviceability data for debugging. Examples of serviceability data are a parameter list, a text description of the problem, or a portion of a data area.

The VARIABLE parameter must be specified once for each symptom provided in key/length/data format.

,SR=storage addr
Specifies the address of the storage area, on a doubleword boundary, used for the symptom record. This is the same storage area you specified on SYMRBLD INITIAL. If you do not specify SR with SYMRBLD VARIABLE, the default is to use the storage area address you placed in register 1.
,S5KEY=5key
Specifies the key that describes the data in section 5 of the symptom record. You can provide the section 5 key name, or specify the section 5 key literal in single quotation marks (for example, specify either S5KEY=S5EBCDIC, or S5KEY=‘F000’).

The following table contains the two valid section 5 key names and literals:

Table 2. Valid Section 5 Key Names and Literals
Section 5 Key Name Section 5 Key Literal Description
S5EBCDIC F000 EBCDIC printable data.
S5HEX FF00 Hexadecimal data.
,DATA=data
Specifies the address of the area that contains the data associated with the key specified by the S5KEY parameter.
,LEN=data length
Specifies an optional decimal value from 1 to 256 that is the length of the data provided. If you use register notation, the register contains the length itself rather than the address of the length. This parameter is mutually exclusive with the LENVAR parameter.
,LENVAR=data variable
Specifies the address of an optional halfword that contains the length of the data provided. The length of the data must be from 1 to 256 bytes. This parameter is mutually exclusive with the LEN parameter.
,TYPE=TEST
,TYPE=NOTEST
Specifies whether code is generated to test if the data fits in the symptom record before storing the data. TYPE=NOTEST indicates that the data and key are unconditionally moved into the symptom record.

The default is TYPE=TEST.

Syntax

The standard form of the SYMRBLD macro with the COMPLETE option is written as follows:

Syntax Description
   
   name name: Symbol. Begin name in column 1.
   
One or more blanks must precede SYMRBLD.
   
SYMRBLD  
   
One or more blanks must follow SYMRBLD.
   
COMPLETE  
   
   ,SR=storage addr storage addr: RX-type address or address in register (2)-(12).
   
   ,INVOKE=YES Default: INVOKE=YES
   ,INVOKE=NO  
   
   ,RETCODE=return code return code: RX-type address or address in register (2)-(12).
Note: RETCODE is valid with INVOKE=YES only.
   ,RSNCODE=reason code reason code: RX-type address or address in register (2)-(12).
Note: RSNCODE is valid with INVOKE=YES only.
   

Parameters

The parameters for SYMRBLD COMPLETE are explained as follows:

COMPLETE
Indicates that the symptom record is complete, and is ready to be written to the logrec data set.

SYMRBLD COMPLETE is required before the symptom record can be successfully written to the logrec data set.

,SR=storage addr
Specifies the address of the storage area, on a doubleword boundary, used for the symptom record. This is the same storage area you specified on SYMRBLD INITIAL. If you do not specify SR with SYMRBLD COMPLETE, the default is to use the storage area address you placed in register 1.
,INVOKE=NO
,INVOKE=YES
Indicates whether to invoke the SYMREC macro that writes the symptom records out to the logrec data set. For unauthorized programs, your installation controls which programs can write symptom records and whether to write the symptom record to the logrec data set, the job log, both or neither through an installation-written exit. This exit is called ASREXIT. For more information about ASREXIT, see z/OS MVS Installation Exits. Records written for authorized programs always go to the logrec data set.

The default is INVOKE=YES.

,RETCODE=return code
Specifies the location where the system is to store the return code from the SYMREC macro. (The SYMRBLD macro does not itself generate any return codes.) RETCODE is valid with INVOKE=YES only. The return code is also in general purpose register (GPR) 15 if you code INVOKE=YES.
,RSNCODE=reason code
Specifies the location where the system is to store the reason code from the SYMREC macro. (The SYMRBLD macro does not itself generate any reason codes.) RSNCODE is valid with INVOKE=YES only. The reason code is also in GPR 0 if you code INVOKE=YES.

ABEND codes

None.

Return and reason codes (for SYMRBLD COMPLETE,INVOKE=YES)

The SYMRBLD macro itself does not generate any return codes. However, if you specify INVOKE=YES on SYMRBLD COMPLETE (or take the default), you can receive return codes and reason codes from the SYMREC macro. The return code from SYMREC is in GPR 15 (and return code if you coded RETCODE); the reason code from SYMREC is in GPR 0 (and reason code if you coded RSNCODE). See Return and reason codes for a list of return codes from the SYMREC macro.

Syntax

The standard form of the SYMRBLD macro with the RESET option is written as follows:

Syntax Description
   
   name name: Symbol. Begin name in column 1.
   
One or more blanks must precede SYMRBLD.
   
SYMRBLD  
   
One or more blanks must follow SYMRBLD.
   
RESET  
   
,SR=storage addr storage addr: RX-type address or address in register (2)-(12).
   
   ,PRIMLEN=primary length primary length: Decimal digit, RX-type address, or address in register (2)-(12).
   
   ,SECLEN=secondary length secondary length: Decimal digit, RX-type address, or address in register (2)-(12).
   
   ,VARLEN=variable length variable length: Decimal digit, RX-type address, or address in register (2)-(12).
   

Parameters

The parameters for SYMRBLD RESET are explained as follows:

RESET
Rebuilds the symptom record using the same storage area and application information that was specified using the INITIAL parameter. This is useful when the primary, secondary, and variable sections of the symptom record are to be changed but the application information in section 2.1 remains the same.
,SR=storage addr
Specifies the address of the storage area, on a doubleword boundary, used for the symptom record. This is the same storage area you specified on SYMRBLD INITIAL. The storage area must reside in the primary address space.

The maximum size of the symptom record is 1900 bytes. Sections 1, 2, and 2.1 use 212 bytes of the total 1900 bytes. Sections 3, 4, and 5 use the remaining 1688 bytes. In addition to providing storage for the symptom record, 100 bytes must be provided for a work area; therefore, the maximum amount of storage needed is 2000 bytes.

Use the PRIMLEN, SECLEN, and VARLEN parameters to specify the length of sections 3, 4, and 5 respectively.

,PRIMLEN=primary length
Specifies the address of an optional halfword input variable that contains the maximum length in bytes of the primary symptom string. You can also directly specify a decimal digit for the length (for example, PRIMLEN=900). If you use register notation, the register contains the address of the length rather than the length itself.
The following formula calculates the length of the primary symptom string:
Lengths of all SDBKEYs + length of all data provided with
the DATA keyword + the number of times SDBKEY is specified
+ the length of all data specified with the SDBSTRING keyword
+ the number of times the SDBSTRING keyword is provided.

Note that this field cannot be zero and the maximum size of the entire symptom record is 1900 bytes.

If you do not specify PRIMLEN, the length of the primary symptom string will not change from the length you specified on SYMRBLD INITIAL, or on a previous SYMRBLD RESET.

,SECLEN=secondary length
Specifies the address of an optional halfword input variable that contains the maximum length in bytes of the secondary symptom string. You can also directly specify a decimal digit for the length (for example, SECLEN=900). If you use register notation, the register contains the address of the length rather than the length itself.
The following formula calculates the length of the secondary symptom string:
Lengths of all SDBKEYs + length of all data provided with
the DATA keyword + the number of times SDBKEY is specified
+ the length of all data specified with the SDBSTRING keyword
+ the number of times the SDBSTRING keyword is provided.

Note that the maximum size of the entire symptom record is 1900 bytes.

If you do not specify SECLEN, the length of the secondary symptom string will not change from the length you specified on SYMRBLD INITIAL, or on a previous SYMRBLD RESET.

,VARLEN=variable length
Specifies the address of an optional halfword input variable that contains the maximum length in bytes of the variable data section. You can also directly specify a decimal digit for the length (for example, VARLEN=900). If you use register notation, the register contains the address of the length rather than the length itself.
The following formula calculates the length of the variable data section:
The length provided must be the total length of the variable data items
+ the number of items (x) 4.

(The 4 is for the 2 byte key + 2 bytes for the length.) Note that the maximum size of the entire symptom record is 1900 bytes.

If you do not specify VARLEN, the length of the variable data section will not change from the length you specified on SYMRBLD INITIAL, or on a previous SYMRBLD RESET.

Example

The following is an example of invoking SYMRBLD to build a symptom record:
  • SYMRBLD INITIAL initializes sections 1 and 2 of the symptom record and provides component data for section 2.1.
  • SYMRBLD PRIMARY stores the following primary symptom string data:
    • Program return code: PRCS/00028878
    • CSECT name: RIDS/ABE5698J
    • Load module name: RIDS/ABD5698J#L
      Note: The symptom PIDS/ABE5698J is automatically placed as the first symptom in the primary symptom string.
  • SYMRBLD SECONDARY stores the following secondary symptom string data:
    • Module assembly level: LVLS/C20
    • Field name: FLDS/COUNTER
    • Value: VALU/HFFFFFFFF
  • SYMRBLD VARIABLE stores additional data that can be used for debugging in section 5 of the symptom record.
  • SYMRBLD COMPLETE indicates that the record is complete. INVOKE=YES indicates that the record is written to the logrec data set. by the SYMREC macro.
      SYMRBLD INITIAL,SR=SREC,
              PRIMLEN=100,SECLEN=50,VARLEN=50,
              ARCHLEV=10,COMPDSC=MYCOMP,
              PROGRAM=PROGNAME,PROGLEV=REL6,
              PROBLEM=MYPROB,
              SERVLEV=MYSERV

      SYMRBLD PRIMARY,SDBSTRING=S1_DATA

      SYMRBLD SECONDARY,SDBSTRING=S2_DATA,SDBKEY=SDBVALU_H,
              DATA=COUNTER,CONVERT=YES

      SYMRBLD VARIABLE,S5KEY=S5HEX,DATA=MYVARDAT

      SYMRBLD COMPLETE,INVOKE=YES

SREC     DS   CL600
MYCOMP   DC   CL13'COMPONENT XXX'
MYPROB   DC   CL14'DATABASE ERROR'
MYSERV   DC   CL9'VERSION 1'
PROGNAME DC   CL8'ABE5698J'
REL6     DC   CL3'REL6'
S1_DATA  DC   CL43'PRCS/00028878 RIDS/ABE5698J RIDS/ABD5698J#L'
S2_DATA  DC   CL22'LVLS/C20 FLDS/COUNTER'
MYVARDAT DC   XL2'01E4'
COUNTER  DC   X'FFFFFFFF'