1*6777b538SAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/debug/debugger.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <lib/zx/process.h> 8*6777b538SAndroid Build Coastguard Worker #include <stdlib.h> 9*6777b538SAndroid Build Coastguard Worker #include <unistd.h> 10*6777b538SAndroid Build Coastguard Worker #include <zircon/process.h> 11*6777b538SAndroid Build Coastguard Worker #include <zircon/syscalls.h> 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker #include "base/debug/alias.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace base { 16*6777b538SAndroid Build Coastguard Worker namespace debug { 17*6777b538SAndroid Build Coastguard Worker BeingDebugged()18*6777b538SAndroid Build Coastguard Workerbool BeingDebugged() { 19*6777b538SAndroid Build Coastguard Worker zx_info_process_t info = {}; 20*6777b538SAndroid Build Coastguard Worker // Ignore failures. The 0-initialization above will result in "false" for 21*6777b538SAndroid Build Coastguard Worker // error cases. 22*6777b538SAndroid Build Coastguard Worker zx::process::self()->get_info(ZX_INFO_PROCESS, &info, sizeof(info), 23*6777b538SAndroid Build Coastguard Worker nullptr, nullptr); 24*6777b538SAndroid Build Coastguard Worker return (info.flags & ZX_INFO_PROCESS_FLAG_DEBUGGER_ATTACHED) != 0; 25*6777b538SAndroid Build Coastguard Worker } 26*6777b538SAndroid Build Coastguard Worker BreakDebuggerAsyncSafe()27*6777b538SAndroid Build Coastguard Workervoid BreakDebuggerAsyncSafe() { 28*6777b538SAndroid Build Coastguard Worker // NOTE: This code MUST be async-signal safe (it's used by in-process 29*6777b538SAndroid Build Coastguard Worker // stack dumping signal handler). NO malloc or stdio is allowed here. 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker // Linker's ICF feature may merge this function with other functions with the 32*6777b538SAndroid Build Coastguard Worker // same definition (e.g. any function whose sole job is to call abort()) and 33*6777b538SAndroid Build Coastguard Worker // it may confuse the crash report processing system. http://crbug.com/508489 34*6777b538SAndroid Build Coastguard Worker static int static_variable_to_make_this_function_unique = 0; 35*6777b538SAndroid Build Coastguard Worker Alias(&static_variable_to_make_this_function_unique); 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker abort(); 38*6777b538SAndroid Build Coastguard Worker } 39*6777b538SAndroid Build Coastguard Worker VerifyDebugger()40*6777b538SAndroid Build Coastguard Workervoid VerifyDebugger() {} 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker } // namespace debug 43*6777b538SAndroid Build Coastguard Worker } // namespace base 44