home *** CD-ROM | disk | FTP | other *** search
/ OpenStep (Enterprise) / OpenStepENTCD.toast / OEDEV / GNUSRC.Z / bc-emit.h < prev    next >
C/C++ Source or Header  |  1993-09-22  |  3KB  |  134 lines

  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();
  134.