This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH #3] mips*-kfreebsd-gnu support in GAS
- From: Robert Millan <rmh at gnu dot org>
- To: binutils at sourceware dot org, rdsandiford at googlemail dot com
- Date: Sun, 19 Dec 2010 19:23:22 +0100
- Subject: Re: [PATCH #3] mips*-kfreebsd-gnu support in GAS
- References: <1292343746.29825.0@thorin> <87k4j79x82.fsf@firetop.home>
El 18/12/10 11:44:29, en/na Richard Sandiford va escriure:
>
> Watch the long lines (limit is 80 characters). However, rather than
> do this just for the TE_TMIPS case, and have...
>
> [...]
>
> ...this extra file, I think it would be cleaner to have:
>
> [...]
>
> in tc-mips.c. The configure scripts could then just use the ordinary
> te_freebsd file. mips_target_format would look like this:
>
> [...]
Done, here's a new patch with the adjustments you requested.
2010-12-19 Robert Millan <rmh@gnu.org>
mips-(freebsd|kfreebsd-gnu) support.
* config/tc-mips.c (ELF_TARGET): New macro. Generates target
names accordingly to whether TE_FreeBSD and whether TE_TMIPS
are defined.
(mips_target_format): Refactor code using ELF_TARGET().
(support_64bit_objects): Likewise.
* configure.in: Recognize mips-freebsd and mips-kfreebsd-gnu.
* configure.tgt: Likewise.
* configure: Regenerate.
diff -Nur binutils.old//gas/config/tc-mips.c binutils/gas/config/tc-mips.c
--- binutils.old//gas/config/tc-mips.c 2010-12-18 21:24:35.000000000 +0100
+++ binutils/gas/config/tc-mips.c 2010-12-19 14:45:04.000000000 +0100
@@ -1313,6 +1313,14 @@
/* The default target format to use. */
+#if defined (TE_FreeBSD)
+#define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips-freebsd"
+#elif defined (TE_TMIPS)
+#define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips"
+#else
+#define ELF_TARGET(PREFIX, ENDIAN) PREFIX ENDIAN "mips"
+#endif
+
const char *
mips_target_format (void)
{
@@ -1329,28 +1337,17 @@
? "elf32-bigmips-vxworks"
: "elf32-littlemips-vxworks");
#endif
-#ifdef TE_TMIPS
- /* This is traditional mips. */
- return (target_big_endian
- ? (HAVE_64BIT_OBJECTS
- ? "elf64-tradbigmips"
- : (HAVE_NEWABI
- ? "elf32-ntradbigmips" : "elf32-tradbigmips"))
- : (HAVE_64BIT_OBJECTS
- ? "elf64-tradlittlemips"
- : (HAVE_NEWABI
- ? "elf32-ntradlittlemips" : "elf32-tradlittlemips")));
-#else
return (target_big_endian
? (HAVE_64BIT_OBJECTS
- ? "elf64-bigmips"
+ ? ELF_TARGET ("elf64-", "big")
: (HAVE_NEWABI
- ? "elf32-nbigmips" : "elf32-bigmips"))
+ ? ELF_TARGET ("elf32-n", "big")
+ : ELF_TARGET ("elf32-", "big")))
: (HAVE_64BIT_OBJECTS
- ? "elf64-littlemips"
+ ? ELF_TARGET ("elf64-", "little")
: (HAVE_NEWABI
- ? "elf32-nlittlemips" : "elf32-littlemips")));
-#endif
+ ? ELF_TARGET ("elf32-n", "little")
+ : ELF_TARGET ("elf32-", "little"))));
default:
abort ();
return NULL;
@@ -11264,14 +11261,8 @@
list = bfd_target_list ();
for (l = list; *l != NULL; l++)
-#ifdef TE_TMIPS
- /* This is traditional mips */
- if (strcmp (*l, "elf64-tradbigmips") == 0
- || strcmp (*l, "elf64-tradlittlemips") == 0)
-#else
- if (strcmp (*l, "elf64-bigmips") == 0
- || strcmp (*l, "elf64-littlemips") == 0)
-#endif
+ if (strcmp (*l, ELF_TARGET ("elf64-", "big")) == 0
+ || strcmp (*l, ELF_TARGET ("elf64-", "little")) == 0)
break;
yes = (*l != NULL);
free (list);
diff -Nur binutils.old//gas/configure.in binutils/gas/configure.in
--- binutils.old//gas/configure.in 2010-11-19 03:32:00.000000000 +0100
+++ binutils/gas/configure.in 2010-12-19 14:20:35.000000000 +0100
@@ -250,10 +250,10 @@
esac
# Decide which ABI to target by default.
case ${target} in
- mips64*-linux* | mips-sgi-irix6*)
+ mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* | mips64*-kfreebsd*-gnu)
mips_default_abi=N32_ABI
;;
- mips*-linux*)
+ mips*-linux* | mips*-freebsd* | mips*-kfreebsd*-gnu)
mips_default_abi=O32_ABI
;;
mips64*-openbsd*)
@@ -401,7 +401,8 @@
case ${generic_target}-${fmt} in
mips-*-irix5*-*) emulation="mipsbelf mipslelf mipself mipsbecoff mipslecoff mipsecoff" ;;
- mips*-*-linux*-*) case "$endian" in
+ mips*-*-linux*-* | mips*-*-freebsd* | mips*-*-kfreebsd*-gnu)
+ case "$endian" in
big) emulation="mipsbelf mipslelf mipself" ;;
*) emulation="mipslelf mipsbelf mipself" ;;
esac ;;
diff -Nur binutils.old//gas/configure.tgt binutils/gas/configure.tgt
--- binutils.old//gas/configure.tgt 2010-11-30 02:14:08.000000000 +0100
+++ binutils/gas/configure.tgt 2010-12-19 14:38:56.000000000 +0100
@@ -290,6 +290,8 @@
mips-*-lnews*) fmt=ecoff em=lnews ;;
mips-*-riscos*) fmt=ecoff ;;
mips*-*-linux*) fmt=elf em=tmips ;;
+ mips*-*-freebsd* | mips*-*-kfreebsd*-gnu)
+ fmt=elf em=freebsd ;;
mips-*-sysv4*MP* | mips-*-gnu*) fmt=elf em=tmips ;;
mips*-sde-elf*) fmt=elf em=tmips ;;
mips-*-sysv*) fmt=ecoff ;;