From: Allan Sandfeld Jensen Date: Thu, 20 Sep 2018 19:38:24 +0000 (+0600) Subject: Fix and document -r option X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0b7fb27b698da38fd13108ecc914613f85f66f9d;p=gcc.git Fix and document -r option The option has existed and been working for years, make sure it implies the right extra options, and list it in the documentation. 2018-09-20 Allan Sandfeld Jensen gcc/ * gcc.c (LINK_COMMAND_SPEC): Handle -r like -nostdlib. (VTABLE_VERIFICATION_SPEC): Likewise. (SANITIZER_EARLY_SPEC): Likewise. (SANITIZER_SPEC): Likewise. * config/darwin.h (LINK_COMMAND_SPEC): Likewise. * doc/invoke.texi (Link Options): Document -r. gcc/cp/ * g++spec.c (lang_specific_driver): Handle -r like -nostdlib. gcc/fortran/ * gfortranspec.c (lang_specific_driver): Handle -r like -nostdlib. gcc/go/ * gospec.c (lang_specific_driver): Handle -r like -nostdlib. gcc/testsuite/ * g++.dg/ipa/pr64059.C: Removed now redundant -nostdlib. * g++.dg/lto/20081109-1_0.C: Likewise. * g++.dg/lto/20090302_0.C: Likewise. * g++.dg/lto/pr45621_0.C: Likewise. * g++.dg/lto/pr60567_0.C: Likewise. * g++.dg/lto/pr62026.C: Likewise. * gcc.dg/lto/pr45736_0.c: Likewise. * gcc.dg/lto/pr52634_0.c: Likewise. * gfortran.dg/lto/20091016-1_0.f90: Likewise. * gfortran.dg/lto/pr79108_0.f90: Likewise. From-SVN: r264451 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 361dfc468a1..8be6771ce50 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-09-20 Allan Sandfeld Jensen + + * gcc.c (LINK_COMMAND_SPEC): Handle -r like -nostdlib. + (VTABLE_VERIFICATION_SPEC): Likewise. + (SANITIZER_EARLY_SPEC): Likewise. + (SANITIZER_SPEC): Likewise. + * config/darwin.h (LINK_COMMAND_SPEC): Likewise. + * doc/invoke.texi (Link Options): Document -r. + 2018-09-20 Richard Biener PR middle-end/87054 diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index cd6d6521658..87f610259c0 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -180,20 +180,20 @@ extern GTY(()) int darwin_ms_struct; "%X %{s} %{t} %{Z} %{u*} \ %{e*} %{r} \ %{o*}%{!o:-o a.out} \ - %{!nostdlib:%{!nostartfiles:%S}} \ + %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \ %{L*} %(link_libgcc) %o %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} \ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1): \ %{static|static-libgcc|static-libstdc++|static-libgfortran: libgomp.a%s; : -lgomp } } \ %{fgnu-tm: \ %{static|static-libgcc|static-libstdc++|static-libgfortran: libitm.a%s; : -litm } } \ - %{!nostdlib:%{!nodefaultlibs:\ + %{!nostdlib:%{!r:%{!nodefaultlibs:\ %{%:sanitize(address): -lasan } \ %{%:sanitize(undefined): -lubsan } \ %(link_ssp) \ " DARWIN_EXPORT_DYNAMIC " % + + * g++spec.c (lang_specific_driver): Handle -r like -nostdlib. + 2018-09-20 Jason Merrill PR c++/87075 - ICE with constexpr array initialization. diff --git a/gcc/cp/g++spec.c b/gcc/cp/g++spec.c index 443a1746da3..8c81e0987f7 100644 --- a/gcc/cp/g++spec.c +++ b/gcc/cp/g++spec.c @@ -184,6 +184,7 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options, break; case OPT_c: + case OPT_r: case OPT_S: case OPT_E: case OPT_M: diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index b3b50c266e4..e565f851971 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -521,7 +521,7 @@ Objective-C and Objective-C++ Dialects}. @xref{Link Options,,Options for Linking}. @gccoptlist{@var{object-file-name} -fuse-ld=@var{linker} -l@var{library} @gol -nostartfiles -nodefaultlibs -nolibc -nostdlib @gol --pie -pthread -rdynamic @gol +-pie -pthread -r -rdynamic @gol -s -static -static-pie -static-libgcc -static-libstdc++ @gol -static-libasan -static-libtsan -static-liblsan -static-libubsan @gol -shared -shared-libgcc -symbolic @gol @@ -12586,6 +12586,11 @@ x86 Cygwin and MinGW targets. On some targets this option also sets flags for the preprocessor, so it should be used consistently for both compilation and linking. +@item -r +@opindex r +Produce a relocatable object as output. This is also known as partial +linking. + @item -rdynamic @opindex rdynamic Pass the flag @option{-export-dynamic} to the ELF linker, on targets diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7cbda093eee..dbd05d2b23e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,7 @@ +2018-09-20 Allan Sandfeld Jensen + + * gfortranspec.c (lang_specific_driver): Handle -r like -nostdlib. + 2018-09-20 Janus Weil * gfortran.h (gfc_str_startswith): New macro. diff --git a/gcc/fortran/gfortranspec.c b/gcc/fortran/gfortranspec.c index 4ba3a8dba60..7aa2dd78a05 100644 --- a/gcc/fortran/gfortranspec.c +++ b/gcc/fortran/gfortranspec.c @@ -243,6 +243,7 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options, case OPT_nostdlib: case OPT_nodefaultlibs: case OPT_c: + case OPT_r: case OPT_S: case OPT_fsyntax_only: case OPT_E: diff --git a/gcc/gcc.c b/gcc/gcc.c index 8be82eaa04f..264204d7b37 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -980,20 +980,20 @@ proper position among the other output files. */ /* Linker command line options for -fsanitize= early on the command line. */ #ifndef SANITIZER_EARLY_SPEC #define SANITIZER_EARLY_SPEC "\ -%{!nostdlib:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_EARLY_SPEC "} \ +%{!nostdlib:%{!r:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_EARLY_SPEC "} \ %{%:sanitize(thread):" LIBTSAN_EARLY_SPEC "} \ - %{%:sanitize(leak):" LIBLSAN_EARLY_SPEC "}}}" + %{%:sanitize(leak):" LIBLSAN_EARLY_SPEC "}}}}" #endif /* Linker command line options for -fsanitize= late on the command line. */ #ifndef SANITIZER_SPEC #define SANITIZER_SPEC "\ -%{!nostdlib:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_SPEC "\ +%{!nostdlib:%{!r:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_SPEC "\ %{static:%ecannot specify -static with -fsanitize=address}}\ %{%:sanitize(thread):" LIBTSAN_SPEC "\ %{static:%ecannot specify -static with -fsanitize=thread}}\ %{%:sanitize(undefined):" LIBUBSAN_SPEC "}\ - %{%:sanitize(leak):" LIBLSAN_SPEC "}}}" + %{%:sanitize(leak):" LIBLSAN_SPEC "}}}}" #endif #ifndef POST_LINK_SPEC @@ -1007,8 +1007,8 @@ proper position among the other output files. */ #ifndef VTABLE_VERIFICATION_SPEC #if ENABLE_VTABLE_VERIFY #define VTABLE_VERIFICATION_SPEC "\ -%{!nostdlib:%{fvtable-verify=std: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}\ - %{fvtable-verify=preinit: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}}" +%{!nostdlib:%{!r:%{fvtable-verify=std: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}\ + %{fvtable-verify=preinit: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}}}" #else #define VTABLE_VERIFICATION_SPEC "\ %{fvtable-verify=none:} \ @@ -1040,7 +1040,7 @@ proper position among the other output files. */ %{flto} %{fno-lto} %{flto=*} %l " LINK_PIE_SPEC \ "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \ "%X %{o*} %{e*} %{N} %{n} %{r}\ - %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} \ + %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \ %{static|no-pie|static-pie:} %@{L*} %(mfwrap) %(link_libgcc) " \ VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o "" \ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\ @@ -1048,8 +1048,8 @@ proper position among the other output files. */ %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\ %(mflib) " STACK_SPLIT_SPEC "\ %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} " SANITIZER_SPEC " \ - %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\ - %{!nostdlib:%{!nostartfiles:%E}} %{T*} \n%(post_link) }}}}}}" + %{!nostdlib:%{!r:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}}\ + %{!nostdlib:%{!r:%{!nostartfiles:%E}}} %{T*} \n%(post_link) }}}}}}" #endif #ifndef LINK_LIBGCC_SPEC diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog index b032a27f6f8..35129223726 100644 --- a/gcc/go/ChangeLog +++ b/gcc/go/ChangeLog @@ -1,3 +1,7 @@ +2018-09-20 Allan Sandfeld Jensen + + * gospec.c (lang_specific_driver): Handle -r like -nostdlib. + 2018-08-27 Martin Liska * go-gcc.cc (Gcc_backend::call_expression): Use new function diff --git a/gcc/go/gospec.c b/gcc/go/gospec.c index 7a10997df9b..d265fc986a0 100644 --- a/gcc/go/gospec.c +++ b/gcc/go/gospec.c @@ -139,6 +139,7 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options, switch (decoded_options[i].opt_index) { + case OPT_r: case OPT_nostdlib: case OPT_nodefaultlibs: library = -1; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a0a08a4d499..bcac8dc0e89 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2018-09-20 Allan Sandfeld Jensen + + * g++.dg/ipa/pr64059.C: Removed now redundant -nostdlib. + * g++.dg/lto/20081109-1_0.C: Likewise. + * g++.dg/lto/20090302_0.C: Likewise. + * g++.dg/lto/pr45621_0.C: Likewise. + * g++.dg/lto/pr60567_0.C: Likewise. + * g++.dg/lto/pr62026.C: Likewise. + * gcc.dg/lto/pr45736_0.c: Likewise. + * gcc.dg/lto/pr52634_0.c: Likewise. + * gfortran.dg/lto/20091016-1_0.f90: Likewise. + * gfortran.dg/lto/pr79108_0.f90: Likewise. + 2018-09-20 Alexandre Oliva PR middle-end/87054 diff --git a/gcc/testsuite/g++.dg/ipa/pr64059.C b/gcc/testsuite/g++.dg/ipa/pr64059.C index 0269b45458d..57011324889 100644 --- a/gcc/testsuite/g++.dg/ipa/pr64059.C +++ b/gcc/testsuite/g++.dg/ipa/pr64059.C @@ -1,4 +1,4 @@ -// { dg-options "-r -nostdlib -O2 -flto -fno-devirtualize" } +// { dg-options "-r -O2 -flto -fno-devirtualize" } // { dg-require-effective-target lto } class A; diff --git a/gcc/testsuite/g++.dg/lto/20081109-1_0.C b/gcc/testsuite/g++.dg/lto/20081109-1_0.C index 3b5860011db..db0ba367fe8 100644 --- a/gcc/testsuite/g++.dg/lto/20081109-1_0.C +++ b/gcc/testsuite/g++.dg/lto/20081109-1_0.C @@ -1,6 +1,6 @@ // { dg-lto-do link } // { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC -flto -flto-partition=1to1}} } -// { dg-extra-ld-options "-fPIC -flto -flto-partition=1to1 -r -nostdlib -fno-exceptions -flinker-output=nolto-rel" } +// { dg-extra-ld-options "-fPIC -flto -flto-partition=1to1 -r -fno-exceptions -flinker-output=nolto-rel" } void func(); class Foo { }; void bar() { try { func(); } catch (Foo) { } }; diff --git a/gcc/testsuite/g++.dg/lto/20090302_0.C b/gcc/testsuite/g++.dg/lto/20090302_0.C index 3a617879e19..23e012704f4 100644 --- a/gcc/testsuite/g++.dg/lto/20090302_0.C +++ b/gcc/testsuite/g++.dg/lto/20090302_0.C @@ -1,6 +1,6 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ -/* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r -nostdlib}} } */ +/* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r}} } */ /* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ struct Foo { bool Mumble(); diff --git a/gcc/testsuite/g++.dg/lto/pr45621_0.C b/gcc/testsuite/g++.dg/lto/pr45621_0.C index f34b3b70fa7..2055ebfa658 100644 --- a/gcc/testsuite/g++.dg/lto/pr45621_0.C +++ b/gcc/testsuite/g++.dg/lto/pr45621_0.C @@ -1,5 +1,5 @@ // { dg-lto-do assemble } -// { dg-extra-ld-options "-O2 -fipa-cp-clone -flto -nostdlib -r -flinker-output=nolto-rel" } +// { dg-extra-ld-options "-O2 -fipa-cp-clone -flto -r -flinker-output=nolto-rel" } #include "pr45621.h" void diff --git a/gcc/testsuite/g++.dg/lto/pr60567_0.C b/gcc/testsuite/g++.dg/lto/pr60567_0.C index 966a3c3bc74..175b3aa7a04 100644 --- a/gcc/testsuite/g++.dg/lto/pr60567_0.C +++ b/gcc/testsuite/g++.dg/lto/pr60567_0.C @@ -1,7 +1,7 @@ // PR lto/60567 // { dg-lto-do link } // { dg-lto-options { { -flto -fno-use-linker-plugin } } } -// { dg-extra-ld-options "-r -nostdlib" } +// { dg-extra-ld-options "-r" } #pragma implementation struct S {}; diff --git a/gcc/testsuite/g++.dg/lto/pr62026.C b/gcc/testsuite/g++.dg/lto/pr62026.C index 63766a85b98..0432e907f56 100644 --- a/gcc/testsuite/g++.dg/lto/pr62026.C +++ b/gcc/testsuite/g++.dg/lto/pr62026.C @@ -1,5 +1,5 @@ // { dg-lto-do link } -// { dg-lto-options {{-flto -O3 -r -nostdlib}} } +// { dg-lto-options {{-flto -O3 -r}} } class C; class F { virtual C m_fn1(); diff --git a/gcc/testsuite/gcc.dg/lto/pr45736_0.c b/gcc/testsuite/gcc.dg/lto/pr45736_0.c index d481c453d08..cb7811ba258 100644 --- a/gcc/testsuite/gcc.dg/lto/pr45736_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr45736_0.c @@ -1,5 +1,5 @@ /* { dg-lto-do link } */ -/* { dg-lto-options {{-flto -r -nostdlib -O}} } */ +/* { dg-lto-options {{-flto -r -O}} } */ /* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ extern void baz (void); diff --git a/gcc/testsuite/gcc.dg/lto/pr52634_0.c b/gcc/testsuite/gcc.dg/lto/pr52634_0.c index 7aba0cd3caf..5e14ad9a733 100644 --- a/gcc/testsuite/gcc.dg/lto/pr52634_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr52634_0.c @@ -1,7 +1,7 @@ /* { dg-require-weak "" } */ /* { dg-require-alias "" } */ /* { dg-lto-do link } */ -/* { dg-lto-options {{-flto -r -nostdlib -flto-partition=1to1}} */ +/* { dg-lto-options {{-flto -r -flto-partition=1to1}} */ /* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ extern int cfliteValueCallBacks; void baz (int *); diff --git a/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 b/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 index 5e96e88731f..812ae9b266d 100644 --- a/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 +++ b/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 @@ -1,5 +1,5 @@ ! { dg-lto-do link } -! { dg-lto-options {{-flto -g -fPIC -r -nostdlib} {-O -flto -g -fPIC -r -nostdlib}} } +! { dg-lto-options {{-flto -g -fPIC -r} {-O -flto -g -fPIC -r}} } ! { dg-extra-ld-options "-flinker-output=nolto-rel" } FUNCTION makenumberstring(x) diff --git a/gcc/testsuite/gfortran.dg/lto/pr79108_0.f90 b/gcc/testsuite/gfortran.dg/lto/pr79108_0.f90 index 58412afc3c8..9c878509a83 100644 --- a/gcc/testsuite/gfortran.dg/lto/pr79108_0.f90 +++ b/gcc/testsuite/gfortran.dg/lto/pr79108_0.f90 @@ -1,6 +1,6 @@ ! { dg-lto-do link } ! { dg-lto-options {{ -Ofast -flto --param ggc-min-expand=0 --param ggc-min-heapsize=0 }} } -! { dg-extra-ld-options "-r -nostdlib" } +! { dg-extra-ld-options "-r" } MODULE Errorcheck_mod CONTAINS