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-exception 6// 7//===---------------------------------------------------------------------===// 8// 9// See sanitizer_stoptheworld.h for details. 10// 11//===---------------------------------------------------------------------===// 12 13#include "sanitizer_platform.h" 14 15#if SANITIZER_FUCHSIA 16 17#include <zircon/sanitizer.h> 18 19#include "sanitizer_stoptheworld.h" 20 21namespace __sanitizer { 22 23// The Fuchsia implementation stops the world but doesn't offer a real 24// SuspendedThreadsList argument. This is enough for ASan's use case, 25// and LSan does not use this API on Fuchsia. 26void StopTheWorld(StopTheWorldCallback callback, void *argument) { 27 struct Params { 28 StopTheWorldCallback callback; 29 void *argument; 30 } params = {callback, argument}; 31 __sanitizer_memory_snapshot( 32 nullptr, nullptr, nullptr, nullptr, 33 [](zx_status_t, void *data) { 34 auto params = reinterpret_cast<Params *>(data); 35 params->callback({}, params->argument); 36 }, 37 ¶ms); 38} 39 40} // namespace __sanitizer 41 42#endif // SANITIZER_FUCHSIA 43