summaryrefslogtreecommitdiff
path: root/gcc/unwind-dw2.c
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-14 08:25:18 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-14 08:25:18 +0000
commitfa29d73358dc13ba421a1b12b9b18ab5597e859d (patch)
tree5f52bb32e96bf7b8a9892d3acb3d434648793276 /gcc/unwind-dw2.c
parentff4320289c9fd56285928b95dffa97b75ceefd08 (diff)
downloadgcc-fa29d73358dc13ba421a1b12b9b18ab5597e859d.tar.gz
* unwind-dw2-fde-darwin.c (examine_objects): Fix aliasing in
read_encoded_value_with_base call. * unwind-dw2-fde-glibc.c (_Unwind_IteratePhdrCallback): Likewise. * unwind-dw2-fde.c (_Unwind_Find_FDE): Likewise. * unwind-dw2.c (extract_cie_info): Fix aliasing in read_encoded_value call. (execute_cfa_program, uw_frame_state_for): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100927 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/unwind-dw2.c')
-rw-r--r--gcc/unwind-dw2.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c
index b50ae010283..55764fee545 100644
--- a/gcc/unwind-dw2.c
+++ b/gcc/unwind-dw2.c
@@ -320,8 +320,10 @@ extract_cie_info (const struct dwarf_cie *cie, struct _Unwind_Context *context,
/* "P" indicates a personality routine in the CIE augmentation. */
else if (aug[0] == 'P')
{
- p = read_encoded_value (context, *p, p + 1,
- (_Unwind_Ptr *) &fs->personality);
+ _Unwind_Ptr personality;
+
+ p = read_encoded_value (context, *p, p + 1, &personality);
+ fs->personality = (_Unwind_Personality_Fn) personality;
aug += 1;
}
@@ -785,8 +787,13 @@ execute_cfa_program (const unsigned char *insn_ptr,
else switch (insn)
{
case DW_CFA_set_loc:
- insn_ptr = read_encoded_value (context, fs->fde_encoding,
- insn_ptr, (_Unwind_Ptr *) &fs->pc);
+ {
+ _Unwind_Ptr pc;
+
+ insn_ptr = read_encoded_value (context, fs->fde_encoding,
+ insn_ptr, &pc);
+ fs->pc = (void *) pc;
+ }
break;
case DW_CFA_advance_loc1:
@@ -1001,8 +1008,12 @@ uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs)
insn = aug + i;
}
if (fs->lsda_encoding != DW_EH_PE_omit)
- aug = read_encoded_value (context, fs->lsda_encoding, aug,
- (_Unwind_Ptr *) &context->lsda);
+ {
+ _Unwind_Ptr lsda;
+
+ aug = read_encoded_value (context, fs->lsda_encoding, aug, &lsda);
+ context->lsda = (void *) lsda;
+ }
/* Then the insns in the FDE up to our target PC. */
if (insn == NULL)