| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_FUNCTION_STEP_H_ |
| #define SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_FUNCTION_STEP_H_ |
| |
| namespace zxdb { |
| |
| class Thread; |
| |
| // Actions that might be performend when entering a new function. Some functions may be skipped |
| // or stepped through transparently depending on what they are and the debugger configuration. |
| enum class FunctionStep { |
| // Do nothing special for this call. This will mean "stop" or "continue" depending on the |
| // context. |
| kDefault, |
| |
| // Used to step through PLT stubs to get to the destination function. |
| kStepThroughPlt, |
| |
| // Single-step CPU instructions as long as there is no line information for the given address. |
| kStepNoLineInfo, |
| |
| // Immediately step out of this function. This might be used to ignore libc calls, for example. |
| kStepOut, |
| }; |
| |
| const char* FunctionStepToString(FunctionStep); |
| |
| // Returns the action that should be applied to the function at the top of the stack for the given |
| // thread. The thread is expected to be stopped. |
| // |
| // This function should generally be called by the thread controllers whenever a new stack frame |
| // is entered or if ubsymbolized code is entered. It will base its computation on the current |
| // settings and state of the debugged program. |
| // |
| // If there is an error, it will return kDefault. |
| FunctionStep GetFunctionStepAction(Thread* thread); |
| |
| } // namespace zxdb |
| |
| #endif // SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_FUNCTION_STEP_H_ |