diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/common.opt | 3 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 13 | ||||
-rw-r--r-- | gcc/gcc.c | 11 |
4 files changed, 31 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 68a5ac1fdfc..eb01532c656 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-11-17 H.J. Lu <hongjiu.lu@intel.com> + + * common.opt (static-libasan): New option. + * gcc.c (LIBASAN_SPEC): New macro. + (LINK_COMMAND_SPEC): Replace -lasan with LIBASAN_SPEC. + * doc/invoke.texi: Document -static-libasan. + 2012-11-17 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/55342 diff --git a/gcc/common.opt b/gcc/common.opt index 0a7c953942e..be6fe4f35d2 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2516,6 +2516,9 @@ static-libgo Driver ; Documented for Go, but always accepted by driver. +static-libasan +Driver + symbolic Driver diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index b3abc0960d9..885bf66c1a6 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -452,8 +452,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 -static-libstdc++ -shared @gol --shared-libgcc -symbolic @gol +-s -static -static-libgcc -static-libasan -static-libstdc++ @gol +-shared -shared-libgcc -symbolic @gol -T @var{script} -Wl,@var{option} -Xlinker @var{option} @gol -u @var{symbol}} @@ -9937,6 +9937,15 @@ 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-libasan +When the @option{-faddress-sanitizer} option is used to link a program, +the GCC driver automatically links against @option{libasan}. If +@file{libasan} is available as a shared library, and the @option{-static} +option is not used, then this links against the shared version of +@file{libasan}. The @option{-static-libasan} option directs the GCC +driver to link @file{libasan} statically, without necessarily linking +other libraries statically. + @item -static-libstdc++ When the @command{g++} program is used to link a C++ program, it normally automatically links against @option{libstdc++}. If diff --git a/gcc/gcc.c b/gcc/gcc.c index e584319369e..7a275e133ad 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -544,6 +544,15 @@ proper position among the other output files. */ wrapping. */ #define STACK_SPLIT_SPEC " %{fsplit-stack: --wrap=pthread_create}" +#ifndef LIBASAN_SPEC +#ifdef HAVE_LD_STATIC_DYNAMIC +#define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION \ + "} -lasan %{static-libasan:" LD_DYNAMIC_OPTION "}" +#else +#define LIBASAN_SPEC "-lasan" +#endif +#endif + /* config.h can define LIBGCC_SPEC to override how and when libgcc.a is included. */ #ifndef LIBGCC_SPEC @@ -687,7 +696,7 @@ proper position among the other output files. */ %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\ %(mflib) " STACK_SPLIT_SPEC "\ %{fprofile-arcs|fprofile-generate*|coverage:-lgcov}\ - %{faddress-sanitizer:-lasan}\ + %{faddress-sanitizer:" LIBASAN_SPEC "}\ %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\ %{!nostdlib:%{!nostartfiles:%E}} %{T*} }}}}}}" #endif |