home *** CD-ROM | disk | FTP | other *** search
- /* bc-emit.h - declare entry points for producing object files of bytecodes. */
-
- /* Internal format of symbol table for the object file. */
- struct bc_sym
- {
- /* Private copy separately malloc'd. */
- char *name;
-
- /* Symbol has a defined value. */
- unsigned int defined:1;
-
- /* Symbol has been globalized. */
- unsigned int global:1;
-
- /* Symbol is common. */
- unsigned int common:1;
-
- /* Value if defined. */
- unsigned long int val;
-
- /* Used in internal symbol table structure. */
- struct bc_sym *next;
- };
-
-
- /* List of symbols defined in a particular segment. */
- struct bc_segsym
- {
- struct bc_sym *sym;
- struct bc_segsym *next;
- };
-
-
- /* List of relocations needed in a particular segment. */
- struct bc_segreloc
- {
- /* Offset of datum to be relocated. */
- unsigned int offset;
-
- /* Symbol to be relocated by. */
- struct bc_sym *sym;
-
- struct bc_segreloc *next;
- };
-
-
- /* Segment of an object file. */
- struct bc_seg
- {
- /* Size allocated to contents. */
- unsigned int alloc;
-
- /* Pointer to base of contents. */
- char *data;
-
- /* Actual size of contents. */
- unsigned int size;
-
- /* List of symbols defined in this segment. */
- struct bc_segsym *syms;
-
- /* List of relocations for this segment. */
- struct bc_segreloc *relocs;
- };
-
-
- /* Anonymous bytecode label within a single function. */
- struct bc_label
- {
- /* Offset of label from start of segment. */
- unsigned int offset;
-
- /* True when offset is valid. */
- unsigned int defined:1;
-
- /* Unique bytecode ID, used to determine innermost
- block containment */
- int uid;
-
- /* Next node in list */
- struct bc_label *next;
- };
-
-
- /* Reference to a bc_label; a list of all such references is kept for
- the function, then when it is finished they are backpatched to
- contain the correct values. */
-
- struct bc_labelref
- {
- /* Label referenced. */
- struct bc_label *label;
-
- /* Code offset of reference. */
- unsigned int offset;
-
- /* Next labelref in list */
- struct bc_labelref *next;
- };
-
-
-
- extern void bc_initialize();
- extern int bc_begin_function();
- extern char *bc_emit_trampoline();
- extern void bc_emit_bytecode();
- extern void bc_emit_bytecode_const();
- extern struct bc_label *bc_get_bytecode_label();
- extern int bc_emit_bytecode_labeldef();
- extern void bc_emit_bytecode_labelref();
- extern void bc_emit_code_labelref();
- extern char *bc_end_function();
- extern void bc_align_const();
- extern void bc_emit_const();
- extern void bc_emit_const_skip();
- extern int bc_emit_const_labeldef();
- extern void bc_emit_const_labelref();
- extern void bc_align_data();
- extern void bc_emit_data();
- extern void bc_emit_data_skip();
- extern int bc_emit_data_labeldef();
- extern void bc_emit_data_labelref();
- extern int bc_define_pointer ();
- extern int bc_emit_common();
- extern void bc_globalize_label();
- extern void bc_text();
- extern void bc_data();
- extern void bc_align();
- extern void bc_emit();
- extern void bc_emit_skip();
- extern int bc_emit_labeldef();
- extern void bc_emit_labelref();
- extern void bc_write_file();
-