1 use super::prelude::*; 2 use crate::protocol::commands::ext::ThreadExtraInfo; 3 use crate::target::ext::base::BaseOps; 4 5 impl<T: Target, C: Connection> GdbStubImpl<T, C> { handle_thread_extra_info( &mut self, res: &mut ResponseWriter<'_, C>, target: &mut T, command: ThreadExtraInfo<'_>, ) -> Result<HandlerStatus, Error<T::Error, C::Error>>6 pub(crate) fn handle_thread_extra_info( 7 &mut self, 8 res: &mut ResponseWriter<'_, C>, 9 target: &mut T, 10 command: ThreadExtraInfo<'_>, 11 ) -> Result<HandlerStatus, Error<T::Error, C::Error>> { 12 let ops = match target.base_ops() { 13 BaseOps::SingleThread(_) => return Ok(HandlerStatus::Handled), 14 BaseOps::MultiThread(ops) => match ops.support_thread_extra_info() { 15 Some(ops) => ops, 16 None => return Ok(HandlerStatus::Handled), 17 }, 18 }; 19 20 crate::__dead_code_marker!("thread_extra_info", "impl"); 21 22 let handler_status = match command { 23 ThreadExtraInfo::qThreadExtraInfo(info) => { 24 // TODO: plumb through PID when true multi-process support is added 25 let _pid = info.id.pid; 26 27 let size = ops 28 .thread_extra_info(info.id.tid, info.buf) 29 .map_err(Error::TargetError)?; 30 let data = info.buf.get(..size).ok_or(Error::PacketBufferOverflow)?; 31 32 res.write_hex_buf(data)?; 33 34 HandlerStatus::Handled 35 } 36 }; 37 38 Ok(handler_status) 39 } 40 } 41