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