[PATCH/RFA] Mark arm-*-netbsdelf* binaries as ELFOSABI_NETBSD

Jason R Thorpe thorpej@wasabisystems.com
Sat Apr 6 22:09:00 GMT 2002


The upcoming NetBSD 1.6 release is shipping with ARM ELF binaries marked
with ELFOSABI_NETBSD, in order to identify the various characteristics of
the ABI we are currently using (ATPCS, VFP-format doubles, but non-packed
enums).

The following patch adds the necessary support to bfd/gas/ld.

OK for trunk and 2.12 branch?

[ for bfd/ChangeLog ]

	* config.bfd (arm-*-netbsdelf*): Change targ_defvec
	to bfd_elf32_littlearm_nbsd_vec.  Add bfd_elf32_littlearm_vec
	and bfd_elf32_bigarm_nbsd_vec to targ_selvecs.
	* configure.in (bfd_elf32_bigarm_nbsd_vec): Add vector.
	(bfd_elf32_littlearm_nbsd_vec): Add vector.
	* configure: Regenerate.
	* elf32-arm.h (elf32_arm_post_process_headers): If the
	target name is elf32-littlearm-nbsd or elf32-bigarm-nbsd,
	set the EI_OSABI and EI_ABIVERSION fields accordingly.
	* elfarm-nabi.c (ARM_ELF_ABI_VERSION_NBSD): Define.
	(ARM_ELF_OS_ABI_VERSION_NBSD): Define.
	(elf32_arm_nabi_object_p): New function.
	(elf_backend_object_p): Define as elf32_arm_nabi_object_p.
	(bfd_elf32_littlearm_nbsd_vec): Add vector.
	(bfd_elf32_bigarm_nbsd_vec): Add vector.
	* targets.c (_bfd_target_vector): Add bfd_elf32_bigarm_nbsd_vec
	and bfd_elf32_littlearm_nbsd_vec.

[ for gas/ChangeLog ]

	* config/tc-arm.c (elf32_arm_target_format): If TE_NetBSD,
	return "elf32-bigarm-nbsd" and "elf32-littlearm-nbsd" instead
	of "elf32-bigarm" and "elf32-littlearm".

[ for ld/ChangeLog ]

	* emulparams/armelf_nbsd.sh (OUTPUT_FORMAT): Set to
	elf32-littlearm-nbsd.
	(BIG_OUTPUT_FORMAT): Set to elf32-bigarm-nbsd.
	(LITTLE_OUTPUT_FORMAT): Set to elf32-littlearm-nbsd.

-- 
        -- Jason R. Thorpe <thorpej@wasabisystems.com>
-------------- next part --------------
Index: bfd/config.bfd
===================================================================
RCS file: /cvs/src/src/bfd/config.bfd,v
retrieving revision 1.87
diff -u -r1.87 config.bfd
--- bfd/config.bfd	18 Mar 2002 12:45:37 -0000	1.87
+++ bfd/config.bfd	7 Apr 2002 05:30:18 -0000
@@ -116,8 +116,8 @@
     ;;
 
   arm-*-netbsdelf*)
-    targ_defvec=bfd_elf32_littlearm_vec
-    targ_selvecs="bfd_elf32_bigarm_vec armnetbsd_vec"
+    targ_defvec=bfd_elf32_littlearm_nbsd_vec
+    targ_selvecs="bfd_elf32_littlearm_vec bfd_elf32_bigarm_nbsd_vec bfd_elf32_bigarm_vec armnetbsd_vec"
     ;;
   arm-*-netbsd* | arm-*-openbsd*)
     targ_defvec=armnetbsd_vec
Index: bfd/configure.in
===================================================================
RCS file: /cvs/src/src/bfd/configure.in,v
retrieving revision 1.89
diff -u -r1.89 configure.in
--- bfd/configure.in	4 Apr 2002 07:01:19 -0000	1.89
+++ bfd/configure.in	7 Apr 2002 05:30:24 -0000
@@ -550,7 +550,8 @@
     bfd_elf32_big_generic_vec) 	tb="$tb elf32-gen.lo elf32.lo $elf" ;;
     bfd_elf32_bigarc_vec)	tb="$tb elf32-arc.lo elf32.lo $elf" ;;
     bfd_elf32_bigarm_oabi_vec)	tb="$tb elfarm-oabi.lo elf32.lo $elf" ;;
-    bfd_elf32_bigarm_vec)	tb="$tb elfarm-nabi.lo elf32.lo $elf" ;;
+    bfd_elf32_bigarm_vec | bfd_elf32_bigarm_nbsd_vec)
+    				tb="$tb elfarm-nabi.lo elf32.lo $elf" ;;
     bfd_elf32_bigmips_vec) 	tb="$tb elf32-mips.lo elfxx-mips.lo elf32.lo $elf ecofflink.lo" ;;
     bfd_elf32_cris_vec)		tb="$tb elf32-cris.lo elf32.lo $elf" ;;
     bfd_elf32_d10v_vec)		tb="$tb elf32-d10v.lo elf32.lo $elf" ;;
@@ -569,7 +570,8 @@
     bfd_elf32_little_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;;
     bfd_elf32_littlearc_vec)	tb="$tb elf32-arc.lo elf32.lo $elf" ;;
     bfd_elf32_littlearm_oabi_vec) tb="$tb elfarm-oabi.lo elf32.lo $elf" ;;
-    bfd_elf32_littlearm_vec)	tb="$tb elfarm-nabi.lo elf32.lo $elf" ;;
+    bfd_elf32_littlearm_vec | bfd_elf32_littlearm_nbsd_vec)
+				tb="$tb elfarm-nabi.lo elf32.lo $elf" ;;
     bfd_elf32_littlemips_vec) 	tb="$tb elf32-mips.lo elfxx-mips.lo elf32.lo $elf ecofflink.lo" ;;
     bfd_elf32_m32r_vec)		tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
     bfd_elf32_m68hc11_vec)	tb="$tb elf32-m68hc11.lo elf32.lo $elf" ;;
Index: bfd/elf32-arm.h
===================================================================
RCS file: /cvs/src/src/bfd/elf32-arm.h,v
retrieving revision 1.79
diff -u -r1.79 elf32-arm.h
--- bfd/elf32-arm.h	4 Apr 2002 19:53:36 -0000	1.79
+++ bfd/elf32-arm.h	7 Apr 2002 05:30:29 -0000
@@ -3586,6 +3586,16 @@
 
   i_ehdrp = elf_elfheader (abfd);
 
+#ifdef ARM_ELF_OS_ABI_VERSION_NBSD
+  if (strcmp (bfd_get_target (abfd), "elf32-littlearm-nbsd") == 0
+      || strcmp (bfd_get_target (abfd), "elf32-bigarm-nbsd") == 0)
+    {
+      i_ehdrp->e_ident[EI_OSABI]      = ARM_ELF_OS_ABI_VERSION_NBSD;
+      i_ehdrp->e_ident[EI_ABIVERSION] = ARM_ELF_ABI_VERSION_NBSD;
+      return;
+    }
+#endif
+
   i_ehdrp->e_ident[EI_OSABI]      = ARM_ELF_OS_ABI_VERSION;
   i_ehdrp->e_ident[EI_ABIVERSION] = ARM_ELF_ABI_VERSION;
 }
Index: bfd/elfarm-nabi.c
===================================================================
RCS file: /cvs/src/src/bfd/elfarm-nabi.c,v
retrieving revision 1.10
diff -u -r1.10 elfarm-nabi.c
--- bfd/elfarm-nabi.c	18 Sep 2001 09:57:24 -0000	1.10
+++ bfd/elfarm-nabi.c	7 Apr 2002 05:30:29 -0000
@@ -29,23 +29,23 @@
 
 #define USE_REL
 
-#define TARGET_LITTLE_SYM               bfd_elf32_littlearm_vec
-#define TARGET_LITTLE_NAME              "elf32-littlearm"
-#define TARGET_BIG_SYM                  bfd_elf32_bigarm_vec
-#define TARGET_BIG_NAME                 "elf32-bigarm"
-
 #define elf_info_to_howto               0
 #define elf_info_to_howto_rel           elf32_arm_info_to_howto
 
 #define ARM_ELF_ABI_VERSION		0
 #define ARM_ELF_OS_ABI_VERSION		ELFOSABI_ARM
 
+#define ARM_ELF_ABI_VERSION_NBSD	0
+#define ARM_ELF_OS_ABI_VERSION_NBSD	ELFOSABI_NETBSD
+
 static reloc_howto_type * elf32_arm_reloc_type_lookup
   PARAMS ((bfd * abfd, bfd_reloc_code_real_type code));
 static boolean elf32_arm_nabi_grok_prstatus
   PARAMS ((bfd *abfd, Elf_Internal_Note *note));
 static boolean elf32_arm_nabi_grok_psinfo
   PARAMS ((bfd *abfd, Elf_Internal_Note *note));
+static boolean elf32_arm_nabi_object_p
+  PARAMS ((bfd *abfd));
 
 /* Note: code such as elf32_arm_reloc_type_lookup expect to use e.g.
    R_ARM_PC24 as an index into this, and find the R_ARM_PC24 HOWTO
@@ -746,7 +746,51 @@
   return true;
 }
 
+/* Return nonzero if ABFD represents an ARM ELF32 file.  */
+
+static boolean
+elf32_arm_nabi_object_p (abfd)
+     bfd *abfd;
+{
+  Elf_Internal_Ehdr * i_ehdrp;
+
+  i_ehdrp = elf_elfheader (abfd);
+  if (strcmp (bfd_get_target (abfd), "elf32-littlearm-nbsd") == 0
+      || strcmp (bfd_get_target (abfd), "elf32-bigarm-nbsd") == 0)
+    {
+      if (i_ehdrp->e_ident[EI_OSABI] != ARM_ELF_OS_ABI_VERSION_NBSD)
+	return false;
+    }
+  else
+    {
+      if (i_ehdrp->e_ident[EI_OSABI] != ARM_ELF_OS_ABI_VERSION)
+	return false;
+    }
+
+  return true;
+}
+
 #define elf_backend_grok_prstatus	elf32_arm_nabi_grok_prstatus
 #define elf_backend_grok_psinfo		elf32_arm_nabi_grok_psinfo
+#define elf_backend_object_p		elf32_arm_nabi_object_p
+
+#define TARGET_LITTLE_SYM               bfd_elf32_littlearm_vec
+#define TARGET_LITTLE_NAME              "elf32-littlearm"
+#define TARGET_BIG_SYM                  bfd_elf32_bigarm_vec
+#define TARGET_BIG_NAME                 "elf32-bigarm"
 
 #include "elf32-arm.h"
+
+#define INCLUDED_TARGET_FILE 1
+
+#undef TARGET_LITTLE_SYM
+#undef TARGET_LITTLE_NAME
+#undef TARGET_BIG_SYM
+#undef TARGET_BIG_NAME
+
+#define TARGET_LITTLE_SYM               bfd_elf32_littlearm_nbsd_vec
+#define TARGET_LITTLE_NAME              "elf32-littlearm-nbsd"
+#define TARGET_BIG_SYM                  bfd_elf32_bigarm_nbsd_vec
+#define TARGET_BIG_NAME                 "elf32-bigarm-nbsd"
+
+#include "elf32-target.h"
Index: bfd/targets.c
===================================================================
RCS file: /cvs/src/src/bfd/targets.c,v
retrieving revision 1.59
diff -u -r1.59 targets.c
--- bfd/targets.c	4 Apr 2002 19:53:38 -0000	1.59
+++ bfd/targets.c	7 Apr 2002 05:30:31 -0000
@@ -499,6 +499,7 @@
 extern const bfd_target bfd_elf32_bigarc_vec;
 extern const bfd_target bfd_elf32_bigarm_oabi_vec;
 extern const bfd_target bfd_elf32_bigarm_vec;
+extern const bfd_target bfd_elf32_bigarm_nbsd_vec;
 extern const bfd_target bfd_elf32_bigmips_vec;
 extern const bfd_target bfd_elf32_cris_vec;
 extern const bfd_target bfd_elf32_d10v_vec;
@@ -518,6 +519,7 @@
 extern const bfd_target bfd_elf32_littlearc_vec;
 extern const bfd_target bfd_elf32_littlearm_oabi_vec;
 extern const bfd_target bfd_elf32_littlearm_vec;
+extern const bfd_target bfd_elf32_littlearm_nbsd_vec;
 extern const bfd_target bfd_elf32_littlemips_vec;
 extern const bfd_target bfd_elf32_m32r_vec;
 extern const bfd_target bfd_elf32_m68hc11_vec;
@@ -749,6 +751,7 @@
 	&bfd_elf32_bigarc_vec,
 	&bfd_elf32_bigarm_oabi_vec,
 	&bfd_elf32_bigarm_vec,
+	&bfd_elf32_bigarm_nbsd_vec,
 	&bfd_elf32_bigmips_vec,
 	&bfd_elf32_cris_vec,
 	&bfd_elf32_d10v_vec,
@@ -770,6 +773,7 @@
 	&bfd_elf32_littlearc_vec,
 	&bfd_elf32_littlearm_oabi_vec,
 	&bfd_elf32_littlearm_vec,
+	&bfd_elf32_littlearm_nbsd_vec,
 	&bfd_elf32_littlemips_vec,
 	&bfd_elf32_m32r_vec,
 	&bfd_elf32_m68hc11_vec,
Index: gas/config/tc-arm.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-arm.c,v
retrieving revision 1.117
diff -u -r1.117 tc-arm.c
--- gas/config/tc-arm.c	21 Mar 2002 09:13:34 -0000	1.117
+++ gas/config/tc-arm.c	7 Apr 2002 05:30:40 -0000
@@ -11463,14 +11463,22 @@
       if (target_oabi)
 	return "elf32-bigarm-oabi";
       else
+#ifdef TE_NetBSD
+	return "elf32-bigarm-nbsd";
+#else
 	return "elf32-bigarm";
+#endif
     }
   else
     {
       if (target_oabi)
 	return "elf32-littlearm-oabi";
       else
+#ifdef TE_NetBSD
+	return "elf32-littlearm-nbsd";
+#else
 	return "elf32-littlearm";
+#endif
     }
 }
 
Index: ld/emulparams/armelf_nbsd.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/armelf_nbsd.sh,v
retrieving revision 1.1
diff -u -r1.1 armelf_nbsd.sh
--- ld/emulparams/armelf_nbsd.sh	20 Dec 2001 03:19:43 -0000	1.1
+++ ld/emulparams/armelf_nbsd.sh	7 Apr 2002 05:30:43 -0000
@@ -2,5 +2,9 @@
 MAXPAGESIZE=0x8000
 TEXT_START_ADDR=0x00008000
 
+OUTPUT_FORMAT="elf32-littlearm-nbsd"
+BIG_OUTPUT_FORMAT="elf32-bigarm-nbsd"
+LITTLE_OUTPUT_FORMAT="elf32-littlearm-nbsd"
+
 unset STACK_ADDR
 unset EMBEDDED


More information about the Binutils mailing list