/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* bos720 src/bos/usr/include/syms.h 1.14.1.3 */ /* */ /* Licensed Materials - Property of IBM */ /* */ /* COPYRIGHT International Business Machines Corp. 1988,2012 */ /* All Rights Reserved */ /* */ /* US Government Users Restricted Rights - Use, duplication or */ /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* */ /* IBM_PROLOG_END_TAG */ /* @(#)20 1.14.1.3 src/bos/usr/include/syms.h, cmdld, bos720 3/27/12 09:21:54 */ #ifndef _H_SYMS #define _H_SYMS /* * COMPONENT_NAME: cmdld * * STRUCTURES: syment, syment_64, auxent, auxent_64 * * ORIGINS: 3, 27 * */ #include #ifdef __cplusplus extern "C" { #endif /* Storage Classes are defined in */ #include #define SYMNMLEN 8 /* Number of characters in a symbol name */ #define FILNMLEN 14 /* Number of characters in a file name */ #ifdef __XCOFF32__ #define DIMNUM 4 /* Number of array dimensions in auxiliary entry */ #endif /* The following field names are conventionally used for structures defined in this file. Where an entry is blank, the name is not applicable to its respective file type, whether hybrid names are used or not. =============================================================================== | Basic field or macro name | XCOFF32 Name | XCOFF64 Name | |=============================================================================| | SYMENT | |-----------------------------------------------------------------------------| | n_name | n_name32 | | | n_zeroes | n_zeroes32 | | | n_offset | n_offset32 | n_offset64 | | n_nptr | n_nptr32 (Note 1) | n_nptr64 (Note 1) | | n_value | n_value32 | n_value64 | | n_scnum | same | same | | n_type (Note 2) | same | same | | n_lang | same | same | | n_cputype | same | same | | n_sclass | same | same | | n_numaux | same | same | | SYMESZ | SYMESZ_32 | SYMESZ_64 | |-----------------------------------------------------------------------------| | AUXENT | |-----------------------------------------------------------------------------| |x_block32.x_misc.x_lnsz.x_lnnohi| same | | | x_block32.x_misc.x_lnsz.x_lnno | same | | | x_sym.x_exptr | x_sym32.x_exptr | See x_except.x_exptr | | x_sym.x_misc.x_fsize | x_sym32.x_misc.x_** | See x_fcn.x_fsize | | x_sym.x_misc.x_lnsz.x_lnno | x_sym32.x_misc.x_** | x_sym64.x_misc.x_l** | | x_sym.x_fcnary.x_fcn.x_lnnoptr | x_sym32.x_fcnary.** | See x_fcn.x_lnnoptr | | x_sym.x_fcnary.x_fcn.s_endndx | x_sym32.x_fcnary.** | See x_fcn.x_endndx | | x_sym.x_auxtype (Note 3) | | x_sym64.x_auxtype | | x_file.x_fname | same | same | | x_file._x.x_zeroes | same | same | | x_file._x.x_offset | same | same | | x_file._x.x_ftype | same | same | | x_file._x.x_auxtype (Note 3) | | x_file.x_auxtype64 | | x_scn.x_scnlen | x_scn32.x_scnlen | | | x_scn.x_nreloc | x_scn32.x_nreloc | | | x_scn.x_nlinno | x_scn32.x_nlinno | | | x_csect.x_scnlen | x_csect.x_scnlen32 | (Note 4) | | x_csect.x_scnlen_lo | | x_csect.x_scnlen_lo64| | x_csect.x_parmhash | same | same | | x_csect.x_snhash | same | same | | x_csect.x_smtyp | same | same | | x_csect.x_smclas | same | same | | x_csect.x_scnlen_hi | | x_csect.x_scnlen_hi64| | x_csect.x_auxtype (Note 3) | | x_csect.x_auxtype64 | | x_csect.x_stab | x_csect.x_stab32 | | | x_csect.x_snstab | x_csect.x_snstab32 | | | x_sect.x_scnlen | x_sect.x_scnlen32 | x_sect.x_scnlen64 | | x_sect.x_nreloc | x_sect.x_nreloc32 | x_sect.x_nreloc64 | | x_sect.x_auxtype (Note 3) | | x_sect.x_auxtype64 | | x_except.x_exptr | | x_except64.x_exptr | | x_except.x_fsize (Note 5) | | x_except64.x_fsize | | x_except.x_endndx (Note 5) | | x_except64.x_endndx | | x_except.x_auxtype (Note 3) | | x_except64.x_auxtype | | x_fcn.x_lnnoptr | | x_fcn64.x_lnnoptr | | x_fcn.x_fsize (Note 5) | | x_fcn64.x_fsize64 | | x_fcn.x_endndx (Note 5) | | x_fcn64.x_endndx | | x_fcn.x_auxtype (Note 3) | | x_fcn64.x_auxtype | | x_auxtype.x_auxtype (Note 3) | | x_auxtype64.x_auxtype| | AUXESZ | AUXESZ_32 | AUXESZ_64 | =============================================================================== Note 1: When both __XCOFF32__ and __XCOFF64__ are defined, but __XCOFF_HYBRID__ is not, the macro "n_nptr" is not defined. The n_nptr definition is not very useful when compiling in 64-bit mode. Note 2: For an XCOFF64 file, the n_type field may only have the values 0 (if the symbol is not a function) or 0x0020 (if the symbol is a function). Note 3: All the fields containing "x_auxtype" refer to the same byte of the auxiliary symbol table entry. Note 4: The XCOFF64 equivalent for x_csect.x_scnlen is the concatenation of x_csect.x_scnlen_hi and x_csect.x_scnlen_lo. Note 5: When _AUX_EXCEPT and _AUX_FCN auxiliary symbol table entries exist for the same primary symbol table entry, the x_fsize and x_endndx fields of the two entries should have the same values. Note 6: Field names not listed in the table above are obsolete and are not used in the current release of AIX. */ #ifndef __XCOFF_HYBRID__ #ifdef __XCOFF32__ typedef struct syment { union { char _n_name[SYMNMLEN]; /* Symbol name (if 8 characters or less) */ struct { _LONG32 _n_zeroes; /* new == 0 */ _OFFSET32 _n_offset; /* offset into string table */ } _n_n; #ifndef __64BIT__ char *_n_nptr[2]; /* allows for overlaying */ #else unsigned int _n_nptr[2]; /* allows for overlaying */ #endif } _n; _ULONG32 n_value; /* value of symbol */ short n_scnum; /* section number */ union { unsigned short _n_type; /* type and derived type */ struct { unsigned char _n_lang; /* source language id */ unsigned char _n_cpu; /* cputype id */ }_n_lc; } _n_tylc; char n_sclass; /* storage class */ char n_numaux; /* number of aux. entries */ } SYMENT; #ifndef n_name #define n_name _n._n_name #endif /* n_name */ #define n_zeroes _n._n_n._n_zeroes #ifndef __XCOFF64__ /* If __XCOFF32__ and __XCOFF64__ are defined, a single macro for n_nptr cannot work for both structures. Thus, the macro is not defined. */ #define n_nptr _n._n_nptr[1] #endif #endif /* __XCOFF32__ */ #ifdef __XCOFF64__ typedef struct _S_(syment) { unsigned long long n_value; /* value of symbol */ union { struct { _OFFSET32i _n_offset; /* offset into string table */ } _n_n; #ifndef __64BIT__ char * _n_nptr; /* Allows for overlaying */ #endif } _n; short n_scnum; /* section number */ union { unsigned short _n_type; /* type and derived type */ struct { unsigned char _n_lang; /* source language id */ unsigned char _n_cpu; /* cputype id */ }_n_lc; } _n_tylc; char n_sclass; /* storage class */ char n_numaux; /* number of aux. entries */ } _S_(SYMENT); #ifdef __XCOFF_32_64__ #define SYMESZ_64 (18) /* Do not use sizeof(SYMENT_64) */ #endif #ifndef __XCOFF32__ #define n_nptr _n._n_nptr #endif #endif /* __XCOFF64__ */ #define n_offset _n._n_n._n_offset #else /* __XCOFF_HYBRID__ */ typedef struct syment { union { char _name32[SYMNMLEN]; /* old COFF version */ struct { _LONG32 _zeroes32; /* new == 0 */ _OFFSET32 _offset32; /* offset into string table */ } _n_n; #ifndef __64BIT__ char *_nptr32[2]; /* allows for overlaying */ #else unsigned int _nptr32[2]; /* allows for overlaying */ #endif unsigned long long _value64; /* value of symbol */ } _n; #define n_name32 _n._name32 #define n_nptr32 _n._nptr32[1] #define n_zeroes32 _n._n_n._zeroes32 #define n_value64 _n._value64 #define n_offset32 _n._n_n._offset32 union { unsigned int _value32; /* value of symbol */ _OFFSET32i _offset64; /* offset into string table */ #ifndef __64BIT__ char *_nptr64; /* Allows for overlaying */ #define n_nptr64 _u2._offset64 #endif } _u2; #define n_value32 _u2._value32 #define n_offset64 _u2._offset64 short n_scnum; /* section number */ union { unsigned short _n_type; /* type and derived type */ struct { unsigned char _n_lang; /* source language id */ unsigned char _n_cpu; /* cputype id */ }_n_lc; } _n_tylc; char n_sclass; /* storage class */ char n_numaux; /* number of aux. entries */ } SYMENT; #endif /* __XCOFF_HYBRID__ */ /* include file also defines n_name and n_type. */ #ifndef n_type #define n_type _n_tylc._n_type #endif /* n_type */ #define n_cputype _n_tylc._n_lc._n_cpu #define n_lang _n_tylc._n_lc._n_lang /* Structure size is the same for both XCOFF32 and XCOFF64 */ #define SYMESZ (18) /* Do not use sizeof(SYMENT) */ #ifdef __XCOFF_HYBRID__ #define SYMESZ_32 (18) #define SYMESZ_64 (18) #endif /* * Relocatable symbols have a section number of the * section in which they are defined. Otherwise, section * numbers have the following meanings: */ #define N_UNDEF 0 /* undefined symbol */ #define N_ABS -1 /* value of symbol is absolute */ #define N_DEBUG -2 /* special debugging symbol */ #ifdef __XCOFF32__ /* Obsolete definitions--not defined for XCOFF64. */ /* * The fundamental type of a symbol packed into the low * 4 bits of the word. * Unused in xcoff. */ #define T_NULL 0 #define T_ARG 1 /* function argument (only used by compiler) */ #define T_CHAR 2 /* character */ #define T_SHORT 3 /* short integer */ #define T_INT 4 /* integer */ #define T_LONG 5 /* long integer */ #define T_FLOAT 6 /* floating point */ #define T_DOUBLE 7 /* double word */ #define T_STRUCT 8 /* structure */ #define T_UNION 9 /* union */ #define T_ENUM 10 /* enumeration */ #define T_MOE 11 /* member of enumeration */ #define T_UCHAR 12 /* unsigned character */ #define T_USHORT 13 /* unsigned short */ #define T_UINT 14 /* unsigned integer */ #define T_ULONG 15 /* unsigned long */ /* * derived types are: */ #define DT_NON 0 /* no derived type */ #define DT_PTR 1 /* pointer */ #define DT_FCN 2 /* function */ #define DT_ARY 3 /* array */ /* * type packing constants */ #define N_BTMASK 017 #define N_TMASK 060 #define N_TMASK1 0300 #define N_TMASK2 0360 #define N_BTSHFT 4 #define N_TSHIFT 2 #ifndef _COMPILER /* * MACROS */ /* Basic Type of x */ #define BTYPE(x) ((x) & N_BTMASK) /* Is x a pointer? */ #define ISPTR(x) (((x) & N_TMASK) == (DT_PTR << N_BTSHFT)) /* Is x a function? */ #define ISFCN(x) (((x) & N_TMASK) == (DT_FCN << N_BTSHFT)) /* Is x an array? */ #define ISARY(x) (((x) & N_TMASK) == (DT_ARY << N_BTSHFT)) /* Is x a structure, union, or enumeration TAG? */ #define ISTAG(x) ((x)==C_STRTAG || (x)==C_UNTAG || (x)==C_ENTAG) #define INCREF(x) ((((x)&~N_BTMASK)<>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK)) #endif /* _COMPILER */ #endif /* __XCOFF32__ */ #ifdef __XCOFF_32_64__ #define ISFCN_64(x) ((x) & 0x0020) #endif #ifdef __XCOFF_64__ #define ISFCN(x) ((x) & 0x0020) #endif /* Defines for symbol visiblity--bits in the n_type field. * These definitions are always valid in XCOFF64. In XCOFF32, they are * only valid if vstamp in the aouthdr is greater than 1. */ #define SYM_V_INTERNAL 0x1000 #define SYM_V_HIDDEN 0x2000 #define SYM_V_PROTECTED 0x3000 #define SYM_V_EXPORTED 0x4000 #define SYM_V_MASK 0xF000 /************************************************************************* * * AUXILIARY ENTRY FORMAT * *************************************************************************/ /* Structure name and size are the same for both XCOFF32 and XCOFF64. */ #define AUXESZ (18) /* Do not use sizeof(AUXENT) */ #ifdef __XCOFF_HYBRID__ #define AUXESZ_32 (18) #define AUXESZ_64 (18) #endif #ifdef __XCOFF_HYBRID__ #define _S32_(name) name ## 32 #else #define _S32_(name) name #endif #ifdef __XCOFF32__ typedef union auxent { #ifndef x_block32 /* Auxiliary entry for C_BLOCK or C_FCN contains a 32-bit source file * line number. The high-order 16 bits are in x_lnnohi and the * low-order 16 bits are in x_lnno. */ struct { struct { struct { unsigned short _x_pad; unsigned short x_lnnohi; unsigned short x_lnno; } x_lnsz; } x_misc; } x_block32; #endif struct { _OFFSET32 x_tagndx; /* str, un, or enum tag indx */ /* exception table offset */ #define x_exptr x_tagndx union { struct { unsigned short x_lnno; /* declaration line number */ unsigned short x_size; /* str, union, array size */ } x_lnsz; _LONG32 x_fsize; /* size of function */ } x_misc; union { struct { /* if ISFCN, tag, or .bb */ _OFFSET32 x_lnnoptr; /* ptr to fcn line # */ _LONG32 x_endndx; /* entry ndx past block end */ } x_fcn; struct { /* if ISARY, up to 4 dimen. */ unsigned short x_dimen[DIMNUM]; } x_ary; } x_fcnary; unsigned short x_tvndx; /* tv index */ } _S32_(x_sym); #ifdef __XCOFF_HYBRID__ struct { struct { struct { int x_lnno; /* declaration line number */ } x_lnsz; } x_misc; char pad[13]; char x_auxtype; /* Auxiliary symbol type */ } x_sym64; #endif /* __XCOFF_HYBRID__ */ union { char x_fname[FILNMLEN]; struct { _LONG32 x_zeroes; _OFFSET32 x_offset; char x_pad[FILNMLEN-8]; unsigned char x_ftype; #ifdef __XCOFF_HYBRID__ struct { char pad[2]; struct { char _auxtype; /* Auxiliary symbol type */ } _xt; } _x; #define x_auxtype64 _x._xt._auxtype #endif } _x; } x_file; struct { _OFFSET32 x_scnlen; /* section length */ unsigned short x_nreloc; /* number of relocation entries */ unsigned short x_nlinno; /* number of line numbers */ } _S32_(x_scn); /* CSECT auxiliary entry */ struct { #ifdef __XCOFF_HYBRID__ union { _OFFSET32 _scnlen32; /* csect length */ _ULONG32 _scnlen_lo64; } _u; #else _OFFSET32 _S32_(x_scnlen); /* csect length */ #endif _OFFSET32 x_parmhash; /* parm type hash index */ unsigned short x_snhash; /* sect num with parm hash */ unsigned char x_smtyp; /* symbol align and type */ /* 0-4 - Log 2 of alignment */ /* 5-7 - symbol type */ unsigned char x_smclas; /* storage mapping class */ _OFFSET32 _S32_(x_stab); /* dbx stab info index */ #ifdef __XCOFF_HYBRID__ union { struct { char pad; char _auxtype; } _xt; unsigned short _snstab;/* sect num with dbx stab */ } _x; #else unsigned short _S32_(x_snstab);/* sect num with dbx stab */ #endif } x_csect; #ifdef __XCOFF_HYBRID__ # define x_snstab32 _x._snstab # define x_scnlen32 _u._scnlen32 # define x_scnlen_lo64 _u._scnlen_lo64 # define x_scnlen_hi64 x_stab32 #endif /* SECTION/DWARF auxiliary entry */ struct { #ifdef __XCOFF_HYBRID__ union { _LONG32 _scnlen32; /* XCOFF32 section length */ long long _scnlen64; /* XCOFF64 section length */ } _u; union { _LONG32 _nreloc32; /* XCOFF32 number RLDs */ long long _nreloc64; /* XCOFF64 number RLDs */ } _u2; union { struct { char pad; char _auxtype; } _xt; } _x; # define x_scnlen64 _u._scnlen64 # define x_nreloc32 _u2._nreloc32 # define x_nreloc64 _u2._nreloc64 #else _LONG32 x_scnlen; /* section length */ char pad1[4]; _LONG32 x_nreloc; /* number RLDs */ #endif } x_sect; #ifdef __XCOFF_HYBRID__ struct { long long x_exptr; /* exception table offset */ _INT32 x_fsize; /* size of function */ _INT32 x_endndx; /* entry ndx past block end */ char pad; char x_auxtype; } x_except64; struct { long long x_lnnoptr; /* line number entry offset */ _INT32 x_fsize; /* size of function */ _INT32 x_endndx; /* entry ndx past block end */ char pad; char x_auxtype; } x_fcn64; struct { struct { struct { char x_pad[AUXESZ-1]; char x_auxtype; } _auxtype; } _xt; } _x; #endif } AUXENT; #endif /* __XCOFF32__ */ #if defined(__XCOFF64__) && ! defined(__XCOFF_HYBRID__) typedef union _S_(auxent) { struct { struct { struct { int x_lnno; /* declaration line number */ } x_lnsz; } x_misc; char pad[13]; char x_auxtype; /* Auxiliary symbol type */ } x_sym; union { char x_fname[FILNMLEN]; struct { int x_zeroes; _OFFSET32i x_offset; char x_pad[FILNMLEN-8]; unsigned char x_ftype; char pad[2]; char x_auxtype; /* Auxiliary symbol type */ } _x; } x_file; /* CSECT auxiliary entry */ struct { unsigned int x_scnlen_lo; /* csect length */ _OFFSET32 x_parmhash; /* parm type hash index */ unsigned short x_snhash; /* sect num with parm hash */ unsigned char x_smtyp; /* symbol align and type */ /* 0-4 - Log 2 of alignment */ /* 5-7 - symbol type */ unsigned char x_smclas; /* storage mapping class */ _INT32 x_scnlen_hi; char pad; char x_auxtype; /* Auxiliary symbol type */ } x_csect; struct { long long x_exptr; /* exception table offset */ _INT32 x_fsize; /* size of function */ _INT32 x_endndx; /* entry ndx past block end */ char pad; char x_auxtype; /* Auxiliary symbol type */ } x_except; struct { long long x_lnnoptr; /* line number entry offset */ _INT32 x_fsize; /* size of function */ _INT32 x_endndx; /* entry ndx past block end */ char pad; char x_auxtype; /* Auxiliary symbol type */ } x_fcn; struct { long long x_scnlen; /* section length */ long long x_nreloc; /* Num RLDs */ char pad; char x_auxtype; /* Auxiliary symbol type:* * _AUX_SECT */ } x_sect; struct { char x_pad[AUXESZ-1]; char x_auxtype; } x_auxtype; } _S_(AUXENT); #ifdef __XCOFF32__ #define AUXESZ_64 (18) /* Do not use sizeof(AUXENT_64) */ #endif #endif /* defined(__XCOFF64__) && ! defined(__XCOFF_HYBRID__) */ #ifdef __XCOFF64__ #define _AUX_EXCEPT 255 #define _AUX_FCN 254 #define _AUX_SYM 253 #define _AUX_FILE 252 #define _AUX_CSECT 251 #define _AUX_SECT 250 #endif /* Defines for File auxiliary definitions: x_ftype field of x_file */ #define XFT_FN 0 /* Source File Name */ #define XFT_CT 1 /* Compile Time Stamp */ #define XFT_CV 2 /* Compiler Version Number */ #define XFT_CD 128 /* Compiler Defined Information */ /* Defines for CSECT auxiliary definitions */ /* Symbol Type (5-7 of x_smtyp field of x_csect) */ #define XTY_ER 0 /* External Reference */ #define XTY_SD 1 /* CSECT Section Definition */ #define XTY_LD 2 /* Entry Point - Label Definition */ #define XTY_CM 3 /* Common (BSS) */ #ifdef __XCOFF_32__ /* Following are unused but retained for source compatability when compiling for 32-bit XCOFF files. */ #define XTY_HL 6 /* Hidden Label Definition */ #define XTY_US 5 /* Unset */ #define XTY_EM 4 /* Error Message - Linkedit usage */ #endif /* Storage Mapping Class definitions: x_smclas field of x_csect */ /* READ ONLY CLASSES */ #define XMC_PR 0 /* Program Code */ #define XMC_RO 1 /* Read Only Constant */ #define XMC_DB 2 /* Debug Dictionary Table */ #define XMC_GL 6 /* Global Linkage (Interfile Interface Code) */ #define XMC_XO 7 /* Extended Operation (Pseudo Machine Instruction */ #define XMC_SV 8 /* Supervisor Call (32-bit process only) */ #define XMC_SV64 17 /* Supervisor Call for 64-bit process */ #define XMC_SV3264 18 /* Supervisor Call for both 32- and 64-bit processes. */ #define XMC_TI 12 /* Traceback Index csect */ #define XMC_TB 13 /* Traceback table csect */ /* READ WRITE CLASSES */ #define XMC_RW 5 /* Read Write Data */ #define XMC_TC0 15 /* TOC Anchor for TOC Addressability */ #define XMC_TC 3 /* General TOC item */ #define XMC_TD 16 /* Scalar data item in the TOC */ #define XMC_DS 10 /* Descriptor csect */ #define XMC_UA 4 /* Unclassified - Treated as Read Write */ #define XMC_BS 9 /* BSS class (uninitialized static internal) */ #define XMC_UC 11 /* Un-named Fortran Common */ #define XMC_TL 20 /* Initialized thread-local variable */ #define XMC_UL 21 /* Uninitialized thread-local variable */ #define XMC_TE 22 /* Symbol mapped at the end of TOC */ /* Defines for "special" symbols */ #define _ETEXT "etext" #define _EDATA "edata" #define _END "end" #define _EF ".ef" #define _START "__start" #ifdef __cplusplus } #endif #endif /* _H_SYMS */