unwind-dw2-fde.c (get_cie_encoding): Replaced _Unwind_Word with _uleb128_t and _Unwind_SWord with _sleb128_t.

2007-01-24  Andreas Krebbel  <krebbel1@de.ibm.com>

	* unwind-dw2-fde.c (get_cie_encoding): Replaced _Unwind_Word with 
	_uleb128_t and _Unwind_SWord with _sleb128_t.
	* unwind-dw2.c (extract_cie_info, execute_stack_op, execute_cfa_program,
	uw_frame_state_for, uw_update_context_1): Likewise.
	* unwind-c.c (parse_lsda_header, PERSONALITY_FUNCTION): Likewise.
	* unwind-pe.h (read_uleb128, read_sleb128,
	read_encoded_value_with_base): Likewise.
	* unwind-generic.h: Define _sleb128_t and _uleb128_t types.

2007-01-24  Andreas Krebbel  <krebbel1@de.ibm.com>

	* libsupc++/eh_personality.cc (parse_lsda_header, check_exception_spec,
	get_ttype_entry, empty_exception_spec, PERSONALITY_FUNCTION): Replaced
	_Unwind_Word with _uleb128_t and _Unwind_SWord with _sleb128_t.

2007-01-24  Andreas Krebbel  <krebbel1@de.ibm.com>

	* exception.cc (parse_lsda_header, PERSONALITY_FUNCTION): Replaced
	_Unwind_Word with _uleb128_t and _Unwind_SWord with _sleb128_t.

From-SVN: r121116
This commit is contained in:
Andreas Krebbel 2007-01-24 14:46:47 +00:00 committed by Andreas Krebbel
parent 877cc28c99
commit f767122b2e
10 changed files with 122 additions and 56 deletions

View File

@ -1,3 +1,14 @@
2007-01-24 Andreas Krebbel <krebbel1@de.ibm.com>
* unwind-dw2-fde.c (get_cie_encoding): Replaced _Unwind_Word with
_uleb128_t and _Unwind_SWord with _sleb128_t.
* unwind-dw2.c (extract_cie_info, execute_stack_op, execute_cfa_program,
uw_frame_state_for, uw_update_context_1): Likewise.
* unwind-c.c (parse_lsda_header, PERSONALITY_FUNCTION): Likewise.
* unwind-pe.h (read_uleb128, read_sleb128,
read_encoded_value_with_base): Likewise.
* unwind-generic.h: Define _sleb128_t and _uleb128_t types.
2007-01-24 Richard Guenther <rguenther@suse.de>
* builtins.c (expand_builtin_cexpi): Get the fndecl

View File

@ -50,7 +50,7 @@ static const unsigned char *
parse_lsda_header (struct _Unwind_Context *context, const unsigned char *p,
lsda_header_info *info)
{
_Unwind_Word tmp;
_uleb128_t tmp;
unsigned char lpstart_encoding;
info->Start = (context ? _Unwind_GetRegionStart (context) : 0);
@ -175,7 +175,7 @@ PERSONALITY_FUNCTION (int version,
return _URC_CONTINUE_UNWIND;
else
{
_Unwind_Word cs_lp, cs_action;
_uleb128_t cs_lp, cs_action;
do
{
p = read_uleb128 (p, &cs_lp);
@ -185,7 +185,7 @@ PERSONALITY_FUNCTION (int version,
/* Can never have null landing pad for sjlj -- that would have
been indicated by a -1 call site index. */
landing_pad = cs_lp + 1;
landing_pad = (_Unwind_Ptr)cs_lp + 1;
if (cs_action)
action_record = info.action_table + cs_action - 1;
goto found_something;
@ -195,7 +195,7 @@ PERSONALITY_FUNCTION (int version,
while (p < info.action_table)
{
_Unwind_Ptr cs_start, cs_len, cs_lp;
_Unwind_Word cs_action;
_uleb128_t cs_action;
/* Note that all call-site encodings are "absolute" displacements. */
p = read_encoded_value (0, info.call_site_encoding, p, &cs_start);

View File

@ -266,8 +266,8 @@ get_cie_encoding (const struct dwarf_cie *cie)
{
const unsigned char *aug, *p;
_Unwind_Ptr dummy;
_Unwind_Word utmp;
_Unwind_Sword stmp;
_uleb128_t utmp;
_sleb128_t stmp;
aug = cie->augmentation;
if (aug[0] != 'z')

View File

@ -349,7 +349,8 @@ extract_cie_info (const struct dwarf_cie *cie, struct _Unwind_Context *context,
const unsigned char *aug = cie->augmentation;
const unsigned char *p = aug + strlen ((const char *)aug) + 1;
const unsigned char *ret = NULL;
_Unwind_Word utmp;
_uleb128_t utmp;
_sleb128_t stmp;
/* g++ v2 "eh" has pointer immediately following augmentation string,
so it must be handled first. */
@ -362,12 +363,17 @@ extract_cie_info (const struct dwarf_cie *cie, struct _Unwind_Context *context,
/* Immediately following the augmentation are the code and
data alignment and return address column. */
p = read_uleb128 (p, &fs->code_align);
p = read_sleb128 (p, &fs->data_align);
p = read_uleb128 (p, &utmp);
fs->code_align = (_Unwind_Word)utmp;
p = read_sleb128 (p, &stmp);
fs->data_align = (_Unwind_Sword)stmp;
if (cie->version == 1)
fs->retaddr_column = *p++;
else
p = read_uleb128 (p, &fs->retaddr_column);
{
p = read_uleb128 (p, &utmp);
fs->retaddr_column = (_Unwind_Word)utmp;
}
fs->lsda_encoding = DW_EH_PE_omit;
/* If the augmentation starts with 'z', then a uleb128 immediately
@ -442,8 +448,9 @@ execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end,
while (op_ptr < op_end)
{
enum dwarf_location_atom op = *op_ptr++;
_Unwind_Word result, reg, utmp;
_Unwind_Sword offset, stmp;
_Unwind_Word result;
_uleb128_t reg, utmp;
_sleb128_t offset, stmp;
switch (op)
{
@ -520,11 +527,12 @@ execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end,
op_ptr += 8;
break;
case DW_OP_constu:
op_ptr = read_uleb128 (op_ptr, &result);
op_ptr = read_uleb128 (op_ptr, &utmp);
result = (_Unwind_Word)utmp;
break;
case DW_OP_consts:
op_ptr = read_sleb128 (op_ptr, &stmp);
result = stmp;
result = (_Unwind_Sword)stmp;
break;
case DW_OP_reg0:
@ -604,7 +612,7 @@ execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end,
case DW_OP_bregx:
op_ptr = read_uleb128 (op_ptr, &reg);
op_ptr = read_sleb128 (op_ptr, &offset);
result = _Unwind_GetGR (context, reg) + offset;
result = _Unwind_GetGR (context, reg) + (_Unwind_Word)offset;
break;
case DW_OP_dup:
@ -698,7 +706,7 @@ execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end,
break;
case DW_OP_plus_uconst:
op_ptr = read_uleb128 (op_ptr, &utmp);
result += utmp;
result += (_Unwind_Word)utmp;
break;
default:
@ -857,8 +865,8 @@ execute_cfa_program (const unsigned char *insn_ptr,
&& fs->pc < context->ra + _Unwind_IsSignalFrame (context))
{
unsigned char insn = *insn_ptr++;
_Unwind_Word reg, utmp;
_Unwind_Sword offset, stmp;
_uleb128_t reg, utmp;
_sleb128_t offset, stmp;
if ((insn & 0xc0) == DW_CFA_advance_loc)
fs->pc += (insn & 0x3f) * fs->code_align;
@ -928,11 +936,12 @@ execute_cfa_program (const unsigned char *insn_ptr,
case DW_CFA_register:
{
_Unwind_Word reg2;
_uleb128_t reg2;
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_uleb128 (insn_ptr, &reg2);
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_REG;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.reg = reg2;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.reg =
(_Unwind_Word)reg2;
}
break;
@ -962,14 +971,16 @@ execute_cfa_program (const unsigned char *insn_ptr,
break;
case DW_CFA_def_cfa:
insn_ptr = read_uleb128 (insn_ptr, &fs->regs.cfa_reg);
insn_ptr = read_uleb128 (insn_ptr, &utmp);
fs->regs.cfa_offset = utmp;
fs->regs.cfa_reg = (_Unwind_Word)utmp;
insn_ptr = read_uleb128 (insn_ptr, &utmp);
fs->regs.cfa_offset = (_Unwind_Word)utmp;
fs->regs.cfa_how = CFA_REG_OFFSET;
break;
case DW_CFA_def_cfa_register:
insn_ptr = read_uleb128 (insn_ptr, &fs->regs.cfa_reg);
insn_ptr = read_uleb128 (insn_ptr, &utmp);
fs->regs.cfa_reg = (_Unwind_Word)utmp;
fs->regs.cfa_how = CFA_REG_OFFSET;
break;
@ -1005,14 +1016,17 @@ execute_cfa_program (const unsigned char *insn_ptr,
break;
case DW_CFA_def_cfa_sf:
insn_ptr = read_uleb128 (insn_ptr, &fs->regs.cfa_reg);
insn_ptr = read_sleb128 (insn_ptr, &fs->regs.cfa_offset);
insn_ptr = read_uleb128 (insn_ptr, &utmp);
fs->regs.cfa_reg = (_Unwind_Word)utmp;
insn_ptr = read_sleb128 (insn_ptr, &stmp);
fs->regs.cfa_offset = (_Unwind_Sword)stmp;
fs->regs.cfa_how = CFA_REG_OFFSET;
fs->regs.cfa_offset *= fs->data_align;
break;
case DW_CFA_def_cfa_offset_sf:
insn_ptr = read_sleb128 (insn_ptr, &fs->regs.cfa_offset);
insn_ptr = read_sleb128 (insn_ptr, &stmp);
fs->regs.cfa_offset = (_Unwind_Sword)stmp;
fs->regs.cfa_offset *= fs->data_align;
/* cfa_how deliberately not set. */
break;
@ -1054,7 +1068,8 @@ execute_cfa_program (const unsigned char *insn_ptr,
break;
case DW_CFA_GNU_args_size:
insn_ptr = read_uleb128 (insn_ptr, &context->args_size);
insn_ptr = read_uleb128 (insn_ptr, &utmp);
context->args_size = (_Unwind_Word)utmp;
break;
case DW_CFA_GNU_negative_offset_extended:
@ -1125,7 +1140,7 @@ uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs)
insn = NULL;
if (fs->saw_z)
{
_Unwind_Word i;
_uleb128_t i;
aug = read_uleb128 (aug, &i);
insn = aug + i;
}
@ -1268,7 +1283,7 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
case CFA_EXP:
{
const unsigned char *exp = fs->regs.cfa_exp;
_Unwind_Word len;
_uleb128_t len;
exp = read_uleb128 (exp, &len);
cfa = (void *) (_Unwind_Ptr)
@ -1307,7 +1322,7 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
case REG_SAVED_EXP:
{
const unsigned char *exp = fs->regs.reg[i].loc.exp;
_Unwind_Word len;
_uleb128_t len;
_Unwind_Ptr val;
exp = read_uleb128 (exp, &len);
@ -1326,7 +1341,7 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
case REG_SAVED_VAL_EXP:
{
const unsigned char *exp = fs->regs.reg[i].loc.exp;
_Unwind_Word len;
_uleb128_t len;
_Unwind_Ptr val;
exp = read_uleb128 (exp, &len);

View File

@ -230,6 +230,35 @@ extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *);
contains it. */
extern void * _Unwind_FindEnclosingFunction (void *pc);
#ifndef __SIZEOF_LONG__
#error "__SIZEOF_LONG__ macro not defined"
#endif
#ifndef __SIZEOF_POINTER__
#error "__SIZEOF_POINTER__ macro not defined"
#endif
/* leb128 type numbers have a potentially unlimited size.
The target of the following definitions of _sleb128_t and _uleb128_t
is to have efficient data types large enough to hold the leb128 type
numbers used in the unwind code.
Mostly these types will simply be defined to long and unsigned long
except when a unsigned long data type on the target machine is not
capable of storing a pointer. */
#if __SIZEOF_LONG__ < __SIZEOF_POINTER__
#ifdef HAVE_LONG_LONG
typedef long long _sleb128_t;
typedef unsigned long long _uleb128_t;
#else
#error "long long data type is needed to define _sleb128_t"
#endif
#else
typedef long _sleb128_t;
typedef unsigned long _uleb128_t;
#endif
#ifdef __cplusplus
}
#endif

View File

@ -130,17 +130,17 @@ base_of_encoded_value (unsigned char encoding, struct _Unwind_Context *context)
pointers should not be leb128 encoded on that target. */
static const unsigned char *
read_uleb128 (const unsigned char *p, _Unwind_Word *val)
read_uleb128 (const unsigned char *p, _uleb128_t *val)
{
unsigned int shift = 0;
unsigned char byte;
_Unwind_Word result;
_uleb128_t result;
result = 0;
do
{
byte = *p++;
result |= ((_Unwind_Word)byte & 0x7f) << shift;
result |= ((_uleb128_t)byte & 0x7f) << shift;
shift += 7;
}
while (byte & 0x80);
@ -152,26 +152,26 @@ read_uleb128 (const unsigned char *p, _Unwind_Word *val)
/* Similar, but read a signed leb128 value. */
static const unsigned char *
read_sleb128 (const unsigned char *p, _Unwind_Sword *val)
read_sleb128 (const unsigned char *p, _sleb128_t *val)
{
unsigned int shift = 0;
unsigned char byte;
_Unwind_Word result;
_uleb128_t result;
result = 0;
do
{
byte = *p++;
result |= ((_Unwind_Word)byte & 0x7f) << shift;
result |= ((_uleb128_t)byte & 0x7f) << shift;
shift += 7;
}
while (byte & 0x80);
/* Sign-extend a negative value. */
if (shift < 8 * sizeof(result) && (byte & 0x40) != 0)
result |= -(((_Unwind_Word)1L) << shift);
result |= -(((_uleb128_t)1L) << shift);
*val = (_Unwind_Sword) result;
*val = (_sleb128_t) result;
return p;
}
@ -215,7 +215,7 @@ read_encoded_value_with_base (unsigned char encoding, _Unwind_Ptr base,
case DW_EH_PE_uleb128:
{
_Unwind_Word tmp;
_uleb128_t tmp;
p = read_uleb128 (p, &tmp);
result = (_Unwind_Internal_Ptr) tmp;
}
@ -223,7 +223,7 @@ read_encoded_value_with_base (unsigned char encoding, _Unwind_Ptr base,
case DW_EH_PE_sleb128:
{
_Unwind_Sword tmp;
_sleb128_t tmp;
p = read_sleb128 (p, &tmp);
result = (_Unwind_Internal_Ptr) tmp;
}

View File

@ -1,3 +1,8 @@
2007-01-24 Andreas Krebbel <krebbel1@de.ibm.com>
* exception.cc (parse_lsda_header, PERSONALITY_FUNCTION): Replaced
_Unwind_Word with _uleb128_t and _Unwind_SWord with _sleb128_t.
2007-01-23 H.J. Lu <hongjiu.lu@intel.com>
PR libgcj/30550

View File

@ -128,7 +128,7 @@ static const unsigned char *
parse_lsda_header (_Unwind_Context *context, const unsigned char *p,
lsda_header_info *info)
{
_Unwind_Word tmp;
_uleb128_t tmp;
unsigned char lpstart_encoding;
info->Start = (context ? _Unwind_GetRegionStart (context) : 0);
@ -251,7 +251,7 @@ PERSONALITY_FUNCTION (int version,
return _URC_CONTINUE_UNWIND;
else
{
_Unwind_Word cs_lp, cs_action;
_uleb128_t cs_lp, cs_action;
do
{
p = read_uleb128 (p, &cs_lp);
@ -271,7 +271,7 @@ PERSONALITY_FUNCTION (int version,
while (p < info.action_table)
{
_Unwind_Ptr cs_start, cs_len, cs_lp;
_Unwind_Word cs_action;
_uleb128_t cs_action;
// Note that all call-site encodings are "absolute" displacements.
p = read_encoded_value (0, info.call_site_encoding, p, &cs_start);
@ -317,7 +317,7 @@ PERSONALITY_FUNCTION (int version,
else
{
// Otherwise we have a catch handler.
_Unwind_Sword ar_filter, ar_disp;
_sleb128_t ar_filter, ar_disp;
while (1)
{

View File

@ -1,3 +1,9 @@
2007-01-24 Andreas Krebbel <krebbel1@de.ibm.com>
* libsupc++/eh_personality.cc (parse_lsda_header, check_exception_spec,
get_ttype_entry, empty_exception_spec, PERSONALITY_FUNCTION): Replaced
_Unwind_Word with _uleb128_t and _Unwind_SWord with _sleb128_t.
2007-01-22 Paolo Carlini <pcarlini@suse.de>
* include/bits/stl_algobase.h (__fill_aux(unsigned char*,

View File

@ -56,7 +56,7 @@ static const unsigned char *
parse_lsda_header (_Unwind_Context *context, const unsigned char *p,
lsda_header_info *info)
{
_Unwind_Word tmp;
_uleb128_t tmp;
unsigned char lpstart_encoding;
info->Start = (context ? _Unwind_GetRegionStart (context) : 0);
@ -92,7 +92,7 @@ parse_lsda_header (_Unwind_Context *context, const unsigned char *p,
// Return an element from a type table.
static const std::type_info*
get_ttype_entry(lsda_header_info* info, _Unwind_Word i)
get_ttype_entry(lsda_header_info* info, _uleb128_t i)
{
_Unwind_Ptr ptr;
@ -112,15 +112,15 @@ typedef _Unwind_Control_Block _throw_typet;
static bool
check_exception_spec(lsda_header_info* info, _throw_typet* throw_type,
void* thrown_ptr, _Unwind_Sword filter_value)
void* thrown_ptr, _sleb128_t filter_value)
{
const _Unwind_Word* e = ((const _Unwind_Word*) info->TType)
const _uleb128_t* e = ((const _uleb128_t*) info->TType)
- filter_value - 1;
while (1)
{
const std::type_info* catch_type;
_Unwind_Word tmp;
_uleb128_t tmp;
tmp = *e;
@ -210,7 +210,7 @@ typedef const std::type_info _throw_typet;
// Return an element from a type table.
static const std::type_info *
get_ttype_entry (lsda_header_info *info, _Unwind_Word i)
get_ttype_entry (lsda_header_info *info, _uleb128_t i)
{
_Unwind_Ptr ptr;
@ -253,14 +253,14 @@ get_adjusted_ptr (const std::type_info *catch_type,
static bool
check_exception_spec(lsda_header_info* info, _throw_typet* throw_type,
void* thrown_ptr, _Unwind_Sword filter_value)
void* thrown_ptr, _sleb128_t filter_value)
{
const unsigned char *e = info->TType - filter_value - 1;
while (1)
{
const std::type_info *catch_type;
_Unwind_Word tmp;
_uleb128_t tmp;
e = read_uleb128 (e, &tmp);
@ -329,7 +329,7 @@ static bool
empty_exception_spec (lsda_header_info *info, _Unwind_Sword filter_value)
{
const unsigned char *e = info->TType - filter_value - 1;
_Unwind_Word tmp;
_uleb128_t tmp;
e = read_uleb128 (e, &tmp);
return tmp == 0;
@ -489,7 +489,7 @@ PERSONALITY_FUNCTION (int version,
while (p < info.action_table)
{
_Unwind_Ptr cs_start, cs_len, cs_lp;
_Unwind_Word cs_action;
_uleb128_t cs_action;
// Note that all call-site encodings are "absolute" displacements.
p = read_encoded_value (0, info.call_site_encoding, p, &cs_start);
@ -535,7 +535,7 @@ PERSONALITY_FUNCTION (int version,
{
// Otherwise we have a catch handler or exception specification.
_Unwind_Sword ar_filter, ar_disp;
_sleb128_t ar_filter, ar_disp;
const std::type_info* catch_type;
_throw_typet* throw_type;
bool saw_cleanup = false;