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 ¶ms);39}40 41} // namespace __sanitizer42 43#endif // SANITIZER_FUCHSIA44