OSDN Git Service

* unwind-dw2-fde.c (get_cie_encoding): Handle dwarf3 CIE format.
authorpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 May 2004 22:34:58 +0000 (22:34 +0000)
committerpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 May 2004 22:34:58 +0000 (22:34 +0000)
* 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

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

index bc2efca..60fe09b 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 74e64e5..2a81e36 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 70d3221..b99b700 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