blob: 1929bb0e4b04bd07d25f595c9f2188e28cdadb3b [file] [log] [blame]
// 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_