brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 91bf19e Raw
44 lines · cpp
1//===-- sanitizer_stoptheworld_fuchsia.cpp -------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===---------------------------------------------------------------------===//8//9// See sanitizer_stoptheworld.h for details.10//11//===---------------------------------------------------------------------===//12 13#include "sanitizer_platform.h"14 15#if SANITIZER_FUCHSIA16 17#include <zircon/sanitizer.h>18 19#include "sanitizer_stoptheworld.h"20#include "sanitizer_stoptheworld_fuchsia.h"21 22namespace __sanitizer {23 24// The Fuchsia implementation stops the world but doesn't offer a real25// SuspendedThreadsList argument.  This is enough for ASan's use case,26// and LSan does not use this API on Fuchsia.27void StopTheWorld(StopTheWorldCallback callback, void *argument) {28  struct Params {29    StopTheWorldCallback callback;30    void *argument;31  } params = {callback, argument};32  __sanitizer_memory_snapshot(33      nullptr, nullptr, nullptr, nullptr,34      [](zx_status_t, void *data) {35        auto params = reinterpret_cast<Params *>(data);36        params->callback(SuspendedThreadsListFuchsia(), params->argument);37      },38      &params);39}40 41}  // namespace __sanitizer42 43#endif  // SANITIZER_FUCHSIA44