GOFF
GOFFGOFF(Generalized Object File Format) 사양은 IBM의 MVS 운영 체제가 IBM OS/360 객체 파일 형식을 대체하여 이전 [1]형식의 약점을 보완하기 위해 개발되었습니다.
배경
원래 IBM OS/360 객체 파일 형식은 1964년 새로운 IBM 시스템/360 메인프레임 컴퓨터용으로 개발되었습니다.이 포맷은 Univac 90/60, 90/70, 90/80, 후지쯔 B2800 등 플러그 호환성이 있는 동작 가능한 메인프레임 제조사에서도 사용되었습니다.이 형식은 모듈에 대한 심볼 레코드 및 확장 정보를 추가하고 이름이 8자를 초과하는 프로시저 및 함수를 지원하기 위해 확장되었습니다.이것은 도움이 되었지만, 오늘날의 보다 복잡한 프로그래밍 언어와 객체, 속성 및 메서드, 유니코드 지원, 가상 메서드 등의 고급 기능에 필요한 향상된 정보를 제공하지는 않았습니다.
GOFF 객체 파일 형식은 이러한 [2]문제를 해결하기 위한 수단으로 IBM에 의해 약 1995년에 개발되었습니다.이 포맷에 대해 가장 먼저 언급한 것은 새로운 고급 [3]어셈블러에 대한 소개 정보입니다.OS/360 오브젝트 파일 포맷은 단순히 GOFF 포맷으로 대체되어 폐지되지 않았으며, 이전 포맷의 제한을 견딜 수 있는 어셈블러 및 언어 컴파일러에 의해 여전히 사용되고 있습니다.
관습
이 문서에서는 "모듈"이라는 용어를 사용하여 이름 또는 이와 동등한 기호를 나타냅니다. 이 기호는 참조 대상 범위 외의 코드 또는 데이터의 식별자를 제공하기 위해 사용됩니다.모듈은 서브루틴, 함수, Fortran Common 또는 Block Data, 오브젝트 또는 클래스, 오브젝트 또는 클래스의 메서드 또는 속성, 또는 외부 이름을 참조하는 특정 스코프에 대한 기타 명명된 루틴 또는 식별자를 참조할 수 있습니다.
어셈블리 언어를 머신 코드로 변환하는 프로그램, 어셈블리 언어를 사용하는 프로세스로서 「어셈블러」, 컴파일러를 사용하는 프로세스로서 「컴파일」하는 프로그램의 용어에는, 이 문서의 목적상, 「어셈블러」가 필요합니다.교환 가능한 것으로 간주됩니다.따라서 "조립"과 "조립"이 사용되는 경우 필요에 따라 "조립"과 "조립자"를 대체합니다.
이 문서에서 사용되는 번호는 다음과 같습니다.16진수(베이스 16)로 지정되지 않는 한 사용되는 모든 숫자는 10진수(베이스 10)로 표시됩니다.16진수로 숫자를 표현하기 위해 필요한 경우, 숫자 앞에 대문자 X를 사용하고 대문자 16진수 문자를 나타내며 숫자를 작은 따옴표로 묶는 표준 메인프레임 어셈블러 형식은 X'15DEADBEF16'로 표현됩니다.
이 문서에서 사용되는 "바이트"는 8비트이며, 달리 지정되지 않는 한 "바이트"와 "문자"는 동일하며, EBCDIC의 문자도 8비트입니다.사용자 프로그램에서 멀티바이트 문자 세트(Unicode 등)를 사용할 경우 2바이트(또는 그 이상)가 사용됩니다.
요건 및 제약사항
이 형식은 OS/360 객체 파일 형식과 비슷하지만 응용 프로그램 [4]구축에 사용할 수 있도록 추가 정보를 추가합니다.
- GOFF 파일은 고정 길이 레코드 또는 가변 길이 레코드 중 하나입니다.
- GOFF 레코드는 기본 파일 시스템의 단일 레코드 내에 완전히 들어맞아야 합니다.GOFF 파일은 스트림 유형 파일이 아닙니다.
- 고정 길이 레코드는 80바이트여야 합니다.가변 길이 레코드의 최소 크기는 56바이트입니다.고정 길이 레코드의 경우 레코드 끝에 사용되지 않는 바이트가 있습니다.이러한 바이트는 바이너리 0으로 설정해야 합니다.
- 프로그램 읽기(또는 쓰기) GOFF 레코드는 레코드의 내부 형식에 대한 가정을 하는 것이 아닙니다.운영체제는 운영체제 내부 파일 관리를 인식할 필요가 있는 프로그램 읽기 없이 고정 길이 또는 가변 길이의 레코드를 제공할 수 있는 것으로 간주됩니다.레코드의 길이는 레코드 자체의 일부가 아닙니다.
- 바이너리 값은 빅 엔디안 형식으로 저장됩니다.예를 들어, 8비트 값의 경우 1은 X'01', 16비트 값의 경우 X'0001', 32비트 값의 경우 X'00000000000001', 64비트 값의 경우 X'0000000001'입니다.
- 비트는 왼쪽에서 오른쪽으로 카운트됩니다.비트 0은 바이트 또는 워드에서 가장 왼쪽에 있는 비트입니다.
- Unix 시스템에 배포된 GOFF 파일에는 고정 길이 레코드가 필요합니다.
- 기록은 후속 기록으로 계속할 수 있다.기록이 계속되는 경우, 계속 중인 기록과 계속 기록 사이에 어떠한 개입 기록도 발생하지 않아야 한다.
- GOFF 오브젝트파일은 HDR 레코드로 시작하여 END 레코드로 끝납니다.END 레코드에는 파일 내의 GOFF 레코드 수(물리 레코드 수가 아님)를 포함해야 합니다.
- 언어 컴파일러 또는 어셈블러는 하나의 컴파일/어셈블리에 여러 개의 GOFF 파일을 생성할 수 있지만 개별 GOFF 파일은 서로 분리해야 합니다.즉, HDR 레코드, 간섭 ESD, TXT 등으로 구성되는 모듈 또는 컴파일 유닛은 필요에 따라 HDR로 시작하여 END로 끝나는 다른 컴파일 유닛이 뒤따를 수 있습니다.
- 모듈명과 클래스명은 대소문자를 구분합니다.이름이 "exit"인 모듈(C 언어에서 사용됨)은 "EX"와 같을 필요가 없습니다.Fortran 언어에서 사용되는 IT"입니다.
- OS/360 오브젝트파일 포맷에 적용할 수 있는 몇 가지 규칙이 GOFF 오브젝트파일 포맷으로 넘어갑니다.이러한 규칙은 다음과 같습니다.
- 특별히 지정하지 않는 한 모든 문자는 EBCD에 있습니다.다음에 나타내는 외부 이름을 제외한 IC 문자 집합.
- ESD 항목(메인 프로그램, 서브루틴, 기능, FORTRAN 공통, 객체의 메서드 및 속성)에는 1부터 번호가 매겨져야 하며, 새로운 각 항목은 번호 매기기 시퀀스에 '갭'이 없는 다음 번호가 매겨져야 합니다.
- ESD 항목은 다른 레코드(TXT 또는 RLD 레코드 등)가 참조하기 전에 정의해야 합니다.
- 각 ESD 레코드에는 ESD 항목이 1개씩 포함되어 있습니다.(이는 각 ESD 레코드에 최대 3개의 ESD 항목을 허용했던 이전 형식과는 다릅니다.)
- RLD 레코드(로케이션[5] 딕셔너리)는 1개 이상의 항목을 포함할 수 있으며, RLD 레코드는 후속 레코드에 속할 수 있다.
- 향후 호환성을 보장하기 위해 '예약됨'으로 표시된 필드를 이진 0으로 설정해야 합니다.
- 외부 이름에 사용되는 문자 세트는 GOFF 표준에서는 정의되어 있지 않습니다만, 사용되고 있는 문자 세트를 나타내는 파일이 있습니다.(이것은, 더블 바이트 문자 세트의 Unicode 베이스의 모듈명을 서포트하기 위해서입니다).그러나 일부 IBM 제품에서는 외부 이름 및 기타 식별자에 대한 문자(일반적으로 (EBCDIC) 16진수 값 X'41' ~ X'FE')와 시프트인 및 시프트아웃 문자 X'0F' 및 X'0E')만 사용할 수 있습니다.
- 새로운 형식은 클래스 이름을 지원합니다.클래스 이름에는 예약 및 사용자 제공 또는 비예약 두 가지 유형이 있습니다.모든 클래스 이름의 최대 길이는 16자입니다.
- Reserved Class name은 1글자, 밑줄 및 1~14자로 구성됩니다.B_로 시작하는 예약 클래스 이름은 바인더용으로 예약되며, 로드 가능으로 표시된 C_로 시작하는 예약 클래스 이름은 IBM의 LE(Language Environment)와 함께 사용하기 위해 작성된 프로그램용으로 예약됩니다.로드 가능한 것으로 마크되지 않은 C_로 시작하는 클래스 이름 및 X_, Y_ 또는 Z_로 시작하는 클래스는 예약되지 않은 일반 용도로 사용할 수 있습니다.
- 사용자 제공 클래스 이름은 소문자일 수 있습니다.
- 클래스 이름은 외부 기호가 아닙니다.
- 필요한 경우, 바인더에서 사용하는 다음 클래스를 컴파일 목적으로 참조할 수 있습니다.
정전기 | 외부 기호 사전 클래스 |
B_텍스트 | 텍스트 클래스 |
B_RLD | 재배치 사전 클래스 |
B_SYM | 내부 기호 테이블 클래스 |
B_IDRL | 언어 번역자 식별 데이터 클래스 |
B_PRV | 유사 레지스터 클래스 |
B_IDRU | 사용자 지정 식별 데이터 클래스 |
- 다음 클래스 이름은 바인더에 의해 예약되며 사용자 응용프로그램에 접근할 수 없습니다.
B_IDRB | 바인더 데이터 정보 |
B_IDRZ | SUPER-Zap 데이터 정보 |
B_IMPEXP | Import-Export 테이블 |
B_LIT | 정보 테이블 로드 중 |
B_MAP | 데이터 매핑 |
- GOFF 개체 파일에는 360 개체 파일 형식 레코드의 SYM 개체 파일 심볼 테이블 정보를 사용할 수 없습니다. 대신 ADATA 레코드(TXT 하위 레코드)를 사용해야 합니다.
레코드 타입
이전 OS/360 형식과 마찬가지로 오브젝트 파일 레코드는 6개의 다른 레코드 타입으로 나누어져 있으며 일부는 추가, 일부는 삭제, 일부는 변경되어 있습니다.
- HDR 레코드(이것은 신규)가 최초로 발생해야 합니다.HDR 레코드는 오브젝트 파일의 헤더를 정의합니다.
- ESD 레코드는 메인 프로그램, 서브루틴, 함수, 더미 섹션, Fortran Common, 메서드와 속성, 그리고 다른 모듈이 호출할 수 있는 모듈 또는 루틴을 정의합니다.컴파일러의 이 실행에서 컴파일된 프로그램 또는 프로그램세그먼트 및 프로그램에 의해 사용되는 외부 루틴(C의 exit(), Fortran의 CALL EXIT, Pascal의 new() 및 dispose() 등)을 정의하기 위해 사용됩니다.ESD 레코드는 ESD 기호를 참조하기 전에 실행해야 합니다.
- TXT 레코드는 확장되어 모듈에 의해 유지되는 기계 명령 또는 데이터를 포함할 뿐만 아니라 IDR 레코드(20종류 이상), Associated Data(ADATA) 레코드 및 모듈과 관련된 추가 정보도 포함됩니다.
- RLD 레코드는 주소 재배치에 사용됩니다.예를 들어 모듈 내부에 500바이트가 있는 주소를 참조하는 프로그램은 내부적으로 500으로 주소를 저장하지만 모듈이 메모리에 로드되면 반드시 다른 위치에 배치되므로 RLD 레코드는 링크 에디터 또는 로더에 변경할 주소를 알려줍니다.또한 모듈이 외부 기호를 참조할 때 일반적으로 기호 값을 0으로 설정한 다음 로더 또는 링크 편집기가 주소를 올바른 값으로 변경할 수 있도록 해당 기호의 RLD 항목을 포함합니다.
- LEN 레코드는 새로운 것으로 특정 길이 정보를 제공합니다.
- END 레코드는 모듈의 끝을 나타내고 선택적으로 프로그램의 실행을 시작하는 위치를 나타냅니다.이 레코드는 파일 내의 마지막 레코드여야 합니다.
포맷
GOFF 레코드는 고정 길이 또는 가변 길이일 수 있습니다.변수 길이 레코드를 사용할 때의 최소 길이는 56자입니다.단, 대부분의 레코드는 이보다 길어집니다.모듈명과 클래스명을 제외한 모든 문자는 EBCD에 있습니다.IC 문자 세트Unix 기반 시스템은 고정 길이(80바이트) 레코드를 사용해야 합니다.고정 길이 파일의 고정 길이보다 짧은 레코드는 0으로 채워야 합니다.GOFF 레코드를 오래된 OS/360 오브젝트 포맷(레코드의 첫 번째 바이트는 X'02') 또는 파일에 존재할 수 있는 명령어와 구별하기 위해 각 GOFF 레코드의 첫 번째 바이트는 항상 이진수 값 X'03'인 반면 명령어는 최소 공간의 문자 값(X'40')으로 시작해야 합니다.GOFF 레코드의 다음 2바이트는 파일 형식의 레코드 유형, 계속 및 버전을 나타냅니다.이러한 첫 번째 3바이트는 PTV 필드라고 불립니다.
PTV
PTV 필드는 모든 GOFF 레코드의 처음 3바이트를 나타냅니다.
바이트 | 비트 | 가치 | 목적 |
---|---|---|---|
0 | 모든. | 03 | GOFF 레코드의 시작을 나타냅니다. |
1 | 0-3 | 0 | ESD(외부 기호) 레코드 |
1 | TXT(텍스트) 레코드 | ||
2 | RLD(재배치) 레코드 | ||
3 | LEN(길이) 레코드 | ||
4 | END(종료) 레코드 | ||
X'5'-X'E' | 예약필 | ||
X'F' | HDR(헤더) 레코드 | ||
4-5 | 예약필 | ||
6-7 | 00 | 다음 레코드에서 계속되지 않는 초기 레코드.가변 길이 GOFF 레코드에 사용되는 유일한 값이어야 합니다. | |
01 | 다음 레코드에 이어지는 초기 레코드 | ||
10 | 다음 레코드에서 계속되지 않은 연속되지 않음 | ||
11 | 다음 레코드에서 계속되는 연속 레코드 | ||
2 | 모든. | 00 | 오브젝트 파일 형식의 버전 번호.X'00'을 제외한 모든 값이 예약되어 있습니다. |
HDR
HDR 레코드는 필수이며 첫 번째 레코드여야 합니다.
바이트 | 크기 | 들판 | 가치 | 목적 |
---|---|---|---|---|
0-2 | 3 | PTV | X'03F000' | 허용되는 값만 있습니다. HDR 레코드를 현재 계속할 수 없습니다. |
3-47 | 45 | 0 | 예약필 | |
48-51 | 4 | 아키텍처 레벨 | 이진수 0 또는 1 | GOFF 아키텍처 레벨.0과 1을 제외한 모든 값이 예약됩니다. |
52-53 | 2 | 모듈 속성 크기 | 바이너리 | [ Module Properties ]필드 길이 |
54-59 | 6 | 0 | 예약필 | |
60- | 0+ | 모듈 속성 | 모듈 속성 목록(옵션) |
정전기
ESD 레코드는 객체, Fortran Common 또는 대체 진입점에서의 모듈, 메인 프로그램, 서브루틴, 프로시저, 기능, 속성 또는 메서드의 공용 이름을 제공합니다.공개명의 ESD 레코드는 다른 레코드에 의해 참조되기 전에 파일에 존재해야 합니다.
바이트 | 크기 | 들판 | 값(또는 비트) | 목적 | |
---|---|---|---|---|---|
0-2 | 3 | PTV | X'030000' | 연속되지 않은 ESD 레코드 | |
X'030100' | 다음 레코드에서 계속되는 ESD 레코드 | ||||
3 | 1 | 기호 유형 | 00 | SD - 섹션 정의이것은 이전의 SD, CM(Common) 및 PC(Private Code, 이름이 공백인 SD) 값에 사용됩니다."부모" ESDID 값은 0이어야 합니다.이 파일은 코드가 이 파일의 일부인 메인 프로그램, 서브루틴 또는 함수를 정의하는 데 사용됩니다.Fortran Common에도 사용됩니다. | |
01 | ED - 외부 정의."부모" ESDID는 0이 아니어야 하며 이 외부 기호를 참조하는 SD 항목의 값이어야 합니다.RLD 값이 이 엔트리가 속한 클래스를 참조하는 경우 이 요소가 참조하는 클래스를 [External Name]필드에 지정해야 합니다.호출된 프로시저 또는 함수의 이름을 지정하기 위해 사용됩니다. | ||||
02 | LD - 라벨 정의."부모" ESDID는 0이 아니어야 하며, 이 기호를 자체 내에서 정의하는 SD 항목의 값이어야 합니다.모듈 에일리어스를 작성하거나 모듈의 일부를 별도의 루틴으로 공개하기 위해 사용할 수 있습니다.예를 들어, 특정 프로그래밍 언어의 런타임 라이브러리는 그 자체로 사용해야 하는 특정 기능을 가지고 있을 수 있지만 해당 언어를 사용하여 작성된 프로그램에서 유용하므로 기능에 라벨을 지정하여 직접 호출할 수 있습니다.예를 들어 완전한 수학 패키지가 단일 모듈로 존재하며, 모든 표준 함수(사인, 코사인, 제곱근 등)에 해당 모듈의 진입점을 지정할 수 있습니다. | ||||
03 | PR - 부품 참조 또는 유사 레지스터.이름 공간 ID 필드로 구분됩니다."부모" ESDID는 0이 아니어야 하며, 이 기호를 자체 내에서 정의하는 SD 항목의 값이어야 합니다. | ||||
04 | ER 및 WX - 외부 참조/외부 참조가 취약합니다.속성 필드의 "바인딩 강도" 값으로 구분됩니다.WX는 외부 루틴이 누락될 수 있는 경우에 사용됩니다.예를 들어 계산기 프로그램에 고속 고성능 연산 패키지가 옵션인 경우 WX로 호출할 수 있으며, 이 패키지가 없거나 사용할 수 없는 경우 프로그램이 더 작은 연산 패키지로 다운그레이드될 수 있습니다. | ||||
4-7 | 4 | ESDID | 바이너리 | ESDID 식별자는 1로 시작합니다.각 새로운 ESDID는 이전 엔트리보다 정확히1개 높아야 합니다. | |
8-11 | 4 | 부모 ESDID | 바이너리 | 이 엔트리가 다른 객체의 일부인 경우 이 엔트리를 정의하는 객체의 ESDID입니다.부모가 없는 경우는 0 입니다. | |
12-15 | 4 | 0 | 예약필 | ||
16-19 | 4 | 오프셋 | 바이너리 | LD 또는 ED 엔트리에 대한 상위 ESDID 내의 이 기호 주소. 그렇지 않으면 0입니다. | |
20-23 | 4 | 0 | 예약필 | ||
24-27 | 4 | 길이 | 바이너리 | ED 및 PR 유형의 경우 이 항목의 길이. 그렇지 않으면 0입니다.실제 길이 값이 지연될 경우 이 값은 -1로 설정됩니다. | |
28-31 | 4 | 확장 애트리뷰트 ESDID | 바이너리 | ED 및 LD 유형의 확장 속성 정보를 포함하는 요소의 ESDID. 일반적으로 실행 시(가상 메서드 등) 해결되는 기호를 위해 DLL이 지원되는 경우에 사용됩니다.그렇지 않으면 0이 됩니다. | |
32-35 | 4 | 확장 특성 오프셋 | 바이너리 | 이전 필드의 확장 속성을 찾을 수 있는 주소. 확장 속성을 가진 ED 및 LD 레코드에 사용됩니다.그 이외의 경우 0입니다. | |
36-39 | 4 | 0 | 예약필 | ||
40 | 1 | 네임스페이스 ID | 이것이 속한 네임스페이스를 식별합니다. | ||
0 | 프로그램 관리 바인더용으로 예약됨 | ||||
1 | 통상의 이름 | ||||
2 | 유사 레지스터 | ||||
3 | 부품(초기화된 정적 데이터를 포함하는 항목을 포함하여 외부 엔트리에 할당된 공간) | ||||
41 | 1 | 플래그 | |||
선물 채우기 | 비트 0 | 0 | 채워지지 않다 | ||
1 | 바이트 채우기 존재(ED 유형에 대해서만 유효) | ||||
망가졌다 | 비트 1 | 0 | 기호가 뭉개지지 않음 | ||
1 | 기호가 뭉개질 수 있습니다. | ||||
이름 변경 가능 | 비트 2 | 0 | 이름을 바꿀 수 없습니다(XOBJ의 '매핑' 플래그와 동일). | ||
1 | 기호 이름을 변경할 수 있습니다(언어 환경(LE) 유형 이름 변경에 참여 가능). | ||||
이동식 클래스 | 비트 3 | 0 | (기본값) 분리 불가 | ||
1 | 이 클래스는 프로그램 동작에 영향을 주지 않고 선택적으로 삭제할 수 있습니다(ED 유형에만 유효). | ||||
비트 4 ~ 6 | 예약필 | ||||
여유 공간 예약 | 비트 7 | 0 | 예약된 여유 공간 없음 | ||
1 | 클래스 시작 시 16바이트의 공간을 예약합니다(MRG 클래스 ED 유형만 해당). | ||||
42 | 1 | 채우기 값 | Fill Present 플래그가 설정된 경우 Fill 바이트 값 | ||
43 | 1 | 0 | 예약필 | ||
44-47 | 4 | 관련 데이터 | 바이너리 | XLINK를 사용하여 LD 아이템의 환경 ID 또는 정적 영역에 사용 | |
48-51 | 4 | 우선 순위. | 바이너리 | PR항목의 정렬순서 | |
52-59 | 8 | 0 | 예약필 | ||
60-69 | 10 | 동작 속성 | 이 항목의 동작 속성(아래 동작 속성 표 참조) | ||
70-71 | 2 | 이름 길이 | 바이너리 | 이 항목의 이름 길이(0)일 수 없습니다. | |
72- | 이름. | 본문 | 후행 공백이 있는 이 항목의 이름이 잘립니다.하나 이상의 문자로 구성되어야 합니다. 개인 코드는 단일 공백으로 구성됩니다.이름은 대소문자를 구분합니다. | ||
렘 | 0 | 트레일러:고정 크기 레코드에 필요한 경우 사용되지 않는 공간. 0으로 채워야 합니다.가변 길이 레코드에는 필요하지 않습니다. |
속행
이름에 계속 레코드가 필요한 고정 길이 레코드의 경우 다음을 사용합니다.
바이트 | 크기 | 들판 | 가치 | 목적 | |
---|---|---|---|---|---|
0-2 | 3 | PTV | X'030200' | ESD 지속 기록(더 이상 계속하지 않음) | |
X'030300' | 다음 레코드에서 계속되는 ESD 지속 기록 | ||||
3- | 이름. | 본문 | 이 레코드가 계속되지 않으면 이름의 나머지 부분, 계속되면 이름의 다음 77바이트. | ||
렘 | 0 | 제공된 데이터보다 긴 고정 길이 레코드의 나머지입니다.이것이 이 이름의 마지막 레코드이고 이름이 레코드 크기보다 짧은 경우 후행 바이트가 포함됩니다.이 바이트는 0으로 채워져야 합니다.이 필드는 가변 길이 레코드에는 없습니다. |
동작 속성
오프셋 | 크기(바이트) | 비트 | 들판 | 가치 | 목적 | |||||
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 주소 지정 속성 | 이 외부 기호와 관련된 주소 지정 모드입니다.이러한 값은 END 레코드의 AMODE 필드에서도 사용됩니다. | |||||||
00 | AMODE 미지정(기본값은 AMODE(24)) | |||||||||
01 | AMODE(24) | |||||||||
02 | AMODE(31) | |||||||||
03 | AMODE(임의)(24 또는 31) | |||||||||
04 | AMODE(64) | |||||||||
10 | AMODE(MIN) (모든 모듈에서 사용되는 최소 AMODE 사용) | |||||||||
1 | 1 | 레지던스 속성 | 외부 기호의 연관된 주거 모드 | |||||||
00 | RMODE 미지정(디폴트로는 RMODE(24) | |||||||||
01 | RMODE(24) | |||||||||
03 | RMODE(31) (RMODE(ANY)에 상당) | |||||||||
04 | RMODE(64) | |||||||||
2 | 1 | 0-3 (4) | 텍스트 레코드 스타일 | 이 클래스의 텍스트 스타일(ED 및 PR 유형만 해당) 모든 텍스트는 동일한 스타일이어야 합니다. | ||||||
0000 | 바이트 지향 | |||||||||
0001 | 구조화 데이터(바인더 지향) | |||||||||
0010 | 구조화 데이터(사용자 정의) | |||||||||
4-7 (4) | 바인딩 알고리즘 | data 바인딩 방법 | ||||||||
0000 | 모든 항목을 차례로 연결하다 | |||||||||
0001 | 병합(같은 이름의 모든 항목은 지정된 가장 큰 크기 및 가장 제한적인 정렬을 사용하여 동일한 공간에 배치됩니다).이름이 다른 항목이 연결됩니다.이것은 CM 및 PR 타입의 일반적인 관행입니다. | |||||||||
3 | 1 | 0-2 (3) | 태스크 동작 | 모듈 재진입 여부 및/또는 재사용 여부 표시 | ||||||
000 | 미지정 | |||||||||
001 | 재사용 가능 또는 재입력 불가(REUS 이외) | |||||||||
010 | 시리얼 재사용 가능(REUS) | |||||||||
011 | 재진입(REENT), 의미도 있음(REUS) | |||||||||
3 | 0 | 예약필 | ||||||||
4 | 읽기 전용 | 0 | 읽기 전용이 아님 | |||||||
1 | 읽기 전용 | |||||||||
5-7 (3) | 실행 파일 | 000 | 지정되지 않음 | |||||||
001 | 실행할 수 없음(데이터만) | |||||||||
010 | 실행 파일(코드 또는 코드 및 데이터) | |||||||||
4 | 1 | 0-1 (2) | 0 | 예약필 | ||||||
2-3 (2) | 중복 기호 심각도 | 중복 기호가 발생해야 하는 오류 수준(PR 유형 레코드만 해당) | ||||||||
00 | 바인더는 심각도를 결정합니다. | |||||||||
01 | 최소 4(경고) | |||||||||
10 | 최소 8(에러) | |||||||||
11 | 예약필 | |||||||||
4-7 (4) | 바인딩 강도 | 약한 참조는 다른 라이브러리를 검색하지 않고 강한 참조는 다른 라이브러리에서 기호를 검색합니다.Strong Definitions는 임의의 참조로 해결할 수 있습니다.기본값입니다. | ||||||||
0000 | 강한. | |||||||||
0001 | 약한 | |||||||||
5 | 1 | 0-1 (2) | 클래스 로드 동작 | 운영 체제 LOAD 요청이 개체에 대해 사용되는 경우 클래스의 요소를 로드할지 여부를 결정합니다. | ||||||
00 | LOAD - 이 클래스를 로드합니다. | |||||||||
01 | 지연된 로드 - 이 클래스가 사용될 수 있으므로 로드해야 합니다. | |||||||||
10 | NOLOAD - 이 클래스를 로드하지 않습니다. | |||||||||
11 | 예약필 | |||||||||
2 | 공통 플래그 | 1 의 경우는, 복수의 레퍼런스가 사이즈를 어느 레퍼런스에서 사용되고 있는 가장 큰 면적으로 설정하는 「오래된」CM 타입의 COMMON 으로 취급합니다.같은 이름의 SD 타입은 크기와 텍스트를 유지합니다.지원되는 텍스트타입은 B_TEXT 뿐입니다. | ||||||||
3 | 직접과간접 참조 | 0 | 직접 참조(바인더용) | |||||||
1 | PR 타입의 경우 링크 기술자, ER 타입의 경우 XPLINK 링크 기술자를 참조합니다. | |||||||||
4-7 (4) | 바인딩 범위 | 0000 | 미지정 | |||||||
0001 | 섹션 범위("로컬") | |||||||||
0010 | 모듈 범위('글로벌') | |||||||||
0011 | 라이브러리 범위 | |||||||||
0100 | Import-Export 범위 | |||||||||
6 | 1 | 0-1 (2) | 예약필 | |||||||
2 | 링크 타입 | ER, LD, PD 및 PR 유형의 경우 | ||||||||
0 | 표준 O/S 링크(디폴트) | |||||||||
1 | XPLINK 링크 | |||||||||
3-7 (5) | 얼라인먼트 | 이 항목의 암묵적 정렬 | ||||||||
00000 | 바이트 | |||||||||
00001 | 하프워드 | |||||||||
00010 | 풀워드 | |||||||||
00011 | 이중어 | |||||||||
00100 | 쿼드워드 | |||||||||
00101 | 4KB 페이지 | |||||||||
표시된 모든 정렬은 ED 및 PR 유형에 사용할 수 있지만 PR은 페이지 정렬을 사용할 수 없습니다. | ||||||||||
7-9 | 3 | 예약필 |
ADATA 레코드
ADATA("관련 데이터") 레코드는 모듈에 대한 추가 기호 정보를 제공하는 데 사용됩니다.360 개체 파일 형식으로 이전 SYM 레코드를 대체했습니다.ADATA 레코드를 작성하려면
- 레코드가 속한 클래스 이름에 대해 ED 유형의 ESD 레코드를 만듭니다.
- Behavioral Attributes 레코드의 모든 필드를 0으로 설정합니다.
- 클래스 로드(바이트 5의 비트 0-1)는 X'10'입니다.
- 바인딩 알고리즘은 0입니다.
- 텍스트 레코드 스타일(바이트 2의 비트 0-3)은 X'0010'입니다.
- 필요에 따라 읽기 전용(바이트 3의 비트 4) 및 실행 불가능(바이트 3의 비트 5-7) 값을 설정합니다.
- 각 ADATA 항목에 대한 TXT 레코드 생성
- Element ESDID는 특정 ADATA 엔트리에 대한 ADATA ED 레코드의 값입니다.
- 오프셋은 0입니다.
- 데이터 길이는 ADATA 레코드의 길이입니다.
- 데이터 필드에는 실제 ADATA 레코드 자체가 포함됩니다.
ADATA 레코드는 선언된 순서대로 클래스 끝에 추가됩니다.
ADATA 레코드에 할당된 클래스 이름은 이진 값을 텍스트로 변환하고 C_ADATA라는 이름에 추가함으로써 IBM 프로그램에 의해 변환됩니다. 따라서 X'0033'이라는 항목이 텍스트 문자열 C_ADA가 됩니다.TA0033.
유형 | 묘사 |
X'0000' - X'7FF' | 번역기 레코드(0-X'0130' 범위의 일부 값은 어셈블러, 코볼 및 PL/I를 포함한 일부 IBM 언어 번역기 제품에서 사용되고 있습니다). |
X'8000' - X'8FF' | 프로그램 관리 레코드 |
X'9000' - X'DFFF' | 예약필 |
X'E000' - X'EFF' | IBM에서 출시하지 않은 컴파일러 및 어셈블리용으로 예약되어 있습니다. |
X'F000' - X'FFFF' | 사용자 레코드에 사용할 수 있습니다.IBM은 이러한 값을 사용하지 않습니다. |
TXT
TXT 레코드는 모듈의 특정 주소 위치에 배치되는 기계 코드 명령과 데이터를 지정합니다.이 레코드에 대해 "길이"를 지정해야 하는 경우 길이 값에는 이 레코드에 대한 연속성이 포함되어야 합니다.
바이트 | 크기 | 들판 | 비트 | 가치 | 목적 | |
---|---|---|---|---|---|---|
0-2 | 3 | PTV | X'031000' | 연속 없이 TXT 레코드 | ||
X'031100' | 다음 레코드로 이어지는 TXT 레코드 | |||||
3 | 1 | 0-3 (4) | 예약필 | |||
스타일. | 4-7 (4) | 다른 모든 값은 예약되어 있습니다. | ||||
0000 | 바이트 지향 데이터 | |||||
0001 | 구조화 데이터(현재 지원되는 구조화 데이터는 19바이트 IDR 필드뿐입니다. IDR 데이터 테이블 참조) | |||||
0010 | 비구조화 데이터 | |||||
4-7 | 4 | 요소 ESDID | 이진수 | 이 레코드의 내용이 속하는 ESDID | ||
8-11 | 4 | 예약필 | ||||
12-15 | 4 | 오프셋 | 이진 주소 | 이 데이터가 배치되는 ESDID 내의 주소.정형 데이터와 비정형 데이터의 경우 이 값은 0이어야 합니다. | ||
16-19 | 4 | 텍스트 필드의 실제 길이 | 이진수 값: 0 또는 확장 후 전체 크기 | [ Text Encoding ]필드가 0인 경우 0이어야 합니다.그렇지 않은 경우 이 필드는 압축 해제 또는 압축 해제 후 텍스트의 전체 크기입니다. | ||
20-21 | 2 | 텍스트 인코딩 | 2진수 | 텍스트가 복제, 언팩 또는 디코딩이 필요하지 않은 경우 0, 텍스트를 디코딩, 언팩 또는 확장해야 하는 경우 0이 아님을 나타냅니다.압축 표를 참조하십시오. | ||
22-23 | 2 | 데이터 길이 | 0보다 큰 이진수 값 | 이 레코드에 있는 데이터의 총 길이(바이트 단위)는 부호 없는 값이며 0일 수 없습니다. | ||
24- | 데이터. | 삽입할 기계 코드 및/또는 데이터.IDR 데이터가 포함된 경우 특별한 규칙 및 요구 사항이 적용됩니다. IDR 데이터 표를 참조하십시오. | ||||
렘 | 가변 길이 레코드에는 존재하지 않습니다. 고정 레코드의 나머지 바이트는 나머지 데이터보다 길며 이진 0이어야 합니다. |
속행
바이트 | 크기 | 들판 | 비트 | 가치 | 목적 | |
---|---|---|---|---|---|---|
0-2 | 3 | PTV | X'031200' | 속행 레코드(더 이상 속행하지 않음) | ||
X'031300' | 다음 레코드에서 계속되는 계속 레코드 | |||||
3- | 이전 기록에서 계속된 데이터 | |||||
렘 | 레코드의 나머지 길이가 데이터보다 긴 경우 0이 채워집니다. |
압축 테이블
압축 테이블은 TXT 레코드의 바이트 20~21이 0이 아닌 경우에 사용됩니다.R 값은 문자열을 반복하는 횟수를 결정하는 데 사용됩니다.L 값은 반복되는 텍스트의 길이를 나타냅니다.이것은 테이블 또는 배열을 블랭크 또는 0으로 사전 초기화하거나 반복된 데이터를 반복 횟수 및 값으로 표현하는 데 유용한 다른 목적으로 사용할 수 있습니다.
바이트 | 크기 | 들판 | 가치 | 목적 | |
---|---|---|---|---|---|
이 TXT 레코드의 바이트 20 ~21 의 값이 0001 인 경우 | |||||
0-1 | 2 | R | 반복 횟수, 0보다 큰 부호 없는 정수 | 바이트 4에서 시작하는 문자열을 반복하는 횟수. | |
2-3 | 2 | L | 이진 길이, 0보다 큰 부호 없는 정수 | 바이트 4로 시작하는 문자열 길이 | |
4- | 스트링 | 길이가 "L"인 문자열로, "R"회 반복됩니다. | |||
바이트 20~21의 다른 모든 값은 예약되어 있습니다. |
IDR 데이터 테이블
TXT 레코드의 바이트 24부터 시작하는 IDR 테이블은 이 개체 파일을 만든 컴파일러 또는 어셈블러(및 해당 버전 번호)를 식별합니다.
바이트 | 크기 | 들판 | 가치 | 목적 | |
---|---|---|---|---|---|
0 | 1 | x'00' | 예약필 | ||
1 | 1 | 유형 | IDR 필드의 유형(프라이머리 ID와 세컨더리 ID는 각각 이전 OS/360 오브젝트 모듈 파일 형식의 END 카드에 표시되는 첫 번째 ID 필드 및 두 번째 ID 필드를 나타냅니다.) | ||
00 | 프라이머리 ID;오래된 IDR 형식 | ||||
01 | 세컨더리 식별(오래된 IDR 형식 | ||||
02 | 확장 IDR 형식 2 | ||||
03 | 프라이머리 식별, IDR 포맷3 | ||||
04 | 세컨더리 식별, IDR 형식 3 | ||||
2-3 | 2 | 길이 | 이진수 | 0보다 큰 부호 없는 정수로 IDR 데이터의 길이 | |
4+ | 이 필드의 바이트 1에 지정된 형식에 따른 IDR 데이터. 자세한 내용은 해당 IDR 형식 표를 참조하십시오. |
IDR 포맷1
GOFF 파일에 저장된 대부분의 숫자 값과 달리 "version", "release" 및 "trans_date" 값은 이진수가 아닌 텍스트 문자로 된 숫자입니다.
바이트 | 크기 | 들판 | 가치 | 목적 |
---|---|---|---|---|
0-9 | 10 | 번역기 | 임의의 텍스트 | 이 값은 어셈블러 또는 컴파일러가 자신을 식별하는 값입니다. IBM은 이를 다양한 프로그램의 IBM 카탈로그 번호에서 "PID 값" 또는 "프로그램 ID 값"이라고 부릅니다. 예를 들어, Cobol 컴파일러 OS/VS1 버전은 "IKFCBL00"이라고 합니다. |
10-11 | 2 | 버전 | 두 자리 수 | 어셈블러 또는 컴파일러 버전 번호입니다(0 ~99 ) 。 |
12-13 | 2 | 풀어주다 | 두 자리 수 | 이는 상기 버전 번호의 릴리즈 번호 서브 파트이며 0 ~99 입니다 |
14-18 | 5 | Trans_Date(트랜스_날짜) | YYDDD | 두 자리 연도 및 이 모듈이 작성 또는 조립된 해의 세 자리 날짜를 나타내는 텍스트 문자 5자. 01-65년은 21세기, 00년 또는 65년 이상 연도는 20세기(예: 2000년 또는 1966-1999년)로 추정됩니다.세 자리 날짜는 1월 1일 001에서 시작되며, 2월 1일 032에서 시작되며, 060은 표준년 3월 1일, 윤년 2월 29일이며, 표준년 12월 31일 365까지, 윤년 366까지 계속됩니다. |
IDR 포맷 2
일반적으로 컴파일러 및 어셈블러는 이 형식 레코드를 생성하지 않으며, 일반적으로 바인더에 의해 작성됩니다.
바이트 | 크기 | 들판 | 가치 | 목적 |
---|---|---|---|---|
0-3 | 4 | 날짜. | 패킹된 10진수 형식 YYYDDF | 연도와 날짜를 포함한 조립 또는 컴파일된 날짜 모듈 |
4-5 | 2 | Data_Length | 이진수 값 | 부호 없이 0이 아닌 다음 필드의 실제 길이 |
6-85 | 80 | IDR_데이터 | 이 데이터의 형식은 공개되지 않았습니다. |
IDR 포맷 3
이 항목의 모든 텍스트는 문자 데이터이며 이진 정보는 사용되지 않습니다.
바이트 | 크기 | 들판 | 가치 | 목적 |
---|---|---|---|---|
0-9 | 10 | 번역기 | 컴파일러/어셈블러 라이터가 자신을 식별하기 위해 사용하는 텍스트 값(위의 이전 IDR 형식 1의 번역자 필드 참조) | |
10-11 | 2 | 버전 | 00 ~ 99 | 어셈블러 또는 컴파일러 버전 번호 |
12-13 | 2 | 풀어주다 | 00 ~ 99 | 상기 버전의 릴리즈 번호 |
14=20 | 7 | 컴파일_날짜 | YYYDDD | 프로그램이 컴파일되거나 조립된 연도 및 날짜(해당 연도가 4자리 숫자인 점을 제외하고 위의 IDR 형식 1의 'Trans Date' 필드와 형식이 동일합니다). |
21-29 | 9 | 컴파일_시간을 | HHMMSTTT | 프로그램이 컴파일 또는 조립된 시간, 분, 초 및 천분의 1초 |
RLD
RLD 레코드를 사용하면 모듈은 재배치할 필요가 있는 주소(예를 들어 그 자체의 특정 위치 또는 외부 모듈)를 참조하는 위치를 표시할 수 있습니다.
바이트 | 크기 | 들판 | 가치 | 목적 |
---|---|---|---|---|
0-2 | 3 | PTV | X'032000' | 레코드가 계속되지 않습니다. |
X'032100' | 레코드는 다음 레코드에서 계속됩니다. | |||
3 | 1 | 예약필 | ||
4-5 | 2 | 길이 | 이진수 | 재배치 데이터의 크기. 서명되지 않았으며 0보다 커야 합니다. |
6- | 재배치_데이터 | 재배치 데이터. 재배치 데이터 표 참조 | ||
렘 | 가변 길이 레코드에 없습니다. 레코드가 데이터보다 긴 나머지 레코드는 0으로 채워야 합니다. |
재배치 데이터
바이트 | 크기 | 들판 | 가치 | 목적 |
---|---|---|---|---|
0-5 | 6 | 플래그 | 이 항목에 대한 플래그. 값은 플래그 표를 참조하십시오. | |
6-7 | 2 | 예약필 | ||
8-11 | 4 | R_포인터 | 재배치 대상으로 사용하는 모듈(유형 ED 또는 ER)의 ESDID | 이것은 프로그램이 해결해야 하는 동일 모듈 또는 다른 모듈 내의 "원거리" 주소입니다.[ Flags ]필드의 바이트0 비트0 이 1 인 경우 이 필드는 생략됩니다. |
12-15[A] | 4 | 포인터 | 주소를 재배치해야 하는 모듈의 ESDID | 이는 원격 식별자에 대한 참조를 올바른 값으로 변경하려는 모듈입니다.[ Flags ]필드의 바이트0 비트1이 1일 경우 이 필드는 생략됩니다. |
16-19[B] | 4 | 오프셋 | P_Pointer에 의해 지정된 모듈 내에서 조정할 주소를 찾을 수 있는 위치입니다. | 이 주소는 이전할 주소입니다.[ Flags ]필드의 바이트0 비트2가 1일 경우 이 필드는 생략됩니다. |
20-23[C] | 4 | 예약필 | ||
24[C]~27일 | 4 | 예약필 |
[A] R_Pointer(Flags 필드의 0 바이트의 비트0 이 1)를 생략하면 이 필드는 4바이트 낮은 바이트(8-11 바이트)로 시작합니다.
[B] R_Pointer 또는 P_Pointer(Flags 필드의 바이트0 의 비트 1)가 생략되어 있는 경우, 이 필드는 바이트 12 ~15 의 4 바이트 작게 개시됩니다.두 필드를 모두 생략한 경우 이 필드는 8바이트 낮은 바이트(8~11 바이트)로 시작합니다.
[C] R_Pointer, P_Pointer 또는 Offset(Flags 필드의 0 바이트의 비트2)을 생략하면 이 필드는 4바이트 작게 시작됩니다.둘 중 하나를 생략하면 이 필드는 8바이트 작게 시작됩니다.모두 생략하면 이 필드는 12바이트 작게 시작됩니다.
명확히 하자면, "Basura"라는 이름의 C 프로그램 내의 모듈이 "Exit" 함수에 대한 호출을 발행하여 자신을 종료하는 경우, R_Pointer 주소는 루틴 "Exit"의 ESDID가 되며, P_Pointer는 "Basura"의 ESDID가 됩니다.주소가 같은 모듈(내부 서브루틴이나 같은 모듈 내의 데이터에 대한 참조 등)에 있는 경우 R_Pointer와 P_Pointer는 동일합니다.
플래그
바이트 | 크기 | 들판 | 비트 | 목적 |
---|---|---|---|---|
0 | 1 | 동일_R_ID | 0 | 1 이 엔트리의 R_Pointer 값이 이 레코드의 이전 항목과 동일한 경우 R_Pointer 값은 이 엔트리에서 제외됩니다. |
동일_P_ID | 1 | 1 이 엔트리의 P_Pointer 값이 이 레코드의 이전 항목과 동일한 경우 P_Pointer 값은 이 엔트리에서 제외됩니다. | ||
동일_오프셋 | 2 | 1 이 엔트리의 Offset 값이 이 레코드의 이전 항목과 동일한 경우 Offset 값은 이 엔트리에서 생략됩니다. | ||
3-4 | 예약필 | |||
5 | 예약필 | |||
Offset_length | 6 | 0은 4바이트 길이를 나타냅니다. | ||
어드레싱 모드의 감도 | 7 | 0 감도 없음 | ||
1 주소의 상위 비트를 R_Pointer 주소의 R 모드 주소 지정 모드와 동일하게 설정합니다(V-type 주소에만 적용됨). | ||||
1 | 1 | R_포인터_인디케이터 | 0-3 | 재배치 주소의 두 번째 오퍼랜드의 데이터 유형 |
0 - R 주소 | ||||
1 - R-address 시작으로부터의 오프셋 | ||||
2 - R-Length (LD 항목의 경우 0) | ||||
6 - Relative Immediate(지시가 외부 기호를 다룰 수 있도록 하기 위해) | ||||
7 - R 상수(공유되지 않은 데이터 영역) | ||||
9 - 20비트 긴 용량 주소 | ||||
다른 모든 값은 예약되어 있습니다. | ||||
4-7 | 재배치해야 하는 값을 나타내는 항목 유형입니다. | |||
0 - 라벨, R-ID는 LD로 제한됩니다. | ||||
1 - 요소, R-ID는 ED로 제한됩니다. | ||||
2 - 클래스, R-ID는 ED로 제한됩니다.클래스에는 외부 이름이 없기 때문에 ESDID가 없습니다. | ||||
3 - 일부, R-ID는 PR로 제한됩니다. | ||||
다른 모든 값은 예약되어 있습니다. | ||||
2 | 1 | 액션_or_Operation | 0-6 | 두 번째 피연산자에 사용할 작업 유형(첫 번째 피연산자는 0)입니다. 결과는 첫 번째 피연산자를 대체하는 32비트 부호 있는 값입니다. |
0 - 첫 번째 피연산자에 두 번째 피연산자 추가 | ||||
1 - 첫 번째 피연산자에서 두 번째 피연산자를 뺍니다. | ||||
다른 모든 값은 예약되어 있습니다. | ||||
오류 복구 대상 가져오기/저장 | 7 | 대상 값을 사용할지 또는 무시할지 나타냅니다. | ||
0 - fixup/target 필드를 첫 번째 오퍼랜드로 사용 | ||||
1 - 대상 필드의 값을 무시합니다. fixup 값을 첫 번째 오퍼랜드로 사용합니다.fixup 값이 없으면 0을 사용합니다. | ||||
3 | 1 | 예약필 | ||
4 | 1 | 대상 길이 | 부호 없는 대상 필드 길이(바이트) | |
5 | 1 | 예약필 |
렌
LEN 레코드는 ESD 레코드가 생성되었을 때 알 수 없었던 모듈의 길이를 선언하기 위해 사용됩니다(예: 원패스 컴파일러).
들판 | 오프셋 | 크기 | 묘사 |
PTV | 0-2 | 3 | 레코드 타입 X'033000' |
3-5 | 3 | 예약필 | |
길이 | 6-7 | 2 | 이 필드 뒤의 항목 길이입니다. 값은 0이 아니어야 합니다. |
요소들 | 8- | 요소 길이 데이터. 아래 요소 표를 참조하십시오. | |
렘 | 고정 길이 레코드의 레코드 끝까지의 후행 데이터에는 바이너리 0이 포함되어야 하며 가변 길이 레코드의 경우 표시되지 않습니다. |
요소들
지연 길이 요소 항목은 계속하거나 분할할 수 없습니다.
들판 | 오프셋 | 크기 | 묘사 |
ESDID | 0-3 | 4 | 이 값이 적용되는 요소의 ESDID |
4-7 | 4 | 예약필 | |
길이 | 8-11 | 4 | 참조되는 항목의 길이 |
끝.
END는 모듈의 마지막 레코드여야 합니다.'엔트리 포인트'는 모듈의 시작점 이외의 주소를 실행의 시작점으로 사용할 때 사용됩니다.이것은 프로그램이 모듈의 시작 전에 나타나는 실행 불가능한 데이터를 가지고 있기 때문에(이전 버전의 어셈블러에서는 명령이 지정되면 프로그램에 저장된 데이터를 조립하는 데 시간이 많이 걸렸기 때문에 매우 일반적입니다), 또는 모듈이 런타임 lib와 같은 외부 모듈을 먼저 호출하기 때문에 사용됩니다.초기화하지 않습니다.
들판 | 오프셋 | 크기 | 비트 | 묘사 |
PTV | 0-2 | 3 | X'034000' - 미계속 | |
X'034100' - 다음 레코드에서 계속 | ||||
3 | 0-5 | 6 | 예약필 | |
플래그 | 6-7 | 2 | 진입점의 유무에 관한 선언 | |
00 - 진입점이 지정되지 않았습니다. 이 레코드의 다른 모든 값이 잘못되었습니다. | ||||
01 - ESDID에 의해 지정된 진입점 | ||||
10 - 이름으로 지정된 진입점 | ||||
11 - 예약 완료 | ||||
아모드 | 4 | 1 | 진입점의 주소 지정 모드 값. 값은 ESD 레코드의 [Behavior Attributes]테이블의 필드 0에서 지정된 값입니다. | |
5-7 | 3 | 예약필 | ||
레코드 수 | 8-11 | 4 | 이 모듈의 GOFF 레코드 수(계속되지 않는 "논리적인" 레코드 수) | |
ESDID | 12-15 | 4 | 진입점이 ESDID에 의해 참조되는 경우 ESDID 값, 이름에 의해 참조되는 경우 이진 0 | |
16-19 | 4 | 예약필 | ||
오프셋 | 20-23 | 4 | 모듈 진입점의 주소 오프셋. 외부(ER) 진입점에는 지정할 수 없습니다. | |
이름 길이 | 24-25 | 2 | 이름 길이. ESDID에 의해 진입점이 지정된 경우 이 값은 0이어야 합니다. | |
이름. | 26- | 이 모듈의 진입점으로 사용되는 외부 기호의 이름. ESDID에 의해 진입점이 지정된 경우 바이너리 0이 되고, 이 레코드가 계속되면 이름의 첫 번째 54자가 됩니다.이 값은 레코드에서 유일하게 이진수가 아닌 값으로 진입점의 공용 이름을 나타내는 텍스트 필드입니다. | ||
렘 | 레코드의 끝까지 연장되는 트레일러. 고정 길이 레코드의 경우 레코드의 끝에서 2진수 0이어야 하며 가변 길이인 경우 생략해야 합니다. |
속행
고정 길이 END 레코드로 지정된 엔트리 포인트 이름이 54바이트를 초과하거나 (이 레코드 자체도 계속된 경우) 추가 77바이트보다 긴 경우 다음 연속 레코드가 사용됩니다.
들판 | 오프셋 | 크기 | 묘사 |
PTV | 0-2 | 3 | X'034200' - 이 계속 레코드는 계속되지 않습니다. |
X'034300' - 이 연속 레코드는 다음 레코드에서 계속됩니다. | |||
이름. | 3- | 이 레코드가 계속되지 않는 한 엔트리 포인트 이름의 나머지 부분(이 경우 이름의 다음 77자). | |
렘 | 이 레코드가 계속되지 않으면 고정 길이 레코드에 대한 레코드의 후행 부분이며 가변 길이 레코드에 대해서는 존재하지 않는 바이너리 0이어야 합니다. |
레퍼런스
- ^ John R. Ehrman (March 1, 2001). "How the Linkage Editor Works: A Tutorial on Object/Load Modules, Link Editors, Loaders, and What They Do for (and to) You" (PDF). IBM Silicon Valley (Santa Teresa) Laboratory, San Jose. Retrieved September 8, 2019.
- ^ OS/MVS Program Management: Advanced Facilities (PDF) (eighth ed.). Poughkeepsie, NY: IBM. September 2007. SA22-7644-07. Retrieved August 9, 2013.
- ^ IBM High Level Assembler for MVS & VM & VSE Release 2 Presentation Guide (PDF). December 1995. SG24-3910-01. Archived from the original (PDF) on 2016-01-23. Retrieved November 13, 2015.
- ^ High Level Assembler for z/OS & z/VM & z/VSE Programmer’s Guide (PDF) (sixth ed.). San Jose, CA: IBM. July 2008. Appendix C. SC26-4941-05. Retrieved September 8, 2019.
- ^ "RLD". www.ibm.com. IBM. Retrieved 10 July 2020.