summaryrefslogtreecommitdiff
path: root/gcc/unwind-dw2-fde.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/unwind-dw2-fde.c')
-rw-r--r--gcc/unwind-dw2-fde.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/unwind-dw2-fde.c b/gcc/unwind-dw2-fde.c
index c486f50b176..6da2c7384fd 100644
--- a/gcc/unwind-dw2-fde.c
+++ b/gcc/unwind-dw2-fde.c
@@ -233,6 +233,7 @@ base_from_object (unsigned char encoding, struct object *ob)
{
case DW_EH_PE_absptr:
case DW_EH_PE_pcrel:
+ case DW_EH_PE_aligned:
return 0;
case DW_EH_PE_textrel:
@@ -270,7 +271,12 @@ get_cie_encoding (struct dwarf_cie *cie)
return *p;
/* Personality encoding and pointer. */
else if (*aug == 'P')
- p = read_encoded_value_with_base (*p & 0xF, 0, p + 1, &dummy);
+ {
+ /* ??? Avoid dereferencing indirect pointers, since we're
+ faking the base address. Gotta keep DW_EH_PE_aligned
+ intact, however. */
+ p = read_encoded_value_with_base (*p & 0x7F, 0, p + 1, &dummy);
+ }
/* LSDA encoding. */
else if (*aug == 'L')
p++;