1 2012-10-26 Dodji Seketeli <dodji@redhat.com>
3 * asan.c (build_check_stmt): Accept the memory access to be
4 represented by an SSA_NAME.
6 2012-10-17 Jakub Jelinek <jakub@redhat.com>
7 Wei Mi <wmi@google.com>
9 * varasm.c: Include asan.h.
10 (assemble_noswitch_variable): Grow size by asan_red_zone_size
11 if decl is asan protected.
12 (place_block_symbol): Likewise.
13 (assemble_variable): If decl is asan protected, increase
14 DECL_ALIGN if needed, and for decls emitted using
15 assemble_variable_contents append padding zeros after it.
16 * Makefile.in (varasm.o): Depend on asan.h.
17 * asan.c: Include output.h.
18 (asan_pp, asan_pp_initialized, asan_ctor_statements): New variables.
19 (asan_pp_initialize, asan_pp_string): New functions.
20 (asan_emit_stack_protection): Use asan_pp{,_initialized}
21 instead of local pp{,_initialized} vars, use asan_pp_initialize
22 and asan_pp_string helpers.
23 (asan_needs_local_alias, asan_protect_global,
24 asan_global_struct, asan_add_global): New functions.
25 (asan_finish_file): Protect global vars that can be protected. Use
26 asan_ctor_statements instead of ctor_statements
27 * asan.h (asan_protect_global): New prototype.
28 (asan_red_zone_size): New inline function.
30 2012-10-17 Jakub Jelinek <jakub@redhat.com>
32 * Makefile.in (asan.o): Depend on $(EXPR_H) $(OPTABS_H).
33 (cfgexpand.o): Depend on asan.h.
34 * asan.c: Include expr.h and optabs.h.
35 (asan_shadow_set): New variable.
36 (asan_shadow_cst, asan_emit_stack_protection): New functions.
37 (asan_init_shadow_ptr_types): Initialize also asan_shadow_set.
38 * cfgexpand.c: Include asan.h. Define HOST_WIDE_INT heap vector.
39 (partition_stack_vars): If i is large alignment and j small
40 alignment or vice versa, break out of the loop instead of continue,
41 and put the test earlier. If flag_asan, break out of the loop
42 if for small alignment size is different.
43 (struct stack_vars_data): New type.
44 (expand_stack_vars): Add DATA argument. Change PRED type to
45 function taking size_t argument instead of tree. Adjust pred
46 calls. Fill DATA in and add needed padding in between variables
47 if -faddress-sanitizer.
48 (defer_stack_allocation): Defer everything for flag_asan.
49 (stack_protect_decl_phase_1, stack_protect_decl_phase_2): Take
50 size_t index into stack_vars array instead of the decl directly.
51 (asan_decl_phase_3): New function.
52 (expand_used_vars): Return var destruction sequence. Adjust
53 expand_stack_vars calls, add another one for flag_asan. Call
54 asan_emit_stack_protection if expand_stack_vars added anything
56 (expand_gimple_basic_block): Add disable_tail_calls argument.
57 (gimple_expand_cfg): Pass true to it if expand_used_vars returned
58 non-NULL. Emit the sequence returned by expand_used_vars after
60 * asan.h (asan_emit_stack_protection): New prototype.
61 (asan_shadow_set): New decl.
62 (ASAN_RED_ZONE_SIZE, ASAN_STACK_MAGIC_LEFT, ASAN_STACK_MAGIC_MIDDLE,
63 ASAN_STACK_MAGIC_RIGHT, ASAN_STACK_FRAME_MAGIC): Define.
64 (asan_protect_stack_decl): New inline.
65 * toplev.c (process_options): Also disable -faddress-sanitizer on
66 !FRAME_GROWS_DOWNWARDS targets.
68 2012-10-17 Jakub Jelinek <jakub@redhat.com>
70 * Makefile.in (asan.o): Depend on $(EXPR_H) $(OPTABS_H).
71 (cfgexpand.o): Depend on asan.h.
72 * asan.c: Include expr.h and optabs.h.
73 (asan_shadow_set): New variable.
74 (asan_shadow_cst, asan_emit_stack_protection): New functions.
75 (asan_init_shadow_ptr_types): Initialize also asan_shadow_set.
76 * cfgexpand.c: Include asan.h. Define HOST_WIDE_INT heap vector.
77 (partition_stack_vars): If i is large alignment and j small
78 alignment or vice versa, break out of the loop instead of continue,
79 and put the test earlier. If flag_asan, break out of the loop
80 if for small alignment size is different.
81 (struct stack_vars_data): New type.
82 (expand_stack_vars): Add DATA argument. Change PRED type to
83 function taking size_t argument instead of tree. Adjust pred calls.
84 Fill DATA in and add needed padding in between variables if -fasan.
85 (defer_stack_allocation): Defer everything for flag_asan.
86 (stack_protect_decl_phase_1, stack_protect_decl_phase_2): Take
87 size_t index into stack_vars array instead of the decl directly.
88 (asan_decl_phase_3): New function.
89 (expand_used_vars): Return var destruction sequence. Adjust
90 expand_stack_vars calls, add another one for flag_asan. Call
91 asan_emit_stack_protection if expand_stack_vars added anything
93 (expand_gimple_basic_block): Add disable_tail_calls argument.
94 (gimple_expand_cfg): Pass true to it if expand_used_vars returned
95 non-NULL. Emit the sequence returned by expand_used_vars after
97 * asan.h (asan_emit_stack_protection): New prototype.
98 (asan_shadow_set): New decl.
99 (ASAN_RED_ZONE_SIZE, ASAN_STACK_MAGIC_LEFT, ASAN_STACK_MAGIC_MIDDLE,
100 ASAN_STACK_MAGIC_RIGHT, ASAN_STACK_FRAME_MAGIC): Define.
101 (asan_protect_stack_decl): New inline.
102 * toplev.c (process_options): Also disable -fasan on
103 !FRAME_GROWS_DOWNWARDS targets.
105 2012-10-12 Jakub Jelinek <jakub@redhat.com>
107 * asan.c (build_check_stmt): Rename join_bb variable to else_bb.
108 (gate_asan_O0): New function.
109 (pass_asan_O0): New variable.
110 * passes.c (init_optimization_passes): Add pass_asan_O0.
111 * tree-pass.h (pass_asan_O0): New declaration.
113 2012-10-11 Jakub Jelinek <jakub@redhat.com>
114 Xinliang David Li <davidxl@google.com>
115 Dodji Seketeli <dodji@redhat.com>
117 * Makefile.in (GTFILES): Add $(srcdir)/asan.c.
118 (asan.o): Update the dependencies of asan.o.
119 * asan.c (tm.h, tree.h, tm_p.h, basic-block.h, flags.h
120 function.h, tree-inline.h, tree-dump.h, diagnostic.h, demangle.h,
121 langhooks.h, ggc.h, cgraph.h, gimple.h): Remove these unused but
123 (shadow_ptr_types): New variable.
124 (report_error_func): Change is_store argument to bool, don't append
125 newline to function name.
126 (PROB_VERY_UNLIKELY, PROB_ALWAYS): Define.
127 (build_check_stmt): Change is_store argument to bool. Emit GIMPLE
128 directly instead of creating trees and gimplifying them. Mark
129 the error reporting function as very unlikely.
130 (instrument_derefs): Change is_store argument to bool. Use
131 int_size_in_bytes to compute size_in_bytes, simplify size check.
132 Use build_fold_addr_expr instead of build_addr.
133 (transform_statements): Adjust instrument_derefs caller.
134 Use gimple_assign_single_p as stmt test. Don't look at MEM refs
136 (asan_init_shadow_ptr_types): New function.
137 (asan_instrument): Don't push/pop gimplify context.
138 Call asan_init_shadow_ptr_types if not yet initialized.
139 * asan.h (ASAN_SHADOW_SHIFT): Adjust comment.
141 2012-10-11 Jakub Jelinek <jakub@redhat.com>
142 Dodji Seketeli <dodji@redhat.com>
144 * Makefile.in (GTFILES): Add $(srcdir)/asan.c.
145 (asan.o): Update the dependencies of asan.o.
146 * asan.c (tm.h, tree.h, tm_p.h, basic-block.h, flags.h
147 function.h, tree-inline.h, tree-dump.h, diagnostic.h, demangle.h,
148 langhooks.h, ggc.h, cgraph.h, gimple.h): Remove these unused but
150 (shadow_ptr_types): New variable.
151 (report_error_func): Change is_store argument to bool, don't append
152 newline to function name.
153 (PROB_VERY_UNLIKELY, PROB_ALWAYS): Define.
154 (build_check_stmt): Change is_store argument to bool. Emit GIMPLE
155 directly instead of creating trees and gimplifying them. Mark
156 the error reporting function as very unlikely.
157 (instrument_derefs): Change is_store argument to bool. Use
158 int_size_in_bytes to compute size_in_bytes, simplify size check.
159 Use build_fold_addr_expr instead of build_addr.
160 (transform_statements): Adjust instrument_derefs caller.
161 Use gimple_assign_single_p as stmt test. Don't look at MEM refs
163 (asan_init_shadow_ptr_types): New function.
164 (asan_instrument): Don't push/pop gimplify context.
165 Call asan_init_shadow_ptr_types if not yet initialized.
166 * asan.h (ASAN_SHADOW_SHIFT): Adjust comment.
168 2012-10-11 Jakub Jelinek <jakub@redhat.com>
170 * toplev.c (process_options): Warn and turn off
171 -faddress-sanitizer if not supported by target.
172 * asan.c: Include target.h.
173 (asan_scale, asan_offset_log_32, asan_offset_log_64,
174 asan_offset_log): Removed.
175 (build_check_stmt): Use ASAN_SHADOW_SHIFT and
176 targetm.asan_shadow_offset ().
177 (asan_instrument): Don't initialize asan_offset_log.
178 * asan.h (ASAN_SHADOW_SHIFT): Define.
179 * target.def (TARGET_ASAN_SHADOW_OFFSET): New hook.
180 * doc/tm.texi.in (TARGET_ASAN_SHADOW_OFFSET): Add it.
181 * doc/tm.texi: Regenerated.
182 * Makefile.in (asan.o): Depend on $(TARGET_H).
183 * config/i386/i386.c (ix86_asan_shadow_offset): New function.
184 (TARGET_ASAN_SHADOW_OFFSET): Define.
186 2012-10-10 Wei Mi <wmi@google.com>
187 Diego Novillo <dnovillo@google.com>
188 Dodji Seketeli <dodji@redhat.com>
190 * Makefile.in: Add asan.c and its dependencies.
191 * common.opt: Add -faddress-sanitizer option.
192 * invoke.texi: Document the new flag.
193 * passes.c: Add the asan pass.
194 * toplev.c (compile_file): Call asan_finish_file.
197 * tree-pass.h: Declare pass_asan.