
With the multi-target work, each inferior will have its own target stack, so to call a target method, we'll need to make sure that the inferior in question is the current one, otherwise target->beneath() calls will find the target beneath in the wrong inferior. In some places, it's much more convenient to be able to check whether an inferior has execution without having to switch to it in order to call target_has_execution on the right inferior/target stack, to avoid side effects with switching inferior/thread/program space. The current target_ops::has_execution method takes a ptid_t as parameter, which, in a multi-target world, isn't sufficient to identify the target. This patch prepares to address that, by changing the parameter to an inferior pointer instead. From the inferior, we'll be able to query its target stack to tell which target is beneath. Also adds a new inferior::has_execution() method to make callers a bit more natural to read. gdb/ChangeLog: 2020-01-10 Pedro Alves <palves@redhat.com> * corelow.c (core_target::has_execution): Change parameter type to inferior pointer. * inferior.c (number_of_live_inferiors): Use inferior::has_execution instead of target_has_execution_1. * inferior.h (inferior::has_execution): New. * linux-thread-db.c (thread_db_target::update_thread_list): Use inferior::has_execution instead of target_has_execution_1. * process-stratum-target.c (process_stratum_target::has_execution): Change parameter type to inferior pointer. Check the inferior's PID instead of inferior_ptid. * process-stratum-target.h (process_stratum_target::has_execution): Change parameter type to inferior pointer. * record-full.c (record_full_core_target::has_execution): Change parameter type to inferior pointer. * target.c (target_has_execution_1): Change parameter type to inferior pointer. (target_has_execution_current): Adjust. * target.h (target_ops::has_execution): Change parameter type to inferior pointer. (target_has_execution_1): Change parameter type to inferior pointer. Change return type to bool. * tracefile.h (tracefile_target::has_execution): Change parameter type to inferior pointer.
56 lines
2 KiB
C++
56 lines
2 KiB
C++
/* Abstract base class inherited by all process_stratum targets
|
|
|
|
Copyright (C) 2018-2020 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef PROCESS_STRATUM_TARGET_H
|
|
#define PROCESS_STRATUM_TARGET_H
|
|
|
|
#include "target.h"
|
|
|
|
/* Abstract base class inherited by all process_stratum targets. */
|
|
|
|
class process_stratum_target : public target_ops
|
|
{
|
|
public:
|
|
~process_stratum_target () override = 0;
|
|
|
|
strata stratum () const final override { return process_stratum; }
|
|
|
|
/* We must default these because they must be implemented by any
|
|
target that can run. */
|
|
bool can_async_p () override { return false; }
|
|
bool supports_non_stop () override { return false; }
|
|
bool supports_disable_randomization () override { return false; }
|
|
|
|
/* This default implementation returns the inferior's address
|
|
space. */
|
|
struct address_space *thread_address_space (ptid_t ptid) override;
|
|
|
|
/* This default implementation always returns target_gdbarch (). */
|
|
struct gdbarch *thread_architecture (ptid_t ptid) override;
|
|
|
|
/* Default implementations for process_stratum targets. Return true
|
|
if there's a selected inferior, false otherwise. */
|
|
bool has_all_memory () override;
|
|
bool has_memory () override;
|
|
bool has_stack () override;
|
|
bool has_registers () override;
|
|
bool has_execution (inferior *inf) override;
|
|
};
|
|
|
|
#endif /* !defined (PROCESS_STRATUM_TARGET_H) */
|