summaryrefslogtreecommitdiff
path: root/src/gdb.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/gdb.rs')
-rw-r--r--src/gdb.rs83
1 files changed, 41 insertions, 42 deletions
diff --git a/src/gdb.rs b/src/gdb.rs
index 7c1fcd8..0361c48 100644
--- a/src/gdb.rs
+++ b/src/gdb.rs
@@ -71,20 +71,18 @@ pub fn run_stub(cmd_sender: crossbeam::channel::Sender<CoreCmd>) {
std::thread::spawn(move || {
let listener = TcpListener::bind("127.0.0.1:1234").expect("couldnt start tcp listener");
- for stream_res in listener.incoming() {
- if let Ok(stream) = stream_res {
- let (dbg_tx, dbg_rx) = crossbeam::channel::bounded(16);
+ for stream in listener.incoming().flatten() {
+ let (dbg_tx, dbg_rx) = crossbeam::channel::bounded(16);
- stream
- .set_nonblocking(true)
- .expect("Couldnt set TCP stream to nonblocking");
+ stream
+ .set_nonblocking(true)
+ .expect("Couldnt set TCP stream to nonblocking");
- cmd_sender
- .send(CoreCmd::EnterDbgMode(DebugStream(dbg_rx)))
- .expect("couldnt ask core to enter debug mode");
+ cmd_sender
+ .send(CoreCmd::EnterDbgMode(DebugStream(dbg_rx)))
+ .expect("couldnt ask core to enter debug mode");
- handle_gdb_connection(stream, dbg_tx).expect("failure during connection");
- }
+ handle_gdb_connection(stream, dbg_tx).expect("failure during connection");
}
});
}
@@ -99,18 +97,19 @@ fn handle_gdb_connection(
loop {
match read_rsp_packet(&mut reader) {
- Ok(packet) => match handle_packet(
- &packet[..packet.len() - 1],
- &mut writer,
- &dbg_tx,
- &mut reader,
- ) {
- Err(_) => {
+ Ok(packet) => {
+ if handle_packet(
+ &packet[..packet.len() - 1],
+ &mut writer,
+ &dbg_tx,
+ &mut reader,
+ )
+ .is_err()
+ {
let _ = dbg_tx.send(DebugCommand::ExitDebugMode);
break;
}
- _ => {}
- },
+ }
Err(ref e) if e.kind() == ErrorKind::WouldBlock => {
std::thread::yield_now();
}
@@ -224,7 +223,7 @@ fn handle_packet<W: Write, R: BufRead>(
let (responder, stop_reason_rx) = oneshot::channel();
dbg_tx.send(DebugCommand::Step(responder)).unwrap();
let stop_reason = stop_reason_rx.recv().unwrap();
- send_packet(&stop_reason.to_rsp(), writer)?;
+ send_packet(stop_reason.to_rsp(), writer)?;
}
"c" => {
@@ -253,7 +252,7 @@ fn handle_packet<W: Write, R: BufRead>(
}
if let Ok(stop_reason) = stop_reason_rx.try_recv() {
- send_packet(&stop_reason.to_rsp(), writer)?;
+ send_packet(stop_reason.to_rsp(), writer)?;
return Ok(());
}
@@ -265,39 +264,39 @@ fn handle_packet<W: Write, R: BufRead>(
}
"Z" if packet.chars().nth(1) == Some('0') => {
- if let Some((addr_str, size_str)) = packet[3..].split_once(',') {
- if let (Ok(addr), Ok(size)) = (
+ if let Some((addr_str, size_str)) = packet[3..].split_once(',')
+ && let (Ok(addr), Ok(size)) = (
u64::from_str_radix(addr_str, 16),
u64::from_str_radix(size_str, 16),
- ) {
- if size != 4 {
- send_packet("", writer)?;
- return Ok(());
- }
-
- dbg_tx.send(DebugCommand::SetBreakpoint(addr)).unwrap();
- send_packet("OK", writer)?;
+ )
+ {
+ if size != 4 {
+ send_packet("", writer)?;
return Ok(());
}
+
+ dbg_tx.send(DebugCommand::SetBreakpoint(addr)).unwrap();
+ send_packet("OK", writer)?;
+ return Ok(());
}
send_packet("", writer)?;
}
"z" if packet.chars().nth(1) == Some('0') => {
- if let Some((addr_str, size_str)) = packet[3..].split_once(',') {
- if let (Ok(addr), Ok(size)) = (
+ if let Some((addr_str, size_str)) = packet[3..].split_once(',')
+ && let (Ok(addr), Ok(size)) = (
u64::from_str_radix(addr_str, 16),
u64::from_str_radix(size_str, 16),
- ) {
- if size != 4 {
- send_packet("", writer)?;
- return Ok(());
- }
-
- dbg_tx.send(DebugCommand::RemoveBreakpoint(addr)).unwrap();
- send_packet("OK", writer)?;
+ )
+ {
+ if size != 4 {
+ send_packet("", writer)?;
return Ok(());
}
+
+ dbg_tx.send(DebugCommand::RemoveBreakpoint(addr)).unwrap();
+ send_packet("OK", writer)?;
+ return Ok(());
}
send_packet("", writer)?;
}