15ffd83dbSDimitry Andric //===-- sanitizer_stoptheworld_fuchsia.cpp -------------------------------===//
25ffd83dbSDimitry Andric //
35ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65ffd83dbSDimitry Andric //
75ffd83dbSDimitry Andric //===---------------------------------------------------------------------===//
85ffd83dbSDimitry Andric //
95ffd83dbSDimitry Andric // See sanitizer_stoptheworld.h for details.
105ffd83dbSDimitry Andric //
115ffd83dbSDimitry Andric //===---------------------------------------------------------------------===//
125ffd83dbSDimitry Andric 
135ffd83dbSDimitry Andric #include "sanitizer_platform.h"
145ffd83dbSDimitry Andric 
155ffd83dbSDimitry Andric #if SANITIZER_FUCHSIA
165ffd83dbSDimitry Andric 
175ffd83dbSDimitry Andric #include <zircon/sanitizer.h>
185ffd83dbSDimitry Andric 
195ffd83dbSDimitry Andric #include "sanitizer_stoptheworld.h"
20*e8d8bef9SDimitry Andric #include "sanitizer_stoptheworld_fuchsia.h"
215ffd83dbSDimitry Andric 
225ffd83dbSDimitry Andric namespace __sanitizer {
235ffd83dbSDimitry Andric 
245ffd83dbSDimitry Andric // The Fuchsia implementation stops the world but doesn't offer a real
255ffd83dbSDimitry Andric // SuspendedThreadsList argument.  This is enough for ASan's use case,
265ffd83dbSDimitry Andric // and LSan does not use this API on Fuchsia.
StopTheWorld(StopTheWorldCallback callback,void * argument)275ffd83dbSDimitry Andric void StopTheWorld(StopTheWorldCallback callback, void *argument) {
285ffd83dbSDimitry Andric   struct Params {
295ffd83dbSDimitry Andric     StopTheWorldCallback callback;
305ffd83dbSDimitry Andric     void *argument;
315ffd83dbSDimitry Andric   } params = {callback, argument};
325ffd83dbSDimitry Andric   __sanitizer_memory_snapshot(
335ffd83dbSDimitry Andric       nullptr, nullptr, nullptr, nullptr,
345ffd83dbSDimitry Andric       [](zx_status_t, void *data) {
355ffd83dbSDimitry Andric         auto params = reinterpret_cast<Params *>(data);
36*e8d8bef9SDimitry Andric         params->callback(SuspendedThreadsListFuchsia(), params->argument);
375ffd83dbSDimitry Andric       },
385ffd83dbSDimitry Andric       &params);
395ffd83dbSDimitry Andric }
405ffd83dbSDimitry Andric 
415ffd83dbSDimitry Andric }  // namespace __sanitizer
425ffd83dbSDimitry Andric 
435ffd83dbSDimitry Andric #endif  // SANITIZER_FUCHSIA
44