Commit ce883f54 by Ben Elliston Committed by Ben Elliston

unwind-dw2-fde.c (fde_unencoded_compare): Replace type punning assignments with memcpy calls.

	* unwind-dw2-fde.c (fde_unencoded_compare): Replace type punning
	assignments with memcpy calls.
	(add_fdes): Likewise.
	(binary_search_unencoded_fdes): Likewise.
	(linear_search_fdes): Eliminate type puns.

From-SVN: r147705
parent 377f099a
2009-05-19 Ben Elliston <bje@au.ibm.com>
* unwind-dw2-fde.c (fde_unencoded_compare): Replace type punning
assignments with memcpy calls.
(add_fdes): Likewise.
(binary_search_unencoded_fdes): Likewise.
(linear_search_fdes): Eliminate type puns.
2009-05-19 Richard Guenther <rguenther@suse.de> 2009-05-19 Richard Guenther <rguenther@suse.de>
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Do * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Do
......
...@@ -318,8 +318,9 @@ static int ...@@ -318,8 +318,9 @@ static int
fde_unencoded_compare (struct object *ob __attribute__((unused)), fde_unencoded_compare (struct object *ob __attribute__((unused)),
const fde *x, const fde *y) const fde *x, const fde *y)
{ {
const _Unwind_Ptr x_ptr = *(const _Unwind_Ptr *) x->pc_begin; _Unwind_Ptr x_ptr, y_ptr;
const _Unwind_Ptr y_ptr = *(const _Unwind_Ptr *) y->pc_begin; memcpy (&x_ptr, x->pc_begin, sizeof (_Unwind_Ptr));
memcpy (&y_ptr, y->pc_begin, sizeof (_Unwind_Ptr));
if (x_ptr > y_ptr) if (x_ptr > y_ptr)
return 1; return 1;
...@@ -674,7 +675,9 @@ add_fdes (struct object *ob, struct fde_accumulator *accu, const fde *this_fde) ...@@ -674,7 +675,9 @@ add_fdes (struct object *ob, struct fde_accumulator *accu, const fde *this_fde)
if (encoding == DW_EH_PE_absptr) if (encoding == DW_EH_PE_absptr)
{ {
if (*(const _Unwind_Ptr *) this_fde->pc_begin == 0) _Unwind_Ptr ptr;
memcpy (&ptr, this_fde->pc_begin, sizeof (_Unwind_Ptr));
if (ptr == 0)
continue; continue;
} }
else else
...@@ -792,8 +795,9 @@ linear_search_fdes (struct object *ob, const fde *this_fde, void *pc) ...@@ -792,8 +795,9 @@ linear_search_fdes (struct object *ob, const fde *this_fde, void *pc)
if (encoding == DW_EH_PE_absptr) if (encoding == DW_EH_PE_absptr)
{ {
pc_begin = ((const _Unwind_Ptr *) this_fde->pc_begin)[0]; const _Unwind_Ptr *pc_array = (const _Unwind_Ptr *) this_fde->pc_begin;
pc_range = ((const _Unwind_Ptr *) this_fde->pc_begin)[1]; pc_begin = pc_array[0];
pc_range = pc_array[1];
if (pc_begin == 0) if (pc_begin == 0)
continue; continue;
} }
...@@ -840,8 +844,10 @@ binary_search_unencoded_fdes (struct object *ob, void *pc) ...@@ -840,8 +844,10 @@ binary_search_unencoded_fdes (struct object *ob, void *pc)
{ {
size_t i = (lo + hi) / 2; size_t i = (lo + hi) / 2;
const fde *const f = vec->array[i]; const fde *const f = vec->array[i];
const void *pc_begin = ((const void *const*) f->pc_begin)[0]; void *pc_begin;
const uaddr pc_range = ((const uaddr *) f->pc_begin)[1]; uaddr pc_range;
memcpy (&pc_begin, (const void * const *) f->pc_begin, sizeof (void *));
memcpy (&pc_range, (const uaddr *) f->pc_begin + 1, sizeof (uaddr));
if (pc < pc_begin) if (pc < pc_begin)
hi = i; hi = i;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment