sim: add missing values to array initializers
[deliverable/binutils-gdb.git] / bfd / elf-eh-frame.c
index 5d1def943a3bd709a560b6a18bacd51a5457ca7b..8380ef86004e9b0dd26b21688ac2e7bda36724ed 100644 (file)
@@ -1,5 +1,5 @@
 /* .eh_frame section optimization.
-   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
    Written by Jakub Jelinek <jakub@redhat.com>.
 
@@ -636,7 +636,9 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
          REQUIRE (read_byte (&buf, end, &cie->version));
 
          /* Cannot handle unknown versions.  */
-         REQUIRE (cie->version == 1 || cie->version == 3);
+         REQUIRE (cie->version == 1
+                  || cie->version == 3
+                  || cie->version == 4);
          REQUIRE (strlen ((char *) buf) < sizeof (cie->augmentation));
 
          strcpy (cie->augmentation, (char *) buf);
@@ -651,6 +653,13 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
              REQUIRE (skip_bytes (&buf, end, ptr_size));
              SKIP_RELOCS (buf);
            }
+         if (cie->version >= 4)
+           {
+             REQUIRE (buf + 1 < end);
+             REQUIRE (buf[0] == ptr_size);
+             REQUIRE (buf[1] == 0);
+             buf += 2;
+           }
          REQUIRE (read_uleb128 (&buf, end, &cie->code_align));
          REQUIRE (read_sleb128 (&buf, end, &cie->data_align));
          if (cie->version == 1)
@@ -1269,13 +1278,11 @@ _bfd_elf_maybe_strip_eh_frame_hdr (struct bfd_link_info *info)
 
 bfd_vma
 _bfd_elf_eh_frame_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED,
-                                 struct bfd_link_info *info,
+                                 struct bfd_link_info *info ATTRIBUTE_UNUSED,
                                  asection *sec,
                                  bfd_vma offset)
 {
   struct eh_frame_sec_info *sec_info;
-  struct elf_link_hash_table *htab;
-  struct eh_frame_hdr_info *hdr_info;
   unsigned int lo, hi, mid;
 
   if (sec->sec_info_type != ELF_INFO_TYPE_EH_FRAME)
@@ -1285,9 +1292,6 @@ _bfd_elf_eh_frame_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (offset >= sec->rawsize)
     return offset - sec->rawsize + sec->size;
 
-  htab = elf_hash_table (info);
-  hdr_info = &htab->eh_info;
-
   lo = 0;
   hi = sec_info->count;
   mid = 0;
@@ -1629,7 +1633,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
          if (ent->set_loc)
            {
              /* Adjust DW_CFA_set_loc.  */
-             unsigned int cnt, width;
+             unsigned int cnt;
              bfd_vma new_offset;
 
              width = get_DW_EH_PE_width (ent->fde_encoding, ptr_size);
@@ -1639,7 +1643,6 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
 
              for (cnt = 1; cnt <= ent->set_loc[0]; cnt++)
                {
-                 bfd_vma value;
                  buf = start + ent->set_loc[cnt];
 
                  value = read_value (abfd, buf, width,
This page took 0.023916 seconds and 4 git commands to generate.