From: "Joseph S. Myers" <joseph@codesourcery.com>
To: Thomas Schwinge <thomas@schwinge.name>
Cc: gcc-patches@gcc.gnu.org, maxim@codesourcery.com, thomas@codesourcery.com
Subject: Re: [PATCH] glibc / uclibc / bionic switch vs. non-Linux, GNU-based systems
Date: Wed, 08 Dec 2010 16:45:00 -0000 [thread overview]
Message-ID: <Pine.LNX.4.64.1012081632080.1827@digraph.polyomino.org.uk> (raw)
In-Reply-To: <1291821876-23891-1-git-send-email-thomas@schwinge.name>
On Wed, 8 Dec 2010, Thomas Schwinge wrote:
> Hallo!
>
> This patch makes GNU/Hurd buildable again. Previously, I had made this
> Linux libc switch depend on Linux kernel only, but when Maxim added
> support for bionic on 2010-05-27 in r159917, then it broke again, and I'm
> now finally giving in... Let the libc options be there at run-time; we
> simply won't use them.
This alternative patch limits use of linux.opt to those targets for
which it is relevant - that is, *-*-linux* (systems using the Linux
kernel and an MMU-based ABI), as those are the systems for which
alternative libcs may be available withing a single compiler
configuration.
This patch works by defining SINGLE_LIBC (along with DEFAULT_LIBC) for
the configurations without libc switching that might however use
linux.h. In addition to those configurations fixed by your patch it
also avoids problems with uClinux configurations that use linux.h
needing to use linux.opt and define DEFAULT_LIBC individually; thus,
it fixes the problems I recently noticed building for lm32-uclinux.
It does not fix the underlying problem with linux.h being used for an
ill-defined set of targets and needing splitting into "Linux kernel",
"MMU-based Linux kernel" and "may use glibc" (or similar) parts.
Tested building cc1 and xgcc for crosses to: i686-gnu
i686-kfreebsd-gnu i686-knetbsd-gnu i686-kopensolaris-gnu bfin-uclinux
moxie-uclinux lm32-uclinux m68k-uclinux alpha-linux-gnu
powerpc-linux-gnu powerpc64-linux-gnu. OK to commit?
2010-12-08 Joseph Myers <joseph@codesourcery.com>
* config/alpha/linux.h (OPTION_GLIBC): Define differently if
SINGLE_LIBC.
* config/linux.h (OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC):
Define differently if SINGLE_LIBC.
* config/rs6000/linux.h (OPTION_GLIBC): Define differently if
SINGLE_LIBC.
* config/rs6000/linux64.h (OPTION_GLIBC): Define differently if
SINGLE_LIBC.
* config.gcc (*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu |
*-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu): Define
DEFAULT_LIBC and SINGLE_LIBC instead of OPTION_GLIBC.
(*-*-uclinux*): Define DEFAULT_LIBC and SINGLE_LIBC.
(bfin*-uclinux*, moxie-*-uclinux*, m68k-*-uclinux*): Don't define
DEFAULT_LIBC or use linux.opt.
diff -rupN --exclude=.svn gcc-mainline-3/gcc/config/alpha/linux.h gcc-mainline/gcc/config/alpha/linux.h
--- gcc-mainline-3/gcc/config/alpha/linux.h 2010-11-19 13:20:56.000000000 -0800
+++ gcc-mainline/gcc/config/alpha/linux.h 2010-12-08 07:36:21.000000000 -0800
@@ -61,7 +61,11 @@ along with GCC; see the file COPYING3.
#undef WCHAR_TYPE
#define WCHAR_TYPE "int"
+#ifdef SINGLE_LIBC
+#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
+#else
#define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
+#endif
/* Determine whether the entire c99 runtime is present in the
runtime library. */
diff -rupN --exclude=.svn gcc-mainline-3/gcc/config/linux.h gcc-mainline/gcc/config/linux.h
--- gcc-mainline-3/gcc/config/linux.h 2010-12-06 06:39:42.000000000 -0800
+++ gcc-mainline/gcc/config/linux.h 2010-12-08 07:35:55.000000000 -0800
@@ -80,9 +80,15 @@ see the files COPYING3 and COPYING.RUNTI
#define LIB_SPEC LINUX_TARGET_LIB_SPEC
/* C libraries supported on Linux. */
+#ifdef SINGLE_LIBC
+#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
+#define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
+#define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
+#else
#define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
#define OPTION_UCLIBC (linux_libc == LIBC_UCLIBC)
#define OPTION_BIONIC (linux_libc == LIBC_BIONIC)
+#endif
#define LINUX_TARGET_OS_CPP_BUILTINS() \
do { \
diff -rupN --exclude=.svn gcc-mainline-3/gcc/config/rs6000/linux.h gcc-mainline/gcc/config/rs6000/linux.h
--- gcc-mainline-3/gcc/config/rs6000/linux.h 2010-12-06 06:41:23.000000000 -0800
+++ gcc-mainline/gcc/config/rs6000/linux.h 2010-12-08 07:36:41.000000000 -0800
@@ -27,7 +27,11 @@
/* We use glibc _mcount for profiling. */
#define NO_PROFILE_COUNTERS 1
+#ifdef SINGLE_LIBC
+#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
+#else
#define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
+#endif
/* glibc has float and long double forms of math functions. */
#undef TARGET_C99_FUNCTIONS
diff -rupN --exclude=.svn gcc-mainline-3/gcc/config/rs6000/linux64.h gcc-mainline/gcc/config/rs6000/linux64.h
--- gcc-mainline-3/gcc/config/rs6000/linux64.h 2010-12-06 06:41:42.000000000 -0800
+++ gcc-mainline/gcc/config/rs6000/linux64.h 2010-12-08 07:36:53.000000000 -0800
@@ -308,7 +308,11 @@ extern int dot_symbols;
process. */
#define OS_MISSING_POWERPC64 !TARGET_64BIT
+#ifdef SINGLE_LIBC
+#define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
+#else
#define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
+#endif
/* glibc has float and long double forms of math functions. */
#undef TARGET_C99_FUNCTIONS
diff -rupN --exclude=.svn gcc-mainline-3/gcc/config.gcc gcc-mainline/gcc/config.gcc
--- gcc-mainline-3/gcc/config.gcc 2010-12-06 03:31:49.000000000 -0800
+++ gcc-mainline/gcc/config.gcc 2010-12-08 07:49:50.000000000 -0800
@@ -562,7 +562,7 @@ case ${target} in
*linux*)
extra_options="$extra_options linux.opt";;
*)
- tm_defines="$tm_defines OPTION_GLIBC=1";;
+ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC SINGLE_LIBC";;
esac
case $target in
*-*-*android*)
@@ -657,6 +657,7 @@ case ${target} in
;;
*-*-uclinux*)
use_gcc_stdint=wrap
+ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC SINGLE_LIBC"
;;
*-*-solaris2*)
extra_options="${extra_options} sol2.opt"
@@ -906,8 +907,6 @@ bfin*-elf*)
bfin*-uclinux*)
tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h linux.h glibc-stdint.h bfin/uclinux.h"
tmake_file=bfin/t-bfin-uclinux
- tm_defines="${tm_defines} DEFAULT_LIBC=LIBC_UCLIBC"
- extra_options="${extra_options} linux.opt"
use_collect2=no
;;
bfin*-linux-uclibc*)
@@ -989,8 +988,6 @@ moxie-*-uclinux*)
tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h glibc-stdint.h moxie/uclinux.h"
extra_parts="crti.o crtn.o crtbegin.o crtend.o"
tmake_file="${tmake_file} moxie/t-moxie moxie/t-moxie-softfp soft-fp/t-softfp"
- tm_defines="${tm_defines} DEFAULT_LIBC=LIBC_UCLIBC"
- extra_options="${extra_options} linux.opt"
;;
moxie-*-rtems*)
tmake_file="${tmake_file} moxie/t-moxie moxie/t-moxie-softfp soft-fp/t-softfp t-rtems"
@@ -1726,8 +1723,7 @@ m68k-*-uclinux*) # Motorola m68k/ColdFi
default_m68k_cpu=68020
default_cf_cpu=5206
tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h glibc-stdint.h flat.h m68k/linux.h m68k/uclinux.h ./sysroot-suffix.h"
- tm_defines="${tm_defines} MOTOROLA=1 DEFAULT_LIBC=LIBC_UCLIBC"
- extra_options="${extra_options} linux.opt"
+ tm_defines="${tm_defines} MOTOROLA=1"
tmake_file="m68k/t-floatlib m68k/t-uclinux m68k/t-mlibs"
;;
m68k-*-linux*) # Motorola m68k's running GNU/Linux
--
Joseph S. Myers
joseph@codesourcery.com
next prev parent reply other threads:[~2010-12-08 16:33 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-08 15:54 Thomas Schwinge
2010-12-08 16:45 ` Joseph S. Myers [this message]
2010-12-08 16:58 ` Thomas Schwinge
2010-12-08 17:28 ` Joseph S. Myers
2010-12-10 12:34 ` Thomas Schwinge
2010-12-14 18:09 ` Ping " Joseph S. Myers
2010-12-20 14:46 ` Ping^2 " Joseph S. Myers
2010-12-20 17:04 ` Maxim Kuvyrkov
2010-12-20 21:06 ` Mark Mitchell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.64.1012081632080.1827@digraph.polyomino.org.uk \
--to=joseph@codesourcery.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=maxim@codesourcery.com \
--cc=thomas@codesourcery.com \
--cc=thomas@schwinge.name \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).