|
|
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();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.