home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / uccs / root.13 / usr / include / dwarf.h next >
C/C++ Source or Header  |  1998-08-19  |  9KB  |  231 lines

  1. /*
  2.  * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3.  *                                                                         
  4.  *        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5.  *                   SANTA CRUZ OPERATION INC.                             
  6.  *                                                                         
  7.  *   The copyright notice above does not evidence any actual or intended   
  8.  *   publication of such source code.                                      
  9.  */
  10.  
  11. #ident    "@(#)sgs-head:common/head/dwarf.h    1.7"
  12.  
  13. #ifndef DWARF_H
  14. #define DWARF_H
  15.  
  16. /* dwarf.h - manifest constants used in the .debug section of ELF files */
  17.  
  18.  
  19. /* the "tag" - the first short of any legal record */
  20.  
  21. #define    TAG_padding            0x0000
  22. #define    TAG_array_type            0x0001
  23. #define    TAG_class_type            0x0002
  24. #define    TAG_entry_point            0x0003
  25. #define    TAG_enumeration_type        0x0004
  26. #define    TAG_formal_parameter        0x0005
  27. #define    TAG_global_subroutine        0x0006
  28. #define    TAG_global_variable        0x0007
  29. #define    TAG_label            0x000a
  30. #define    TAG_lexical_block        0x000b
  31. #define    TAG_local_variable        0x000c
  32. #define    TAG_member            0x000d
  33. #define    TAG_pointer_type        0x000f
  34. #define    TAG_reference_type        0x0010
  35. #define    TAG_compile_unit        0x0011
  36. #define    TAG_string_type            0x0012
  37. #define    TAG_structure_type        0x0013
  38. #define    TAG_subroutine            0x0014
  39. #define    TAG_subroutine_type        0x0015
  40. #define TAG_typedef            0x0016
  41. #define    TAG_union_type            0x0017
  42. #define    TAG_unspecified_parameters    0x0018
  43. #define    TAG_variant            0x0019
  44. #define    TAG_common_block        0x001a
  45. #define    TAG_common_inclusion        0x001b
  46. #define    TAG_inheritance            0x001c
  47. #define    TAG_inlined_subroutine        0x001d
  48. #define    TAG_module            0x001e
  49. #define    TAG_ptr_to_member_type        0x001f
  50. #define    TAG_set_type            0x0020
  51. #define    TAG_subrange_type        0x0021
  52. #define    TAG_with_stmt            0x0022
  53. #define    TAG_lo_user            0x8000
  54. #define    TAG_hi_user            0xffff
  55.  
  56. /* old name for compatibility */
  57. #define TAG_source_file            TAG_compile_unit
  58.  
  59. /* attribute forms are encoded as part */
  60. /* of the attribute name and must fit */
  61. /* into 4 bits */
  62.  
  63. #define    FORM_MASK    0xf
  64.  
  65. #define    FORM_NONE    0x0    /* error */
  66. #define    FORM_ADDR    0x1    /* relocated address */
  67. #define    FORM_REF    0x2    /* reference to another .debug entry */
  68. #define    FORM_BLOCK2    0x3    /* block with 2-byte length */
  69. #define    FORM_BLOCK4    0x4    /* block with 4-byte length (unused) */
  70. #define    FORM_DATA2    0x5    /* 2 bytes */
  71. #define    FORM_DATA4    0x6    /* 4 bytes */
  72. #define    FORM_DATA8    0x7    /* 8 bytes (two 4-byte values) */
  73. #define    FORM_STRING    0x8    /* NUL-terminated string */
  74.  
  75.  
  76. /* attribute names, halfwords with low 4 bits indicating the form */
  77.  
  78. #define    AT_padding     (0x0000|FORM_NONE)    /* just padding */
  79. #define    AT_sibling     (0x0010|FORM_REF)    /* next owned declaration */
  80. #define    AT_location     (0x0020|FORM_BLOCK2)    /* location description */
  81. #define    AT_name         (0x0030|FORM_STRING)    /* symbol name */
  82. #define    AT_fund_type     (0x0050|FORM_DATA2)    /* fund type enum */
  83. #define    AT_mod_fund_type (0x0060|FORM_BLOCK2)    /* modifiers & fund type enum */
  84. #define    AT_user_def_type (0x0070|FORM_REF)    /* type entry */
  85. #define    AT_mod_u_d_type  (0x0080|FORM_BLOCK2)    /* modifiers & type entry ref */
  86. #define    AT_ordering     (0x0090|FORM_DATA2)    /* array row/column major */
  87. #define    AT_subscr_data     (0x00a0|FORM_BLOCK2)    /* list of array dim info */
  88. #define    AT_byte_size     (0x00b0|FORM_DATA4)    /* number bytes per instance */
  89. #define    AT_bit_offset     (0x00c0|FORM_DATA2)    /* number bits padding */
  90. #define    AT_bit_size     (0x00d0|FORM_DATA4)    /* number bits per instance */
  91. #define    AT_element_list     (0x00f0|FORM_BLOCK4)    /* list of enum data elements */
  92. #define    AT_stmt_list     (0x0100|FORM_DATA4)    /* offset in .line sect */
  93. #define    AT_low_pc     (0x0110|FORM_ADDR)    /* first machine instr */
  94. #define    AT_high_pc     (0x0120|FORM_ADDR)    /* beyond last machine instr */
  95. #define    AT_language     (0x0130|FORM_DATA4)    /* compiler enumeration */
  96. #define    AT_member     (0x0140|FORM_REF)    /* class description */
  97. #define    AT_discr     (0x0150|FORM_REF)    /* discriminant entry */
  98. #define    AT_discr_value     (0x0160|FORM_BLOCK2)    /* value of discr */
  99. #define    AT_string_length (0x0190|FORM_BLOCK2)    /* runtime string size */
  100. #define    AT_common_reference (0x01a0|FORM_REF)    /* referenced common block*/
  101. #define    AT_comp_dir     (0x01b0|FORM_STRING)    /* current working dir of compiler*/
  102. #define    AT_const_value    0x01c0        /* constant valued object - can have multiple forms*/
  103. #define    AT_containing_type     (0x01d0|FORM_REF)/* class containing ptr to member type*/
  104. #define    AT_default_value 0x01e0    /* default value of parameter -can have multiple forms */
  105. #define    AT_friends     (0x01f0|FORM_BLOCK2)    /* list of friends*/
  106. #define    AT_inline     (0x0200|FORM_STRING)    /* declaration of inlined function*/
  107. #define    AT_is_optional     (0x0210|FORM_STRING)    /* FORTRAN optional parameters*/
  108. #define    AT_lower_bound     0x0220    /* lower bound of subrange - can have multiple forms */
  109. #define    AT_program     (0x0230|FORM_STRING)    /* FORTRAN main program*/
  110. #define    AT_private     (0x0240|FORM_STRING)    /* prvivate class members*/
  111. #define    AT_producer     (0x0250|FORM_STRING)    /* compiler version and vendor */
  112. #define    AT_protected     (0x0260|FORM_STRING)    /* protected class members*/
  113. #define    AT_prototyped     (0x0270|FORM_STRING)    /* function is prototyped*/
  114. #define    AT_public     (0x0280|FORM_STRING)    /* public class members*/
  115. #define    AT_pure_virtual     (0x0290|FORM_STRING)    /* pure virtual member function*/
  116. #define    AT_return_addr    (0x02a0|FORM_BLOCK2)    /* where return addr is stored*/
  117. #define    AT_specification (0x02b0|FORM_REF)    /* ptr from inlined subroutine instance to declaration */
  118. #define    AT_start_scope     (0x02c0|FORM_DATA4)    /* scope of object begins after enclosing scope*/
  119. #define    AT_stride_size     (0x02e0|FORM_DATA4)    /* non-standard element size */
  120. #define    AT_upper_bound     0x02f0    /* upper bound of subrange - can have multiple forms */
  121. #define    AT_virtual     (0x0300|FORM_STRING)    /* virtual member function*/
  122. #define    AT_lo_user     0x2000
  123. #define    AT_hi_user     0x3ff0
  124.  
  125.  
  126.  
  127. /* atoms which compose a location description; must fit in a byte */
  128.  
  129. #define    OP_UNK        0x00    /* error */
  130. #define    OP_REG        0x01    /* push register (number) */
  131. #define    OP_BASEREG    0x02    /* push value of register (number) */
  132. #define    OP_ADDR        0x03    /* push address (relocated address) */
  133. #define    OP_CONST    0x04    /* push constant (number) */
  134. #define    OP_DEREF2    0x05    /* pop, deref and push 2 bytes (as a long) */
  135. #define    OP_DEREF    0x06    /* pop, deref and push 4 bytes (as a long) */
  136. #define    OP_ADD        0x07    /* pop top 2 items, add, push result */
  137.  
  138. /* old name for compatibility */
  139. #define OP_DEREF4    OP_DEREF
  140.  
  141. /* fundamental types; must fit in two bytes */
  142. #define    FT_none            0x0000    /* error */
  143. #define    FT_char            0x0001    /* "plain" char */
  144. #define    FT_signed_char        0x0002
  145. #define    FT_unsigned_char    0x0003
  146. #define    FT_short        0x0004    /* "plain" short */
  147. #define    FT_signed_short        0x0005
  148. #define    FT_unsigned_short    0x0006
  149. #define    FT_integer        0x0007    /* "plain" integer */
  150. #define    FT_signed_integer    0x0008
  151. #define    FT_unsigned_integer    0x0009
  152. #define    FT_long            0x000a    /* "plain" long */
  153. #define    FT_signed_long        0x000b
  154. #define    FT_unsigned_long    0x000c
  155. #define    FT_pointer        0x000d    /* (void *) */
  156. #define    FT_float        0x000e
  157. #define    FT_dbl_prec_float    0x000f
  158. #define    FT_ext_prec_float    0x0010
  159. #define    FT_complex        0x0011
  160. #define    FT_dbl_prec_complex    0x0012
  161. #define    FT_void            0x0014
  162. #define    FT_boolean        0x0015
  163. #define    FT_ext_prec_complex    0x0016
  164. #define    FT_label        0x0017
  165. #define FT_long_long        0x0018
  166. #define FT_signed_long_long    0x0019
  167. #define FT_unsigned_long_long    0x001a
  168. #define    FT_lo_user        0x8000
  169. #define    FT_hi_user        0xffff
  170.  
  171.  
  172. /* type modifiers; must fit in a byte */
  173.  
  174. #define    MOD_none        0x00    /* error */
  175. #define    MOD_pointer_to        0x01
  176. #define    MOD_reference_to    0x02
  177. #define    MOD_const        0x03
  178. #define    MOD_volatile        0x04
  179. #define    MOD_lo_user        0x80
  180. #define    MOD_hi_user        0xff
  181.  
  182.  
  183. /* the "format" byte for array descriptions; formed from three */
  184. /* one-bit fields */
  185.  
  186. #define    FMT_FT    0        /* fundamental type */
  187. #define    FMT_UDT    1        /* user-defined type */
  188.  
  189. #define    FMT_CONST    0    /* 4-byte constant */
  190. #define    FMT_EXPR    1    /* block with 2-byte length (loc descr) */
  191.  
  192. #define    FMT_FT_C_C    ( (FMT_FT <<2) | (FMT_CONST<<1) | (FMT_CONST) )
  193. #define    FMT_FT_C_X    ( (FMT_FT <<2) | (FMT_CONST<<1) | (FMT_EXPR)  )
  194. #define    FMT_FT_X_C    ( (FMT_FT <<2) | (FMT_EXPR <<1) | (FMT_CONST) )
  195. #define    FMT_FT_X_X    ( (FMT_FT <<2) | (FMT_EXPR <<1) | (FMT_EXPR)  )
  196. #define    FMT_UT_C_C    ( (FMT_UDT<<2) | (FMT_CONST<<1) | (FMT_CONST) )
  197. #define    FMT_UT_C_X    ( (FMT_UDT<<2) | (FMT_CONST<<1) | (FMT_EXPR)  )
  198. #define    FMT_UT_X_C    ( (FMT_UDT<<2) | (FMT_EXPR <<1) | (FMT_CONST) )
  199. #define    FMT_UT_X_X    ( (FMT_UDT<<2) | (FMT_EXPR <<1) | (FMT_EXPR)  )
  200.  
  201. #define    FMT_ET        8    /* element type */
  202.  
  203.  
  204. /* ordering of arrays */
  205.  
  206. #define    ORD_row_major    0
  207. #define ORD_col_major    1
  208.  
  209. /* language - allocated 4 bytes, but should fit in 2*/
  210.  
  211. enum LANG {
  212.     LANG_UNK         = 0,
  213.     LANG_C89         = 0x0001,
  214.     LANG_C             = 0x0002,
  215.     LANG_ADA83         = 0x0003,
  216.     LANG_C_PLUS_PLUS     = 0x0004,
  217.     LANG_COBOL74         = 0x0005,
  218.     LANG_COBOL85         = 0x0006,
  219.     LANG_FORTRAN77         = 0x0007,
  220.     LANG_FORTRAN90         = 0x0008,
  221.     LANG_PASCAL83         = 0x0009,
  222.     LANG_MODULA2         = 0x000a,
  223.     LANG_LO_USER        = 0x8000,
  224.     LANG_HI_USER        = 0xffff
  225. };
  226.  
  227. /* old name for compatibility */
  228. #define    LANG_ANSI_C_V1        LANG_C89
  229.  
  230. #endif /* DWARF_H */
  231.