|
SYMS(4)НАЗВАНИЕ СИНТАКСИС #include <syms.h> ОПИСАНИЕ
Таблица имен состоит из элементов фиксированной длины (18 байт). Элемент, описывающий имя, кроме собственно текста имени, дополненного нулями, содержит его значение и другую информацию. Ниже приведена соответствующая C-структура: #define SYMNMLEN 8 /* Максимальное количество символов в тексте имени */ #define FILNMLEN 14 /* Максимальное количество символов в имени файла */ #define DIMNUM 4 /* Размерность массива во вспомогательном разделе */ struct syment { union { /* Все способы описать текст имени */ char _n_name[SYMNMLEN]; /* Текст имени */ struct { long _n_zeroes; /* Если == 0, то в таблице цепочек */ long _n_offset; /* Смещение в табл. цепочек */ } _n_n; char *_n_nptr[2]; } _n; long n_value; /* Значение имени */ short n_scnum; /* Номер секции */ unsigned short n_type; /* Тип и производный тип */ char n_sclass; /* Класс памяти */ char n_numaux; /* Число вспомогательных элементов */ }; #define n_name _n._n_name #define n_zeroes _n._n_n._n_zeroes #define n_offset _n._n_n._n_offset #define n_nptr _n._n_nptr[1] Смысл значений имен пояснен во включаемом файле <syms.h>. Для описания некоторых имен требуется больше информации, чем содержится в одном элементе; в таком случае за первым элементом, описывающим имя, следуют вспомогательные элементы. Вспомогательные элементы имеют тот же размер, что и основные; их формат приведен ниже: union auxent { struct { long x_tagndx; /* Индекс описателя структуры, об единения или перечисления */ union { struct { unsigned short x_lnno; /* Номер строки определения */ unsigned short x_size; /* Размер массива, структуры или об единения */ } x_lnsz; long x_fsize; /* Размер функции */ } x_misc; union { struct { long x_lnnoptr; long x_endndx; } x_fcn; struct { /* Если массив, то его размерности (до 4) */ unsigned short x_dimen [DIMNUM]; } x_ary; } x_fcnary; unsigned short x_tvndx; } x_sym; struct { char x_fname [FILNMLEN]; /* Имя файла (занимает весь элемент) */ } x_file; struct { long x_scnlen; /* Длина секции */ unsigned short x_nreloc; /* Число элем. с инф. о настройке ссылок */ unsigned short x_nlinno; /* Число элем. с инф. о номерах строк */ } x_scn; struct { long x_tvfill; unsigned short x_tvlen; unsigned short x_tvran[2]; } x_tv; };Элементы таблицы имен нумеруются, начиная с 0. СМ. ТАКЖЕ ПРЕДОСТЕРЕЖЕНИЯ |
|