Correct assertion in NIOS2 linker to allow signed 16-buit immediate values.
authorNick Clifton <nickc@redhat.com>
Wed, 10 Feb 2016 11:25:59 +0000 (11:25 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 10 Feb 2016 11:25:59 +0000 (11:25 +0000)
PR 19405
* elf32-nios2.c (nios2_elf32_install_imm16): Allow for signed
immediate values.
* elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Limit the
number of messages about FDE encoding preventing .eh_frame_hdr
generation.

bfd/ChangeLog
bfd/elf-eh-frame.c
bfd/elf32-nios2.c

index 34898732e9dd79d92cbe41de732e682aabcb097f..40739c88b74c04981d8678a342ab3cc2e355f541 100644 (file)
@@ -1,3 +1,12 @@
+2016-02-10  Nick Clifton  <nickc@redhat.com>
+
+       PR 19405
+       * elf32-nios2.c (nios2_elf32_install_imm16): Allow for signed
+       immediate values.
+       * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Limit the
+       number of messages about FDE encoding preventing .eh_frame_hdr
+       generation.
+
 2016-02-09  Nick Clifton  <nickc@redhat.com>
 
        * oasys.c (oasys_archive_p): Fix indentation.
index 0500cd336ac1867f4cad70edf093f758aa244934..e787ee9f1b4efcdee6848d9443aad7c4a088f639 100644 (file)
@@ -1369,14 +1369,26 @@ _bfd_elf_discard_section_eh_frame
                     && ent->make_relative == 0)
                    || (ent->fde_encoding & 0x70) == DW_EH_PE_aligned))
              {
+               static int num_warnings_issued = 0;
+
                /* If a shared library uses absolute pointers
                   which we cannot turn into PC relative,
                   don't create the binary search table,
                   since it is affected by runtime relocations.  */
                hdr_info->u.dwarf.table = FALSE;
-               (*info->callbacks->einfo)
-                 (_("%P: FDE encoding in %B(%A) prevents .eh_frame_hdr"
-                    " table being created.\n"), abfd, sec);
+               if (num_warnings_issued < 10)
+                 {
+                   (*info->callbacks->einfo)
+                     (_("%P: FDE encoding in %B(%A) prevents .eh_frame_hdr"
+                        " table being created.\n"), abfd, sec);
+                   num_warnings_issued ++;
+                 }
+               else if (num_warnings_issued == 10)
+                 {
+                   (*info->callbacks->einfo)
+                     (_("%P: Further warnings about FDE encoding preventing .eh_frame_hdr generation dropped.\n"));
+                   num_warnings_issued ++;
+                 }
              }
            ent->removed = 0;
            hdr_info->u.dwarf.fde_count++;
index 3f72b11325c4e5e18b99835ca9277b3de97fdc55..b19169cc9e09f6b032956bf7659ca0e3eb59acdc 100644 (file)
@@ -1905,7 +1905,7 @@ nios2_elf32_install_imm16 (asection *sec, bfd_vma offset, bfd_vma value)
 {
   bfd_vma word = bfd_get_32 (sec->owner, sec->contents + offset);
 
-  BFD_ASSERT(value <= 0xffff);
+  BFD_ASSERT (value <= 0xffff || ((bfd_signed_vma) value) >= -0xffff);
 
   bfd_put_32 (sec->owner, word | ((value & 0xffff) << 6),
              sec->contents + offset);