diff options
Diffstat (limited to 'examples/armv4t/gdb/extended_mode.rs')
-rw-r--r-- | examples/armv4t/gdb/extended_mode.rs | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/examples/armv4t/gdb/extended_mode.rs b/examples/armv4t/gdb/extended_mode.rs index 4b30657..31116f9 100644 --- a/examples/armv4t/gdb/extended_mode.rs +++ b/examples/armv4t/gdb/extended_mode.rs @@ -1,10 +1,11 @@ +use crate::emu::Emu; use gdbstub::common::Pid; use gdbstub::target; -use gdbstub::target::ext::extended_mode::{Args, AttachKind, ShouldTerminate}; +use gdbstub::target::ext::extended_mode::Args; +use gdbstub::target::ext::extended_mode::AttachKind; +use gdbstub::target::ext::extended_mode::ShouldTerminate; use gdbstub::target::TargetResult; -use crate::emu::Emu; - /*===================================== = Extended Mode = =====================================*/ @@ -31,8 +32,11 @@ impl target::ext::extended_mode::ExtendedMode for Emu { } fn attach(&mut self, pid: Pid) -> TargetResult<(), Self> { - eprintln!("GDB tried to attach to a process with PID {}", pid); - Err(().into()) // non-specific failure + eprintln!("GDB attached to a process with PID {}", pid); + // stub implementation: just report the same code, but running under a + // different pid. + self.reported_pid = pid; + Ok(()) } fn run(&mut self, filename: Option<&[u8]>, args: Args<'_, '_>) -> TargetResult<Pid, Self> { @@ -96,6 +100,13 @@ impl target::ext::extended_mode::ExtendedMode for Emu { ) -> Option<target::ext::extended_mode::ConfigureWorkingDirOps<'_, Self>> { Some(self) } + + #[inline(always)] + fn support_current_active_pid( + &mut self, + ) -> Option<target::ext::extended_mode::CurrentActivePidOps<'_, Self>> { + Some(self) + } } impl target::ext::extended_mode::ConfigureAslr for Emu { @@ -158,3 +169,9 @@ impl target::ext::extended_mode::ConfigureWorkingDir for Emu { Ok(()) } } + +impl target::ext::extended_mode::CurrentActivePid for Emu { + fn current_active_pid(&mut self) -> Result<Pid, Self::Error> { + Ok(self.reported_pid) + } +} |