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 #ifndef __UNWIND_PRODUCER_H
00039 #define __UNWIND_PRODUCER_H
00040
00041
00042 typedef struct __unw_format_r1_struct {
00043 char _fix[1];
00044 } __unw_format_r1_t;
00045 typedef struct __unw_format_r2_struct {
00046 char _fix[2];
00047 char _var[1];
00048 } __unw_format_r2_t;
00049 typedef struct __unw_format_r3_struct {
00050 char _fix[1];
00051 char _var[1];
00052 } __unw_format_r3_t;
00053 typedef struct __unw_format_p1_struct {
00054 char _fix[1];
00055 } __unw_format_p1_t;
00056 typedef struct __unw_format_p2_struct {
00057 char _fix[2];
00058 } __unw_format_p2_t;
00059 typedef struct __unw_format_p3_struct {
00060 char _fix[2];
00061 } __unw_format_p3_t;
00062 typedef struct __unw_format_p4_struct {
00063 char _fix[1];
00064 char _var[1];
00065 } __unw_format_p4_t;
00066 typedef struct __unw_format_p5_struct {
00067 char _fix[4];
00068 } __unw_format_p5_t;
00069 typedef struct __unw_format_p6_struct {
00070 char _fix[1];
00071 } __unw_format_p6_t;
00072 typedef struct __unw_format_p7_struct {
00073 char _fix[1];
00074 char _var[1];
00075 } __unw_format_p7_t;
00076 typedef struct __unw_format_p8_struct {
00077 char _fix[2];
00078 char _var[1];
00079 } __unw_format_p8_t;
00080 typedef struct __unw_format_p9_struct {
00081 char _fix[3];
00082 } __unw_format_p9_t;
00083 typedef struct __unw_format_p10_struct {
00084 char _fix[3];
00085 } __unw_format_p10_t;
00086 typedef struct __unw_format_b1_struct {
00087 char _fix[1];
00088 } __unw_format_b1_t;
00089 typedef struct __unw_format_b2_struct {
00090 char _fix[1];
00091 char _var[1];
00092 } __unw_format_b2_t;
00093 typedef struct __unw_format_b3_struct {
00094 char _fix[1];
00095 char _var[1];
00096 } __unw_format_b3_t;
00097 typedef struct __unw_format_b4_struct {
00098 char _fix[1];
00099 char _var[1];
00100 } __unw_format_b4_t;
00101 typedef struct __unw_format_x1_struct {
00102 char _fix[2];
00103 char _var[2];
00104 } __unw_format_x1_t;
00105 typedef struct __unw_format_x2_struct {
00106 char _fix[3];
00107 char _var[1];
00108 } __unw_format_x2_t;
00109 typedef struct __unw_format_x3_struct {
00110 char _fix[3];
00111 char _var[2];
00112 } __unw_format_x3_t;
00113 typedef struct __unw_format_x4_struct {
00114 char _fix[4];
00115 char _var[1];
00116 } __unw_format_x4_t;
00117
00118
00119 #define __UNW_TABLE_ENTRIES_SIZE 0x80
00120 extern __unw_table_entry_t *_unwind_table;
00121 extern __uint64_t _unwind_table_total_size;
00122 extern __uint64_t _unwind_table_size;
00123
00124 extern __unw_table_entry_t _current_unwind_table_entry;
00125
00126
00127 #define __UNW_INFO_SIZE 0x100000
00128 extern __unw_info_t *_unwind_info;
00129 extern __uint64_t _unwind_info_total_size;
00130 extern __uint64_t _unwind_info_size;
00131
00132 #define __UNW_CURRENT_INFO_SIZE 0x400
00133 extern __unw_info_t *_current_unwind_info;
00134 extern __uint64_t _current_unwind_info_total_size;
00135 extern __uint64_t _current_unwind_info_size;
00136
00137
00138 extern __uint64_t _current_procedure_size;
00139 extern __uint64_t _current_procedure_total_size;
00140 extern __uint64_t _current_region_total_size;
00141 extern __uint32_t _current_region_id;
00142 enum { __UNW_UNDEF, __UNW_PROLOGUE, __UNW_BODY };
00143
00144
00145 extern __uint32_t _ehandler;
00146 extern __uint32_t _uhandler;
00147
00148
00149 extern __unw_addr_t _personality;
00150
00151
00152 #define __UNW_LANG_SPEC_SIZE 0x400
00153 extern void *_lang_spec_data;
00154 extern __uint64_t _lang_spec_data_size;
00155 extern __uint64_t _lang_spec_data_total_size;
00156
00157
00158 extern void *_imask;
00159 extern __uint64_t _imask_size;
00160 extern __uint64_t _imask_total_size;
00161
00162
00163 #define __UNW_ENCODING_SIZE 0x50
00164
00165
00166 __unw_error_t unwind_info_add_desc(__uint64_t, char *);
00167 __unw_error_t unwind_info_set_imask(__unw_info_t *, __uint32_t,
00168 __uint64_t);
00169 __unw_error_t unwind_info_get_imask(__unw_info_t *, __uint32_t *,
00170 __uint64_t);
00171 __unw_error_t unwind_info_add_imask(__unw_info_t *);
00172
00173
00174
00175 typedef enum {
00176 __UNW_R4,
00177 __UNW_R5,
00178 __UNW_R6,
00179 __UNW_R7,
00180 __UNW_F2,
00181 __UNW_F3,
00182 __UNW_F4,
00183 __UNW_F5,
00184 __UNW_F16,
00185 __UNW_F17,
00186 __UNW_F18,
00187 __UNW_F19,
00188 __UNW_F20,
00189 __UNW_F21,
00190 __UNW_F22,
00191 __UNW_F23,
00192 __UNW_F24,
00193 __UNW_F25,
00194 __UNW_F26,
00195 __UNW_F27,
00196 __UNW_F28,
00197 __UNW_F29,
00198 __UNW_F30,
00199 __UNW_F31,
00200 __UNW_B1,
00201 __UNW_B2,
00202 __UNW_B3,
00203 __UNW_B4,
00204 __UNW_B5,
00205 __UNW_PRED,
00206 __UNW_PSP,
00207 __UNW_PRIUNAT,
00208 __UNW_RP,
00209 __UNW_BSP,
00210 __UNW_BSPSTORE,
00211 __UNW_RNAT,
00212 __UNW_UNAT,
00213 __UNW_FPSR,
00214 __UNW_PFS,
00215 __UNW_LC,
00216 __UNW_UNDEFINED_REG
00217 } __UNW_REG_TYPE;
00218
00219 #endif