From 26a58d05844274915d011edbf9330c6151687b22 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Fri, 29 Mar 2013 09:12:56 +0400 Subject: [PATCH 13/47] optional libstdc gcc-runtime builds libstdc++ separately from gcc-cross-*. Its configure tests using g++ will not run correctly since by default the linker will try to link against libstdc++ which shouldn't exist yet. We need an option to disable -lstdc++ option whilst leaving -lc, -lgcc and other automatic library dependencies added by gcc driver. This patch adds such an option which only disables the -lstdc++. A "standard" gcc build uses xgcc and hence avoids this. We should ask upstream how to do this officially, the likely answer is don't build libstdc++ separately. RP 29/6/10 Signed-off-by: Khem Raj Upstream-Status: Inappropriate [embedded specific] --- gcc/c-family/c.opt | 4 ++++ gcc/cp/g++spec.c | 1 + gcc/doc/invoke.texi | 32 +++++++++++++++++++++++++++++++- gcc/gcc.c | 1 + 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 9ad2f6e1fcc..c4ef7796282 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1848,6 +1848,10 @@ nostdinc++ C++ ObjC++ Do not search standard system include directories for C++. +nostdlib++ +Driver +Do not link standard C++ runtime library + o C ObjC C++ ObjC++ Joined Separate ; Documented in common.opt diff --git a/gcc/cp/g++spec.c b/gcc/cp/g++spec.c index ffcc87c79c9..28d8a9cf530 100644 --- a/gcc/cp/g++spec.c +++ b/gcc/cp/g++spec.c @@ -137,6 +137,7 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options, switch (decoded_options[i].opt_index) { case OPT_nostdlib: + case OPT_nostdlib__: case OPT_nodefaultlibs: library = -1; break; diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 060cd7169c6..8e2adc25644 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -211,6 +211,9 @@ in the following sections. -fno-weak -nostdinc++ @gol -fvisibility-inlines-hidden @gol -fvisibility-ms-compat @gol +-fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]} @gol +-fvtv-counts -fvtv-debug @gol +-nostdlib++ @gol -fext-numeric-literals @gol -Wabi=@var{n} -Wabi-tag -Wconversion-null -Wctor-dtor-privacy @gol -Wdelete-non-virtual-dtor -Wliteral-suffix -Wmultiple-inheritance @gol @@ -496,7 +499,7 @@ Objective-C and Objective-C++ Dialects}. -s -static -static-libgcc -static-libstdc++ @gol -static-libasan -static-libtsan -static-liblsan -static-libubsan @gol -static-libmpx -static-libmpxwrappers @gol --shared -shared-libgcc -symbolic @gol +-shared -shared-libgcc -symbolic -nostdlib++ @gol -T @var{script} -Wl,@var{option} -Xlinker @var{option} @gol -u @var{symbol} -z @var{keyword}} @@ -11606,6 +11609,33 @@ library subroutines. constructors are called; @pxref{Collect2,,@code{collect2}, gccint, GNU Compiler Collection (GCC) Internals}.) +@item -nostdlib++ +@opindex nostdlib++ +Do not use the standard system C++ runtime libraries when linking. +Only the libraries you specify will be passed to the linker. + +@cindex @option{-lgcc}, use with @option{-nostdlib} +@cindex @option{-nostdlib} and unresolved references +@cindex unresolved references and @option{-nostdlib} +@cindex @option{-lgcc}, use with @option{-nodefaultlibs} +@cindex @option{-nodefaultlibs} and unresolved references +@cindex unresolved references and @option{-nodefaultlibs} +One of the standard libraries bypassed by @option{-nostdlib} and +@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines +which GCC uses to overcome shortcomings of particular machines, or special +needs for some languages. +(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler +Collection (GCC) Internals}, +for more discussion of @file{libgcc.a}.) +In most cases, you need @file{libgcc.a} even when you want to avoid +other standard libraries. In other words, when you specify @option{-nostdlib} +or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well. +This ensures that you have no unresolved references to internal GCC +library subroutines. +(An example of such an internal subroutine is @code{__main}, used to ensure C++ +constructors are called; @pxref{Collect2,,@code{collect2}, gccint, +GNU Compiler Collection (GCC) Internals}.) + @item -pie @opindex pie Produce a position independent executable on targets that support it. diff --git a/gcc/gcc.c b/gcc/gcc.c index 6315aa0dd16..a5fafbe5107 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -1046,6 +1046,7 @@ proper position among the other output files. */ %(mflib) " STACK_SPLIT_SPEC "\ %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} " SANITIZER_SPEC " \ %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\ + %{!nostdlib++:}\ %{!nostdlib:%{!nostartfiles:%E}} %{T*} \n%(post_link) }}}}}}" #endif -- 2.12.2