Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1636)

Side by Side Diff: build/config/sanitizers/BUILD.gn

Issue 1809273002: Enable whole-program virtual function optimization in LTO mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename one more instance of is_lto Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import("//build/config/chrome_build.gni") 5 import("//build/config/chrome_build.gni")
6 import("//build/config/chromecast_build.gni") 6 import("//build/config/chromecast_build.gni")
7 import("//build/config/sanitizers/sanitizers.gni") 7 import("//build/config/sanitizers/sanitizers.gni")
8 8
9 # Contains the dependencies needed for sanitizers to link into executables and 9 # Contains the dependencies needed for sanitizers to link into executables and
10 # shared_libraries. Unconditionally depend upon this target as it is empty if 10 # shared_libraries. Unconditionally depend upon this target as it is empty if
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 } 85 }
86 if (is_msan) { 86 if (is_msan) {
87 ldflags += [ "-fsanitize=memory" ] 87 ldflags += [ "-fsanitize=memory" ]
88 } 88 }
89 if (is_ubsan) { 89 if (is_ubsan) {
90 ldflags += [ "-fsanitize=undefined" ] 90 ldflags += [ "-fsanitize=undefined" ]
91 } 91 }
92 if (is_ubsan_vptr) { 92 if (is_ubsan_vptr) {
93 ldflags += [ "-fsanitize=vptr" ] 93 ldflags += [ "-fsanitize=vptr" ]
94 } 94 }
95 if (is_lto && !is_nacl) {
96 ldflags += [ "-flto" ]
97 95
98 # Apply a lower LTO optimization level as the default is too slow. 96 if (is_cfi && !is_nacl) {
99 if (is_linux) { 97 ldflags += [
100 ldflags += [ "-Wl,-plugin-opt,O1" ] 98 "-fsanitize=cfi-vcall",
101 } else if (is_mac) { 99 "-fsanitize=cfi-derived-cast",
102 ldflags += [ "-Wl,-mllvm,-O1" ] 100 "-fsanitize=cfi-unrelated-cast",
103 } 101 ]
104
105 # Work-around for http://openradar.appspot.com/20356002
106 if (is_mac) {
107 ldflags += [ "-Wl,-all_load" ]
108 }
109
110 # Without this flag, LTO produces a .text section that is larger
111 # than the maximum call displacement, preventing the linker from
112 # relocating calls (http://llvm.org/PR22999).
113 if (current_cpu == "arm") {
114 ldflags += [ "-Wl,-plugin-opt,-function-sections" ]
115 }
116
117 if (is_cfi) {
118 ldflags += [
119 "-fsanitize=cfi-vcall",
120 "-fsanitize=cfi-derived-cast",
121 "-fsanitize=cfi-unrelated-cast",
122 ]
123 }
124
125 if (use_cfi_diag) { 102 if (use_cfi_diag) {
126 ldflags += [ 103 ldflags += [
127 "-fno-sanitize-trap=cfi", 104 "-fno-sanitize-trap=cfi",
128 "-fsanitize-recover=cfi", 105 "-fsanitize-recover=cfi",
129 ] 106 ]
130 } 107 }
131 } 108 }
132 } 109 }
133 } 110 }
134 111
135 # This config is applied by default to all targets. It sets the compiler flags 112 # This config is applied by default to all targets. It sets the compiler flags
136 # for sanitizer usage, or, if no sanitizer is set, does nothing. 113 # for sanitizer usage, or, if no sanitizer is set, does nothing.
137 # 114 #
138 # This needs to be in a separate config so that targets can opt out of 115 # This needs to be in a separate config so that targets can opt out of
139 # sanitizers (by removing the config) if they desire. Even if a target 116 # sanitizers (by removing the config) if they desire. Even if a target
140 # removes this config, executables & shared libraries should still depend on 117 # removes this config, executables & shared libraries should still depend on
141 # :deps if any of their dependencies have not opted out of sanitizers. 118 # :deps if any of their dependencies have not opted out of sanitizers.
142 config("default_sanitizer_flags") { 119 config("default_sanitizer_flags") {
143 cflags = [] 120 cflags = []
144 cflags_cc = [] 121 cflags_cc = []
145 defines = [] 122 defines = []
146 configs = [ ":default_sanitizer_ldflags" ] 123 configs = [ ":default_sanitizer_ldflags" ]
147 124
148 # Only works on Posix-like platforms. 125 # Only works on Posix-like platforms.
149 # FIXME: this is not true, remove the conditional. 126 # FIXME: this is not true, remove the conditional.
150 if (is_posix) { 127 if (is_posix) {
151 # Common options for AddressSanitizer, LeakSanitizer, ThreadSanitizer, 128 # Common options for AddressSanitizer, LeakSanitizer, ThreadSanitizer,
152 # MemorySanitizer and non-official CFI builds. 129 # MemorySanitizer and non-official CFI builds.
153 if (using_sanitizer || (is_lto && !is_official_build)) { 130 if (using_sanitizer || (is_cfi && !is_official_build)) {
154 cflags += [ 131 cflags += [
155 "-fno-omit-frame-pointer", 132 "-fno-omit-frame-pointer",
156 "-gline-tables-only", 133 "-gline-tables-only",
157 ] 134 ]
158 } 135 }
159 if (is_asan) { 136 if (is_asan) {
160 asan_blacklist_path = 137 asan_blacklist_path =
161 rebase_path("//tools/memory/asan/blacklist.txt", root_build_dir) 138 rebase_path("//tools/memory/asan/blacklist.txt", root_build_dir)
162 cflags += [ 139 cflags += [
163 "-fsanitize=address", 140 "-fsanitize=address",
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 } 216 }
240 } 217 }
241 if (is_ubsan_vptr) { 218 if (is_ubsan_vptr) {
242 ubsan_vptr_blacklist_path = 219 ubsan_vptr_blacklist_path =
243 rebase_path("//tools/ubsan/vptr_blacklist.txt", root_build_dir) 220 rebase_path("//tools/ubsan/vptr_blacklist.txt", root_build_dir)
244 cflags += [ 221 cflags += [
245 "-fsanitize=vptr", 222 "-fsanitize=vptr",
246 "-fsanitize-blacklist=$ubsan_vptr_blacklist_path", 223 "-fsanitize-blacklist=$ubsan_vptr_blacklist_path",
247 ] 224 ]
248 } 225 }
249 if (is_lto && !is_nacl) {
250 cflags += [ "-flto" ]
251 226
252 if (is_cfi) { 227 if (is_cfi && !is_nacl) {
253 cfi_blacklist_path = 228 cfi_blacklist_path =
254 rebase_path("//tools/cfi/blacklist.txt", root_build_dir) 229 rebase_path("//tools/cfi/blacklist.txt", root_build_dir)
255 cflags += [ 230 cflags += [
256 "-fsanitize=cfi-vcall", 231 "-fsanitize=cfi-vcall",
257 "-fsanitize=cfi-derived-cast", 232 "-fsanitize=cfi-derived-cast",
258 "-fsanitize=cfi-unrelated-cast", 233 "-fsanitize=cfi-unrelated-cast",
259 "-fsanitize-blacklist=$cfi_blacklist_path", 234 "-fsanitize-blacklist=$cfi_blacklist_path",
260 ] 235 ]
261 }
262 236
263 if (use_cfi_diag) { 237 if (use_cfi_diag) {
264 cflags += [ 238 cflags += [
265 "-fno-sanitize-trap=cfi", 239 "-fno-sanitize-trap=cfi",
266 "-fsanitize-recover=cfi", 240 "-fsanitize-recover=cfi",
267 "-fno-inline-functions", 241 "-fno-inline-functions",
268 "-fno-inline", 242 "-fno-inline",
269 "-fno-omit-frame-pointer", 243 "-fno-omit-frame-pointer",
270 "-O1", 244 "-O1",
271 ] 245 ]
(...skipping 15 matching lines...) Expand all
287 } 261 }
288 262
289 config("default_sanitizer_coverage_flags") { 263 config("default_sanitizer_coverage_flags") {
290 cflags = [] 264 cflags = []
291 265
292 if (use_sanitizer_coverage) { 266 if (use_sanitizer_coverage) {
293 # FIXME: make this configurable. 267 # FIXME: make this configurable.
294 cflags += [ "-fsanitize-coverage=edge,indirect-calls,8bit-counters" ] 268 cflags += [ "-fsanitize-coverage=edge,indirect-calls,8bit-counters" ]
295 } 269 }
296 } 270 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698