mirror of git://gcc.gnu.org/git/gcc.git
re PR sanitizer/55374 ([asan] -static-libasan -static-libstdc++ doesn't work)
PR sanitizer/55374 * gcc.c (LIBASAN_SPEC): Define just to ADD_STATIC_LIBASAN_LIBS if LIBASAN_EARLY_SPEC is defined. (LIBASAN_EARLY_SPEC): Define to empty string if not already defined. (LINK_COMMAND_SPEC): Add LIBASAN_EARLY_SPEC for -fsanitize=address, before %o. * config/gnu-user.h (LIBASAN_EARLY_SPEC): Define. * g++.dg/asan/large-func-test-1.C: Allow both _Zna[jm] in addition to _Znw[jm] in the backtrace. Allow _Zna[jm] to be the first frame printed in backtrace. * g++.dg/asan/deep-stack-uaf-1.C: Use malloc instead of operator new to avoid errors about mismatched allocation vs. deallocation. From-SVN: r195585
This commit is contained in:
parent
3288746035
commit
e60e09a0e0
|
|
@ -1,5 +1,13 @@
|
||||||
2013-01-30 Jakub Jelinek <jakub@redhat.com>
|
2013-01-30 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR sanitizer/55374
|
||||||
|
* gcc.c (LIBASAN_SPEC): Define just to ADD_STATIC_LIBASAN_LIBS if
|
||||||
|
LIBASAN_EARLY_SPEC is defined.
|
||||||
|
(LIBASAN_EARLY_SPEC): Define to empty string if not already defined.
|
||||||
|
(LINK_COMMAND_SPEC): Add LIBASAN_EARLY_SPEC for -fsanitize=address,
|
||||||
|
before %o.
|
||||||
|
* config/gnu-user.h (LIBASAN_EARLY_SPEC): Define.
|
||||||
|
|
||||||
PR c++/55742
|
PR c++/55742
|
||||||
* config/i386/i386.c (ix86_valid_target_attribute_inner_p): Diagnose
|
* config/i386/i386.c (ix86_valid_target_attribute_inner_p): Diagnose
|
||||||
invalid args instead of ICEing on it.
|
invalid args instead of ICEing on it.
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,15 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
#define TARGET_C99_FUNCTIONS 1
|
#define TARGET_C99_FUNCTIONS 1
|
||||||
#define TARGET_HAS_SINCOS 1
|
#define TARGET_HAS_SINCOS 1
|
||||||
|
|
||||||
|
/* Link -lasan early on the command line. For -static-libasan, don't link
|
||||||
|
it for -shared link, the executable should be compiled with -static-libasan
|
||||||
|
in that case, and for executable link link with --{,no-}whole-archive around
|
||||||
|
it to force everything into the executable. */
|
||||||
|
#undef LIBASAN_EARLY_SPEC
|
||||||
|
#define LIBASAN_EARLY_SPEC "%{static-libasan:%{!shared:" \
|
||||||
|
LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \
|
||||||
|
LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}"
|
||||||
|
|
||||||
/* Additional libraries needed by -static-libasan. */
|
/* Additional libraries needed by -static-libasan. */
|
||||||
#undef STATIC_LIBASAN_LIBS
|
#undef STATIC_LIBASAN_LIBS
|
||||||
#define STATIC_LIBASAN_LIBS "-ldl -lpthread"
|
#define STATIC_LIBASAN_LIBS "-ldl -lpthread"
|
||||||
|
|
|
||||||
11
gcc/gcc.c
11
gcc/gcc.c
|
|
@ -548,7 +548,9 @@ proper position among the other output files. */
|
||||||
#else
|
#else
|
||||||
#define ADD_STATIC_LIBASAN_LIBS
|
#define ADD_STATIC_LIBASAN_LIBS
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LD_STATIC_DYNAMIC
|
#ifdef LIBASAN_EARLY_SPEC
|
||||||
|
#define LIBASAN_SPEC ADD_STATIC_LIBASAN_LIBS
|
||||||
|
#elif defined(HAVE_LD_STATIC_DYNAMIC)
|
||||||
#define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION \
|
#define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION \
|
||||||
"} -lasan %{static-libasan:" LD_DYNAMIC_OPTION "}" \
|
"} -lasan %{static-libasan:" LD_DYNAMIC_OPTION "}" \
|
||||||
ADD_STATIC_LIBASAN_LIBS
|
ADD_STATIC_LIBASAN_LIBS
|
||||||
|
|
@ -557,6 +559,10 @@ proper position among the other output files. */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef LIBASAN_EARLY_SPEC
|
||||||
|
#define LIBASAN_EARLY_SPEC ""
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef LIBTSAN_SPEC
|
#ifndef LIBTSAN_SPEC
|
||||||
#ifdef HAVE_LD_STATIC_DYNAMIC
|
#ifdef HAVE_LD_STATIC_DYNAMIC
|
||||||
#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \
|
#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \
|
||||||
|
|
@ -705,7 +711,8 @@ proper position among the other output files. */
|
||||||
"%{fuse-ld=*:-fuse-ld=%*}\
|
"%{fuse-ld=*:-fuse-ld=%*}\
|
||||||
%X %{o*} %{e*} %{N} %{n} %{r}\
|
%X %{o*} %{e*} %{N} %{n} %{r}\
|
||||||
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}}\
|
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}}\
|
||||||
%{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
|
%{static:} %{L*} %(mfwrap) %(link_libgcc) \
|
||||||
|
%{fsanitize=address:" LIBASAN_EARLY_SPEC "} %o\
|
||||||
%{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\
|
%{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\
|
||||||
%{fgnu-tm:%:include(libitm.spec)%(link_itm)}\
|
%{fgnu-tm:%:include(libitm.spec)%(link_itm)}\
|
||||||
%(mflib) " STACK_SPLIT_SPEC "\
|
%(mflib) " STACK_SPLIT_SPEC "\
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,12 @@
|
||||||
2013-01-30 Jakub Jelinek <jakub@redhat.com>
|
2013-01-30 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR sanitizer/55374
|
||||||
|
* g++.dg/asan/large-func-test-1.C: Allow both _Zna[jm] in addition
|
||||||
|
to _Znw[jm] in the backtrace. Allow _Zna[jm] to be the first frame
|
||||||
|
printed in backtrace.
|
||||||
|
* g++.dg/asan/deep-stack-uaf-1.C: Use malloc instead of operator new
|
||||||
|
to avoid errors about mismatched allocation vs. deallocation.
|
||||||
|
|
||||||
PR c++/55742
|
PR c++/55742
|
||||||
* g++.dg/mv1.C: Moved to...
|
* g++.dg/mv1.C: Moved to...
|
||||||
* g++.dg/ext/mv1.C: ... here. Adjust test.
|
* g++.dg/ext/mv1.C: ... here. Adjust test.
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ struct DeepFree<0> {
|
||||||
};
|
};
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
char *x = new char[10];
|
char *x = (char*)malloc(10);
|
||||||
// deep_free(x);
|
// deep_free(x);
|
||||||
DeepFree<200>::free(x);
|
DeepFree<200>::free(x);
|
||||||
return x[5];
|
return x[5];
|
||||||
|
|
|
||||||
|
|
@ -41,5 +41,5 @@ int main() {
|
||||||
// { dg-output " #0 0x\[0-9a-f\]+ (in \[^\n\r]*LargeFunction\[^\n\r]*(large-func-test-1.C:18|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" }
|
// { dg-output " #0 0x\[0-9a-f\]+ (in \[^\n\r]*LargeFunction\[^\n\r]*(large-func-test-1.C:18|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" }
|
||||||
// { dg-output "0x\[0-9a-f\]+ is located 44 bytes to the right of 400-byte region.*(\n|\r\n|\r)" }
|
// { dg-output "0x\[0-9a-f\]+ is located 44 bytes to the right of 400-byte region.*(\n|\r\n|\r)" }
|
||||||
// { dg-output "allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" }
|
// { dg-output "allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" }
|
||||||
// { dg-output " #0 0x\[0-9a-f\]+ (in _*(interceptor_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" }
|
// { dg-output " #0( 0x\[0-9a-f\]+ (in _*(interceptor_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" }
|
||||||
// { dg-output " #1 0x\[0-9a-f\]+ (in (operator new|_*_Znw\[mj\])|\[(\])\[^\n\r]*(\n|\r\n|\r)" }
|
// { dg-output " #1|) 0x\[0-9a-f\]+ (in (operator new|_*_Zn\[aw\]\[mj\])|\[(\])\[^\n\r]*(\n|\r\n|\r)" }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue