Annotation of GNUtools/cc/bc-emit.h, revision 1.1.1.1

1.1       root        1: /* bc-emit.h - declare entry points for producing object files of bytecodes. */
                      2: 
                      3: /* Internal format of symbol table for the object file. */
                      4: struct 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. */
                     27: struct 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. */
                     35: struct 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. */
                     48: struct 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. */
                     68: struct 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: 
                     89: struct 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: 
                    103: extern void bc_initialize();
                    104: extern int bc_begin_function();
                    105: extern char *bc_emit_trampoline();
                    106: extern void bc_emit_bytecode();
                    107: extern void bc_emit_bytecode_const();
                    108: extern struct bc_label *bc_get_bytecode_label();
                    109: extern int bc_emit_bytecode_labeldef();
                    110: extern void bc_emit_bytecode_labelref();
                    111: extern void bc_emit_code_labelref();
                    112: extern char *bc_end_function();
                    113: extern void bc_align_const();
                    114: extern void bc_emit_const();
                    115: extern void bc_emit_const_skip();
                    116: extern int bc_emit_const_labeldef();
                    117: extern void bc_emit_const_labelref();
                    118: extern void bc_align_data();
                    119: extern void bc_emit_data();
                    120: extern void bc_emit_data_skip();
                    121: extern int bc_emit_data_labeldef();
                    122: extern void bc_emit_data_labelref();
                    123: extern int bc_define_pointer ();
                    124: extern int bc_emit_common();
                    125: extern void bc_globalize_label();
                    126: extern void bc_text();
                    127: extern void bc_data();
                    128: extern void bc_align();
                    129: extern void bc_emit();
                    130: extern void bc_emit_skip();
                    131: extern int bc_emit_labeldef();
                    132: extern void bc_emit_labelref();
                    133: extern void bc_write_file();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.