// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// The entry point for all Mac Chromium processes, including the outer app
// bundle (browser) and helper app (renderer, plugin, and friends).

#if defined(ADDRESS_SANITIZER)
#include <crt_externs.h>  // for _NSGetArgc, _NSGetArgv
#endif  // ADDRESS_SANITIZER
#include <stdlib.h>
#include <string.h>

#if defined(ADDRESS_SANITIZER)
// NaCl requires its own SEGV handler, so we need to add handle_segv=0 to
// ASAN_OPTIONS. This is done by injecting __asan_default_options into the
// executable.
// Because there's no distinct NaCl executable on OSX, we have to look at the
// command line arguments to understand whether the process is a NaCl loader.

static const char kNaClDefaultOptions[] = "handle_segv=0";
static const char kNaClFlag[] = "--type=nacl-loader";

extern "C"
// __asan_default_options() is called at ASan initialization, so it must
// not be instrumented with ASan -- thus the "no_sanitize_address" attribute.
__attribute__((no_sanitize_address))
// The function isn't referenced from the executable itself. Make sure it isn't
// stripped by the linker.
__attribute__((used))
__attribute__((visibility("default")))
const char* __asan_default_options()  {
  char*** argvp = _NSGetArgv();
  int* argcp = _NSGetArgc();
  if (!argvp || !argcp) return NULL;
  char** argv = *argvp;
  int argc = *argcp;
  for (int i = 0; i < argc; ++i) {
    if (strcmp(argv[i], kNaClFlag) == 0) {
      return kNaClDefaultOptions;
    }
  }
  return NULL;
}
#endif  // ADDRESS_SANITIZER

extern "C" {
int ChromeMain(int argc, char** argv);
}  // extern "C"

__attribute__((visibility("default")))
int main(int argc, char* argv[]) {
  int rv = ChromeMain(argc, argv);

  // exit, don't return from main, to avoid the apparent removal of main from
  // stack backtraces under tail call optimization.
  exit(rv);
}
