Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_fixcpp/sys/src/cmd/vl/l.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include	<u.h>
2
#include	<libc.h>
3
#include	<bio.h>
4
#include	"../vc/v.out.h"
5
#include	"../8l/elf.h"
6
 
7
#ifndef	EXTERN
8
#define	EXTERN	extern
9
#endif
10
 
11
#define	LIBNAMELEN	300
12
 
13
typedef	struct	Adr	Adr;
14
typedef	struct	Sym	Sym;
15
typedef	struct	Autom	Auto;
16
typedef	struct	Prog	Prog;
17
typedef	struct	Optab	Optab;
18
typedef	struct	Oprang	Oprang;
19
typedef	uchar	Opcross[32][2][32];
20
typedef	struct	Count	Count;
21
 
22
#define	P		((Prog*)0)
23
#define	S		((Sym*)0)
24
#define	TNAME		(curtext&&curtext->from.sym?curtext->from.sym->name:noname)
25
 
26
struct	Adr
27
{
28
	union
29
	{
30
		long	u0offset;
31
		char*	u0sval;
32
		Ieee*	u0ieee;
33
	} u0;
34
	union
35
	{
36
		Auto*	u1autom;
37
		Sym*	u1sym;
38
	} u1;
39
	char	type;
40
	char	reg;
41
	char	name;
42
	char	class;
43
};
44
 
45
#define	offset	u0.u0offset
46
#define	sval	u0.u0sval
47
#define	ieee	u0.u0ieee
48
 
49
#define	autom	u1.u1autom
50
#define	sym	u1.u1sym
51
 
52
struct	Prog
53
{
54
	Adr	from;
55
	Adr	to;
56
	union
57
	{
58
		long	u0regused;
59
		Prog*	u0forwd;
60
	} u0;
61
	Prog*	cond;
62
	Prog*	link;
63
	vlong	pc;
64
	long	line;
65
	uchar	mark;
66
	uchar	optab;
67
	char	as;
68
	char	reg;
69
};
70
#define	regused	u0.u0regused
71
#define	forwd	u0.u0forwd
72
 
73
struct	Sym
74
{
75
	char	*name;
76
	short	type;
77
	short	version;
78
	short	become;
79
	short	frame;
80
	vlong	value;
81
	Sym*	link;
82
};
83
struct	Autom
84
{
85
	Sym*	asym;
86
	Auto*	link;
87
	long	aoffset;
88
	short	type;
89
};
90
struct	Optab
91
{
92
	char	as;
93
	char	a1;
94
	char	a2;
95
	char	a3;
96
	char	type;
97
	char	size;
98
	char	param;
99
};
100
struct	Oprang
101
{
102
	Optab*	start;
103
	Optab*	stop;
104
};
105
struct	Count
106
{
107
	long	count;
108
	long	outof;
109
};
110
 
111
enum
112
{
113
	STEXT		= 1,
114
	SDATA,
115
	SBSS,
116
	SDATA1,
117
	SXREF,
118
	SLEAF,
119
	SFILE,
120
	SCONST,
121
	SSTRING,
122
 
123
	C_NONE		= 0,
124
	C_REG,
125
	C_FREG,
126
	C_FCREG,
127
	C_MREG,
128
	C_HI,
129
	C_LO,
130
	C_ZCON,
131
	C_SCON,
132
	C_ADD0CON,
133
	C_AND0CON,
134
	C_ADDCON,
135
	C_ANDCON,
136
	C_UCON,
137
	C_LCON,
138
	C_SACON,
139
	C_SECON,
140
	C_LACON,
141
	C_LECON,
142
	C_SBRA,
143
	C_LBRA,
144
	C_SAUTO,
145
	C_SEXT,
146
	C_LAUTO,
147
	C_LEXT,
148
	C_ZOREG,
149
	C_SOREG,
150
	C_LOREG,
151
	C_GOK,
152
 
153
	NSCHED		= 20,
154
 
155
/* mark flags */
156
	FOLL		= 1<<0,
157
	LABEL		= 1<<1,
158
	LEAF		= 1<<2,
159
	SYNC		= 1<<3,
160
	BRANCH		= 1<<4,
161
	LOAD		= 1<<5,
162
	FCMP		= 1<<6,
163
	NOSCHED		= 1<<7,
164
 
165
	BIG		= 32766,
166
	STRINGSZ	= 200,
167
	NHASH		= 10007,
168
	NHUNK		= 100000,
169
	MINSIZ		= 64,
170
	NENT		= 100,
171
	MAXIO		= 8192,
172
	MAXHIST		= 20,				/* limit of path elements for history symbols */
173
};
174
 
175
EXTERN union
176
{
177
	struct
178
	{
179
		uchar	obuf[MAXIO];			/* output buffer */
180
		uchar	ibuf[MAXIO];			/* input buffer */
181
	} u;
182
	char	dbuf[1];
183
} buf;
184
 
185
#define	cbuf	u.obuf
186
#define	xbuf	u.ibuf
187
 
188
EXTERN	long	HEADR;			/* length of header */
189
EXTERN	int	HEADTYPE;		/* type of header */
190
EXTERN	vlong	INITDAT;		/* data location */
191
EXTERN	vlong	INITRND;		/* data round above text location */
192
EXTERN	vlong	INITTEXT;		/* text location */
193
EXTERN	vlong	INITTEXTP;		/* text location (physical) */
194
EXTERN	char*	INITENTRY;		/* entry point */
195
EXTERN	long	autosize;
196
EXTERN	Biobuf	bso;
197
EXTERN	long	bsssize;
198
EXTERN	int	cbc;
199
EXTERN	uchar*	cbp;
200
EXTERN	int	cout;
201
EXTERN	Auto*	curauto;
202
EXTERN	Auto*	curhist;
203
EXTERN	Prog*	curp;
204
EXTERN	Prog*	curtext;
205
EXTERN	Prog*	datap;
206
EXTERN	long	datsize;
207
EXTERN	char	debug[128];
208
EXTERN	Prog*	etextp;
209
EXTERN	Prog*	firstp;
210
EXTERN	char	fnuxi4[4];	/* for 3l [sic] */
211
EXTERN	char	fnuxi8[8];
212
EXTERN	char*	noname;
213
EXTERN	Sym*	hash[NHASH];
214
EXTERN	Sym*	histfrog[MAXHIST];
215
EXTERN	int	histfrogp;
216
EXTERN	int	histgen;
217
EXTERN	char*	library[50];
218
EXTERN	char*	libraryobj[50];
219
EXTERN	int	libraryp;
220
EXTERN	int	xrefresolv;
221
EXTERN	char*	hunk;
222
EXTERN	char	inuxi1[1];
223
EXTERN	char	inuxi2[2];
224
EXTERN	char	inuxi4[4];
225
EXTERN	Prog*	lastp;
226
EXTERN	long	lcsize;
227
EXTERN	char	literal[32];
228
EXTERN	int	nerrors;
229
EXTERN	long	nhunk;
230
EXTERN	long	instoffset;
231
EXTERN	Opcross	opcross[10];
232
EXTERN	Oprang	oprange[ALAST];
233
EXTERN	char*	outfile;
234
EXTERN	vlong	pc;
235
EXTERN	uchar	repop[ALAST];
236
EXTERN	long	symsize;
237
EXTERN	Prog*	textp;
238
EXTERN	vlong	textsize;
239
EXTERN	long	thunk;
240
EXTERN	int	version;
241
EXTERN	char	xcmp[32][32];
242
EXTERN	Prog	zprg;
243
EXTERN	int	dtype;
244
EXTERN	int	little;
245
 
246
EXTERN	struct
247
{
248
	Count	branch;
249
	Count	fcmp;
250
	Count	load;
251
	Count	mfrom;
252
	Count	page;
253
	Count	jump;
254
	Count	store;
255
} nop;
256
 
257
extern	char*	anames[];
258
extern	Optab	optab[];
259
 
260
#pragma	varargck	type	"A"	int
261
#pragma	varargck	type	"D"	Adr*
262
#pragma	varargck	type	"N"	Adr*
263
#pragma	varargck	type	"P"	Prog*
264
#pragma	varargck	type	"S"	char*
265
 
266
#pragma	varargck	argpos	diag 1
267
 
268
int	Aconv(Fmt*);
269
int	Dconv(Fmt*);
270
int	Nconv(Fmt*);
271
int	Pconv(Fmt*);
272
int	Sconv(Fmt*);
273
int	aclass(Adr*);
274
void	addhist(long, int);
275
void	addlibpath(char*);
276
void	addnop(Prog*);
277
void	append(Prog*, Prog*);
278
void	asmb(void);
279
void	asmlc(void);
280
int	asmout(Prog*, Optab*, int);
281
void	asmsym(void);
282
vlong	atolwhex(char*);
283
Prog*	brloop(Prog*);
284
void	buildop(void);
285
void	buildrep(int, int);
286
void	cflush(void);
287
int	cmp(int, int);
288
void	cput(long);
289
int	compound(Prog*);
290
double	cputime(void);
291
void	datblk(long, long, int);
292
void	diag(char*, ...);
293
void	dodata(void);
294
void	doprof1(void);
295
void	doprof2(void);
296
long	entryvalue(void);
297
void	errorexit(void);
298
void	exchange(Prog*);
299
int	fileexists(char*);
300
int	find1(long, int);
301
char*	findlib(char*);
302
void	follow(void);
303
void	gethunk(void);
304
void	histtoauto(void);
305
double	ieeedtod(Ieee*);
306
long	ieeedtof(Ieee*);
307
int	isnop(Prog*);
308
void	ldobj(int, long, char*);
309
void	loadlib(void);
310
void	listinit(void);
311
Sym*	lookup(char*, int);
312
void	llput(vlong);
313
void	llputl(vlong);
314
void	lput(long);
315
void	lputl(long);
316
void	bput(long);
317
void	mkfwd(void);
318
void*	mysbrk(ulong);
319
void	names(void);
320
void	nocache(Prog*);
321
void	noops(void);
322
void	nopstat(char*, Count*);
323
void	nuxiinit(void);
324
void	objfile(char*);
325
int	ocmp(const void*, const void*);
326
long	opirr(int);
327
Optab*	oplook(Prog*);
328
long	oprrr(int);
329
void	patch(void);
330
void	prasm(Prog*);
331
void	prepend(Prog*, Prog*);
332
Prog*	prg(void);
333
int	pseudo(Prog*);
334
void	putsymb(char*, int, long, int);
335
long	regoff(Adr*);
336
int	relinv(int);
337
vlong	rnd(vlong, long);
338
void	sched(Prog*, Prog*);
339
void	span(void);
340
void	strnput(char*, int);
341
void	undef(void);
342
void	wput(long);
343
void	wputl(long);
344
void	xdefine(char*, int, long);
345
void	xfol(Prog*);
346
void	xfol(Prog*);