44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
|
|
// Copyright 2021 The Chromium Authors
|
||
|
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
|
// found in the LICENSE file.
|
||
|
|
|
||
|
|
#include "base/debug/debugger.h"
|
||
|
|
|
||
|
|
#include <lib/zx/process.h>
|
||
|
|
#include <stdlib.h>
|
||
|
|
#include <unistd.h>
|
||
|
|
#include <zircon/process.h>
|
||
|
|
#include <zircon/syscalls.h>
|
||
|
|
|
||
|
|
#include "base/debug/alias.h"
|
||
|
|
|
||
|
|
namespace base {
|
||
|
|
namespace debug {
|
||
|
|
|
||
|
|
bool BeingDebugged() {
|
||
|
|
zx_info_process_t info = {};
|
||
|
|
// Ignore failures. The 0-initialization above will result in "false" for
|
||
|
|
// error cases.
|
||
|
|
zx::process::self()->get_info(ZX_INFO_PROCESS, &info, sizeof(info),
|
||
|
|
nullptr, nullptr);
|
||
|
|
return (info.flags & ZX_INFO_PROCESS_FLAG_DEBUGGER_ATTACHED) != 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
void BreakDebuggerAsyncSafe() {
|
||
|
|
// NOTE: This code MUST be async-signal safe (it's used by in-process
|
||
|
|
// stack dumping signal handler). NO malloc or stdio is allowed here.
|
||
|
|
|
||
|
|
// Linker's ICF feature may merge this function with other functions with the
|
||
|
|
// same definition (e.g. any function whose sole job is to call abort()) and
|
||
|
|
// it may confuse the crash report processing system. http://crbug.com/508489
|
||
|
|
static int static_variable_to_make_this_function_unique = 0;
|
||
|
|
Alias(&static_variable_to_make_this_function_unique);
|
||
|
|
|
||
|
|
abort();
|
||
|
|
}
|
||
|
|
|
||
|
|
void VerifyDebugger() {}
|
||
|
|
|
||
|
|
} // namespace debug
|
||
|
|
} // namespace base
|