Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/cddl/contrib/opensolaris/head/syms.h
39483 views
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 */
231
232