Standards / Extensions | C or C++ | Dependencies |
---|---|---|
Language Environment |
both | z/OS® V1.9 AMODE 64 |
#include <__le_api.h>
void __le_traceback(int cmd, void* cmd_parms, _FEEDBACK *fc);
Code | Severity | Message number | Message text |
---|---|---|---|
CEE000 | 0 | - - | The service completed successfully. |
CEE310 | 3 | 3104S | Information could not be successfully extracted for this DSA. It is likely that the dsaptr parameter does not point to an actual DSA or save area. |
CEE316 | 2 | 3110E | The cmd parameter is not a valid command for __le_traceback(). |
CEE3NS | 1 | 3836W | A statement number is not available for this DSA. DWARF data in the load module is corrupted. |
CEE3NT | 1 | 3837W | Statement numbers are not available. The explicit DLL load of DLL CDAEQED failed with feedback code fc. |
CEE3NU | 1 | 3838W | Statement numbers are not available. The explicit DLL load of DLL CDAEQDPI failed with feedback code fc. |
CEE3NV | 1 | 3839W | Statement numbers are not available. The explicit DLL load of DLL CELQDSNF failed with feedback code fc. |
CEE3O0 | 1 | 3840 | Statement numbers are not available. dllqueryfn() failed for a function in the DLL CELQDSNF. |
CEE3O1 | 1 | 3841 | A statement number is not available for this DSA. An internal routine failed with return code return-code and reason code reason-code. |
The __tf_parms_s structure is defined as follows:
typedef struct __tf_string_s {
size_t __tf_bufflen;
char* __tf_buff;
} __tf_string_t;
typedef struct __tf_parms_s {
/****************************************************************/
/* Input */
/****************************************************************/
void* __tf_dsa_addr;
void* __tf_caa_addr;
void* __tf_call_instruction;
/****************************************************************/
/* Output related to input DSA */
/****************************************************************/
void* __tf_ pu_addr;
void* __tf_ entry_addr;
struct __cib* __tf_cib_addr;
uint8_t __tf_member_id;
int __tf_is_main:1;
int :23;
int :32;
__tf_string_t __tf_pu_name;
__tf_string_t __tf_entry_name;
__tf_string_t __tf_statement_id;
/****************************************************************/
/* Output related to caller's DSA */
/****************************************************************/
void* __tf_caller_dsa_addr;
void* __tf_caller_call_instruction;
} __tf_parms_t;
If the program unit name cannot be determined, the buffer is set to a null string. If the program unit name cannot fit within the supplied string, it is truncated. (Truncation of DBCS preserves even byte count and SI/SO pairing.) If __tf_buff is NULL or __tf_bufflen is zero, the program unit name is not returned.
If the entry point name cannot be determined, the buffer is set to a null string. If the entry point name cannot fit within the supplied string, it is truncated. (Truncation of DBCS preserves even byte count and SI/SO pairing.) If __tf_buff is NULL or __tf_bufflen is zero, the entry point name is not returned
If the statement id cannot be determined, the buffer is set to a null string. If the statement id cannot fit within the supplied string, it is truncated. (Truncation of DBCS preserves even byte count and SI/SO pairing.) If __tf_buff is NULL or __tf_bufflen is zero, the statement id is not returned
#include <__le_api.h>
#include <stdlib.h>
int main() {
__tf_parms_t tbck_parms;
char pu_name[256];
char entry_name[256];
char statement_id[256];
_FEEDBACK fc;
int rc;
tbck_parms.__tf_pu_name. __tf_bufflen = sizeof(pu_name);
tbck_parms.__tf_entry_name. __tf_bufflen = sizeof(entry_name);
tbck_parms.__tf_statement_id. __tf_bufflen = sizeof(statement_id);
tbck_parms.__tf_pu_name. __tf_buff = pu_name;
tbck_parms.__tf_entry_name. __tf_buff = entry_name;
tbck_parms.__tf_statement_id. __tf_buff = statement_id;
tbck_parms.__tf_dsa_addr = 0;
tbck_parms.__tf_caa_addr = 0;
tbck_parms.__tf_call_instruction = 0;
do {
_le_traceback(__TRACEBACK_FIELDS, &tbck_parms, &fc);
if ( fc.tok_sev >= 2 ) {
printf("Error: __le_traceback() failed.\n");
break;
}
printf("Entry=%s Offset=%c%x Line=%s\n",
tbck_parms.__tf_entry_name.__tf_buff,
tbck_parms.__tf_call_instruction
< tbck_parms.__tf_entry_addr ? '-' : '+',
abs((int)((long)tbck_parms.__tf_call_instruction
- (long)tbck_parms.__tf_entry_addr)),
tbck_parms.__tf_statement_id.__tf_buff
);
tbck_parms.__tf_dsa_addr = tbck_parms.__tf_caller_dsa_addr;
tbck_parms.__tf_call_instruction =
tbck_parms.__tf_caller_call_instruction;
} while (!tbck_parms.__tf_is_main);
return 0;
}
Entry=main Offset=+da Line=28
Entry=CELQINIT Offset=+134c Line=