]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - cddl/contrib/opensolaris/head/syms.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / cddl / contrib / opensolaris / head / syms.h
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*      Copyright (c) 1988 AT&T */
23 /*        All Rights Reserved   */
24
25
26 #ifndef _SYMS_H
27 #define _SYMS_H
28
29 #pragma ident   "%Z%%M% %I%     %E% SMI"        /* SVr4.0 2.8   */
30
31 /*              Storage Classes are defined in storclass.h  */
32 #include <storclass.h>
33
34 #ifdef  __cplusplus
35 extern "C" {
36 #endif
37
38 /*              Number of characters in a symbol name */
39 #define SYMNMLEN        8
40 /*              Number of characters in a file name */
41 #define FILNMLEN        14
42 /*              Number of array dimensions in auxiliary entry */
43 #define DIMNUM          4
44
45 struct syment
46 {
47         union
48         {
49                 char            _n_name[SYMNMLEN];      /* old COFF version */
50                 struct
51                 {
52                         long    _n_zeroes;      /* new == 0 */
53                         long    _n_offset;      /* offset into string table */
54                 } _n_n;
55                 char            *_n_nptr[2];    /* allows for overlaying */
56         } _n;
57         unsigned long           n_value;        /* value of symbol */
58         short                   n_scnum;        /* section number */
59         unsigned short          n_type;         /* type and derived type */
60         char                    n_sclass;       /* storage class */
61         char                    n_numaux;       /* number of aux. entries */
62 };
63
64 #define n_name          _n._n_name
65 #define n_nptr          _n._n_nptr[1]
66 #define n_zeroes        _n._n_n._n_zeroes
67 #define n_offset        _n._n_n._n_offset
68
69 /*
70  * Relocatable symbols have a section number of the
71  * section in which they are defined.  Otherwise, section
72  * numbers have the following meanings:
73  */
74         /* undefined symbol */
75 #define N_UNDEF 0
76         /* value of symbol is absolute */
77 #define N_ABS   -1
78         /* special debugging symbol -- value of symbol is meaningless */
79 #define N_DEBUG -2
80         /* indicates symbol needs transfer vector (preload) */
81 #define N_TV    (unsigned short)-3
82
83         /* indicates symbol needs transfer vector (postload) */
84
85 #define P_TV    (unsigned short)-4
86
87 /*
88  * The fundamental type of a symbol packed into the low
89  * 4 bits of the word.
90  */
91
92 #define _EF     ".ef"
93
94 #define T_NULL          0
95 #define T_ARG           1       /* function argument (only used by compiler) */
96 #define T_CHAR          2       /* character */
97 #define T_SHORT         3       /* short integer */
98 #define T_INT           4       /* integer */
99 #define T_LONG          5       /* long integer */
100 #define T_FLOAT         6       /* floating point */
101 #define T_DOUBLE        7       /* double word */
102 #define T_STRUCT        8       /* structure    */
103 #define T_UNION         9       /* union        */
104 #define T_ENUM          10      /* enumeration  */
105 #define T_MOE           11      /* member of enumeration */
106 #define T_UCHAR         12      /* unsigned character */
107 #define T_USHORT        13      /* unsigned short */
108 #define T_UINT          14      /* unsigned integer */
109 #define T_ULONG         15      /* unsigned long */
110
111 /*
112  * derived types are:
113  */
114
115 #define DT_NON          0       /* no derived type */
116 #define DT_PTR          1       /* pointer */
117 #define DT_FCN          2       /* function */
118 #define DT_ARY          3       /* array */
119
120 /*
121  *   type packing constants
122  */
123
124 #define N_BTMASK        017
125 #define N_TMASK         060
126 #define N_TMASK1        0300
127 #define N_TMASK2        0360
128 #define N_BTSHFT        4
129 #define N_TSHIFT        2
130
131 /*
132  *   MACROS
133  */
134
135         /*   Basic Type of  x   */
136
137 #define BTYPE(x)  ((x) & N_BTMASK)
138
139         /*   Is  x  a  pointer ?   */
140
141 #define ISPTR(x)  (((x) & N_TMASK) == (DT_PTR << N_BTSHFT))
142
143         /*   Is  x  a  function ?  */
144
145 #define ISFCN(x)  (((x) & N_TMASK) == (DT_FCN << N_BTSHFT))
146
147         /*   Is  x  an  array ?   */
148
149 #define ISARY(x)  (((x) & N_TMASK) == (DT_ARY << N_BTSHFT))
150
151         /* Is x a structure, union, or enumeration TAG? */
152
153 #define ISTAG(x)  ((x) == C_STRTAG || (x) == C_UNTAG || (x) == C_ENTAG)
154
155 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(DT_PTR<<N_BTSHFT)|(x&N_BTMASK))
156
157 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
158
159 /*
160  *      AUXILIARY ENTRY FORMAT
161  */
162
163 union auxent
164 {
165         struct
166         {
167                 long            x_tagndx;       /* str, un, or enum tag indx */
168                 union
169                 {
170                         struct
171                         {
172                                 unsigned short  x_lnno; /* declaration line */
173                                                         /* number */
174                                 unsigned short  x_size; /* str, union, array */
175                                                         /* size */
176                         } x_lnsz;
177                         long    x_fsize;        /* size of function */
178                 } x_misc;
179                 union
180                 {
181                         struct                  /* if ISFCN, tag, or .bb */
182                         {
183                                 long    x_lnnoptr;      /* ptr to fcn line # */
184                                 long    x_endndx;       /* entry ndx past */
185                                                         /* block end */
186                         }       x_fcn;
187                         struct                  /* if ISARY, up to 4 dimen. */
188                         {
189                                 unsigned short  x_dimen[DIMNUM];
190                         }       x_ary;
191                 }               x_fcnary;
192                 unsigned short  x_tvndx;                /* tv index */
193         }       x_sym;
194         struct
195         {
196                 char    x_fname[FILNMLEN];
197         }       x_file;
198         struct
199         {
200                 long            x_scnlen;       /* section length */
201                 unsigned short  x_nreloc;       /* number of reloc entries */
202                 unsigned short  x_nlinno;       /* number of line numbers */
203         }       x_scn;
204
205         struct
206         {
207                 long            x_tvfill;       /* tv fill value */
208                 unsigned short  x_tvlen;        /* length of .tv */
209                 unsigned short  x_tvran[2];     /* tv range */
210         }       x_tv;   /* info about .tv section (in auxent of symbol .tv)) */
211 };
212
213 #define SYMENT  struct syment
214 #define SYMESZ  18      /* sizeof(SYMENT) */
215
216 #define AUXENT  union auxent
217 #define AUXESZ  18      /* sizeof(AUXENT) */
218
219 /*      Defines for "special" symbols   */
220
221 #define _ETEXT  "etext"
222 #define _EDATA  "edata"
223 #define _END    "end"
224 #define _START  "_start"
225
226 #ifdef  __cplusplus
227 }
228 #endif
229
230 #endif  /* _SYMS_H */