[5/6] arm: remove Maverick support from BFD.

Message ID 20240502114502.1230545-6-rearnsha@arm.com
State Committed
Headers
Series arm: Remove support for the Cirrus Maverick co-processor |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_binutils_check--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_binutils_check--master-arm success Testing passed

Commit Message

Richard Earnshaw May 2, 2024, 11:45 a.m. UTC
  Remove the handling of Maverick from BFD.  Where appropriate we handle
legacy code by mapping ep9312 onto Armv4t.
---
 bfd/cpu-arm.c     | 70 ++++++++++++++---------------------------------
 bfd/elf32-arm.c   | 26 ++----------------
 include/elf/arm.h |  2 +-
 3 files changed, 23 insertions(+), 75 deletions(-)
  

Patch

diff --git a/bfd/cpu-arm.c b/bfd/cpu-arm.c
index 12a5b770593..9298c1ddb7c 100644
--- a/bfd/cpu-arm.c
+++ b/bfd/cpu-arm.c
@@ -195,7 +195,6 @@  processors[] =
   { bfd_mach_arm_8,	  "xgene1"	    },
   { bfd_mach_arm_8,	  "xgene2"	    },
   { bfd_mach_arm_9,	  "cortex-a710"	    },
-  { bfd_mach_arm_ep9312,  "ep9312"	    },
   { bfd_mach_arm_iWMMXt,  "iwmmxt"	    },
   { bfd_mach_arm_iWMMXt2, "iwmmxt2"	    },
   { bfd_mach_arm_unknown, "arm_any"	    }
@@ -252,24 +251,23 @@  static const bfd_arch_info_type arch_info_struct[] =
   N (bfd_mach_arm_5T,        "armv5t",         false, & arch_info_struct[8]),
   N (bfd_mach_arm_5TE,       "armv5te",        false, & arch_info_struct[9]),
   N (bfd_mach_arm_XScale,    "xscale",         false, & arch_info_struct[10]),
-  N (bfd_mach_arm_ep9312,    "ep9312",         false, & arch_info_struct[11]),
-  N (bfd_mach_arm_iWMMXt,    "iwmmxt",         false, & arch_info_struct[12]),
-  N (bfd_mach_arm_iWMMXt2,   "iwmmxt2",        false, & arch_info_struct[13]),
-  N (bfd_mach_arm_5TEJ,      "armv5tej",       false, & arch_info_struct[14]),
-  N (bfd_mach_arm_6,         "armv6",          false, & arch_info_struct[15]),
-  N (bfd_mach_arm_6KZ,       "armv6kz",        false, & arch_info_struct[16]),
-  N (bfd_mach_arm_6T2,       "armv6t2",        false, & arch_info_struct[17]),
-  N (bfd_mach_arm_6K,        "armv6k",         false, & arch_info_struct[18]),
-  N (bfd_mach_arm_7,         "armv7",          false, & arch_info_struct[19]),
-  N (bfd_mach_arm_6M,        "armv6-m",        false, & arch_info_struct[20]),
-  N (bfd_mach_arm_6SM,       "armv6s-m",       false, & arch_info_struct[21]),
-  N (bfd_mach_arm_7EM,       "armv7e-m",       false, & arch_info_struct[22]),
-  N (bfd_mach_arm_8,         "armv8-a",        false, & arch_info_struct[23]),
-  N (bfd_mach_arm_8R,        "armv8-r",        false, & arch_info_struct[24]),
-  N (bfd_mach_arm_8M_BASE,   "armv8-m.base",   false, & arch_info_struct[25]),
-  N (bfd_mach_arm_8M_MAIN,   "armv8-m.main",   false, & arch_info_struct[26]),
-  N (bfd_mach_arm_8_1M_MAIN, "armv8.1-m.main", false, & arch_info_struct[27]),
-  N (bfd_mach_arm_9,         "armv9-a",        false, & arch_info_struct[28]),
+  N (bfd_mach_arm_iWMMXt,    "iwmmxt",         false, & arch_info_struct[11]),
+  N (bfd_mach_arm_iWMMXt2,   "iwmmxt2",        false, & arch_info_struct[12]),
+  N (bfd_mach_arm_5TEJ,      "armv5tej",       false, & arch_info_struct[13]),
+  N (bfd_mach_arm_6,         "armv6",          false, & arch_info_struct[14]),
+  N (bfd_mach_arm_6KZ,       "armv6kz",        false, & arch_info_struct[15]),
+  N (bfd_mach_arm_6T2,       "armv6t2",        false, & arch_info_struct[16]),
+  N (bfd_mach_arm_6K,        "armv6k",         false, & arch_info_struct[17]),
+  N (bfd_mach_arm_7,         "armv7",          false, & arch_info_struct[18]),
+  N (bfd_mach_arm_6M,        "armv6-m",        false, & arch_info_struct[19]),
+  N (bfd_mach_arm_6SM,       "armv6s-m",       false, & arch_info_struct[20]),
+  N (bfd_mach_arm_7EM,       "armv7e-m",       false, & arch_info_struct[21]),
+  N (bfd_mach_arm_8,         "armv8-a",        false, & arch_info_struct[22]),
+  N (bfd_mach_arm_8R,        "armv8-r",        false, & arch_info_struct[23]),
+  N (bfd_mach_arm_8M_BASE,   "armv8-m.base",   false, & arch_info_struct[24]),
+  N (bfd_mach_arm_8M_MAIN,   "armv8-m.main",   false, & arch_info_struct[25]),
+  N (bfd_mach_arm_8_1M_MAIN, "armv8.1-m.main", false, & arch_info_struct[26]),
+  N (bfd_mach_arm_9,         "armv9-a",        false, & arch_info_struct[27]),
   N (bfd_mach_arm_unknown,   "arm_any",        false, NULL)
 };
 
@@ -306,35 +304,7 @@  bfd_arm_merge_machines (bfd *ibfd, bfd *obfd)
 
   /* Otherwise the general principle that a earlier architecture can be
      linked with a later architecture to produce a binary that will execute
-     on the later architecture.
-
-     We fail however if we attempt to link a Cirrus EP9312 binary with an
-     Intel XScale binary, since these architecture have co-processors which
-     will not both be present on the same physical hardware.  */
-  else if (in == bfd_mach_arm_ep9312
-	   && (out == bfd_mach_arm_XScale
-	       || out == bfd_mach_arm_iWMMXt
-	       || out == bfd_mach_arm_iWMMXt2))
-    {
-      /* xgettext: c-format */
-      _bfd_error_handler (_("error: %pB is compiled for the EP9312, "
-			    "whereas %pB is compiled for XScale"),
-			  ibfd, obfd);
-      bfd_set_error (bfd_error_wrong_format);
-      return false;
-    }
-  else if (out == bfd_mach_arm_ep9312
-	   && (in == bfd_mach_arm_XScale
-	       || in == bfd_mach_arm_iWMMXt
-	       || in == bfd_mach_arm_iWMMXt2))
-    {
-      /* xgettext: c-format */
-      _bfd_error_handler (_("error: %pB is compiled for the EP9312, "
-			    "whereas %pB is compiled for XScale"),
-			  obfd, ibfd);
-      bfd_set_error (bfd_error_wrong_format);
-      return false;
-    }
+     on the later architecture.  */
   else if (in > out)
     bfd_set_arch_mach (obfd, bfd_arch_arm, in);
   /* else
@@ -450,7 +420,6 @@  bfd_arm_update_notes (bfd *abfd, const char *note_section)
     case bfd_mach_arm_5T:      expected = "armv5t"; break;
     case bfd_mach_arm_5TE:     expected = "armv5te"; break;
     case bfd_mach_arm_XScale:  expected = "XScale"; break;
-    case bfd_mach_arm_ep9312:  expected = "ep9312"; break;
     case bfd_mach_arm_iWMMXt:  expected = "iWMMXt"; break;
     case bfd_mach_arm_iWMMXt2: expected = "iWMMXt2"; break;
     }
@@ -501,7 +470,8 @@  architectures[] =
   { "armv5t",  bfd_mach_arm_5T },
   { "armv5te", bfd_mach_arm_5TE },
   { "XScale",  bfd_mach_arm_XScale },
-  { "ep9312",  bfd_mach_arm_ep9312 },
+  /* Maverick extensions have been dropped, so treat this as Armv4T.  */
+  { "ep9312",  bfd_mach_arm_4T },
   { "iWMMXt",  bfd_mach_arm_iWMMXt },
   { "iWMMXt2", bfd_mach_arm_iWMMXt2 },
   { "arm_any", bfd_mach_arm_unknown }
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 2dc6670e012..ca76bee6adc 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -13892,12 +13892,7 @@  elf32_arm_object_p (bfd *abfd)
   mach = bfd_arm_get_mach_from_notes (abfd, ARM_NOTE_SECTION);
 
   if (mach == bfd_mach_arm_unknown)
-    {
-      if (elf_elfheader (abfd)->e_flags & EF_ARM_MAVERICK_FLOAT)
-	mach = bfd_mach_arm_ep9312;
-      else
-	mach = bfd_arm_get_mach_from_attributes (abfd);
-    }
+    mach = bfd_arm_get_mach_from_attributes (abfd);
 
   bfd_default_set_arch_mach (abfd, bfd_arch_arm, mach);
   return true;
@@ -15136,8 +15131,6 @@  elf32_arm_print_private_bfd_data (bfd *abfd, void * ptr)
 
       if (flags & EF_ARM_VFP_FLOAT)
 	fprintf (file, _(" [VFP float format]"));
-      else if (flags & EF_ARM_MAVERICK_FLOAT)
-	fprintf (file, _(" [Maverick float format]"));
       else
 	fprintf (file, _(" [FPA float format]"));
 
@@ -15158,8 +15151,7 @@  elf32_arm_print_private_bfd_data (bfd *abfd, void * ptr)
 
       flags &= ~(EF_ARM_INTERWORK | EF_ARM_APCS_26 | EF_ARM_APCS_FLOAT
 		 | EF_ARM_PIC | EF_ARM_NEW_ABI | EF_ARM_OLD_ABI
-		 | EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT
-		 | EF_ARM_MAVERICK_FLOAT);
+		 | EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT);
       break;
 
     case EF_ARM_EABI_VER1:
@@ -20763,20 +20755,6 @@  elf32_arm_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
 	  flags_compatible = false;
 	}
 
-      if ((in_flags & EF_ARM_MAVERICK_FLOAT) != (out_flags & EF_ARM_MAVERICK_FLOAT))
-	{
-	  if (in_flags & EF_ARM_MAVERICK_FLOAT)
-	    _bfd_error_handler
-	      (_("error: %pB uses %s instructions, whereas %pB does not"),
-	       ibfd, "Maverick", obfd);
-	  else
-	    _bfd_error_handler
-	      (_("error: %pB does not use %s instructions, whereas %pB does"),
-	       ibfd, "Maverick", obfd);
-
-	  flags_compatible = false;
-	}
-
 #ifdef EF_ARM_SOFT_FLOAT
       if ((in_flags & EF_ARM_SOFT_FLOAT) != (out_flags & EF_ARM_SOFT_FLOAT))
 	{
diff --git a/include/elf/arm.h b/include/elf/arm.h
index ad1a9a5d099..01708ef0b93 100644
--- a/include/elf/arm.h
+++ b/include/elf/arm.h
@@ -35,7 +35,7 @@ 
 #define EF_ARM_OLD_ABI     0x100
 #define EF_ARM_SOFT_FLOAT  0x200
 #define EF_ARM_VFP_FLOAT   0x400
-#define EF_ARM_MAVERICK_FLOAT 0x800
+/* Removed, was EF_ARM_MAVERICK_FLOAT 0x800  */
 
 /* Frame unwind information */
 #define PT_ARM_EXIDX (PT_LOPROC + 1)