81 msg = self.recv_queue.pop(0)
83 msg_type = buf.read(1)
85 self.send_queue.append(
"+")
88 if msg.startswith(
"qSupported"):
89 self.send_queue.append(
"PacketSize=3fff")
90 elif msg.startswith(
"qC"):
92 self.send_queue.append(
"")
93 elif msg.startswith(
"qAttached"):
95 self.send_queue.append(
"")
96 elif msg.startswith(
"qTStatus"):
98 self.send_queue.append(
"")
99 elif msg.startswith(
"qfThreadInfo"):
101 self.send_queue.append(
"")
103 raise NotImplementedError()
105 elif msg_type ==
"H":
107 self.send_queue.append(
"OK")
109 elif msg_type ==
"?":
111 self.send_queue.append(self.
status)
113 elif msg_type ==
"g":
117 elif msg_type ==
"p":
119 reg_num = int(buf.read(), 16)
122 elif msg_type ==
"P":
124 reg_num, value = buf.read().split(
"=")
125 reg_num = int(reg_num, 16)
126 value = int(value.decode(
"hex")[::-1].encode(
"hex"), 16)
128 self.send_queue.append(
"OK")
130 elif msg_type ==
"m":
132 addr, size = map(
lambda x: int(x, 16), buf.read().split(
","))
133 self.send_queue.append(self.
read_memory(addr, size))
135 elif msg_type ==
"k":
141 elif msg_type ==
"!":
143 self.send_queue.append(
"OK")
145 elif msg_type ==
"v":
148 self.send_queue.append(
"")
150 elif msg_type ==
"s":
153 self.send_queue.append(
"S05")
155 elif msg_type ==
"Z":
157 bp_type = buf.read(1)
160 assert(buf.read(1) ==
",")
162 lambda x: int(x, 16), buf.read().split(
","))
165 raise NotImplementedError(
"Bigger size")
166 self.dbg.add_breakpoint(addr)
167 self.send_queue.append(
"OK")
171 assert(buf.read(1) ==
",")
173 lambda x: int(x, 16), buf.read().split(
","))
175 self.dbg.add_memory_breakpoint(addr, size,
178 self.send_queue.append(
"OK")
180 elif bp_type
in [
"2",
"3",
"4"]:
182 assert(buf.read(1) ==
",")
183 read = bp_type
in [
"3",
"4"]
184 write = bp_type
in [
"2",
"4"]
186 lambda x: int(x, 16), buf.read().split(
","))
188 self.dbg.add_memory_breakpoint(addr, size,
191 self.send_queue.append(
"OK")
194 raise ValueError(
"Impossible value")
196 elif msg_type ==
"z":
198 bp_type = buf.read(1)
201 assert(buf.read(1) ==
",")
203 lambda x: int(x, 16), buf.read().split(
","))
206 raise NotImplementedError(
"Bigger size")
207 dbgsoft = self.dbg.get_breakpoint_by_addr(addr)
208 assert(len(dbgsoft) == 1)
209 self.dbg.remove_breakpoint(dbgsoft[0])
210 self.send_queue.append(
"OK")
214 assert(buf.read(1) ==
",")
216 lambda x: int(x, 16), buf.read().split(
","))
217 self.dbg.remove_memory_breakpoint_by_addr_access(
218 addr, read=
True, write=
True)
219 self.send_queue.append(
"OK")
221 elif bp_type
in [
"2",
"3",
"4"]:
223 assert(buf.read(1) ==
",")
224 read = bp_type
in [
"3",
"4"]
225 write = bp_type
in [
"2",
"4"]
227 lambda x: int(x, 16), buf.read().split(
","))
229 self.dbg.remove_memory_breakpoint_by_addr_access(
230 addr, read=read, write=write)
231 self.send_queue.append(
"OK")
234 raise ValueError(
"Impossible value")
236 elif msg_type ==
"c":
243 self.send_queue.append(
"S05")
244 elif isinstance(ret, ExceptionHandle):
245 if ret == ExceptionHandle.memoryBreakpoint():
247 self.send_queue.append(
"S05")
249 raise NotImplementedError(
"Unknown Except")
255 self.send_queue.append(
"S05")
257 raise NotImplementedError()
260 raise NotImplementedError(
261 "Not implemented: message type '%s'" % msg_type)