]> gcc.gnu.org Git - gcc.git/blame - gcc/bc-emit.h
(USER_LABEL_PREFIX): Define.
[gcc.git] / gcc / bc-emit.h
CommitLineData
bebbbdbb
JB
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\f
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();
This page took 0.166162 seconds and 5 git commands to generate.