Ping On 18 Jun 2015, at 09:12, Iain Sandoe wrote:
> Hi, > > This came up in a User question last night and reminded me that I had a patch > for it in my Q. > > ---- > > Usually g++ driver support for -static-libstdc++ is provided by "-Bstatic > -lstdc++ -Bdynamic" and is currently disabled for targets without that linker > support. However, actually, there is still an opportunity for those targets > to implement the functionality with a spec substituation like: > > %{static-libstdc++:%:replace-outfile(-lstdc++ libstdc++.a%s)} > > However, this doesn't currently work because the g++ driver swallows > "-static-libstdc++" so it's never seen by the specs. > The patch below pushes -static-libstdc++ onto the output command line (for > targets without -Bstatic/dynamic) so that such specs have an opportunity to > fire. > > OK for trunk? > Iain > > gcc/cp: > * g++spec.c (lang_specific_driver): Push "-static-libstdc++" back to > the output > command line when the target linker does not support -Bstatic/dynamic > so that it > is available for spec substitions to act on. > > > --- > gcc/cp/g++spec.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/gcc/cp/g++spec.c b/gcc/cp/g++spec.c > index 6536d7e..48a9708 100644 > --- a/gcc/cp/g++spec.c > +++ b/gcc/cp/g++spec.c > @@ -363,6 +363,15 @@ lang_specific_driver (struct cl_decoded_option > **in_decoded_options, > &new_decoded_options[j]); > j++; > } > +#else > + /* For linkers that don't support Bstatic/dynamic push the flag back > + so that spec substitution can see it. */ > + if (library > 1 && !static_link) > + { > + generate_option (OPT_static_libstdc__, NULL, 0, CL_DRIVER, > + &new_decoded_options[j]); > + j++; > + } > #endif > } > if (saw_math) > -- > 2.2.1 >