unwind-dw2-fde.c (get_cie_encoding): Handle dwarf3 CIE format.
authorPaul Brook <paul@codesourcery.com>
Thu, 20 May 2004 22:34:58 +0000 (22:34 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Thu, 20 May 2004 22:34:58 +0000 (22:34 +0000)
* 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.

From-SVN: r82072

gcc/ChangeLog
gcc/unwind-dw2-fde.c
gcc/unwind-dw2.c

index bc2efca0ab5a0694a7a3b7e2a274214a7b8d15a5..60fe09b2ad67a850f36796620c44cd30eab6f0e4 100644 (file)
@@ -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
index 74e64e5eb80038cf45f1ea8de5ffd1ac50f11e01..2a81e3676cc5a0c9eb205fd2d1696d304b2caf72 100644 (file)
@@ -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.  */
index 70d32215c7f37dceb81003a35ebc3a9027ac50ff..b99b7007a00ccd9c96b2fa9d2587158b45d06898 100644 (file)
@@ -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