에러 코드 및 대응

본 부록에서는 OpenFrame ASM 실행 중 발생하는 에러 코드 및 대응에 대해 기술한다.

1. 런타임 에러

1.1. VM 시스템 관련 에러

CANNOT FIND LOADABLE PROGRAM. [PROGRAM NAME] (3000)

설명

프로그램을 찾을 수 없거나 로드된 프로그램이 존재하지 않는다.

대응 방법

프로그램이 올바른 위치에 존재하는지 확인한다.

EXTERNAL SYMBOL NOT FOUND. [SYMBOL NAME] (3001)

설명

외부 심볼을 찾을 수 없거나 대상 심볼을 로드하지 못했다.

대응 방법

프로그램 내에서 참조하는 심볼이 다른 프로그램에 존재하는지 확인한다.

OPCODE NOT SUPPORTED. [HEX] (3004)

설명

지원하지 않는 OPCODE이다.

대응 방법

해당 에러는 원인이 다양하나, 일반적으로 잘못된 주소로 BRANCH 한 경우가 많다.

ODD REGISTER FOUND. MUST USE EVEN REGISTER. (3007)

설명

EVEN-ODD 레지스터를 사용하는 기계 명령어의 포맷이 올바르지 않다.

대응 방법

해당 기계 명령어에는 짝수 레지스터만 사용할 수 있다.

DIVIDE WITH ZERO ERROR. (3008)

설명

0으로 나눌 수 없다.

대응 방법

0으로 나눌 수 없으므로, 제수(divisor) 값을 확인한다.

INVAILD STOW OPTION. (3009)

설명

올바르지 않은 STOW 옵션이다.

대응 방법

STOW(SVC21)는 레지스터 1번과 0번 값이 양수, 음수, 0인지에 따른 5가지 조합만 허용한다. 각 레지스터에 적재된 값이 올바른지 체크한다.

DATA EXCEPTION: INVALID PACKED DATA. [MESSAGE] (3010)

설명

PACK 데이터의 포맷이 맞지 않다.

대응 방법

팩형 10진수 연산 수행 중 입력값의 포맷이 맞지 않은 경우이다. 입력값의 포맷을 확인한다.

ENTRY NOT FOUND IN THE PROGRAM. [ENTRY NAME] (3013)

설명

프로그램의 엔트리를 찾지 못했다.

대응 방법

프로그램 경로, 엔트리, 컴파일 상태가 올바른지 확인한다.

OFASM VM LAUNCH FAILED. AT LEAST [VM MEMORY SIZE]MB OF MEMORY SHOULD BE AVAILABLE TO LANUNCH OFASM VM. (3014)

설명

VM 기동이 실패했다.

대응 방법

config 파일에 정의된 VM_MEMORY_SIZE만큼의 메모리 용량이 필요하다. 해당 가용 메모리를 확보한 후 VM을 재실행한다.

FIXED-POINT-DIVIDE EXCEPTION. (3015)

설명

팩형 10진수 연산 수행 중 Fixed-point divide exception이 발생했다.

대응 방법

대상 기계 명령어의 입력값이 올바른지 확인한다.

SVC40: FIELDS NOT SUPPORTED. [SVC40 FIELDS FLAG] (3016)

설명

SVC40[EXTRACT]의 미지원 필드가 요청되었다.

대응 방법

EXTRACT의 요청 필드가 올바른지 확인한다. 자세한 내용은 TmaxSoft 기술 지원에 문의한다.

SPECIFICATION EXCEPTION. (3017)

설명

SRST specification 에러이다. 첫 번째 레지스터(32bit)의 0~23비트 위치가 0이 아닌 경우에 발생한다.

대응 방법

SRST 기계 명령어의 입력값이 올바른지 확인한다.

TESTCB: FIELDS NOT SUPPORTED. [TESTCB FIELDS FLAG] (3018)

설명

TESTCB ACB의 미지원 사양이 발견된 경우이다.

대응 방법

TEST ACB에서 지원하는 사양을 확인한다. 자세한 내용은 TmaxSoft 기술 지원에 문의한다.

SHOWCB: VSAM DATASET IS NOT OPENED. (3019)

설명

SHOWCB ACB의 대상 데이터셋이 OPEN 되지 않은 경우이다.

대응 방법

대상 ACB가 OPEN 상태인지 확인한다.

SVC27: TDCB_ERROR, [MESSAGE]. ERROR_CODE: [OPENFRAME ERROR CODE] (3020)

설명

SVC27 실행 중 DCB 관련 에러가 발생한 경우이다.

대응 방법

CAMLST(SVC27) 수행 중 DCB 관련 에러가 발생했으므로 [MESSAGE]를 참고한다. ERRCODE로 출력되는 값은 OpenFrame의 에러 코드이다.

PARAMETER HAVE NULL VALUE. (3021)

설명

파라미터가 NULL 값을 가지고 있다.

대응 방법

OFASM 인터페이스로 전달된 파라미터 중 NULL 값이 포함된 파라미터가 존재하는 경우이다. 인터페이스가 정상적으로 작성되었는지 확인하고, 파라미터가 올바른지 확인한다.

INVALID PCB MASK ADDRESS. (3028)

설명

PCB 마스크 주소가 올바르지 않은 경우에 발생한다.

대응 방법

대상 파라미터가 PCB가 아니거나, 인터페이스가 잘못 작성된 경우이므로 해당 사항을 확인한다.

NULL PTR DETECTED: [MESSAGE] (3029)

설명

OPEN(SVC19) 대상이 DCB/ACB가 아닌 경우에 발생한다.

대응 방법

OPEN 대상이 DCB/ACB가 아닌 경우이므로 코드 작성이 올바른지 확인한다.

NOT SUPPORT AMODE 64: [INSTRUCTION NAME] (3030)

설명

대상 기계 명령어가 64비트 AMODE를 지원하지 않는 경우이다.

대응 방법

64비트 AMODE로의 전환은 OFASM에서 지원하고 있지 않다.

HFP exponent underflow: (3031)

설명

소수점 연산 중 UNDERFLOW EXCEPTION이 발생했다.

대응 방법

입력값이 올바르지 않은 경우이므로 대상 소수 연산의 피연산자 값을 확인한다.

HFP exponent overflow: (3032)

설명

소수점 연산 중 OVERFLOW EXCEPTION이 발생했다.

대응 방법

입력값이 올바르지 않은 경우이므로 대상 소수 연산의 피연산자 값을 확인한다.

HFP significance. (3033)

설명

소수점 연산 중 SIGNIFICANCE EXCEPTION이 발생했다.

대응 방법

입력값이 올바르지 않은 경우이므로 대상 소수 연산의 피연산자 값을 확인한다.

Invalid access occured. [MESSAGE] (3036)

설명

대상 기계 명령어에 올바르지 않은 값이 전달된 경우에 발생한다.

대응 방법

[MESSAGE]로 출력되는 기계 명령어의 피연산자 값을 확인한다.

Target [MESSAGE] addr is over 16MB: [HEX] (3038)

설명

[MESSAGE]의 대상 주소가 16MB 영역을 초과하는 경우에 발생한다.

대응 방법

해당 기능은 31비트 영역에 위치한 데이터에 대해 동작하지 않는다. 대상 데이터가 위치한 영역을 24비트 영역으로 조정한다.

REQUESTED GETMAIN SIZE IS TOO BIG: [HEX] (3039)

설명

GETMAIN의 크기가 너무 큰 경우에 발생한다.

대응 방법

요청 메모리의 크기를 줄인다.

STACK CORRUPTED. 24 BIT HEAP AREA OVERFLOWED STACK AREA (3040)

설명

24비트 메모리 영역에 공간이 부족하다.

대응 방법

요청 메모리의 크기를 줄이거나, 기존에 할당된 메모리를 해제한다.

MEMORY CORRUPTED. 31 BIT HEAP AREA OVERFLOWED VM AREA (3041)

설명

31비트 메모리 영역에 공간이 부족하다.

대응 방법

요청 메모리의 크기를 줄이거나, 기존에 할당된 메모리를 해제한다.

TRYING TO ACCESS PROTECTED ADDRESS = [Addr: [HEX], Size: [NUMBER]] (3042)

설명

VM 메모리 밖의 메모리 영역을 참조하려고 한다.

대응 방법

VM 밖의 영역은 OFASM에서 참조할 수 없다. 참조하려는 메모리 주솟값이 올바른지 확인한다.

1.2. 데이터셋 I/O 관련 에러

DDNAME SHOULDN’T HAVE NULL CHARACTER (4000)

설명

DDNAME이 널 문자 로 시작하고 있다.

대응 방법

DDNAME 또는 대상 DCB가 올바른지 확인한다.

DSORG NOT FOUND (4001)

설명

대상 DCB 내의 DSORG 값을 찾을 수 없다.

대응 방법

DCB 내의 DSORG 값이 생략되었거나, 미지원 사양인 경우이다. TmaxSoft 기술 지원에 문의한다.

RECFM NOT FOUND (4002)

설명

대상 DCB 내의 RECFM 값을 찾을 수 없다.

대응 방법

DCB 내의 RECFM 값이 생략되었거나, 미지원 사양인 경우이다. TmaxSoft 기술 지원에 문의한다.

RECFM_STRING IS NOT IMPLEMENTED (4003)

설명

OPEN 도중 OFASM에서 지원하지 않는 RECFM 값을 발견했다.

대응 방법

OFASM에서 지원하지 않는 사양일 수 있다. TmaxSoft 기술 지원에 문의한다.

DD NOT FOUND IN SVC [NUMBER]. DDNAME([STRING]) (4005)

설명

대상 SVC를 실행하는 도중 지정된 DDNAME이 가리키는 DD를 찾을 수 없다.

대응 방법

대상 DDNAME이 JCL에 올바로 기술되어 있는지 확인한다.

DSIO ERROR IN SVC [NUMBER]. DSIO([NUMBER]), DDNAME([STRING]), DSNAME([STRING]), ERRCODE([NUMBER]) (4006)

설명

SVC[NUMBER]를 실행하는 도중 에러가 발생했다.

대응 방법

[DDNAME] 혹은 [DSNAME]이 가리키는 데이터셋에 대해 OpenFrame 에러가 발생한 경우이다. 자세한 에러 내용은 OpenFrame 에러 코드를 참조한다.

DATASET IS CLOSED WITH LOCK ERROR IN SVC 19. DDNAME([STRING]), DSNAME([STRING]) (4007)

설명

DDNAME/DSNAME이 가리키는 데이터셋이 LOCK 상태에서 CLOSE 되었다.

대응 방법

DDNAME/DSNAME이 가리키는 데이터셋이 LOCK 상태인지 확인한다. LOCK 상태인 경우 LOCK을 해제하고 OPEN을 시도한다.

NOT SUPPORT VSAM TYPE IN INIT ([NUMBER]) (4008)

설명

지원하는 VSAM 데이터셋이 아니다.

대응 방법

VSAM 데이터셋이 올바른 포맷인지 확인한다.

dsio_batch_write() ERROR. DDNAME([STRING]), HANDLE([NUMBER]), ERRCODE([NUMBER]) (4009)

설명

PUT 매크로에서 에러가 발생했다.

대응 방법

ERRCODE는 OpenFrame 에러 코드를 참조한다.

dsio_batch_read2() ERROR. DDNAME([STRING]), HANDLE([NUMBER]), ERRCODE([NUMBER]) (4010)

설명

GET 매크로에서 에러가 발생했다.

대응 방법

ERRCODE는 OpenFrame 에러 코드를 참조한다.

LRECL IS NOT SPECIFIED IN DCB OR IN CATALOG (4011)

설명

레코드 길이가 어셈블러 코드, JCL, 카탈로그 정보 어디에도 기술되어 있지 않다.

대응 방법

DCB가 가리키는 데이터셋에 대해 레코드 길이가 올바른지 확인한다.

INVALID ACCESS MODE ERROR IN SVC 19. DDNAME([STRING]), DSNAME([STRING]) (4013)

설명

OPEN(SVC19)에서 지원하지 않는 액세스 모드이다.

대응 방법

OPEN 모드가 올바른지 확인하고, 미지원 사양에 대해서는 TmaxSoft 기술 지원에 문의한다.

I/O SIZE NOT SET WHILE WRITING PS DATASET (4014)

설명

PS 데이터셋에 대해 WRITE 시 지정된 길이가 존재하지 않는다.

대응 방법

DSORG=PS에 대해 WRITE 시 길잇값이 올바로 지정되어 있는지 확인한다.

NOT SUPPORTED TYPE FOR WRITE: ([NUMBER]) (4016)

설명

지원하지 않는 WRITE 매크로 옵션이다.

대응 방법

WRITE 매크로 사용 중 지원하지 않는 옵션이다. 자세한 내용은 TmaxSoft 기술 지원에 문의한다.

I/O REQUEST SIZE FOR DA DATASET IS NOT EQUAL TO BLKSIZE (4017)

설명

DSORG=DA의 READ/WRITE 시 LRECL 크기가 BLKSIZE와 같지 않다.

대응 방법

DSORG=DA 데이터셋의 LRECL 값과 BLKSIZE가 동일한지 확인한다.

dsio_batch_write() ERROR IN WRITE. DDNAME([STRING]), HANDLE([NUMBER]), ERRCODE([NUMBER]) (4018)

설명

WRITE 매크로에서 에러가 발생했다.

대응 방법

ERRCODE는 OpenFrame 에러 코드를 참조한다.

WRITE: PO DATASET I/O REQUEST SIZE MUST BE MULTIPLES OF LRECL (I/O REQUEST SIZE = N*LRECL) (4019)

설명

PO 데이터셋의 LRECL이 BLKSIZE의 정수배가 아니다.

대응 방법

PO 데이터셋의 WRITE 시에 BLKSIZE를 LRECL의 정수배로 조정한다.

dsio_batch_read2() ERROR IN READ. DDNAME([STRING]), HANDLE([NUMBER]), ERRCODE([NUMBER]) (4020)

설명

READ 매크로에서 에러가 발생했다.

대응 방법

ERRCODE는 OpenFrame 에러 코드를 참조한다.

DATASET READ EOF. DDNAME([STRING]) (4021)

설명

READ 매크로에서 EOF를 읽었지만, EODAD 루틴이 정의되지 않았다.

대응 방법

EODAD 루틴을 지정하거나 CHECK 매크로를 통해 감지할 수 있으며, 무시할 수도 있다.

NOT SUPPORT I/O OPERATION (4025)

설명

지원하지 않는 I/O 동작이다.

대응 방법

대상 데이터셋이 해당 매크로를 지원하지 않는 경우이다.

KEY IS NOT SPECIFIED IN DELETE OPERATION. (4026)

설명

ERASE 매크로를 이용한 VSAM KSDS 데이터셋에 대한 레코드 삭제 요청 시 KEY 값이 생략되었다.

대응 방법

ERASE 매크로에 사용되는 KEY 값을 확인한다.

THE LAST I/O STATEMENT WAS NOT A READ STATEMENT. (4027)

설명

ERASE 매크로를 이용한 데이터셋에 대한 레코드 삭제 요청 시 이전 I/O 요청이 GET이 아닌 경우에 발생한다.

대응 방법

ERASE 매크로를 사용할 경우 반드시 GET을 먼저 사용해야 한다. 로직이 올바른지 확인한다.

DELETE OPERATION IS NOT ALLOWED. (4028)

설명

ERASE 매크로 대상 VSAM이 OUTPUT 모드로 OPEN 되었다.

대응 방법

ERASE 매크로 대상 VSAM은 IN 모드로 OPEN 되어야 한다. 대상 ACB의 OPEN 모드를 확인한다.

INVALID TARGET DSORG. DDNAME([STRING]), [STRING] (4029)

설명

SETL 매크로 대상 데이터셋의 DSORG가 IS로 정의되어 있지 않다.

대응 방법

SETL 매크로의 대상 데이터셋의 DSORG를 IS로 설정한다.

SETL OPTION IS NOT SUPPORTED: [HEX] (4030)

설명

지원하지 않는 SETL 옵션이다.

대응 방법

TmaxSoft 기술 지원에 문의한다.

NOT SUPPORT MACRF FLAG ([HEX]). DDNAME([STRING]) (4031)

설명

해당 DD에 대해 지원하지 않는 MACRF 옵션이다.

대응 방법

TmaxSoft 기술 지원에 문의한다.

INVALID KEY. DDNAME([STRING]), ERRCODE([NUMBER]). (4032)

설명

ISAM READ 시 입력 KEY 값에 해당하는 레코드를 찾을 수 없다.

대응 방법

요청된 KEY 값이 데이터셋 내에 존재하는지 확인한다.

NOT SUPPORTED FEATURE RECOGNIZED IN DATASET I/O. [MESSAGE] (4033)

설명

[MESSAGE]에 해당하는 내용은 지원하지 않는다.

대응 방법

지원하지 않는 데이터셋 I/O 옵션이다. 자세한 내용은 TmaxSoft 기술 지원에 문의한다.

BLKSIZE MUST BE EQUAL TO MULTIPLES OF LRECL. DDNAME([STRING]) (4034)

설명

[DDNAME]에 해당하는 데이터셋의 BLKSIZE가 LRECL의 N배가 아니다.

대응 방법

ISAM 데이터셋의 READ/WRITE 시 발생할 수 있다. BLKSIZE가 LRECL의 배수가 되도록 조정한다.

TRYING TO OPEN DATASET AGAIN. DDNAME([STRING]) IS ALREADY OPENED. (4035)

설명

이미 OPEN 된 데이터셋에 대해 다시 OPEN을 시도하고 있다. 두 번째 OPEN 시도는 무시된다.

대응 방법

같은 데이터셋에 대해 중복 OPEN을 시도하고 있다. 의도된 동작인지 확인한다.

FAILED GETTING DCB INFO WITH ERRCODE([NUMBER]) (4036)

설명

NVSAM 파일의 RECFM과 DSORG 정보를 가져올 수 없다.

대응 방법

NVSAM 파일이 올바로 정의되어 있는지 확인한다.

NOT SUPPORTED RECFM ([DSNAME]:[RECFM]) (4037)

설명

RDJCFB 중 NVSAM 파일의 RECFM 카탈로그 정보를 가져왔지만 OFASM에서는 지원하지 않는다.

대응 방법

OpenFrame에서는 지원 중인 RECFM이지만, OFASM에서는 지원하지 않는다. TmaxSoft 기술 지원에 문의한다.

NOT SUPPORTED DSORG ([DSNAME]:[DSORG]) (4038)

설명

NVSAM 파일의 DSORG 카탈로그 정보를 가져왔지만 OFASM에서는 지원하지 않는다.

대응 방법

OpenFrame에서는 지원 중인 DSORG이지만, OFASM에서는 지원하지 않는다. TmaxSoft 기술 지원에 문의한다.

BAD REQUEST WHEN FETCHING DISP INFORMATION (4039)

설명

RDJCFB 중 데이터셋의 DISP 정보를 가져오는 것에 실패했다.

대응 방법

RDJFCB의 대상 데이터셋이 올바른지 확인한다.

INPUT RECORD LENGTH FOR V RECFM MUST BE GREATER THAN 4. CURRENT: [LENGTH] (4040)

설명

가변 길이 레코드를 PUT 할 때 RDW 값이 4보다 작은 경우에 발생한다.

대응 방법

가변 길이 레코드에 대해 PUT 매크로를 사용할 경우, RDW 값은 4보다 커야 한다. 해당 값을 확인한다.

LERAD NOT DEFINED WITH ERRCODE([NUMBER]). (4500)

설명

VSAM I/O 처리 중 논리적 오류가 발생했지만 LERAD 루틴이 정의되어 있지 않아 해당 에러는 무시된다.

대응 방법

EXLST 매크로를 사용하여 LERAD 루틴을 정의한다.

SYNAD NOT DEFINED WITH ERRCODE([NUMBER]). (4501)

설명

VSAM I/O 처리 중 시스템 오류가 발생했지만 SYNAD 루틴이 정의되어 있지 않아 해당 에러는 무시된다.

대응 방법

EXLST 매크로를 사용하여 SYNAD 루틴을 정의한다.

VSAM I/O ERR OCCURED WITH ERRCODE([NUMBER]). (4502)

설명

VSAM I/O 처리 중 분류되지 않은 에러가 발생했다.

대응 방법

OpenFrame의 에러 코드를 참조한다.