~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 33EDAFDB30F9ECF2E9910DC29839BF8E__1715863320 ✰
Заголовок документа оригинал.:
✰ GOFF - Wikipedia ✰
Заголовок документа перевод.:
✰ ГОФФ — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/GOFF ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/33/8e/33edafdb30f9ecf2e9910dc29839bf8e.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/33/8e/33edafdb30f9ecf2e9910dc29839bf8e__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 12:55:22 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 16 May 2024, at 15:42 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

ГОФФ — Википедия Jump to content

ГОФФ

Из Википедии, бесплатной энциклопедии

( Спецификация GOFF IBM MVS Обобщенный формат объектных файлов) была разработана для операционной системы , чтобы заменить формат объектных файлов IBM OS/360 и компенсировать недостатки старого формата. [1]

Предыстория [ править ]

Исходный формат объектных файлов IBM OS/360 был разработан в 1964 году для нового IBM System/360 мэйнфрейма . Этот формат также использовался производителями совместимых и аналогичных мейнфреймов, включая Univac 90/60, 90/70 и 90/80 и Fujitsu B2800. Формат был расширен за счет добавления символических записей и расширенной информации о модулях, а также поддержки процедур и функций с именами длиной более 8 символов. Хотя это помогло, оно не предоставило расширенной информации, необходимой для современных более сложных языков программирования, и более продвинутых функций, таких как объекты, свойства и методы, поддержка Unicode и виртуальные методы .

Формат объектного файла GOFF был разработан IBM примерно в 1995 году как средство решения этих проблем. [2] Самое раннее упоминание об этом формате было во вводной информации о новом ассемблере высокого уровня. [3] Обратите внимание, что формат объектного файла OS/360 был просто заменен форматом GOFF, он не устарел и до сих пор используется ассемблерами и компиляторами языков, где язык может противостоять ограничениям старого формата.

Соглашения [ править ]

В этой статье термин «модуль» будет использоваться для обозначения любого имени или эквивалентного символа, который используется для предоставления идентификатора части кода или данных, внешних по отношению к области , на которую он ссылается. Модуль может ссылаться на подпрограмму, функцию, общие или блочные данные Fortran , объект или класс, метод или свойство объекта или класса или любую другую именованную процедуру или идентификатор, внешний по отношению к этой конкретной области, ссылающийся на внешнее имя.

Термины «ассемблер» обозначают программу, которая преобразует язык ассемблера в машинный код, а также «ассемблировать» как процесс его использования и «компилировать» как процесс использования «компилятора», который делает то же самое. вещь для языков высокого уровня, должна быть для целей этой статьи. считаться взаимозаменяемыми; таким образом, там, где используются слова «компиляция» и «компилятор», при необходимости замените «ассемблер» и «ассемблер».

Числа, используемые в этой статье, выражаются следующим образом: если не указано шестнадцатеричное число (по основанию 16), все используемые числа представлены в десятичном формате (по основанию 10). Когда необходимо выразить число в шестнадцатеричном формате, стандартный формат ассемблера мейнфрейма, в котором используется заглавная буква X перед числом, выражая любые шестнадцатеричные буквы в числе в верхнем регистре и заключая число в одинарные кавычки, например, число 15deadbeef 16, будет выглядеть так : выражается как X'15DEADBEEF'.

«Байт», используемый в этой статье, имеет длину 8 бит, и, если не указано иное, «байт» и «символ» — это одно и то же; символы в EBCDIC также 8-битные. многобайтовые наборы символов (например, Unicode Когда в пользовательских программах используются ), они будут использовать два (или более) байта.

Требования и ограничения [ править ]

Этот формат аналогичен формату объектных файлов OS/360, но добавляет дополнительную информацию для использования при создании приложений. [4]

  • Файлы GOFF представляют собой записи фиксированной или переменной длины.
  • Запись GOFF должна полностью помещаться в одну запись базовой файловой системы. Файл GOFF не является файлом потокового типа.
  • Записи фиксированной длины должны иметь размер 80 байт. Минимальный размер записи переменной длины составляет 56 байт. В случае записей фиксированной длины в конце записи будут неиспользованные байты. Эти байты должны быть установлены в двоичный ноль.
  • Программа, читающая (или записывающая) записи GOFF, не должна делать предположений о внутреннем формате записей; предполагается, что операционная система способна предоставлять записи фиксированной или переменной длины, при этом программа, считывающая их, не должна знать об операционной системе. внутреннее управление файлами системы. Длина записи не является частью самой записи.
  • Двоичные значения хранятся в формате с прямым порядком байтов , например, значение 1 — это X'01' для 8-битного значения, X'0001' для 16-битного значения, X'00000001' для 32-битного значения и X' 0000000000000001' для 64-битного значения.
  • Биты считаются слева направо; бит 0 — это самый левый бит в байте или слове.
  • Записи фиксированной длины необходимы для файлов GOFF, развернутых в системах Unix .
  • Запись может быть продолжена на следующей записи. Если запись продолжается, между продолжаемой записью и записью продолжения не должно быть никаких промежуточных записей.
  • Объектный файл GOFF начинается с записи HDR и заканчивается записью END. Запись END должна включать количество записей GOFF (а не количество физических записей) в файле.
  • Компилятор или ассемблер языка может создавать несколько файлов GOFF за одну компиляцию/сборку, но отдельные файлы GOFF должны быть отделены друг от друга. Это означает, что за модулем или единицей компиляции, состоящей из записи HDR, промежуточных ESD, TXT и других, заканчивающихся записью END, может затем следовать другая единица компиляции, начинающаяся с HDR и заканчивающаяся END, и так далее, по мере необходимости. .
  • Имена модулей и классов чувствительны к регистру. Модуль с именем «exit» (используемый в языке C ) не обязательно должен совпадать с «EXIT», используемым в языке Фортран .
  • Некоторые соглашения, применимые к формату объектных файлов OS/360, перенесены в формат объектных файлов GOFF, в том числе:
    • Если не указано иное, все символы находятся в наборе символов EBCDIC , за исключением внешних имен, как указано ниже.
    • Элементы ESD (основные программы, подпрограммы, функции, FORTRAN Common, методы и свойства объектов) должны быть пронумерованы, начиная с 1, и каждый новый элемент должен иметь следующий номер по порядку, без каких-либо «пробелов» в последовательности нумерации.
    • Элемент ESD должен быть определен до того, как на него будет ссылаться любая другая запись (например, запись TXT или RLD).
    • Каждая запись ESD содержит ровно один элемент ESD. (Это отличается от старого формата, который позволял использовать до 3 элементов ESD в каждой записи ESD.)
    • Запись RLD (словарь перемещения [5] ) может содержать один или несколько элементов, а запись RLD может быть продолжена до следующей записи.
    • Для обеспечения совместимости в будущем поля, обозначенные как «зарезервированные», должны быть установлены в двоичный ноль.
    • Наборы символов, используемые для внешних имен, не определены стандартом GOFF, но в файле предусмотрена возможность указать, какой набор символов используется. (Это необходимо для поддержки имен модулей на основе двухбайтового набора символов Unicode .) Однако некоторые продукты IBM допускают использование символов для внешних имен и других идентификаторов только в ограниченном диапазоне, обычно (EBCDIC) шестнадцатеричные значения от X'41' до X «FE» плюс символы ввода и вывода X'0F' и X'0E' соответственно.
  • Новый формат поддерживает имена классов, которые бывают двух типов: зарезервированные и предоставляемые пользователем или незарезервированные . Все имена классов имеют максимальную длину 16 символов.
  • Имена зарезервированных классов состоят из одной буквы, подчеркивания и от 1 до 14 символов. Зарезервированные имена классов, начинающиеся с B_ , зарезервированы для связывателя; Зарезервированные имена классов, начинающиеся с C_ , помеченные как загружаемые, зарезервированы для программ, созданных для использования с языковой средой IBM (LE). Имена классов, начинающиеся с C_ , которые не помечены как загружаемые, а также классы, начинающиеся с X_, Y_ или Z_ , доступны для общего использования как незарезервированные .
  • Имена классов, предоставляемые пользователем, могут быть строчными.
  • Имена классов не являются внешними символами.
При необходимости для целей компиляции можно ссылаться на следующие классы, используемые связующим:
Б_ESD Класс внешнего словаря символов
Б_ТЕКСТ Текстовый класс
Б_РЛД Класс словаря перемещения
Б_СИМ Класс внутренней таблицы символов
Б_ИДРЛ Класс данных идентификации языкового переводчика
Б_ПРВ Класс псевдорегистра
Б_ИДРУ Задаваемый пользователем класс идентификационных данных
Следующие имена классов зарезервированы связывателем и недоступны пользовательским приложениям:
B_IDRB Информация о данных переплета
Б_ИДРЗ Информация о данных SUPER-Zap
Б_ИМПЭКСП Таблица импорта-экспорта
Б_ЛИТ Загрузка информационной таблицы
Б_МАП Картографические данные
  • Информация символьной таблицы объектного файла SYM из записи формата объектного файла 360 недоступна для объектных файлов GOFF; Вместо этого необходимо использовать запись ADATA (подзапись TXT).

Типы записей [ править ]

Как и в старом формате OS/360, записи объектных файлов делятся на 6 различных типов записей: некоторые добавляются, некоторые удаляются, некоторые изменяются:

  • HDR-запись (это новинка) должна происходить первой, она определяет заголовок объектного файла.
  • Записи ESD определяют основные программы, подпрограммы, функции, фиктивные разделы, общий язык Fortran, методы и свойства, а также любой модуль или процедуру, которые могут быть вызваны другим модулем. Они используются для определения программ или сегментов программы, которые были скомпилированы при этом выполнении компилятора, а также внешних процедур, используемых программой (таких как exit() в C , CALL EXIT в Fortran ; new() и Dispose( ) в Паскале ). Записи ESD должны появляться перед любой ссылкой на символ ESD.
  • Записи TXT были расширены, и помимо машинных инструкций или данных, хранящихся в модуле, они также содержат записи идентификационных данных (IDR) (20 или более типов), записи связанных данных (ADATA) и дополнительную информацию, связанную с к модулю.
  • Записи RLD используются для перемещения адресов. Например, программа, ссылающаяся на адрес, расположенный в 500 байтах внутри модуля, будет внутренне хранить адрес как 500, но когда модуль загружается в память, он обязательно будет расположен где-то еще, поэтому запись RLD сообщает редактору связей или загрузчику, что именно адреса, которые нужно изменить. Кроме того, когда модуль ссылается на внешний символ, он обычно устанавливает значение этого символа равным нулю, а затем включает запись RLD для этого символа, чтобы позволить загрузчику или редактору связей изменить адрес на правильное значение.
  • Записи LEN являются новыми и предоставляют информацию определенной длины.
  • Записи END указывают конец модуля и, возможно, место начала выполнения программы. Это должна быть последняя запись в файле.

Формат [ править ]

Записи GOFF могут иметь фиксированную или переменную длину; минимальная длина при использовании записей переменной длины составляет 56 символов, хотя большинство записей будет длиннее. За исключением имен модулей и классов, все символы находятся в наборе символов EBCDIC . Системы на базе Unix должны использовать записи фиксированной длины (80 байт). Записи в файлах фиксированной длины, длина которых короче фиксированной, должны быть заполнены нулями. Чтобы отличить записи GOFF от старого объектного формата OS/360 (где первый байт записи — X'02') или от команд, которые могут присутствовать в файле, первым байтом каждой записи GOFF всегда является двоичное значение X. '03', тогда как команды должны начинаться со значения символа, содержащего не менее пробела (X'40'). Следующие 2 байта записи GOFF указывают тип записи, продолжение и версию формата файла. Эти первые 3 байта известны как поле PTV .

ПТВ [ править ]

Поле PTV представляет первые 3 байта каждой записи GOFF.

ПТВ Поле
Байт Биты Ценить Цель
0 Все 03 Указывает начало записи GOFF.
1 0-3 0 Запись ESD (внешний символ)
1 TXT (текстовая) запись
2 Запись RLD (переезд)
3 LEN (длина) запись
4 КОНЕЦ (Конец) записи
X'5'-X'E' Сдержанный
X'F' HDR (заголовок) запись
4-5 Сдержанный
6-7 00 Начальная запись, которая не продолжается в следующей записи. Это должно быть единственное значение, используемое для записей GOFF переменной длины.
01 Начальная запись, которая продолжается при следующей записи
10 Запись продолжения не продолжается в следующей записи
11 Запись-продолжение, которая продолжается на следующей записи.
2 Все 00 Номер версии формата объектного файла. Все значения, кроме X'00', зарезервированы.

HDR [ править ]

Запись HDR обязательна и должна быть первой записью.

HDR-запись
Байт(ы) Размер Поле Ценить Цель
0-2 3 ПТВ X'03F000' Только разрешенное значение; Запись HDR в настоящее время не может быть продолжена
3-47 45 0 Сдержанный
48-51 4 Уровень архитектуры Двоичный 0 или 1 GOFF Уровень архитектуры; все значения, кроме 0 и 1, зарезервированы.
52-53 2 Свойства модуля Размер двоичный Длина поля свойств модуля
54-59 6 0 Сдержанный
60- 0+ Свойства модуля Список свойств модуля (необязательно)

ОУР [ править ]

Запись ESD дает общедоступное имя модуля, основной программы, подпрограммы, процедуры, функции, свойства или метода в объекте, общем формате Fortran или альтернативной точке входа. Запись ESD для общедоступного имени должна присутствовать в файле до того, как какая-либо ссылка на это имя будет сделана в любой другой записи.

ESD-запись
Байт(ы) Размер Поле Значение (или биты) Цель
0-2 3 ПТВ X'030000' Запись ESD без продолжений
X'030100' Запись ESD, которая продолжается на следующей записи.
3 1 Тип символа 00 SD – Определение раздела; Это используется для прежних значений SD, CM (общий) и PC (частный код, имя SD которого пусто). Значение ESDID «Родительский» должно быть равно 0. Оно используется для определения основной программы, подпрограммы или функции, код которой является частью этого файла. Также используется для Fortran Common.
01 ЭД – Внешнее определение. «Родительский» ESDID должен быть ненулевым и быть значением записи SD, которая ссылается на этот внешний символ. Если значение RLD относится к классу, к которому принадлежит эта запись, класс, на который ссылается этот элемент, должен быть указан в поле Внешнее имя. Используется для имени вызываемой процедуры или функции.
02 LD — Определение метки. «Родительский» ESDID должен быть ненулевым и быть значением записи SD, которая определяет этот символ внутри себя. Это можно использовать для создания псевдонима модуля или для выделения его части как отдельной процедуры. Например, библиотека времени выполнения для определенного языка программирования может иметь определенные функции, которые она должна использовать сама, но которые полезны для программ, написанных с использованием этого языка, поэтому функции можно присвоить метку, чтобы ее можно было вызывать напрямую. Например, полный математический пакет может представлять собой отдельный модуль, и все стандартные функции (синус, косинус, квадратный корень и т. д.) могут быть названы точками входа в этом модуле.
03 PR — Ссылка на деталь или Псевдорегистр. Отличается полем идентификатора пространства имен. «Родительский» ESDID должен быть ненулевым и быть значением записи SD, которая определяет этот символ внутри себя.
04 ER и WX — внешнее задание/слабое внешнее задание. Отличаются значением «Сила привязки» поля «Атрибуты». WX используется там, где иностранная подпрограмма может отсутствовать. Например, если программа-калькулятор имела быстрый высокопроизводительный математический пакет, который был необязательным, его можно было назвать WX, а если он отсутствовал или недоступен, программу можно было перейти на меньший математический пакет.
4-7 4 ЭСИД Двоичный Идентификатор ESDID начинается с 1. Каждый новый ESDID должен быть ровно на 1 выше предыдущей записи.
8-11 4 Родительский ESDID двоичный Это ESDID объекта, определяющего эту запись, если он является частью другого объекта. Это 0, если у него нет родителя.
12-15 4 0 Сдержанный
16-19 4 Компенсировать Двоичный Адрес этого символа в его родительском ESDID для записей LD или ED; в противном случае ноль.
20-23 4 0 Сдержанный
24-27 4 Длина Двоичный Длина этого пункта для типов ED и PR; в противном случае ноль. Если фактическое значение длины задерживается; это значение установлено на -1.
28-31 4 Расширенный атрибут ESDID Двоичный ESDID элемента, содержащего расширенную атрибутивную информацию для типов ED и LD; обычно используется там, где поддерживаются библиотеки DLL для символов, которые разрешаются во время выполнения (например, виртуальные методы). В противном случае ноль.
32-35 4 Расширенное смещение атрибута Двоичный Адрес, по которому можно найти расширенные атрибуты для предыдущего поля, используемый для записей ED и LD, имеющих расширенные атрибуты; в противном случае ноль.
36-39 4 0 Сдержанный
40 1 Идентификатор пространства имен Идентифицирует пространство имен, к которому оно принадлежит
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.
43 1 0 Сдержанный
44-47 4 Связанные данные Двоичный Используется для идентификатора среды или статической области для элементов LD с использованием XLINK.
48-51 4 Приоритет Двоичный Порядок сортировки PR-материалов
52-59 8 0 Сдержанный
60-69 10 Поведенческие атрибуты Атрибуты поведения для этого элемента (см. таблицу «Атрибуты поведения» ниже)
70-71 2 Длина имени Двоичный Длина имени этого элемента; не может быть нулем
72- Имя Текст Имя этого элемента с усеченными завершающими пробелами. Должен быть хотя бы один символ; Частный код состоит из одного пробела. Имя чувствительно к регистру.
быстрый сон 0 Трейлер: неиспользуемое пространство, если оно необходимо для записей фиксированного размера; должно быть заполнено нулями. Не требуется в записях переменной длины.

Продолжение [ править ]

В случае записей фиксированной длины, где имя требует записи продолжения, используется следующее:

Запись о продолжении ESD
Байт(ы) Размер Поле Ценить Цель
0-2 3 ПТВ X'030200' Запись продолжения ESD без дальнейших продолжений
X'030300' Запись продолжения ESD, которая продолжается в следующей записи.
3- Имя Текст Остальная часть имени, если эта запись не продолжается, или следующие 77 байтов имени, если оно продолжается.
быстрый сон 0 Остаток для записи фиксированной длины, превышающей предоставленные данные. Он содержит конечные байты, если это последняя запись с этим именем и имя короче размера записи; должно быть заполнено 0. Это поле отсутствует в записях переменной длины.

поведения Атрибуты

Поле поведенческих атрибутов (байты 60–69 записи ESD)
Компенсировать Размер (байты) Биты Поле Ценить Цель
0 1 Адресация свойств Режим адресации, связанный с этим внешним символом. Эти значения также используются AMODE полем записи END .
00 AMODE не указан (по умолчанию AMODE (24))
01 МОД(24)
02 МОД(31)
03 МОД(ЛЮБОЙ) (24 или 31)
04 МОД(64)
10 AMODE(MIN) (Используйте наименьший AMODE, используемый всеми модулями)
1 1 Резиденция Недвижимость Режим пребывания, связанный с внешним символом
00 RMODE не указан (по умолчанию RMODE (24))
01 РЕЖИМ(24)
03 RMODE(31) (эквивалент RMODE(ANY))
04 РЕЖИМ(64)
2 1 0-3 (4) Стиль текстовой записи Стиль текста для этого класса (только типы ED и PR). Весь текст должен быть одного стиля.
0000 Байт-ориентированный
0001 Структурированные данные (ориентированные на связующее)
0010 Структурированные данные (определяются пользователем)
4-7 (4) Алгоритм связывания Метод привязки данных
0000 Объединить все элементы один за другим
0001 Объединить (все элементы с одинаковыми именами будут расположены в одном месте, используя указанный наибольший размер и наиболее строгое выравнивание). Элементы с разными именами будут объединены. Это обычная практика для типов CM и PR.
3 1 0-2 (3) Поведение задач Индикация того, является ли модуль реентерабельным и/или повторно используемым.
000 Неопределенные
001 Ни многоразовый, ни реентерабельный (NON-REUS)
010 Серийно многоразовые (REUS)
011 Реентерабельный (RENT), также подразумевает (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) Сила связывания Слабые ссылки не будут выполнять поиск в других библиотеках; Сильные ссылки будут искать символ в других библиотеках. Строгие определения можно разрешить по любой ссылке; это значение по умолчанию.
0000 Сильный
0001 Слабый
5 1 0-1 (2) Поведение загрузки классов Определяет, будут ли загружаться элементы класса в случае использования запроса LOAD операционной системы в отношении объекта.
00 ЗАГРУЗИТЬ — загрузить этот класс.
01 ОТЛОЖЕННАЯ ЗАГРУЗКА. Вероятно, этот класс будет использоваться и его следует загрузить.
10 NOLOAD — не загружать этот класс
11 Сдержанный
2 Общий флаг Если 1, рассматривается как «старый» ОБЩИЙ тип CM, где несколько ссылок устанавливают размер наибольшей области, используемой любой ссылкой. Тип SD с тем же именем сохранит размер и текст. Единственный поддерживаемый тип текста — B_TEXT.
3 Прямая и косвенная ссылка 0 Прямые ссылки (для целей подшивки)
1 Для типа PR это дескриптор связи; для типа ER это ссылка на дескриптор связи XPLINK.
4-7 (4) Область привязки 0000 Неопределенные
0001 Область действия раздела («локальная»)
0010 Область действия модуля («глобальная»)
0011 Объем библиотеки
0100 Объем импорта-экспорта
6 1 0-1 (2) Сдержанный
2 Тип связи Для типов ER, LD, PD и PR
0 Стандартная связь с операционной системой (по умолчанию)
1 Связь XPLINK
3-7 (5) Выравнивание Подразумеваемое выравнивание этого элемента
00000 Байт
00001 Стать половиной
00010 Полное слово
00011 Двойное слово
00100 Четырехсловное слово
00101 Страница 4 КБ
Все показанные выравнивания доступны для типов ED и PR, за исключением того, что PR не может использовать выравнивание страниц.
7-9 3 Сдержанный

Записи ADATA [ править ]

Записи ADATA («связанные данные») используются для предоставления дополнительной символьной информации о модуле. Они заменили старые записи SYM в формате объектного файла 360. Чтобы создать запись ADATA

  • Создайте запись ESD типа ED для имени класса, частью которого являются записи.
  • Установите для всех полей записи «Поведенческие атрибуты» значение 0, за исключением
    • Загрузка класса (биты 0–1 байта 5) равна X'10'.
    • Алгоритм привязки равен 0
    • Стиль текстовой записи (биты 0–3 байта 2) — X'0010'.
    • При необходимости установите значения «Только чтение» (бит 4 байта 3) и «Не исполняемый» (биты 5–7 байта 3), если это необходимо.
  • Создайте запись TXT для каждого элемента ADATA.
    • Элемент ESDID — это значение записи ADATA ED для этой конкретной записи ADATA.
    • Смещение равно нулю
    • Длина данных — это длина записи ADATA.
    • Поле данных содержит саму запись ADATA.

Записи ADATA будут добавлены в конец класса в том порядке, в котором они объявлены.

Имена классов, назначенные записям ADATA, преобразуются программами IBM путем преобразования двоичного значения в текст и добавления его к имени C_ADATA . Таким образом, элемент с номером X'0033' станет текстовой строкой C_ADATA0033 .

Типы записей ADATA
Тип Описание
X'0000' - X'7FFF' Записи транслятора (обратите внимание, что некоторые значения в диапазоне 0–X'0130' используются некоторыми продуктами языковых переводчиков IBM, включая Assembler, Cobol и PL/I ).
X'8000' - X'8FFF' Записи управления программой
X'9000' - X'DFFF' Сдержанный
X'E000' - X'EFFF' Зарезервировано для компиляторов и ассемблеров, не выпущенных IBM.
X'F000' - X'FFFF' Доступно для записей пользователей. IBM не будет использовать эти значения.

ТХТ [ править ]

Записи TXT определяют инструкции и данные машинного кода, которые должны быть размещены по определенному адресу в модуле. Обратите внимание: если для этой записи необходимо указать «длину», значение длины должно включать все продолжения этой записи.

ТХТ-запись
Байт(ы) Размер Поле Биты Ценить Цель
0-2 3 ПТВ X'031000' TXT-запись без продолжений
X'031100' Запись TXT, которая продолжается на следующей записи.
3 1 0-3 (4) Сдержанный
Стиль 4-7 (4) Все остальные значения зарезервированы.
0000 Байтоориентированные данные
0001 Структурированные данные (в настоящее время поддерживаются только 19-байтовые поля IDR; см. Таблицу данных IDR ).
0010 Неструктурированные данные
4-7 4 Элемент ЭСИДИД Двоичное число ESDID, которому принадлежит содержимое этой записи
8-11 4 Сдержанный
12-15 4 Компенсировать Двоичный адрес Адрес в ESDID, куда должны быть помещены эти данные. Это должно быть 0 для структурированных и неструктурированных данных.
16-19 4 Истинная длина текстового поля двоичное значение: 0 или полный размер после расширения Если поле «Кодировка текста» равно 0, оно должно быть равно 0. В противном случае это поле представляет собой полный размер текста после распаковки или распаковки.
20-21 2 Кодирование текста двоичное значение 0, если текст не требует репликации, распаковки или декодирования; ненулевое значение, указывающее, что текст должен быть декодирован, распакован или расширен; см. таблицу сжатия
22-23 2 Длина данных двоичное значение больше нуля Общая длина данных в этой записи в байтах как беззнаковое значение и не может быть равна нулю.
24- Данные Машинный код и/или данные, которые необходимо вставить. Если включены данные РДЭ, к ним применяются особые правила и требования, см. Таблицу данных РДЭ.
быстрый сон Не присутствует для записей переменной длины; оставшиеся байты для фиксированной записи длиннее оставшихся данных и должны быть двоичными нулями

Продолжение [ править ]

Запись продолжения TXT
Байт(ы) Размер Поле Биты Ценить Цель
0-2 3 ПТВ X'031200' Запись продолжения без дальнейших продолжений
X'031300' Запись продолжения, которая продолжается следующей записью.
3- Данные продолжены с предыдущей записи
быстрый сон Если остаток записи длиннее данных; ноль заполнен

Таблица сжатия [ править ]

Таблица сжатия используется, если байты 20–21 записи TXT не равны нулю. Значение R используется для определения количества повторений строки; значение L указывает длину текста, который будет повторяться «R» раз. Это можно использовать для предварительной инициализации таблиц или массивов пробелами или нулями или для любых других целей, где полезно выражать повторяющиеся данные в виде количества повторений и значения.

Таблица сжатия
Байт(ы) Размер Поле Ценить Цель
Если значение в байтах 20–21 этой записи TXT равно 0001
0-1 2 р Число повторений, целое число без знака, большее 0. Количество повторений строки, начиная с байта 4.
2-3 2 л Двоичная длина, целое число без знака больше 0 Длина строки, начиная с байта 4
4- Нить Строка длиной «L», которая должна повторяться «R» раз.
Все остальные значения байтов 20–21 зарезервированы.

Таблица данных РДЭ [ править ]

Таблица IDR, расположенная начиная с 24 байта записи TXT, идентифицирует компилятор или ассемблер (и номер его версии), создавший этот объектный файл.

Поле РДЭ
Байт(ы) Размер Поле Ценить Цель
0 1 х'00' Сдержанный
1 1 Тип Тип поля IDR (обратите внимание, что первичная и вторичная идентификация относятся к первому и второму полям идентификации соответственно, появляющимся на карточке END в прежнем формате файла объектного модуля OS/360.)
00 Первичная идентификация; Старый формат РДЭ 1
01 Вторичная идентификация; Старый формат РДЭ 1
02 Расширенная идентификация; Формат РДЭ 2
03 Первичная идентификация; Формат РДЭ 3
04 Вторичная идентификация; Формат РДЭ 3
2-3 2 Длина Двоичное число Длина данных IDR как беззнаковое целое число больше нуля
4+ Данные IDR в соответствии с указанным форматом в байте 1 этого поля; см. в соответствующей таблице формата РДЭ. подробности

Формат РДЭ 1 [ изменить ]

Обратите внимание, что в отличие от большинства числовых значений, хранящихся в файле GOFF, значения «версия», «релиз» и «trans_date» представляют собой числа в виде текстовых символов, а не двоичных.

Формат 1 (старый формат)
Байт(ы) Размер Поле Ценить Цель
0-9 10 Переводчик Любой текст Это значение — это то, как ассемблер или компилятор идентифицирует себя; IBM называет это «значением PID» или «значением идентификатора программы» по каталожным номерам IBM различных программ, например, компилятор Cobol для OS/VS1 называется «IKFCBL00».
10-11 2 Версия две цифры Это номер версии ассемблера или компилятора от 0 до 99.
12-13 2 Выпускать две цифры Это часть номера версии указанного выше номера версии, также от 0 до 99.
14-18 5 Транс_Дата ЯДДДДД 5 текстовых символов, обозначающих 2-значный год и 3-значный день года компиляции или сборки данного модуля; предполагается, что годы 01–65 относятся к 21 веку, а годы 00 или годы, превышающие 65, предположительно относятся к 20 веку, например 2000 или 1966–1999. Трехзначный день начинается с 001 1 января; 032 на 1 февраля; 060 — 1 марта в стандартные годы и 29 февраля в високосные годы; и продолжается до 365 года до 31 декабря в стандартные годы и до 366 года в високосные годы.

Формат РДЭ 2 [ править ]

Обычно компиляторы и ассемблеры не генерируют эту запись формата, она обычно создается связующим.

Формат 2
Байт(ы) Размер Поле Ценить Цель
0-3 4 Дата Упакованная десятичная форма ГГГГДДДФ Модуль даты был собран или скомпилирован, с указанием года и дня года.
4-5 2 Длина_данных Бинарное значение Фактическая длина следующего поля, беззнаковое, ненулевое значение.
6-85 80 РДЭ_Данные Формат этих данных не разглашается.

Формат РДЭ 3 [ править ]

Весь текст в этом элементе представляет собой символьные данные; двоичная информация не используется.

Формат 3
Байт(ы) Размер Поле Ценить Цель
0-9 10 Переводчик Любое текстовое значение, которое автор компилятора/ассемблера хочет использовать для идентификации (см. поле «Переводчик» в старом формате IDR 1 выше).
10-11 2 Версия от 00 до 99 Номер версии ассемблера или компилятора
12-13 2 Выпускать от 00 до 99 Номер выпуска вышеуказанной версии
14=20 7 Дата_компиляции ГГГГДДДД Год и день года, когда программа была скомпилирована или собрана (это будет тот же формат, что и поле «Дата перевода» из формата IDR 1 выше, за исключением того, что год представляет собой полный 4-значный год).
21-29 9 Время компиляции ЧЧММССТТ Час, минута, секунда и тысячная доля секунды, в течение которой программа была скомпилирована или собрана.

РЛД [ править ]

Записи RLD позволяют модулю показать, где он ссылается на адрес, который необходимо переместить, например, ссылки на определенные места в самом себе или на внешние модули.

Каталог переезда
Байт(ы) Размер Поле Ценить Цель
0-2 3 ПТВ X'032000' Запись не продолжена
X'032100' Запись продолжается на следующей записи
3 1 Сдержанный
4-5 2 Длина Двоичное число Размер данных о перемещении; беззнаковое и должно быть больше нуля
6- Перемещение_Данные Данные о переезде; см. данных о переезде таблицу
быстрый сон Не присутствует в записях переменной длины; остаток записи, где запись длиннее данных, должен быть заполнен нулями

Данные о переезде [ править ]

Элемент данных о перемещении
Байт(ы) Размер Поле Ценить Цель
0-5 6 Флаги Флаги, касающиеся этой записи; см. в таблице флагов. значения
6-7 2 Сдержанный
8-11 4 R_Pointer ESDID модуля (типа ED или ER), который будет использоваться в качестве цели для перемещения. Это «удаленный» адрес в том же или другом модуле, который необходимо разрешить программе. Это поле опускается, если бит 0 байта 0 поля Флаги равен 1.
12-15 [А] 4 P_Pointer ESDID модуля, который требует перемещения адреса Это модуль, который хочет, чтобы его ссылка на удаленный идентификатор была изменена на правильное значение. Это поле опускается, если бит 1 байта 0 поля Флаги равен 1.
16-19 [Б] 4 Компенсировать Местоположение внутри модуля, указанное P_Pointer, где должен быть найден адрес, подлежащий настройке. Это адрес для переезда. Это поле опускается, если бит 2 байта 0 поля Флаги равен 1.
20-23 [С] 4 Сдержанный
24-27 [С] 4 Сдержанный

[А] Если R_Pointer (бит 0 байта 0 поля флагов равен 1) опущен, это поле начинается на 4 байта ниже, в байтах 8–11.
[Б] Если R_Pointer или P_Pointer (бит 1 байта 0 поля флагов равен 1) опущено, это поле начинается на 4 байта ниже, в байтах 12–15. Если оба поля опущены, это поле начинается на 8 байт ниже, в байтах 8-11.
[С] Если R_Pointer, P_Pointer или Offset (бит 2 байта 0 поля флагов равен 1) опущены, это поле начинается на 4 байта ниже. Если любые два из них опущены, это поле начинается на 8 байт ниже. Если все они опущены, это поле начинается на 12 байт ниже.

Чтобы уточнить: если модуль в программе C с именем «Basura» должен был вызвать функцию «exit» для завершения самого себя, адрес R_Pointer будет ESDID подпрограммы «exit», а P_Pointer будет ESDID «Басура». Если бы адрес находился в одном модуле (например, внутренние подпрограммы или ссылка на данные в одном модуле), R_Pointer и P_Pointer были бы одинаковыми.

Флаги [ править ]

Флаги элементов RLD
Байт(ы) Размер Поле Биты Цель
0 1 Тот же_R_ID 0 1 Если значение R_Pointer для этой записи такое же, как и для предыдущего элемента в этой записи; если да, то значение R_Pointer в этой записи опускается.
Тот же_P_ID 1 1 Если значение P_Pointer для этой записи такое же, как и для предыдущего элемента в этой записи; если да, то значение P_Pointer в этой записи опускается.
Same_Offset 2 1 Если значение смещения для этой записи такое же, как и для предыдущего элемента в этой записи; если да, то значение смещения в этой записи опускается.
3-4 Сдержанный
5 Сдержанный
Смещение_длины 6 0 для обозначения длины 4 байта
Чувствительность режима адресации 7 0 Нет чувствительности
1 Установите старшие биты адреса так же, как режим адресации режима R адреса R_Pointer (применяется только к адресам V-типа).
1 1 R_Pointer_Indicators 0-3 Тип данных второго операнда адреса перемещения
0 - R-адрес
1 - Смещение от начала R-адреса
2 - R-длина (0 для предметов LD)
6 — Относительно непосредственный (чтобы разрешить инструкции по обращению к внешним символам)
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 Действие_или_Операция 0-6 Тип операции, используемой со вторым операндом (первый операнд будет равен 0), результатом является 32-битное знаковое значение, которое заменяет первый операнд.
0 — добавить второй операнд к первому
1 - Вычесть второй операнд из первого
Все остальные значения зарезервированы.
Выборка/сохранение цели исправления 7 Указывает, использовать или игнорировать целевое значение.
0 — использовать поле исправления/цели в качестве первого операнда.
1 — игнорировать значение целевого поля, использовать исправленное значение в качестве первого операнда; если нет фиксированного значения, используйте 0
3 1 Сдержанный
4 1 Целевая длина Беззнаковая длина целевого поля в байтах
5 1 Сдержанный

ТОЛЬКО [ править ]

Записи LEN используются для объявления длины модуля, если она не была известна на момент создания записи ESD, например, для однопроходных компиляторов.

Поле Компенсировать Размер Описание
ПТВ 0-2 3 Тип записи X'033000'
3-5 3 Сдержанный
Длина 6-7 2 Длина элементов, следующих за этим полем; значение должно быть ненулевым
Элементы 8- Данные о длине элемента; см элементов . таблицу ниже
быстрый сон Завершающие данные до конца записи для записей фиксированной длины должны содержать двоичные нули; отсутствует для записей переменной длины.

Элементы [ править ]

Запись элемента отложенной длины не может быть продолжена или разделена.

Поле Компенсировать Размер Описание
ЭСИД 0-3 4 ESDID элемента, к которому относится это значение
4-7 4 Сдержанный
Длина 8-11 4 Длина указанного элемента

КОНЕЦ [ править ]

END должна быть последней записью модуля. «Точка входа» используется, когда в качестве начальной точки для его выполнения должен использоваться адрес, отличный от начала модуля. Это используется либо потому, что в программе есть неисполняемые данные, появляющиеся перед запуском модуля (очень часто встречается у старых программистов на ассемблере, поскольку старые версии ассемблера гораздо медленнее собирали данные, хранящиеся в программах после указания инструкций), либо потому, что модуль сначала вызывает внешний модуль, например библиотеку времени выполнения, для своей инициализации.

Поле Компенсировать Размер Биты Описание
ПТВ 0-2 3 X'034000' — продолжение не продолжено
X'034100' — Продолжение в следующей записи.
3 0-5 6 Сдержанный
Флаги 6-7 2 Заявления о наличии или отсутствии точки входа
00 — точка входа не указана; все остальные значения в этой записи недействительны
01 — точка входа, указанная ESDID
10 - Точка входа указана по имени
11 - Зарезервировано
АМОДЕ 4 1 Значение режима адресации точки входа; значения соответствуют значениям, указанным в поле 0 таблицы атрибутов поведения в записи ESD .
5-7 3 Сдержанный
Количество записей 8-11 4 Количество записей GOFF в этом модуле (это количество «логических» записей, т.е. не считая продолжений)
ЭСИД 12-15 4 Значение ESDID, если на точку входа ссылается ESDID; двоичный ноль, если на него ссылается имя
16-19 4 Сдержанный
Компенсировать 20-23 4 Смещение адреса точки входа в модуль; это нельзя указать для внешней точки входа (ER)
Длина имени 24-25 2 Длина имени. Она должна быть равна нулю, если точка входа указана с помощью ESDID.
Имя 26- Имя внешнего символа, используемого в качестве точки входа для этого модуля; является двоичными нулями, если точка входа была указана ESDID; если эту запись продолжить, это будут первые 54 символа имени. Это единственное недвоичное значение в записи; это будет текстовое поле, представляющее общедоступное имя точки входа.
быстрый сон Трейлер, продолжающийся до конца записи; должны быть двоичными нулями до конца записи для записей фиксированной длины; опущено для переменной длины

Продолжение [ править ]

Если имя точки входа, указанное в записи END фиксированной длины, длиннее 54 байтов или (если сама эта запись также продолжается) длиннее дополнительных 77 байтов), используется следующая запись продолжения.

Поле Компенсировать Размер Описание
ПТВ 0-2 3 X'034200' — эта запись продолжения не продолжена.
X'034300' — эта запись продолжения сама продолжается на следующей записи.
Имя 3- Оставшаяся часть имени точки входа, если эта запись не продолжается, в этом случае это следующие 77 символов имени.
быстрый сон Если эта запись не продолжается, это конечная часть записи для записей фиксированной длины, и она должна быть двоичными нулями; отсутствует для записей переменной длины

Ссылки [ править ]

  1. ^ Джон Р. Эрман (1 марта 2001 г.). «Как работает редактор связей: руководство по модулям объектов/загрузки, редакторам ссылок, загрузчикам и тому, что они делают для вас (и для) вас» (PDF) . Лаборатория IBM в Силиконовой долине (Санта-Тереза), Сан-Хосе . Проверено 8 сентября 2019 г. [ постоянная мертвая ссылка ]
  2. ^ Управление программой OS/MVS: Расширенные возможности (PDF) (восьмое изд.). Покипси, Нью-Йорк: IBM. Сентябрь 2007 г. SA22-7644-07. Архивировано из оригинала (PDF) 19 октября 2021 г. Проверено 9 августа 2013 г.
  3. ^ Презентация IBM High Level Assembler для MVS, VM и VSE Release 2 (PDF) . Декабрь 1995 г. SG24-3910-01. Архивировано из оригинала (PDF) 23 января 2016 г. Проверено 13 ноября 2015 г.
  4. ^ Руководство программиста по ассемблеру высокого уровня для z/OS, z/VM и z/VSE (PDF) (шестое изд.). Сан-Хосе, Калифорния: IBM. Июль 2008 г. Приложение C. SC26-4941-05 . Проверено 8 сентября 2019 г. [ постоянная мертвая ссылка ]
  5. ^ «РЛД» . www.ibm.com . ИБМ. 16 августа 2013 года . Проверено 10 июля 2020 г.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 33EDAFDB30F9ECF2E9910DC29839BF8E__1715863320
URL1:https://en.wikipedia.org/wiki/GOFF
Заголовок, (Title) документа по адресу, URL1:
GOFF - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)