// Test for ASAN_OPTIONS=start_deactivated=1 mode.
// Main executable is uninstrumented, but linked to ASan runtime. The shared
// library is instrumented.

// RUN: %clangxx_asan -O0 -DSHARED_LIB %s -fPIC -shared -o %t-so.so
// RUN: %clangxx -O0 %s -c -o %t.o
// RUN: %clangxx_asan -O0 %t.o %libdl -o %t

// RUN: rm -f %t.asan.options.activation-options.cc.tmp
// RUN: rm -f %t.asan.options.ABCDE
// RUN: echo "help=1" >%t.asan.options.activation-options.cc.tmp

// RUN: %env_asan_opts=start_deactivated=1 \
// RUN:   ASAN_ACTIVATION_OPTIONS=include=%t.asan.options.%b %run %t 2>&1 | \
// RUN:   FileCheck %s --check-prefix=CHECK-HELP --check-prefix=CHECK-FOUND

// RUN: %env_asan_opts=start_deactivated=1 \
// RUN:   ASAN_ACTIVATION_OPTIONS=include=%t.asan.options not %run %t 2>&1 | \
// RUN:   FileCheck %s --check-prefix=CHECK-NO-HELP --check-prefix=CHECK-MISSING

// RUN: %env_asan_opts=start_deactivated=1 \
// RUN:   ASAN_ACTIVATION_OPTIONS=include=%t.asan.options.%b not %run %t --fix-name 2>&1 | \
// RUN:   FileCheck %s --check-prefix=CHECK-NO-HELP --check-prefix=CHECK-MISSING

// RUN: echo "help=1" >%t.asan.options.ABCDE

// RUN: %env_asan_opts=start_deactivated=1 \
// RUN:   ASAN_ACTIVATION_OPTIONS=include=%t.asan.options.%b %run %t --fix-name 2>&1 | \
// RUN:   FileCheck %s --check-prefix=CHECK-HELP --check-prefix=CHECK-FOUND

// XFAIL: arm-linux-gnueabi
// XFAIL: android

#if !defined(SHARED_LIB)
#include <assert.h>
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include <string>

#include "sanitizer/asan_interface.h"

typedef void (*Fn)();

int main(int argc, char *argv[]) {
  std::string path = std::string(argv[0]) + "-so.so";

  if (argc > 1 && strcmp(argv[1], "--fix-name") == 0) {
    assert(strlen(argv[0]) > 5);
    strcpy(argv[0], "ABCDE");
  }

  void *dso = dlopen(path.c_str(), RTLD_NOW);
  if (!dso) {
    fprintf(stderr, "dlopen failed: %s\n", dlerror());
    return 1;
  }

  return 0;
}
#else  // SHARED_LIB
// Empty: all we need is an ASan shared library constructor.
#endif  // SHARED_LIB

// CHECK-HELP: Available flags for {{.*}}Sanitizer:
// CHECK-NO-HELP-NOT: Available flags for {{.*}}Sanitizer:
// CHECK-FOUND-NOT: Failed to read options
// CHECK-MISSING: Failed to read options
