Hi, This patch is to change -faddress-sanitizer to -fsanitize=address. Ok for trunk?
2012-11-19 Wei Mi <w...@google.com> * cfgexpand.c (partition_stack_vars): Change flag_asan to flag_sanitize. (expand_stack_vars): Likewise. (defer_stack_allocation): Likewise. (expand_used_vars): Likewise. * varasm.c (assemble_noswitch_variable): Likewise. (assemble_variable): Likewise. (place_block_symbol): Likewise. * asan.c (gate_asan): Likewise. (gate_asan_O0): Likewise. * toplev.c (compile_file): Likewise. (process_options): Likewise. * common.opt: Change faddress-sanitizer to fsanitize=address. * gcc.c (LINK_COMMAND_SPEC): Likewise. * testsuite/lib/asan-dg.exp (check_effective_target_faddress_sanitizer): Likewise. (asan_init): Likewise. * flag-types.h (sanitize_type): New enum type. * doc/invoke.texi (-fsanitize=[address|thread]): Document. Thanks, Wei.
Index: gcc/cfgexpand.c =================================================================== --- gcc/cfgexpand.c (revision 193614) +++ gcc/cfgexpand.c (working copy) @@ -765,7 +765,7 @@ partition_stack_vars (void) sizes, as the shorter vars wouldn't be adequately protected. Don't do that for "large" (unsupported) alignment objects, those aren't protected anyway. */ - if (flag_asan && isize != jsize + if (flag_sanitize == SANITIZE_ADDRESS && isize != jsize && ialign * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT) break; @@ -941,7 +941,7 @@ expand_stack_vars (bool (*pred) (size_t) alignb = stack_vars[i].alignb; if (alignb * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT) { - if (flag_asan && pred) + if (flag_sanitize == SANITIZE_ADDRESS && pred) { HOST_WIDE_INT prev_offset = frame_offset; tree repr_decl = NULL_TREE; @@ -1111,7 +1111,7 @@ defer_stack_allocation (tree var, bool t /* If stack protection is enabled, *all* stack variables must be deferred, so that we can re-order the strings to the top of the frame. Similarly for Address Sanitizer. */ - if (flag_stack_protect || flag_asan) + if (flag_stack_protect || flag_sanitize == SANITIZE_ADDRESS) return true; /* We handle "large" alignment via dynamic allocation. We want to handle @@ -1693,7 +1693,7 @@ expand_used_vars (void) expand_stack_vars (stack_protect_decl_phase_2, &data); } - if (flag_asan) + if (flag_sanitize == SANITIZE_ADDRESS) /* Phase 3, any partitions that need asan protection in addition to phase 1 and 2. */ expand_stack_vars (asan_decl_phase_3, &data); Index: gcc/testsuite/lib/asan-dg.exp =================================================================== --- gcc/testsuite/lib/asan-dg.exp (revision 193614) +++ gcc/testsuite/lib/asan-dg.exp (working copy) @@ -20,7 +20,7 @@ proc check_effective_target_faddress_sanitizer {} { return [check_no_compiler_messages faddress_sanitizer object { void foo (void) { } - } "-faddress-sanitizer"] + } "-fsanitize=address"] } # @@ -83,12 +83,12 @@ proc asan_init { args } { } if [info exists ALWAYS_CXXFLAGS] { set ALWAYS_CXXFLAGS [concat "{ldflags=$link_flags}" $ALWAYS_CXXFLAGS] - set ALWAYS_CXXFLAGS [concat "{additional_flags=-faddress-sanitizer -g}" $ALWAYS_CXXFLAGS] + set ALWAYS_CXXFLAGS [concat "{additional_flags=-fsanitize=address -g}" $ALWAYS_CXXFLAGS] } else { if [info exists TEST_ALWAYS_FLAGS] { - set TEST_ALWAYS_FLAGS "$link_flags -faddress-sanitizer -g $TEST_ALWAYS_FLAGS" + set TEST_ALWAYS_FLAGS "$link_flags -fsanitize=address -g $TEST_ALWAYS_FLAGS" } else { - set TEST_ALWAYS_FLAGS "$link_flags -faddress-sanitizer -g" + set TEST_ALWAYS_FLAGS "$link_flags -fsanitize=address -g" } } } Index: gcc/varasm.c =================================================================== --- gcc/varasm.c (revision 193614) +++ gcc/varasm.c (working copy) @@ -1832,7 +1832,7 @@ assemble_noswitch_variable (tree decl, c size = tree_low_cst (DECL_SIZE_UNIT (decl), 1); rounded = size; - if (flag_asan && asan_protect_global (decl)) + if (flag_sanitize == SANITIZE_ADDRESS && asan_protect_global (decl)) size += asan_red_zone_size (size); /* Don't allocate zero bytes of common, @@ -1990,7 +1990,7 @@ assemble_variable (tree decl, int top_le align_variable (decl, dont_output_data); - if (flag_asan + if (flag_sanitize == SANITIZE_ADDRESS && asan_protect_global (decl)) { asan_protected = true; @@ -6942,7 +6942,8 @@ place_block_symbol (rtx symbol) decl = SYMBOL_REF_DECL (symbol); alignment = DECL_ALIGN (decl); size = tree_low_cst (DECL_SIZE_UNIT (decl), 1); - if (flag_asan && asan_protect_global (decl)) + if (flag_sanitize == SANITIZE_ADDRESS + && asan_protect_global (decl)) size += asan_red_zone_size (size); } Index: gcc/flag-types.h =================================================================== --- gcc/flag-types.h (revision 193614) +++ gcc/flag-types.h (working copy) @@ -200,4 +200,10 @@ enum fp_contract_mode { FP_CONTRACT_FAST = 2 }; +/* Sanitize mode */ +enum sanitize_type { + SANITIZE_OFF, + SANITIZE_ADDRESS, + SANITIZE_THREAD +}; #endif /* ! GCC_FLAG_TYPES_H */ Index: gcc/asan.c =================================================================== --- gcc/asan.c (revision 193614) +++ gcc/asan.c (working copy) @@ -1587,7 +1587,7 @@ asan_instrument (void) static bool gate_asan (void) { - return flag_asan != 0; + return flag_sanitize == SANITIZE_ADDRESS; } struct gimple_opt_pass pass_asan = @@ -1614,7 +1614,7 @@ struct gimple_opt_pass pass_asan = static bool gate_asan_O0 (void) { - return flag_asan != 0 && !optimize; + return flag_sanitize == SANITIZE_ADDRESS && !optimize; } struct gimple_opt_pass pass_asan_O0 = Index: gcc/toplev.c =================================================================== --- gcc/toplev.c (revision 193614) +++ gcc/toplev.c (working copy) @@ -572,7 +572,7 @@ compile_file (void) mudflap_finish_file (); /* File-scope initialization for AddressSanitizer. */ - if (flag_asan) + if (flag_sanitize == SANITIZE_ADDRESS) asan_finish_file (); output_shared_constant_pool (); @@ -1545,12 +1545,12 @@ process_options (void) } /* Address Sanitizer needs porting to each target architecture. */ - if (flag_asan + if (flag_sanitize == SANITIZE_ADDRESS && (targetm.asan_shadow_offset == NULL || !FRAME_GROWS_DOWNWARD)) { warning (0, "-faddress-sanitizer not supported for this target"); - flag_asan = 0; + flag_sanitize = SANITIZE_OFF; } /* Enable -Werror=coverage-mismatch when -Werror and -Wno-error Index: gcc/gcc.c =================================================================== --- gcc/gcc.c (revision 193614) +++ gcc/gcc.c (working copy) @@ -696,7 +696,7 @@ proper position among the other output f %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\ %(mflib) " STACK_SPLIT_SPEC "\ %{fprofile-arcs|fprofile-generate*|coverage:-lgcov}\ - %{faddress-sanitizer:" LIBASAN_SPEC "}\ + %{fsanitize=address:" LIBASAN_SPEC "}\ %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\ %{!nostdlib:%{!nostartfiles:%E}} %{T*} }}}}}}" #endif Index: gcc/common.opt =================================================================== --- gcc/common.opt (revision 193614) +++ gcc/common.opt (working copy) @@ -840,9 +840,18 @@ fargument-noalias-anything Common Ignore Does nothing. Preserved for backward compatibility. -faddress-sanitizer -Common Report Var(flag_asan) -Enable AddressSanitizer, a memory error detector +fsanitize= +Common Joined RejectNegative Enum(sanitize_type) Var(flag_sanitize) Init(SANITIZE_OFF) +-fsanitize=[address|thread] Specify to run a type of sanitize test + +Enum +Name(sanitize_type) Type(sanitize_type) UnknownError(unknown sanitize type %qs) + +EnumValue +Enum(sanitize_type) String(address) Value(SANITIZE_ADDRESS) + +EnumValue +Enum(sanitize_type) String(thread) Value(SANITIZE_THREAD) fasynchronous-unwind-tables Common Report Var(flag_asynchronous_unwind_tables) Optimization Index: gcc/doc/invoke.texi =================================================================== --- gcc/doc/invoke.texi (revision 193614) +++ gcc/doc/invoke.texi (working copy) @@ -289,7 +289,8 @@ Objective-C and Objective-C++ Dialects}. @item Debugging Options @xref{Debugging Options,,Options for Debugging Your Program or GCC}. @gccoptlist{-d@var{letters} -dumpspecs -dumpmachine -dumpversion @gol --faddress-sanitizer -fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol +-fsanitize=@var{style} @gol +-fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol -fdisable-ipa-@var{pass_name} @gol -fdisable-rtl-@var{pass_name} @gol -fdisable-rtl-@var{pass-name}=@var{range-list} @gol @@ -6855,11 +6856,14 @@ assumptions based on that. The default is @option{-fzero-initialized-in-bss}. -@item -faddress-sanitizer -Enable AddressSanitizer, a fast memory error detector. -Memory access instructions will be instrumented to detect -out-of-bounds and use-after-free bugs. So far only heap bugs will be detected. -See @uref{http://code.google.com/p/address-sanitizer/} for more details. +@item -fsanitize=[address|thread] +Enable AddressSanitizer or ThreadSanitizer. AddressSanitizer is a fast +memory error detector. Memory access instructions will be instrumented +to detect out-of-bounds, use-after-free, stack overflow and global +overflow bugs. ThreadSanitizer is a fast data race detector. +See @uref{http://code.google.com/p/address-sanitizer/} and +@uref{http://code.google.com/p/data-race-test/wiki/ThreadSanitizer} +for more details. @item -fmudflap -fmudflapth -fmudflapir @opindex fmudflap @@ -9938,7 +9942,7 @@ for the languages used in the program, o @file{libgcc}. @item -static-libasan -When the @option{-faddress-sanitizer} option is used to link a program, +When the @option{-fsanitize=address} 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