diff options
author | Richard Henderson <rth@redhat.com> | 2001-05-11 23:17:31 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-05-11 23:17:31 -0700 |
commit | 5f2fa73083201b771a7c421a081824ffa90d7f19 (patch) | |
tree | b83ca930ae0749abba0dde179a269c1545a59ffd /libjava/exception.cc | |
parent | 817e741108999531687895c00045f1db798ea9e8 (diff) | |
download | gcc-5f2fa73083201b771a7c421a081824ffa90d7f19.zip gcc-5f2fa73083201b771a7c421a081824ffa90d7f19.tar.gz gcc-5f2fa73083201b771a7c421a081824ffa90d7f19.tar.bz2 |
exception.cc: Include unwind-pe.h.
* exception.cc: Include unwind-pe.h. Remove all pointer
encoding logic.
From-SVN: r41983
Diffstat (limited to 'libjava/exception.cc')
-rw-r--r-- | libjava/exception.cc | 169 |
1 files changed, 1 insertions, 168 deletions
diff --git a/libjava/exception.cc b/libjava/exception.cc index ff58be1..d734906 100644 --- a/libjava/exception.cc +++ b/libjava/exception.cc @@ -115,174 +115,7 @@ _Jv_Throw (jthrowable value) } -// ??? These ought to go somewhere else dwarf2 or dwarf2eh related. - -// Pointer encodings. -#define DW_EH_PE_absptr 0x00 -#define DW_EH_PE_omit 0xff - -#define DW_EH_PE_uleb128 0x01 -#define DW_EH_PE_udata2 0x02 -#define DW_EH_PE_udata4 0x03 -#define DW_EH_PE_udata8 0x04 -#define DW_EH_PE_sleb128 0x09 -#define DW_EH_PE_sdata2 0x0A -#define DW_EH_PE_sdata4 0x0B -#define DW_EH_PE_sdata8 0x0C -#define DW_EH_PE_signed 0x08 - -#define DW_EH_PE_pcrel 0x10 -#define DW_EH_PE_textrel 0x20 -#define DW_EH_PE_datarel 0x30 -#define DW_EH_PE_funcrel 0x40 - -static unsigned int -size_of_encoded_value (unsigned char encoding) -{ - switch (encoding & 0x07) - { - case DW_EH_PE_absptr: - return sizeof (void *); - case DW_EH_PE_udata2: - return 2; - case DW_EH_PE_udata4: - return 4; - case DW_EH_PE_udata8: - return 8; - } - abort (); -} - -static const unsigned char * -read_encoded_value (_Unwind_Context *context, unsigned char encoding, - const unsigned char *p, _Unwind_Ptr *val) -{ - union unaligned - { - void *ptr; - unsigned u2 __attribute__ ((mode (HI))); - unsigned u4 __attribute__ ((mode (SI))); - unsigned u8 __attribute__ ((mode (DI))); - signed s2 __attribute__ ((mode (HI))); - signed s4 __attribute__ ((mode (SI))); - signed s8 __attribute__ ((mode (DI))); - } __attribute__((__packed__)); - - union unaligned *u = (union unaligned *) p; - _Unwind_Ptr result; - - switch (encoding & 0x0f) - { - case DW_EH_PE_absptr: - result = (_Unwind_Ptr) u->ptr; - p += sizeof (void *); - break; - - case DW_EH_PE_uleb128: - { - unsigned int shift = 0; - unsigned char byte; - - result = 0; - do - { - byte = *p++; - result |= (_Unwind_Ptr)(byte & 0x7f) << shift; - shift += 7; - } - while (byte & 0x80); - } - break; - - case DW_EH_PE_sleb128: - { - unsigned int shift = 0; - unsigned char byte; - - result = 0; - do - { - byte = *p++; - result |= (_Unwind_Ptr)(byte & 0x7f) << shift; - shift += 7; - } - while (byte & 0x80); - - if (shift < 8 * sizeof(result) && (byte & 0x40) != 0) - result |= -(1L << shift); - } - break; - - case DW_EH_PE_udata2: - result = u->u2; - p += 2; - break; - case DW_EH_PE_udata4: - result = u->u4; - p += 4; - break; - case DW_EH_PE_udata8: - result = u->u8; - p += 8; - break; - - case DW_EH_PE_sdata2: - result = u->s2; - p += 2; - break; - case DW_EH_PE_sdata4: - result = u->s4; - p += 4; - break; - case DW_EH_PE_sdata8: - result = u->s8; - p += 8; - break; - - default: - abort (); - } - - if (result != 0) - switch (encoding & 0xf0) - { - case DW_EH_PE_absptr: - break; - - case DW_EH_PE_pcrel: - // Define as relative to the beginning of the pointer. - result += (_Unwind_Ptr) u; - break; - - case DW_EH_PE_textrel: - case DW_EH_PE_datarel: - // FIXME. - abort (); - - case DW_EH_PE_funcrel: - result += _Unwind_GetRegionStart (context); - break; - - default: - abort (); - } - - *val = result; - return p; -} - -static inline const unsigned char * -read_uleb128 (const unsigned char *p, _Unwind_Ptr *val) -{ - return read_encoded_value (0, DW_EH_PE_uleb128, p, val); -} - -static inline const unsigned char * -read_sleb128 (const unsigned char *p, _Unwind_Ptr *val) -{ - return read_encoded_value (0, DW_EH_PE_sleb128, p, val); -} - +#include "unwind-pe.h" struct lsda_header_info { |