Plumbs URLRequestContext and CacheBlobStorageContext down to cache.
[chromium-blink-merge.git] / chrome / app / chrome_exe_main_mac.cc
bloba0f1ac589e17e1ce165a991d01b5490140755f9e
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
3 // found in the LICENSE file.
5 // The entry point for all Mac Chromium processes, including the outer app
6 // bundle (browser) and helper app (renderer, plugin, and friends).
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>
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.
21 static const char kNaClDefaultOptions[] = "handle_segv=0";
22 static const char kNaClFlag[] = "--type=nacl-loader";
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;
43 return NULL;
45 #endif // ADDRESS_SANITIZER
47 extern "C" {
48 int ChromeMain(int argc, char** argv);
49 } // extern "C"
51 __attribute__((visibility("default")))
52 int main(int argc, char* argv[]) {
53 int rv = ChromeMain(argc, argv);
55 // exit, don't return from main, to avoid the apparent removal of main from
56 // stack backtraces under tail call optimization.
57 exit(rv);