diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-06-06 01:57:49 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-06-06 01:57:49 +0000 |
commit | 9a4d22ba1e8fcbd07ad2306af585edcfc2a9e4cc (patch) | |
tree | 7d58db2a4f6ec00eb20b149b79bc6fbe2e8c5a80 /gcc/unwind-dw2-fde.c | |
parent | 4490d2f1bca8aabc8c13a2dbbcd5f07ec0c4999b (diff) | |
download | gcc-9a4d22ba1e8fcbd07ad2306af585edcfc2a9e4cc.tar.gz |
* dwarf2.h (DW_EH_PE_aligned): New.
* dwarf2asm.c (eh_data_format_name): Name it.
(dw2_asm_output_encoded_addr_rtx): Align for it.
* dwarf2out.c (output_call_frame_info): Handle it for personality
routine and LSDA pointers.
* unwind-pe.h (DW_EH_PE_aligned): New.
(base_of_encoded_value): Handle it.
(read_encoded_value_with_base): Likewise.
* unwind-dw2-fde.c (base_from_object): Likewise.
(get_cie_encoding): Likewise.
* config/alpha/elf.h: Remove ecoff commentary.
* config/alpha/osf.h (ASM_PREFERRED_EH_DATA_FORMAT): New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42926 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/unwind-dw2-fde.c')
-rw-r--r-- | gcc/unwind-dw2-fde.c | 8 |
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++; |