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

Side by Side Diff: chrome/app/chrome_exe_main_mac.cc

Issue 594843002: Reland https://codereview.chromium.org/581983003/: Enable ASan default options on Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // The entry point for all Mac Chromium processes, including the outer app 5 // The entry point for all Mac Chromium processes, including the outer app
6 // bundle (browser) and helper app (renderer, plugin, and friends). 6 // bundle (browser) and helper app (renderer, plugin, and friends).
7 7
8 #if defined(ADDRESS_SANITIZER)
9 #include <crt_externs.h> // for _NSGetArgc, _NSGetArgv
10 #include <string.h>
11 #endif // ADDRESS_SANITIZER
12 #include <stdlib.h> 8 #include <stdlib.h>
13 9
14 #if defined(ADDRESS_SANITIZER)
15 // NaCl requires its own SEGV handler, so we need to add handle_segv=0 to
16 // ASAN_OPTIONS. This is done by injecting __asan_default_options into the
17 // executable.
18 // Because there's no distinct NaCl executable on OSX, we have to look at the
19 // command line arguments to understand whether the process is a NaCl loader.
20
21 static const char kNaClDefaultOptions[] = "handle_segv=0";
22 static const char kNaClFlag[] = "--type=nacl-loader";
23
24 extern "C"
25 // __asan_default_options() is called at ASan initialization, so it must
26 // not be instrumented with ASan -- thus the "no_sanitize_address" attribute.
27 __attribute__((no_sanitize_address))
28 // The function isn't referenced from the executable itself. Make sure it isn't
29 // stripped by the linker.
30 __attribute__((used))
31 __attribute__((visibility("default")))
32 const char* __asan_default_options() {
33 char*** argvp = _NSGetArgv();
34 int* argcp = _NSGetArgc();
35 if (!argvp || !argcp) return NULL;
36 char** argv = *argvp;
37 int argc = *argcp;
38 for (int i = 0; i < argc; ++i) {
39 if (strcmp(argv[i], kNaClFlag) == 0) {
40 return kNaClDefaultOptions;
41 }
42 }
43 return NULL;
44 }
45 #endif // ADDRESS_SANITIZER
46
47 extern "C" { 10 extern "C" {
48 int ChromeMain(int argc, char** argv); 11 int ChromeMain(int argc, char** argv);
49 } // extern "C" 12 } // extern "C"
50 13
51 __attribute__((visibility("default"))) 14 __attribute__((visibility("default")))
52 int main(int argc, char* argv[]) { 15 int main(int argc, char* argv[]) {
53 int rv = ChromeMain(argc, argv); 16 int rv = ChromeMain(argc, argv);
54 17
55 // exit, don't return from main, to avoid the apparent removal of main from 18 // exit, don't return from main, to avoid the apparent removal of main from
56 // stack backtraces under tail call optimization. 19 // stack backtraces under tail call optimization.
57 exit(rv); 20 exit(rv);
58 } 21 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698