PR binutils/2983
authorNick Clifton <nickc@redhat.com>
Wed, 2 Aug 2006 16:25:14 +0000 (16:25 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 2 Aug 2006 16:25:14 +0000 (16:25 +0000)
* bfd/elf64-x86-64.c: Add FreeBSD support.
  (elf64_x86_64_fbsd_post_process_headers): New function.
* bfd/targets.c (_bfd_target_vector): Add bfd_elf64_x86_64_freebsd_vec.
* bfd/config.bfd (x64_64-*-freebsd*): Add bfd_elf64_x86_64_freebsd_vec to the targ_selvecs.
* bfd/configure.in: Add entry for bfd_elf64_x86_64_freebsd_vec.
* bfd/configure: Regenerate.
* gas/config/tc-i386.c (md_parse_option): Treat any target starting with elf64_x86_64 as a viable target for the -64 switch.
  (i386_target_format): For 64-bit ELF flavoured output use ELF_TARGET_FORMAT64.
* gas/config/tc-i386.h (ELF_TARGET_FORMAT64): Define.
* ld/emulparams/elf_x86_64_fbsd.sh (OUTPUT_FORMAT): Define as elf64-x86-64-freebsd.

bfd/ChangeLog
bfd/config.bfd
bfd/configure
bfd/configure.in
bfd/elf64-x86-64.c
bfd/targets.c
gas/ChangeLog
gas/config/tc-i386.c
gas/config/tc-i386.h
ld/ChangeLog
ld/emulparams/elf_x86_64_fbsd.sh

index 0b9613de143755022dd81ecc916d11f19341a280..b1537bd85c3d2b3d9d18b36533da2f06016daa89 100644 (file)
@@ -1,3 +1,14 @@
+2006-08-02  Petr Salinger  <Petr.Salinger@seznam.cz>
+
+       PR binutils/2983
+       * elf64-x86-64.c: Add FreeBSD support.
+       (elf64_x86_64_fbsd_post_process_headers): New function.
+       * targets.c (_bfd_target_vector): Add bfd_elf64_x86_64_freebsd_vec.
+       * config.bfd (x64_64-*-freebsd*): Add bfd_elf64_x86_64_freebsd_vec
+       to the targ_selvecs.
+       * configure.in: Add entry for bfd_elf64_x86_64_freebsd_vec.
+       * configure: Regenerate.
+
 2006-07-26  Andreas Schwab  <schwab@suse.de>
 
        * elfxx-ia64.c (elfNN_ia64_choose_gp): Use rawsize if set.
index 0a8ed0f6a31f0921b51afaa0e475a0be37660ec6..dfe631e0821757eb6e508d162eba2799788f76e0 100644 (file)
@@ -564,8 +564,8 @@ case "${targ}" in
     want64=true
     ;;
   x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
-    targ_defvec=bfd_elf64_x86_64_vec
-    targ_selvecs="bfd_elf32_i386_vec i386coff_vec bfd_efi_app_ia32_vec"
+    targ_defvec=bfd_elf64_x86_64_freebsd_vec
+    targ_selvecs="bfd_elf32_i386_freebsd_vec i386coff_vec bfd_efi_app_ia32_vec bfd_elf32_i386_vec bfd_elf64_x86_64_vec"
     want64=true
     ;;
   x86_64-*-netbsd* | x86_64-*-openbsd*)
index fa9307d4a470a99bcf1800970e96c6edc0d4e6de..86b94922f13cae1eb6df742b484812f20ba01c08 100755 (executable)
@@ -5282,8 +5282,9 @@ INCINTL=
 XGETTEXT=
 GMSGFMT=
 POSUB=
-if test -f ../intl/config.intl; then
-  . ../intl/config.intl
+
+if test -f  ../intl/config.intl; then
+  .  ../intl/config.intl
 fi
 echo "$as_me:$LINENO: checking whether NLS is requested" >&5
 echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
@@ -10917,6 +10918,7 @@ do
     bfd_elf64_sparc_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 ;;
     bfd_elf64_x86_64_vec)      tb="$tb elf64-x86-64.lo elf64.lo $elf"; target_size=64 ;;
     bfd_mmo_vec)               tb="$tb mmo.lo" target_size=64 ;;
     bfd_powerpc_pe_vec)         tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;
index 41d55f66e9e953427a48fcf88fa9a965b6f487ec..e2061602492ec3cadb2bfecbb3511219d275b493 100644 (file)
@@ -708,6 +708,7 @@ do
     bfd_elf64_sparc_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 ;;
     bfd_elf64_x86_64_vec)      tb="$tb elf64-x86-64.lo elf64.lo $elf"; target_size=64 ;;
     bfd_mmo_vec)               tb="$tb mmo.lo" target_size=64 ;;
     bfd_powerpc_pe_vec)         tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;
index 6ca622a0d23d26df5c30b92ade0c28639a0277b8..34fde961e36afc17aed25177ddcc4afd26d6b2c1 100644 (file)
@@ -3710,3 +3710,34 @@ static const struct bfd_elf_special_section
   elf64_x86_64_hash_symbol
 
 #include "elf64-target.h"
+
+/* FreeBSD support.  */
+
+#undef  TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM                  bfd_elf64_x86_64_freebsd_vec
+#undef  TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME                 "elf64-x86-64-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_x86_64_fbsd_post_process_headers (bfd * abfd,
+                                       struct bfd_link_info * link_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_x86_64_fbsd_post_process_headers
+
+#undef  elf64_bed
+#define elf64_bed elf64_x86_64_fbsd_bed
+
+#include "elf64-target.h"
index 180ecd2bf5789fda858bf2386f785ce0bf154e36..ce3e4870951ce430acd841966563e6bea2a455e5 100644 (file)
@@ -668,6 +668,7 @@ extern const bfd_target bfd_elf64_sh64nbsd_vec;
 extern const bfd_target bfd_elf64_sparc_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;
 extern const bfd_target bfd_elf64_x86_64_vec;
 extern const bfd_target bfd_mmo_vec;
 extern const bfd_target bfd_powerpc_pe_vec;
@@ -984,6 +985,7 @@ static const bfd_target * const _bfd_target_vector[] = {
        &bfd_elf64_sparc_vec,
        &bfd_elf64_tradbigmips_vec,
        &bfd_elf64_tradlittlemips_vec,
+       &bfd_elf64_x86_64_freebsd_vec,
        &bfd_elf64_x86_64_vec,
        &bfd_mmo_vec,
 #endif
index 937a60f072b0ed7b7271e905d943b588909e5563..593d5f826944ec2f513ad459a1ea3e01825de396 100644 (file)
@@ -1,3 +1,12 @@
+2006-08-02  Petr Salinger  <Petr.Salinger@seznam.cz>
+
+       PR binutils/2983
+       * config/tc-i386.c (md_parse_option): Treat any target starting
+       with elf64_x86_64 as a viable target for the -64 switch.
+       (i386_target_format): For 64-bit ELF flavoured output use
+       ELF_TARGET_FORMAT64.
+       * config/tc-i386.h (ELF_TARGET_FORMAT64): Define.
+
 2006-08-02  Nick Clifton  <nickc@redhat.com>
 
        PR gas/2991
index 10605109c77119e402f9aed9d98e71f4d5c395e8..f85aed3b8fdca92f041b40305af77bd5c9159a5f 100644 (file)
@@ -5819,7 +5819,7 @@ md_parse_option (int c, char *arg)
 
        list = bfd_target_list ();
        for (l = list; *l != NULL; l++)
-         if (strcmp (*l, "elf64-x86-64") == 0)
+         if (strncmp (*l, "elf64-x86-64", 12) == 0)
            {
              default_arch = "x86_64";
              break;
@@ -5975,7 +5975,7 @@ i386_target_format ()
            object_64bit = 1;
            use_rela_relocations = 1;
          }
-       return flag_code == CODE_64BIT ? "elf64-x86-64" : ELF_TARGET_FORMAT;
+       return flag_code == CODE_64BIT ? ELF_TARGET_FORMAT64 : ELF_TARGET_FORMAT;
       }
 #endif
     default:
index 4519132abed938a46ce7eb4172e437ad54d67816..43d6df9143de7ea56a4f27c0f9b8d0636b7f040b 100644 (file)
@@ -1,6 +1,6 @@
 /* tc-i386.h -- Header file for tc-i386.c
    Copyright 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005
+   2001, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
@@ -55,6 +55,7 @@ extern unsigned long i386_mach (void);
 
 #ifdef TE_FreeBSD
 #define ELF_TARGET_FORMAT      "elf32-i386-freebsd"
+#define ELF_TARGET_FORMAT64    "elf64-x86-64-freebsd"
 #elif defined (TE_VXWORKS)
 #define ELF_TARGET_FORMAT      "elf32-i386-vxworks"
 #endif
@@ -63,6 +64,10 @@ extern unsigned long i386_mach (void);
 #define ELF_TARGET_FORMAT      "elf32-i386"
 #endif
 
+#ifndef ELF_TARGET_FORMAT64
+#define ELF_TARGET_FORMAT64    "elf64-x86-64"
+#endif
+
 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
      || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
 extern const char *i386_target_format PARAMS ((void));
index f874f5dbfb3062a18964ae1abb11695b0289849d..e3e78d4bf23df705ba61af5129b6b8880bcc0e68 100644 (file)
@@ -1,3 +1,9 @@
+2006-08-02  Petr Salinger  <Petr.Salinger@seznam.cz>
+
+       PR binutils/2983
+       * emulparams/elf_x86_64_fbsd.sh (OUTPUT_FORMAT): Define as
+       elf64-x86-64-freebsd.
+
 2006-08-01  H.J. Lu  <hongjiu.lu@intel.com>
 
        * ldlang.c (init_os): Add flags. Replace bfd_make_section with
index 34258cb928991e94fd27010e67f160ee5902742f..35b6a626cd3dcee941ec424e765083388e15bfeb 100644 (file)
@@ -1,2 +1,3 @@
 . ${srcdir}/emulparams/elf_x86_64.sh
 . ${srcdir}/emulparams/elf_fbsd.sh
+OUTPUT_FORMAT="elf64-x86-64-freebsd"