summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>2004-05-20 22:34:58 +0000
committerpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>2004-05-20 22:34:58 +0000
commitc0d45e556d0c72df6e3c769449f1d7dd0e22186f (patch)
tree278ca55e31dd743391ce22e513a63554e8ff213a /gcc
parentf2b83d130125320468be14a67dc8fe079e8350fc (diff)
downloadgcc-c0d45e556d0c72df6e3c769449f1d7dd0e22186f.tar.gz
* unwind-dw2-fde.c (get_cie_encoding): Handle dwarf3 CIE format.
* unwind-dw2.c (extract_cie_info): Ditto. (_Unwind_FrameState): Change retaddr_column to word type. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82072 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/unwind-dw2-fde.c5
-rw-r--r--gcc/unwind-dw2.c7
3 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bc2efca0ab5..60fe09b2ad6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-05-20 Paul Brook <paul@codesourcery.com>
+
+ * unwind-dw2-fde.c (get_cie_encoding): Handle dwarf3 CIE format.
+ * unwind-dw2.c (extract_cie_info): Ditto.
+ (_Unwind_FrameState): Change retaddr_column to word type.
+
2004-05-20 Roger Sayle <roger@eyesopen.com>
PR middle-end/3074
diff --git a/gcc/unwind-dw2-fde.c b/gcc/unwind-dw2-fde.c
index 74e64e5eb80..2a81e3676cc 100644
--- a/gcc/unwind-dw2-fde.c
+++ b/gcc/unwind-dw2-fde.c
@@ -276,7 +276,10 @@ get_cie_encoding (const struct dwarf_cie *cie)
p = aug + strlen (aug) + 1; /* Skip the augmentation string. */
p = read_uleb128 (p, &utmp); /* Skip code alignment. */
p = read_sleb128 (p, &stmp); /* Skip data alignment. */
- p++; /* Skip return address column. */
+ if (cie->version == 1) /* Skip return address column. */
+ p++;
+ else
+ p = read_uleb128 (p, &utmp);
aug++; /* Skip 'z' */
p = read_uleb128 (p, &utmp); /* Skip augmentation length. */
diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c
index 70d32215c7f..b99b7007a00 100644
--- a/gcc/unwind-dw2.c
+++ b/gcc/unwind-dw2.c
@@ -133,7 +133,7 @@ typedef struct
_Unwind_Personality_Fn personality;
_Unwind_Sword data_align;
_Unwind_Word code_align;
- unsigned char retaddr_column;
+ _Unwind_Word retaddr_column;
unsigned char fde_encoding;
unsigned char lsda_encoding;
unsigned char saw_z;
@@ -337,7 +337,10 @@ extract_cie_info (const struct dwarf_cie *cie, struct _Unwind_Context *context,
data alignment and return address column. */
p = read_uleb128 (p, &fs->code_align);
p = read_sleb128 (p, &fs->data_align);
- fs->retaddr_column = *p++;
+ if (cie->version == 1)
+ fs->retaddr_column = *p++;
+ else
+ p = read_uleb128 (p, &fs->retaddr_column);
fs->lsda_encoding = DW_EH_PE_omit;
/* If the augmentation starts with 'z', then a uleb128 immediately