BSD 3 development
[unix-history] / usr / src / cmd / as / assyms.h
CommitLineData
629188b5
JR
1/* Copyright (c) 1979 Regents of the University of California */
2/*
3 * To speed up walks through symbols defined in a particular
4 * segment, we buil up a table of pointers into the symbol table
5 * and a table of delimiters for each segment. The delimiter for
6 * the particular segment points to the first word in that segment.
7 */
8
9struct symtab **symptrs; /*dynamically allocated*/
10struct symtab **symdelim[NLOC + NLOC + 1];
11struct symtab *hshtab[NHASH];
12struct symtab **symptrub;
13 int nsyms; /*number in the symbol table*/
14 int njxxx; /*the number of jxxx entries in the table*/
15 int nforgotten; /*how many entries erroneously entered*/
16 int nlabels; /*how many labels in the symbol table*/
17 int hshused; /*how many hash slots used*/
18
19#define SEGITERATE(segno, start, end, copointer, walkpointer, ubpointer, direction) \
20 for(copointer = start == 0? symdelim[segno]:start,\
21 ubpointer = end == 0 ? *symdelim[segno+1] : *(symdelim[segno]-1),\
22 walkpointer = *copointer;\
23 walkpointer != ubpointer;\
24 walkpointer = * direction copointer)
25
26#define SYMITERATE(copointer, walkpointer) \
27 for(copointer = symptrs, \
28 walkpointer = *copointer; \
29 copointer < symptrub; \
30 walkpointer = * ++ copointer)
31/*
32 * Symbols are allocated in non contiguous chunks by extending
33 * the data area. This way, it is extremely easy to
34 * allow virtual memory temporary files, change the length
35 * of NCPS, and allows for a much more flexible storage
36 * allocation
37 */
38
39#define SYMDALLOP 200
40struct allocbox{
41 struct allocbox *nextalloc;
42 struct symtab symslots[SYMDALLOP];
43 char symnames[SYMDALLOP * NCPS];
44};
45
46extern struct allocbox *allochead;
47extern struct allocbox *alloctail;
48extern struct symtab *nextsym;
49extern struct allocbox *newbox;
50extern char *namebuffer;
51extern int symsleft;
52
53#define ALLOCQTY sizeof (struct allocbox)
54/*
55 * Iterate through all symbols in the symbol table in declaration
56 * order
57 */
58#define DECLITERATE(allocwalk, walkpointer, ubpointer) \
59 for(allocwalk = allochead; \
60 allocwalk != 0; \
61 allocwalk = allocwalk->nextalloc) \
62 for (walkpointer = &allocwalk->symslots[0],\
63 ubpointer = &allocwalk->symslots[SYMDALLOP], \
64 ubpointer = ubpointer > ( (struct symtab *)alloctail) \
65 ? nextsym : ubpointer ;\
66 walkpointer < ubpointer; \
67 walkpointer++ )