Test SEC_HAS_CONTENTS in relax routines
authorAlan Modra <amodra@gmail.com>
Wed, 22 Feb 2023 07:07:26 +0000 (17:37 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 23 Feb 2023 02:28:53 +0000 (12:58 +1030)
More places that generally expect instructions, so not zeros.

* coff-sh.c (sh_relax_section, sh_relax_delete_bytes): Exclude
sections without SEC_HAS_CONTENTS set.
* elf-m10200.c (mn10200_elf_relax_section): Likewise.
* elf32-arc.c (arc_elf_relax_section): Likewise.
* elf32-avr.c (elf32_avr_relax_section): Likewise.
* elf32-cr16.c (elf32_cr16_relax_section): Likewise.
* elf32-crx.c (elf32_crx_relax_section): Likewise.
* elf32-epiphany.c (epiphany_elf_relax_section): Likewise.
* elf32-ft32.c (ft32_elf_relax_section): Likewise.
* elf32-h8300.c (elf32_h8_relax_section): Likewise.
* elf32-ip2k.c (ip2k_elf_relax_section): Likewise.
* elf32-m32c.c (m32c_elf_relax_section): Likewise.
* elf32-m68hc11.c (m68hc11_elf_relax_section): Likewise.
* elf32-msp430.c (msp430_elf_relax_section): Likewise.
* elf32-pru.c (pru_elf32_relax_section): Likewise.
* elf32-rl78.c (rl78_elf_relax_section): Likewise.
* elf32-rx.c (elf32_rx_relax_section): Likewise.
* elf32-sh.c (sh_elf_relax_section): Likewise.
(sh_elf_relax_delete_bytes): Likewise.
* elf32-v850.c (v850_elf_relax_section): Likewise.
* elf64-alpha.c (elf64_alpha_relax_section): Likewise.
* elf64-ia64-vms.c (elf64_ia64_relax_section): Likewise.
* elfnn-ia64.c (elfNN_ia64_relax_section): Likewise.
* elfnn-riscv.c (_bfd_riscv_relax_section): Likewise.
* elfxx-mips.c (_bfd_mips_elf_relax_section): Likewise.

23 files changed:
bfd/coff-sh.c
bfd/elf-m10200.c
bfd/elf32-arc.c
bfd/elf32-avr.c
bfd/elf32-cr16.c
bfd/elf32-crx.c
bfd/elf32-epiphany.c
bfd/elf32-ft32.c
bfd/elf32-h8300.c
bfd/elf32-ip2k.c
bfd/elf32-m32c.c
bfd/elf32-m68hc11.c
bfd/elf32-msp430.c
bfd/elf32-pru.c
bfd/elf32-rl78.c
bfd/elf32-rx.c
bfd/elf32-sh.c
bfd/elf32-v850.c
bfd/elf64-alpha.c
bfd/elf64-ia64-vms.c
bfd/elfnn-ia64.c
bfd/elfnn-riscv.c
bfd/elfxx-mips.c

index 314b796ac8be45dba4ebfdad6983957263e7592f..50e9043993b41353b01fa2bffcb81fc2d0353fd4 100644 (file)
@@ -717,6 +717,7 @@ sh_relax_section (bfd *abfd,
   *again = false;
 
   if (bfd_link_relocatable (link_info)
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0)
     return true;
@@ -1364,6 +1365,7 @@ sh_relax_delete_bytes (bfd *abfd,
       bfd_byte *ocontents;
 
       if (o == sec
+         || (o->flags & SEC_HAS_CONTENTS) == 0
          || (o->flags & SEC_RELOC) == 0
          || o->reloc_count == 0)
        continue;
index 24be1cb4d20839d6eb3fd737bce72d2a73e396b5..d7376cb2cf60843e6052893c833af1c20de0c0fb 100644 (file)
@@ -577,8 +577,9 @@ mn10200_elf_relax_section (bfd *abfd,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index c5331ed8a6159dbc0b4e0f26983a76a4334e89de..78dfd6eebbd9c6b642b802b27dd477d6c95e9e94 100644 (file)
@@ -2972,8 +2972,9 @@ arc_elf_relax_section (bfd *abfd, asection *sec,
      section does not have relocs, or if this is not a code
      section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index c01355ac5b7f540a99e99fd2a20a60bed2bb480f..702719136d09acbc8c98ec49ab8129d0f33fffa8 100644 (file)
@@ -2522,8 +2522,9 @@ elf32_avr_relax_section (bfd *abfd,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index 32507dabe3feabd5eb179e976e2e6e1cc2b3e6d9..caaf3bdbfe0e51441a5e9a8a0a54ac13197dde07 100644 (file)
@@ -1718,8 +1718,9 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index f041e4828ef3c8d3f7f866b05cf86ea58fa9ae02..811440d124a48cbbf06b6663dd55b93d54e11b9e 100644 (file)
@@ -973,8 +973,9 @@ elf32_crx_relax_section (bfd *abfd, asection *sec,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index f05ef1497faf699d1ffbdffba58aa4f1267abb9b..da874dadd0b095a0eab229e431a7be4beebea499 100644 (file)
@@ -213,8 +213,9 @@ epiphany_elf_relax_section (bfd *abfd, asection *sec,
      if this section does not have relocs, or if this is
      not a code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index 07036b3b1400aabd28ad728976699189471d1151..ce4946aef2741a86de0fad1f1462078eadbfc8b2 100644 (file)
@@ -1092,8 +1092,9 @@ ft32_elf_relax_section (bfd *abfd,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index f08ab3f52edd271c74016d751251431a7ca66049..3039b824fa5b57622054660adcb2f7a8a5fc27d5 100644 (file)
@@ -706,8 +706,9 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index 5f63d910c4db4889db2077295fa9bdb3c0df6aa4..cb1ab0e12e578556257288d8310604ea1234b708 100644 (file)
@@ -1096,8 +1096,9 @@ ip2k_elf_relax_section (bfd *abfd,
      if this section does not have relocs, or if this is
      not a code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index e9308ff868465e08e574bbfd0ae1551ffccf9f49..129d6a92c024396855c2b27bc087e2373d038d0f 100644 (file)
@@ -1459,8 +1459,9 @@ m32c_elf_relax_section (bfd *abfd,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index 11a58f02298554cdcc60fb44bbf99c8e5184ee57..67a8dad0965d793b418757dbeca5827bddaf1acf 100644 (file)
@@ -709,8 +709,9 @@ m68hc11_elf_relax_section (bfd *abfd, asection *sec,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index 4475bafe8c2513c1626328e30f4a4ce06668f7a2..e77ca392fe39f61b4feb6158e5808150d075225d 100644 (file)
@@ -2014,8 +2014,10 @@ msp430_elf_relax_section (bfd * abfd, asection * sec,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-    || (sec->flags & SEC_RELOC) == 0
-    || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0)
+      || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
+      || (sec->flags & SEC_CODE) == 0)
     return true;
 
   if (debug_relocs)
index d7bbbe18830774081b36451e85ea06c96319b0fb..2bb4cb7a8cd770a7d6cd068c81b131d0882ba379 100644 (file)
@@ -1354,8 +1354,10 @@ pru_elf32_relax_section (bfd *abfd, asection *sec,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-    || (sec->flags & SEC_RELOC) == 0
-    || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0)
+      || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
+      || (sec->flags & SEC_CODE) == 0)
     return true;
 
   symtab_hdr = & elf_tdata (abfd)->symtab_hdr;
index 6adc495115f3f62c19fb907fc949d5be21485d3c..c7a94f2a28055cfeee33e860258a7de997717bed 100644 (file)
@@ -2106,8 +2106,9 @@ rl78_elf_relax_section (bfd *abfd,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index e3dde13fea441ed955df376cdbbc1bcde28b746e..d14c23831bdf7b3fb536cf8bdfe193c244911857 100644 (file)
@@ -2038,8 +2038,9 @@ elf32_rx_relax_section (bfd *abfd,
      this section does not have relocs, or if this is not a
      code section.  */
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;
 
index 246f9f561884cff80b2b5a63e9da7883df85a1f7..fdcc587089033f5dcafcc64d540f528d66cc5bfc 100644 (file)
@@ -468,6 +468,7 @@ sh_elf_relax_section (bfd *abfd, asection *sec,
   *again = false;
 
   if (bfd_link_relocatable (link_info)
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0)
     return true;
@@ -1154,6 +1155,7 @@ sh_elf_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr,
       bfd_byte *ocontents;
 
       if (o == sec
+         || (o->flags & SEC_HAS_CONTENTS) == 0
          || (o->flags & SEC_RELOC) == 0
          || o->reloc_count == 0)
        continue;
index 681526c20c98aff8f6c5cfb1505e85f4546afe6c..4ce54990e30ff16cf264d65c3a1c54fdc38f18d0 100644 (file)
@@ -3440,6 +3440,7 @@ v850_elf_relax_section (bfd *abfd,
   *again = false;
 
   if (bfd_link_relocatable (link_info)
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0)
     return true;
index 875bf69519ac0f4295641443c4aa08cd32192afd..81d58c8cbc1844baaa016b5499237c526362e2a0 100644 (file)
@@ -3726,8 +3726,8 @@ elf64_alpha_relax_section (bfd *abfd, asection *sec,
   *again = false;
 
   if (bfd_link_relocatable (link_info)
-      || ((sec->flags & (SEC_CODE | SEC_RELOC | SEC_ALLOC))
-         != (SEC_CODE | SEC_RELOC | SEC_ALLOC))
+      || ((sec->flags & (SEC_CODE | SEC_RELOC | SEC_ALLOC | SEC_HAS_CONTENTS))
+         != (SEC_CODE | SEC_RELOC | SEC_ALLOC | SEC_HAS_CONTENTS))
       || sec->reloc_count == 0)
     return true;
 
index 9fb1a93bf675748eb637e50552f3cf6063236162..1866a5798fa9a0c70295c7e4827a8ba3fa0af85a 100644 (file)
@@ -370,8 +370,9 @@ elf64_ia64_relax_section (bfd *abfd, asection *sec,
 
   /* Nothing to do if there are no relocations or there is no need for
      the current pass.  */
-  if ((sec->flags & SEC_RELOC) == 0
-      || sec->reloc_count == 0
+  if (sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (link_info->relax_pass == 0 && sec->skip_relax_pass_0)
       || (link_info->relax_pass == 1 && sec->skip_relax_pass_1))
     return true;
index c1f49bd07d6e40af3ec59e11fa180230fc2af2d1..a2d60e7e67f5799aaba2fd5a454cffffc5d0cd62 100644 (file)
@@ -370,8 +370,9 @@ elfNN_ia64_relax_section (bfd *abfd, asection *sec,
 
   /* Nothing to do if there are no relocations or there is no need for
      the current pass.  */
-  if ((sec->flags & SEC_RELOC) == 0
-      || sec->reloc_count == 0
+  if (sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (link_info->relax_pass == 0 && sec->skip_relax_pass_0)
       || (link_info->relax_pass == 1 && sec->skip_relax_pass_1))
     return true;
index c2604de0050d63cfb8e8ef8efebdfe66fe7db7ed..355ddb225660e2b89c00636932a2729ef74fe341 100644 (file)
@@ -4776,8 +4776,9 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec,
 
   if (bfd_link_relocatable (info)
       || sec->sec_flg0
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (info->disable_target_specific_optimizations
          && info->relax_pass == 0)
       /* The exp_seg_relro_adjust is enum phase_enum (0x4),
index 5b66cb81c1bf52ba88e66447b5115a4cde9127f7..74a4d0d382b20bc8a9adbd4218deef38ca6143b5 100644 (file)
@@ -13975,8 +13975,9 @@ _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
      code section.  */
 
   if (bfd_link_relocatable (link_info)
-      || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
+      || (sec->flags & SEC_RELOC) == 0
+      || (sec->flags & SEC_HAS_CONTENTS) == 0
       || (sec->flags & SEC_CODE) == 0)
     return true;