@@ -110,6 +110,12 @@ def __hexstr(value: int, nibbles: int = 0) -> str:
110110
111111 return value .to_bytes (length , byteorder ).hex ()
112112
113+ def __unkown_reg_value (nibbles : int ) -> str :
114+ """Encode the hex string for unknown regsiter value.
115+ """
116+
117+ return 'x' * nibbles
118+
113119 def __get_reg_value (reg : Optional [int ], pos : int , nibbles : int ) -> str :
114120 # reg is either None or uc reg invalid
115121 if reg :
@@ -118,13 +124,13 @@ def __get_reg_value(reg: Optional[int], pos: int, nibbles: int) -> str:
118124
119125 hexstr = __hexstr (value , nibbles )
120126 else :
121- hexstr = 'x' * nibbles
127+ hexstr = __unkown_reg_value ( nibbles )
122128
123129 return hexstr
124130
125131 def __set_reg_value (reg : Optional [int ], pos : int , nibbles : int , hexval : str ) -> None :
126132 # reg is neither None nor uc reg invalid
127- if reg :
133+ if reg and hexval != __unkown_reg_value ( nibbles ) :
128134 assert len (hexval ) == nibbles
129135
130136 val = int (hexval , 16 )
@@ -243,14 +249,9 @@ def handle_G(subcmd: str) -> Reply:
243249 data = subcmd
244250
245251 for reg , pos , nibbles in self .regsmap :
246- if reg :
247- hexval = data [pos : pos + nibbles ]
248-
249- if hexval != 'x' * nibbles :
250- val = int (hexval , 16 )
252+ hexval = data [pos : pos + nibbles ]
251253
252- # TODO: should we swap val's endianess for big-endian targets?
253- self .ql .arch .regs .write (reg , val )
254+ __set_reg_value (reg , pos , nibbles , hexval )
254255
255256 return REPLY_OK
256257
0 commit comments