source: trunk/third/gcc/bc-emit.h @ 8834

Revision 8834, 2.9 KB checked in by ghudson, 28 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r8833, which included commits to RCS files with non-trunk default branches.
Line 
1/* bc-emit.h - declare entry points for producing object files of bytecodes. */
2
3/* Internal format of symbol table for the object file. */
4struct bc_sym
5{
6  /* Private copy separately malloc'd. */
7  char *name;
8
9  /* Symbol has a defined value. */
10  unsigned int defined:1;
11
12  /* Symbol has been globalized. */
13  unsigned int global:1;
14
15  /* Symbol is common. */
16  unsigned int common:1;
17
18  /* Value if defined. */
19  unsigned long int val;
20
21  /* Used in internal symbol table structure. */
22  struct bc_sym *next;
23};
24
25
26/* List of symbols defined in a particular segment. */
27struct bc_segsym
28{
29  struct bc_sym *sym;
30  struct bc_segsym *next;
31};
32
33
34/* List of relocations needed in a particular segment. */
35struct bc_segreloc
36{
37  /* Offset of datum to be relocated. */
38  unsigned int offset;
39
40  /* Symbol to be relocated by. */
41  struct bc_sym *sym;
42
43  struct bc_segreloc *next;
44};
45
46
47/* Segment of an object file. */
48struct bc_seg
49{
50  /* Size allocated to contents. */
51  unsigned int alloc;
52
53  /* Pointer to base of contents. */
54  char *data;
55
56  /* Actual size of contents. */
57  unsigned int size;
58
59  /* List of symbols defined in this segment. */
60  struct bc_segsym *syms;
61
62  /* List of relocations for this segment. */
63  struct bc_segreloc *relocs;
64};
65
66
67/* Anonymous bytecode label within a single function. */
68struct bc_label
69{
70  /* Offset of label from start of segment. */
71  unsigned int offset;
72
73  /* True when offset is valid. */
74  unsigned int defined:1;
75
76  /* Unique bytecode ID, used to determine innermost
77     block containment */
78  int uid;
79
80  /* Next node in list */
81  struct bc_label *next;
82};
83
84
85/* Reference to a bc_label; a list of all such references is kept for
86   the function, then when it is finished they are backpatched to
87   contain the correct values. */
88
89struct bc_labelref
90{
91  /* Label referenced. */
92  struct bc_label *label;
93
94  /* Code offset of reference. */
95  unsigned int offset;
96
97  /* Next labelref in list */
98  struct bc_labelref *next;
99};
100
101
102
103extern void bc_initialize();
104extern int bc_begin_function();
105extern char *bc_emit_trampoline();
106extern void bc_emit_bytecode();
107extern void bc_emit_bytecode_const();
108extern struct bc_label *bc_get_bytecode_label();
109extern int bc_emit_bytecode_labeldef();
110extern void bc_emit_bytecode_labelref();
111extern void bc_emit_code_labelref();
112extern char *bc_end_function();
113extern void bc_align_const();
114extern void bc_emit_const();
115extern void bc_emit_const_skip();
116extern int bc_emit_const_labeldef();
117extern void bc_emit_const_labelref();
118extern void bc_align_data();
119extern void bc_emit_data();
120extern void bc_emit_data_skip();
121extern int bc_emit_data_labeldef();
122extern void bc_emit_data_labelref();
123extern int bc_define_pointer ();
124extern int bc_emit_common();
125extern void bc_globalize_label();
126extern void bc_text();
127extern void bc_data();
128extern void bc_align();
129extern void bc_emit();
130extern void bc_emit_skip();
131extern int bc_emit_labeldef();
132extern void bc_emit_labelref();
133extern void bc_write_file();
Note: See TracBrowser for help on using the repository browser.