@@ -12,9 +12,10 @@ use crate::mi::{
12
12
data_disassemble, data_disassemble_pc, data_read_memory_bytes, data_read_sp_bytes,
13
13
join_registers, parse_asm_insns_values, parse_key_value_pairs, parse_memory_mappings_new,
14
14
parse_memory_mappings_old, parse_mi_response, parse_register_names_values,
15
- parse_register_values, read_pc_value, Asm , MIResponse , Mapping , MemoryMapping , Register ,
16
- INSTRUCTION_LEN , MEMORY_MAP_START_STR_NEW , MEMORY_MAP_START_STR_OLD ,
15
+ parse_register_values, read_pc_value, Asm , MIResponse , Mapping , MemoryMapping , INSTRUCTION_LEN ,
16
+ MEMORY_MAP_START_STR_NEW , MEMORY_MAP_START_STR_OLD ,
17
17
} ;
18
+ use crate :: register:: RegisterStorage ;
18
19
use crate :: Written ;
19
20
20
21
pub fn gdb_interact (
@@ -26,7 +27,7 @@ pub fn gdb_interact(
26
27
filepath_arc : Arc < Mutex < Option < PathBuf > > > ,
27
28
register_changed_arc : Arc < Mutex < Vec < u8 > > > ,
28
29
register_names_arc : Arc < Mutex < Vec < String > > > ,
29
- registers_arc : Arc < Mutex < Vec < ( String , Option < Register > , Deref ) > > > ,
30
+ registers_arc : Arc < Mutex < Vec < RegisterStorage > > > ,
30
31
current_pc_arc : Arc < Mutex < u64 > > ,
31
32
stack_arc : Arc < Mutex < HashMap < u64 , Deref > > > ,
32
33
asm_arc : Arc < Mutex < Vec < Asm > > > ,
@@ -168,7 +169,7 @@ fn exec_result_done(
168
169
fn exec_result_running (
169
170
stack_arc : & Arc < Mutex < HashMap < u64 , Deref > > > ,
170
171
asm_arc : & Arc < Mutex < Vec < Asm > > > ,
171
- registers_arc : & Arc < Mutex < Vec < ( String , Option < Register > , Deref ) > > > ,
172
+ registers_arc : & Arc < Mutex < Vec < RegisterStorage > > > ,
172
173
hexdump_arc : & Arc < Mutex < Option < ( u64 , Vec < u8 > ) > > > ,
173
174
async_result_arc : & Arc < Mutex < String > > ,
174
175
) {
@@ -320,7 +321,7 @@ fn stream_output(
320
321
fn recv_exec_result_asm_insns (
321
322
asm : & String ,
322
323
asm_arc : & Arc < Mutex < Vec < Asm > > > ,
323
- registers_arc : & Arc < Mutex < Vec < ( String , Option < Register > , Deref ) > > > ,
324
+ registers_arc : & Arc < Mutex < Vec < RegisterStorage > > > ,
324
325
stack_arc : & Arc < Mutex < HashMap < u64 , Deref > > > ,
325
326
written : & mut VecDeque < Written > ,
326
327
) {
@@ -336,9 +337,9 @@ fn recv_exec_result_asm_insns(
336
337
}
337
338
if let Written :: SymbolAtAddrRegister ( ( base_reg, _n) ) = & last_written {
338
339
let mut regs = registers_arc. lock ( ) . unwrap ( ) ;
339
- for ( _, b , deref) in regs. iter_mut ( ) {
340
- if let Some ( b ) = b {
341
- if b . number == * base_reg {
340
+ for RegisterStorage { name : _, register , deref } in regs. iter_mut ( ) {
341
+ if let Some ( reg ) = register {
342
+ if reg . number == * base_reg {
342
343
let new_asms = parse_asm_insns_values ( asm) ;
343
344
if !new_asms. is_empty ( ) {
344
345
if let Some ( func_name) = & new_asms[ 0 ] . func_name {
@@ -373,7 +374,7 @@ fn recv_exec_result_memory(
373
374
stack_arc : & Arc < Mutex < HashMap < u64 , Deref > > > ,
374
375
thirty_two_bit : & Arc < AtomicBool > ,
375
376
endian_arc : & Arc < Mutex < Option < Endian > > > ,
376
- registers_arc : & Arc < Mutex < Vec < ( String , Option < Register > , Deref ) > > > ,
377
+ registers_arc : & Arc < Mutex < Vec < RegisterStorage > > > ,
377
378
hexdump_arc : & Arc < Mutex < Option < ( u64 , Vec < u8 > ) > > > ,
378
379
memory : & String ,
379
380
written : & mut VecDeque < Written > ,
@@ -393,9 +394,9 @@ fn recv_exec_result_memory(
393
394
let mut regs = registers_arc. lock ( ) . unwrap ( ) ;
394
395
395
396
let ( data, _) = read_memory ( memory) ;
396
- for ( _, b , deref) in regs. iter_mut ( ) {
397
- if let Some ( b ) = b {
398
- if b . number == base_reg {
397
+ for RegisterStorage { name : _, register , deref } in regs. iter_mut ( ) {
398
+ if let Some ( reg ) = register {
399
+ if reg . number == base_reg {
399
400
let ( val, len) = if thirty {
400
401
let mut val = u32:: from_str_radix ( & data[ "contents" ] , 16 ) . unwrap ( ) ;
401
402
let endian = endian_arc. lock ( ) . unwrap ( ) ;
@@ -431,7 +432,7 @@ fn recv_exec_result_memory(
431
432
next_write
432
433
. push ( data_disassemble ( val as usize , INSTRUCTION_LEN ) ) ;
433
434
written. push_back ( Written :: SymbolAtAddrRegister ( (
434
- b . number . clone ( ) ,
435
+ reg . number . clone ( ) ,
435
436
val,
436
437
) ) ) ;
437
438
break ;
@@ -442,7 +443,8 @@ fn recv_exec_result_memory(
442
443
// TODO: endian
443
444
debug ! ( "register deref: trying to read: {:02x}" , val) ;
444
445
next_write. push ( data_read_memory_bytes ( val, 0 , len) ) ;
445
- written. push_back ( Written :: RegisterValue ( ( b. number . clone ( ) , val) ) ) ;
446
+ written
447
+ . push_back ( Written :: RegisterValue ( ( reg. number . clone ( ) , val) ) ) ;
446
448
}
447
449
}
448
450
break ;
@@ -574,7 +576,7 @@ fn read_memory(memory: &String) -> (HashMap<String, String>, String) {
574
576
fn recv_exec_results_register_values (
575
577
register_values : & String ,
576
578
thirty_two_bit : & Arc < AtomicBool > ,
577
- registers_arc : & Arc < Mutex < Vec < ( String , Option < Register > , Deref ) > > > ,
579
+ registers_arc : & Arc < Mutex < Vec < RegisterStorage > > > ,
578
580
register_names_arc : & Arc < Mutex < Vec < String > > > ,
579
581
memory_map_arc : & Arc < Mutex < Option < Vec < MemoryMapping > > > > ,
580
582
filepath_arc : & Arc < Mutex < Option < PathBuf > > > ,
@@ -669,8 +671,10 @@ fn recv_exec_results_register_values(
669
671
}
670
672
}
671
673
let registers = join_registers ( & regs_names, & registers) ;
672
- let registers: Vec < ( String , Option < Register > , Deref ) > =
673
- registers. iter ( ) . map ( |( a, b) | ( a. clone ( ) , b. clone ( ) , Deref :: new ( ) ) ) . collect ( ) ;
674
+ let registers: Vec < RegisterStorage > = registers
675
+ . iter ( )
676
+ . map ( |( a, b) | RegisterStorage :: new ( a. clone ( ) , b. clone ( ) , Deref :: new ( ) ) )
677
+ . collect ( ) ;
674
678
* regs = registers. clone ( ) ;
675
679
676
680
// assuming we have a valid $pc, get the bytes
0 commit comments