mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 01:40:39 +08:00
g++spec.c (SKIPOPT): define.
cp/: * g++spec.c (SKIPOPT): define. (lang_specific_driver): Handle -static-libstdc++. Only add LIBSTDCXX_STATIC if we add LIBSTDCXX. ./: * doc/invoke.texi (Option Summary): Mention -static-libstdc++. (Link Options): Document -static-libstdc++. From-SVN: r148951
This commit is contained in:
parent
0dae2d924d
commit
96be7a1107
@ -1,3 +1,8 @@
|
||||
2009-06-25 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* doc/invoke.texi (Option Summary): Mention -static-libstdc++.
|
||||
(Link Options): Document -static-libstdc++.
|
||||
|
||||
2009-06-25 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
|
||||
PR target/38731
|
||||
@ -757,7 +762,7 @@
|
||||
32 bits.
|
||||
* config/arm/arm.md: Likewise.
|
||||
|
||||
2009-06-19 Ian Lance Taylor <ian@airs.com>
|
||||
2009-06-19 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* tree-cfg.c (gimple_redirect_edge_and_branch): Change ERROR_MARK
|
||||
to GIMPLE_ERROR_MARK.
|
||||
|
@ -1,3 +1,9 @@
|
||||
2009-06-25 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* g++spec.c (SKIPOPT): define.
|
||||
(lang_specific_driver): Handle -static-libstdc++. Only add
|
||||
LIBSTDCXX_STATIC if we add LIBSTDCXX.
|
||||
|
||||
2009-06-25 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* cvt.c (convert_to_void): Only warn about COND_EXPR if neither
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Specific flags and argument handling of the C++ front end.
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
2007, 2008 Free Software Foundation, Inc.
|
||||
2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
@ -30,6 +30,8 @@ along with GCC; see the file COPYING3. If not see
|
||||
#define MATHLIB (1<<2)
|
||||
/* This bit is set if they did `-lc'. */
|
||||
#define WITHLIBC (1<<3)
|
||||
/* Skip this option. */
|
||||
#define SKIPOPT (1<<4)
|
||||
|
||||
#ifndef MATH_LIBRARY
|
||||
#define MATH_LIBRARY "-lm"
|
||||
@ -60,10 +62,11 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
|
||||
/* If nonzero, the user gave us the `-v' flag. */
|
||||
int saw_verbose_flag = 0;
|
||||
|
||||
/* This is a tristate:
|
||||
/* What do with libstdc++:
|
||||
-1 means we should not link in libstdc++
|
||||
0 means we should link in libstdc++ if it is needed
|
||||
1 means libstdc++ is needed and should be linked in. */
|
||||
1 means libstdc++ is needed and should be linked in.
|
||||
2 means libstdc++ is needed and should be linked statically. */
|
||||
int library = 0;
|
||||
|
||||
/* The number of arguments being added to what's in argv, other than
|
||||
@ -96,6 +99,9 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
|
||||
/* By default, we throw on the math library if we have one. */
|
||||
int need_math = (MATH_LIBRARY[0] != '\0');
|
||||
|
||||
/* True if we saw -static. */
|
||||
int static_link = 0;
|
||||
|
||||
/* True if we should add -shared-libgcc to the command-line. */
|
||||
int shared_libgcc = 1;
|
||||
|
||||
@ -200,9 +206,15 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
|
||||
cause a warning. */
|
||||
library = -1;
|
||||
}
|
||||
else if (strcmp (argv[i], "-static-libgcc") == 0
|
||||
|| strcmp (argv[i], "-static") == 0)
|
||||
else if (strcmp (argv[i], "-static") == 0)
|
||||
static_link = 1;
|
||||
else if (strcmp (argv[i], "-static-libgcc") == 0)
|
||||
shared_libgcc = 0;
|
||||
else if (strcmp (argv[i], "-static-libstdc++") == 0)
|
||||
{
|
||||
library = library >= 0 ? 2 : library;
|
||||
args[i] |= SKIPOPT;
|
||||
}
|
||||
else if (DEFAULT_WORD_SWITCH_TAKES_ARG (&argv[i][1]))
|
||||
i++;
|
||||
else
|
||||
@ -261,7 +273,7 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
|
||||
|
||||
/* Make sure to have room for the trailing NULL argument.
|
||||
Add one for shared_libgcc or extra static library. */
|
||||
num_args = argc + added + need_math + (library > 0) + 2;
|
||||
num_args = argc + added + need_math + (library > 0) * 4 + 1;
|
||||
arglist = XNEWVEC (const char *, num_args);
|
||||
|
||||
i = 0;
|
||||
@ -312,6 +324,9 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
|
||||
arglist[j] = "-xnone";
|
||||
}
|
||||
|
||||
if ((args[i] & SKIPOPT) != 0)
|
||||
--j;
|
||||
|
||||
i++;
|
||||
j++;
|
||||
}
|
||||
@ -319,18 +334,32 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
|
||||
/* Add `-lstdc++' if we haven't already done so. */
|
||||
if (library > 0)
|
||||
{
|
||||
#ifdef HAVE_LD_STATIC_DYNAMIC
|
||||
if (library > 1 && !static_link)
|
||||
{
|
||||
arglist[j] = "-Wl,-Bstatic";
|
||||
j++;
|
||||
}
|
||||
#endif
|
||||
arglist[j] = saw_profile_flag ? LIBSTDCXX_PROFILE : LIBSTDCXX;
|
||||
if (arglist[j][0] != '-' || arglist[j][1] == 'l')
|
||||
added_libraries++;
|
||||
j++;
|
||||
}
|
||||
/* Add target-dependent static library, if necessary. */
|
||||
if (shared_libgcc == 0 && LIBSTDCXX_STATIC != NULL)
|
||||
{
|
||||
arglist[j] = LIBSTDCXX_STATIC;
|
||||
if (arglist[j][0] != '-' || arglist[j][1] == 'l')
|
||||
added_libraries++;
|
||||
j++;
|
||||
/* Add target-dependent static library, if necessary. */
|
||||
if ((static_link || library > 1) && LIBSTDCXX_STATIC != NULL)
|
||||
{
|
||||
arglist[j] = LIBSTDCXX_STATIC;
|
||||
if (arglist[j][0] != '-' || arglist[j][1] == 'l')
|
||||
added_libraries++;
|
||||
j++;
|
||||
}
|
||||
#ifdef HAVE_LD_STATIC_DYNAMIC
|
||||
if (library > 1 && !static_link)
|
||||
{
|
||||
arglist[j] = "-Wl,-Bdynamic";
|
||||
j++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (saw_math)
|
||||
arglist[j++] = saw_math;
|
||||
@ -343,7 +372,7 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
|
||||
}
|
||||
if (saw_libc)
|
||||
arglist[j++] = saw_libc;
|
||||
if (shared_libgcc)
|
||||
if (shared_libgcc && !static_link)
|
||||
arglist[j++] = "-shared-libgcc";
|
||||
|
||||
arglist[j] = NULL;
|
||||
|
@ -409,7 +409,8 @@ Objective-C and Objective-C++ Dialects}.
|
||||
@xref{Link Options,,Options for Linking}.
|
||||
@gccoptlist{@var{object-file-name} -l@var{library} @gol
|
||||
-nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic @gol
|
||||
-s -static -static-libgcc -shared -shared-libgcc -symbolic @gol
|
||||
-s -static -static-libgcc -static-libstdc++ -shared @gol
|
||||
-shared-libgcc -symbolic @gol
|
||||
-T @var{script} -Wl,@var{option} -Xlinker @var{option} @gol
|
||||
-u @var{symbol}}
|
||||
|
||||
@ -8246,6 +8247,18 @@ for the languages used in the program, or using the option
|
||||
@option{-shared-libgcc}, such that it is linked with the shared
|
||||
@file{libgcc}.
|
||||
|
||||
@item -static-libstdc++
|
||||
When the @command{g++} program is used to link a C++ program, it will
|
||||
normally automatically link against @option{libstdc++}. If
|
||||
@file{libstdc++} is available as a shared library, and the
|
||||
@option{-static} option is not used, then this will link against the
|
||||
shared version of @file{libstdc++}. That is normally fine. However, it
|
||||
is sometimes useful to freeze the version of @file{libstdc++} used by
|
||||
the program without going all the way to a fully static link. The
|
||||
@option{-static-libstdc++} option directs the @command{g++} driver to
|
||||
link @file{libstdc++} statically, without necessarily linking other
|
||||
libraries statically.
|
||||
|
||||
@item -symbolic
|
||||
@opindex symbolic
|
||||
Bind references to global symbols when building a shared object. Warn
|
||||
|
Loading…
x
Reference in New Issue
Block a user