00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef irbdata_defs_INCLUDED
00043 #define irbdata_defs_INCLUDED
00044
00045
00046
00047
00048 #ifndef symtab_idx_INCLUDED
00049 #include "symtab_idx.h"
00050 #endif
00051
00052
00053 struct INITO {
00054 ST_IDX st_idx;
00055 INITV_IDX val;
00056
00057 void Verify (UINT level) const;
00058 void Print (FILE* f) const;
00059 };
00060
00061
00062
00063
00064 enum INITVKIND {
00065 INITVKIND_UNK = 0,
00066 INITVKIND_SYMOFF = 1,
00067 INITVKIND_ZERO = 2,
00068 INITVKIND_ONE = 3,
00069 INITVKIND_VAL = 4,
00070 INITVKIND_BLOCK = 5,
00071 INITVKIND_PAD = 6,
00072 INITVKIND_SYMDIFF = 7,
00073 INITVKIND_SYMDIFF16 = 8,
00074 #ifdef TARG_IA64
00075 INITVKIND_LABEL = 9,
00076 INITVKIND_SYMIPLT = 10
00077 #else
00078 INITVKIND_LABEL = 9
00079 #endif
00080 };
00081
00082 #ifdef KEY
00083 enum INITVFLAGS {
00084 INITVFLAGS_UNDEFINED = 0,
00085 INITVFLAGS_ACTION_REC,
00086 INITVFLAGS_TYPEINFO,
00087 INITVFLAGS_EH_SPEC,
00088 INITVFLAGS_SUMMARIZED,
00089 INITVFLAGS_UPDATED
00090 };
00091 #endif // KEY
00092
00093 enum INITVLABELFLAGS {
00094 INITVLABELFLAGS_FIRST = 0,
00095
00096 INITVLABELFLAGS_UNUSED = 0,
00097 INITVLABELFLAGS_VALUES_FIRST,
00098 INITVLABELFLAGS_VALUES_PLUS,
00099 INITVLABELFLAGS_VALUES_MINUS,
00100 INITVLABELFLAGS_VALUES_LAST,
00101
00102 INITVLABELFLAGS_LAST = INITVLABELFLAGS_VALUES_LAST,
00103 };
00104
00105 struct INITV
00106 {
00107 INITV_IDX next;
00108 INITVKIND kind : 16;
00109 mUINT16 repeat1;
00110
00111 union {
00112
00113 struct {
00114 ST_IDX st;
00115 mINT32 ofst;
00116 } sto;
00117
00118
00119 struct {
00120 LABEL_IDX lab;
00121 mINT16 flags;
00122 mTYPE_ID mtype;
00123 } lab;
00124
00125 struct {
00126 LABEL_IDX lab1;
00127 ST_IDX st2;
00128 } stdiff;
00129
00130 struct {
00131 union {
00132 TCON_IDX tc;
00133 mTYPE_ID mtype;
00134
00135 } u;
00136 mUINT32 repeat2;
00137 } tcval;
00138
00139 struct {
00140 INITV_IDX blk;
00141 #ifdef KEY
00142 mINT32 flags;
00143 #else
00144 mINT32 unused;
00145 #endif // KEY
00146 } blk;
00147
00148 struct {
00149 mINT32 pad;
00150 mINT32 unused;
00151 } pad;
00152 } u;
00153
00154 ST_IDX St () const { return u.sto.st; }
00155 INT32 Ofst () const { return u.sto.ofst; }
00156
00157 LABEL_IDX Lab () const { return u.lab.lab; }
00158 INT16 Lab_flags () const { return u.lab.flags; }
00159 mTYPE_ID Lab_mtype () const { return u.lab.mtype; }
00160
00161 LABEL_IDX Lab1 () const { return u.stdiff.lab1; }
00162 ST_IDX St2 () const { return u.stdiff.st2; }
00163
00164 TCON_IDX Tc () const { return u.tcval.u.tc; }
00165 TYPE_ID Mtype () const { return u.tcval.u.mtype; }
00166 UINT32 Repeat2 () const { return u.tcval.repeat2; }
00167
00168 INITV_IDX Blk () const { return u.blk.blk; }
00169 INT32 Pad () const { return u.pad.pad; }
00170
00171 void Verify (UINT level) const;
00172 };
00173
00174
00175 #endif