x86: Print dynreloc in readonly section for map file output
[deliverable/binutils-gdb.git] / bfd / coffcode.h
index 898327b3288cb8ba340baba1681c2395ae872583..d30cd58c4f32efbc3b61bfb7622c65189fb54d79 100644 (file)
@@ -997,7 +997,13 @@ handle_COMDAT (bfd * abfd,
                        || isym.n_sclass == C_EXT)
                       && BTYPE (isym.n_type) == T_NULL
                       && isym.n_value == 0))
-                 abort ();
+                 {
+                   /* Malformed input files can trigger this test.
+                      cf PR 21781.  */
+                   _bfd_error_handler (_("%B: error: unexpected symbol '%s' in COMDAT section"),
+                                       abfd, symname);
+                   goto breakloop;
+                 }
 
                /* FIXME LATER: MSVC generates section names
                   like .text for comdats.  Gas generates
@@ -1849,10 +1855,6 @@ coff_set_alignment_hook (bfd * abfd ATTRIBUTE_UNUSED,
     if ((1 << i) >= hdr->s_align)
       break;
 #endif
-#ifdef TIC80COFF
-  /* TI tools puts the alignment power in bits 8-11.  */
-  i = (hdr->s_flags >> 8) & 0xF ;
-#endif
 #ifdef COFF_DECODE_ALIGNMENT
   i = COFF_DECODE_ALIGNMENT(hdr->s_flags);
 #endif
@@ -3859,12 +3861,25 @@ coff_write_object_contents (bfd * abfd)
                         ? 1 << current->alignment_power
                         : 0);
 #endif
-#ifdef TIC80COFF
-      /* TI COFF puts the alignment power in bits 8-11 of the flags.  */
-      section.s_flags |= (current->alignment_power & 0xF) << 8;
-#endif
 #ifdef COFF_ENCODE_ALIGNMENT
       COFF_ENCODE_ALIGNMENT(section, current->alignment_power);
+      if ((unsigned int)COFF_DECODE_ALIGNMENT(section.s_flags)
+         != current->alignment_power)
+       {
+         bfd_boolean warn = coff_data (abfd)->link_info
+           && !bfd_link_relocatable (coff_data (abfd)->link_info);
+
+         _bfd_error_handler
+           /* xgettext:c-format */
+           (_("%B:%s section %s: alignment 2**%u not representable"),
+           abfd, warn ? " warning:" : "", current->name,
+            current->alignment_power);
+         if (!warn)
+           {
+             bfd_set_error (bfd_error_nonrepresentable_section);
+             return FALSE;
+           }  
+       }
 #endif
 
 #ifdef COFF_IMAGE_WITH_PE
@@ -4572,6 +4587,14 @@ coff_slurp_line_table (bfd *abfd, asection *asect)
 
   BFD_ASSERT (asect->lineno == NULL);
 
+  if (asect->lineno_count > asect->size)
+    {
+      _bfd_error_handler
+       (_("%B: warning: line number count (%#lx) exceeds section size (%#lx)"),
+        abfd, (unsigned long) asect->lineno_count, (unsigned long) asect->size);
+      return FALSE;
+    }
+
   amt = ((bfd_size_type) asect->lineno_count + 1) * sizeof (alent);
   lineno_cache = (alent *) bfd_alloc (abfd, amt);
   if (lineno_cache == NULL)
@@ -5312,7 +5335,7 @@ coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols)
 #else
       cache_ptr->address = dst.r_vaddr;
 
-      if (dst.r_symndx != -1)
+      if (dst.r_symndx != -1 && symbols != NULL)
        {
          if (dst.r_symndx < 0 || dst.r_symndx >= obj_conv_table_size (abfd))
            {
This page took 0.024066 seconds and 4 git commands to generate.