2006-10-18 Roy Marples <uberlord@gentoo.org>
authorMike Frysinger <vapier@gentoo.org>
Wed, 18 Oct 2006 23:58:52 +0000 (23:58 +0000)
committerMike Frysinger <vapier@gentoo.org>
Wed, 18 Oct 2006 23:58:52 +0000 (23:58 +0000)
* bfd/elf64-sparc.c: Add FreeBSD support.
(elf64_sparc_fbsd_post_process_headers): New function.
* bfd/targets.c (_bfd_target_vector): Add bfd_elf64_sparc_freebsd_vec.
* bfd/config.bfd (sparc64-*-freebsd*): Set targ_defvec to bfd_elf64_sparc_freebsd_vec.
* bfd/configure.in: Add entry for bfd_elf64_sparc_freebsd_vec.
* bfd/configure: Regenerate.
* gas/config/tc-sparc.c (md_parse_option): Treat any target starting with elf32-sparc
as a viable target for the -32 switch and any target starting with elf64-sparc as a
viable target for the -64 switch.
(sparc_target_format): For 64-bit ELF flavoured output use ELF_TARGET_FORMAT64
while for 32-bit ELF flavoured output use ELF_TARGET_FORMAT.
* gas/config/tc-sparc.h (ELF_TARGET_FORMAT, ELF_TARGET_FORMAT64): Define.
* ld/emulparams/elf64_sparc_fbsd.sh (OUTPUT_FORMAT): Define as elf64-sparc-freebsd.

bfd/ChangeLog
bfd/config.bfd
bfd/configure
bfd/configure.in
bfd/elf64-sparc.c
bfd/targets.c
gas/ChangeLog
gas/config/tc-sparc.c
gas/config/tc-sparc.h
ld/ChangeLog
ld/emulparams/elf64_sparc_fbsd.sh

index 961e65e04c9a63be042b185d08a7c3d153f13735..c558facd7a89263888df2632aaab8e5487f5b1db 100644 (file)
@@ -1,3 +1,12 @@
+2006-10-18  Roy Marples  <uberlord@gentoo.org>
+
+       * elf64-sparc.c: Add FreeBSD support.
+       (elf64_sparc_fbsd_post_process_headers): New function.
+       * targets.c (_bfd_target_vector): Add bfd_elf64_sparc_freebsd_vec.
+       * config.bfd (sparc64-*-freebsd*): Set targ_defvec to bfd_elf64_sparc_freebsd_vec.
+       * configure.in: Add entry for bfd_elf64_sparc_freebsd_vec.
+       * configure: Regenerate.
+
 2006-10-17  Mark Shinwell  <shinwell@codesourcery.com>
 
        * elf32-arm.c (elf32_arm_final_link_relocate): Add support for
index 6f6a7b9168c0785db30d578cdae030282783d3ef..31dbf0e9fae62fd339d01a1e0c8ca698482e05ee 100644 (file)
@@ -182,7 +182,11 @@ case "${targ}" in
     targ_selvecs="bfd_elf64_ia64_hpux_big_vec"
     want64=true
     ;;
-  sparc64-*-freebsd* | sparc64-*-netbsd* | sparc64-*-openbsd* | sparc64-*-kfreebsd*-gnu)
+  sparc64-*-freebsd* | sparc64-*-kfreebsd*-gnu)
+    targ_defvec=bfd_elf64_sparc_freebsd_vec
+    targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+    ;;
+  sparc64-*-netbsd* | sparc64-*-openbsd*)
     targ_defvec=bfd_elf64_sparc_vec
     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
     want64=true
index 0f878f04d9fbe991a909745bdbcfc71dba880b94..fa61beedffd3adcc757b18383e00a88a17a38f8c 100755 (executable)
@@ -10926,6 +10926,7 @@ do
     bfd_elf64_sh64lnbsd_vec)   tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
     bfd_elf64_sh64nbsd_vec)    tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
     bfd_elf64_sparc_vec)       tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_sparc_freebsd_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_tradbigmips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
     bfd_elf64_tradlittlemips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
     bfd_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf64.lo $elf"; target_size=64 ;;
index 339af936af391cadbcb422b752d906e8bba094b4..05324348335f08c9cacd20b0291a17aebb1d8f4d 100644 (file)
@@ -716,6 +716,7 @@ do
     bfd_elf64_sh64lnbsd_vec)   tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
     bfd_elf64_sh64nbsd_vec)    tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;;
     bfd_elf64_sparc_vec)       tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_sparc_freebsd_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_tradbigmips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
     bfd_elf64_tradlittlemips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
     bfd_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf64.lo $elf"; target_size=64 ;;
index 118555370541437a17d68f5201922710c3a4b098..0eefc95c125eb982c9df3420b4bd5fdf32f259c9 100644 (file)
@@ -904,3 +904,33 @@ const struct elf_size_info elf64_sparc_size_info =
 #define elf_backend_plt_alignment 8
 
 #include "elf64-target.h"
+
+/* FreeBSD support */
+#undef  TARGET_BIG_SYM
+#define TARGET_BIG_SYM bfd_elf64_sparc_freebsd_vec
+#undef  TARGET_BIG_NAME
+#define TARGET_BIG_NAME "elf64-sparc-freebsd"
+
+/* The kernel recognizes executables as valid only if they carry a
+   "FreeBSD" label in the ELF header.  So we put this label on all
+   executables and (for simplicity) also all other object files.  */
+
+static void
+elf64_sparc_fbsd_post_process_headers (bfd *abfd,
+                                       struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  Elf_Internal_Ehdr *i_ehdrp;  /* ELF file header, internal form.  */
+
+  i_ehdrp = elf_elfheader (abfd);
+
+  /* Put an ABI label supported by FreeBSD >= 4.1 */
+  i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD;
+}
+
+#undef  elf_backend_post_process_headers
+#define elf_backend_post_process_headers       elf64_sparc_fbsd_post_process_headers
+#undef  elf64_bed
+#define elf64_bed                              elf64_sparc_fbsd_bed
+
+#include "elf64-target.h"
+
index 117e7c6e33da6698421c62312d17a8ba5d3f7335..96fab096f9d667bb99508cdd6254888b1bcc652d 100644 (file)
@@ -674,6 +674,7 @@ extern const bfd_target bfd_elf64_sh64blin_vec;
 extern const bfd_target bfd_elf64_sh64lnbsd_vec;
 extern const bfd_target bfd_elf64_sh64nbsd_vec;
 extern const bfd_target bfd_elf64_sparc_vec;
+extern const bfd_target bfd_elf64_sparc_freebsd_vec;
 extern const bfd_target bfd_elf64_tradbigmips_vec;
 extern const bfd_target bfd_elf64_tradlittlemips_vec;
 extern const bfd_target bfd_elf64_x86_64_freebsd_vec;
@@ -1002,6 +1003,7 @@ static const bfd_target * const _bfd_target_vector[] =
        &bfd_elf64_sh64lin_vec,
        &bfd_elf64_sh64blin_vec,
        &bfd_elf64_sparc_vec,
+       &bfd_elf64_sparc_freebsd_vec,
        &bfd_elf64_tradbigmips_vec,
        &bfd_elf64_tradlittlemips_vec,
        &bfd_elf64_x86_64_freebsd_vec,
index 38b93fbb6c0a049d44218edd4d77144626697816..22262e3791863eca7da7b6dd3cda78e06e7440d2 100644 (file)
@@ -1,3 +1,12 @@
+2006-10-18  Roy Marples  <uberlord@gentoo.org>
+
+       * config/tc-sparc.c (md_parse_option): Treat any target starting with
+       elf32-sparc as a viable target for the -32 switch and any target starting with
+       elf64-sparc as a viable target for the -64 switch.
+       (sparc_target_format): For 64-bit ELF flavoured output use ELF_TARGET_FORMAT64
+       while for 32-bit ELF flavoured output use ELF_TARGET_FORMAT.
+       * config/tc-sparc.h (ELF_TARGET_FORMAT, ELF_TARGET_FORMAT64): Define.
+
 2006-10-17  H.J. Lu  <hongjiu.lu@intel.com>
 
        * configure: Regenerated.
index d84c2733678fc1cbe8d1ffb3643c9a6758cf371f..d6a1a15e731ea559039af01acf6b9b109ce43de4 100644 (file)
@@ -337,7 +337,7 @@ sparc_target_format ()
 #endif
 
 #ifdef OBJ_ELF
-  return sparc_arch_size == 64 ? "elf64-sparc" : "elf32-sparc";
+  return sparc_arch_size == 64 ? ELF64_TARGET_FORMAT : ELF_TARGET_FORMAT;
 #endif
 
   abort ();
@@ -545,12 +545,12 @@ md_parse_option (c, arg)
          {
            if (sparc_arch_size == 32)
              {
-               if (strcmp (*l, "elf32-sparc") == 0)
+               if (CONST_STRNEQ (*l, "elf32-sparc"))
                  break;
              }
            else
              {
-               if (strcmp (*l, "elf64-sparc") == 0)
+               if (CONST_STRNEQ (*l, "elf64-sparc"))
                  break;
              }
          }
index 3feac4f36207011cb540d742f13f9e7a30bd6d09..3318dddd74b31a8932affbf94500df3812032b6e 100644 (file)
@@ -31,6 +31,19 @@ struct frag;
 
 #define TARGET_ARCH bfd_arch_sparc
 
+#ifdef TE_FreeBSD
+#define ELF_TARGET_FORMAT      "elf32-sparc-freebsd"
+#define ELF64_TARGET_FORMAT    "elf64-sparc-freebsd"
+#endif
+
+#ifndef ELF_TARGET_FORMAT
+#define ELF_TARGET_FORMAT      "elf32-sparc"
+#endif
+
+#ifndef ELF64_TARGET_FORMAT
+#define ELF64_TARGET_FORMAT    "elf64-sparc"
+#endif
+
 extern const char *sparc_target_format PARAMS ((void));
 #define TARGET_FORMAT sparc_target_format ()
 
index 674051eaa1290e25642c56fc888240f30464d0d2..33bbe3d8d0a9948ade3b06c6978653322bc6e248 100644 (file)
@@ -1,3 +1,7 @@
+2006-10-18  Roy Marples  <uberlord@gentoo.org>
+
+       * emulparams/elf64_sparc_fbsd.sh (OUTPUT_FORMAT): Define as elf64-sparc-freebsd.
+
 2006-10-18  Joseph Myers  <joseph@codesourcery.com>
 
        * configure.tgt (i[3-7]86-*-linux-*): Also define
index 232a32143b0c70731850ea54e1087d05800b184e..21d13ab49853f091c6e64940f74ef4e55c825422 100644 (file)
@@ -1,2 +1,4 @@
 . ${srcdir}/emulparams/elf64_sparc.sh
 . ${srcdir}/emulparams/elf_fbsd.sh
+
+OUTPUT_FORMAT="elf64-sparc-freebsd"