1414 */
1515
1616#include <osd/gdbserver.h>
17- #include "gdbserver-private.h"
1817#include <osd/module.h>
1918#include <osd/osd.h>
2019#include <osd/reg.h>
20+ #include "gdbserver-private.h"
2121#include "osd-private.h"
2222
2323#include <arpa/inet.h>
@@ -250,19 +250,19 @@ static osd_result get_char(struct osd_gdbserver_ctx *ctx, int *ch)
250250 return OSD_OK ;
251251}
252252
253- // API_EXPORT
254- osd_result validate_rsp_packet (char * buf_p , bool * ver_checksum , int * len ,
255- char * buffer )
253+ API_EXPORT
254+ bool validate_rsp_packet (char * packet_buffer , int packet_len ,
255+ int * packet_data_len , char * packet_data )
256256{
257257 unsigned char val_checksum = 0 ;
258258 char packet_checksum [3 ];
259259 int packet_char ;
260260 int cnt = 0 ;
261- char * buf = buf_p ;
261+ char * buf = packet_buffer ;
262262
263263 // packet-format: $packet-data#checksum
264264 // traversing through the obtained packet till we obtained '#'
265- while (1 ) {
265+ while (packet_len >= 2 ) {
266266 packet_char = * buf ++ ;
267267
268268 if (packet_char == '#' ) {
@@ -272,30 +272,33 @@ osd_result validate_rsp_packet(char *buf_p, bool *ver_checksum, int *len,
272272 * character followed by the original character XORed with 0x20.
273273 */
274274 if (packet_char == '}' ) {
275- val_checksum += packet_char & 0xff ;
275+ val_checksum += packet_char ;
276276 packet_char = * buf ++ ;
277- val_checksum += packet_char & 0xff ;
278- buffer [cnt ++ ] = (packet_char ^ 0x20 ) & 0xff ;
277+ packet_len -- ;
278+ val_checksum += packet_char ;
279+ packet_data [cnt ++ ] = (packet_char ^ 0x20 );
279280 } else {
280- val_checksum += packet_char & 0xff ;
281- buffer [cnt ++ ] = packet_char & 0xff ;
281+ val_checksum += packet_char ;
282+ packet_data [cnt ++ ] = packet_char ;
282283 }
284+ packet_len -- ;
283285 }
284286
285- buffer [cnt ] = '\0' ;
286- * len = cnt ;
287287 packet_char = * buf ++ ;
288288 packet_checksum [0 ] = packet_char ;
289289 packet_char = * buf ;
290290 packet_checksum [1 ] = packet_char ;
291291 packet_checksum [2 ] = 0 ;
292- * ver_checksum = (val_checksum == strtoul (packet_checksum , NULL , 16 ));
293292
294- return OSD_OK ;
293+ packet_data [cnt ] = '\0' ;
294+ * packet_data_len = cnt ;
295+ bool ver_checksum = (val_checksum == strtoul (packet_checksum , NULL , 16 ));
296+
297+ return ver_checksum ;
295298}
296299
297300static osd_result receive_rsp_packet (struct osd_gdbserver_ctx * ctx ,
298- char * buffer , int * len )
301+ int * packet_data_len , char * packet_data )
299302{
300303 int packet_char ;
301304 osd_result rv ;
@@ -307,34 +310,36 @@ static osd_result receive_rsp_packet(struct osd_gdbserver_ctx *ctx,
307310 }
308311 } while (packet_char != '$' );
309312
310- bool ver_checksum = 0 ;
311- rv = validate_rsp_packet (ctx -> buf_p , & ver_checksum , len , buffer );
313+ char * packet_buffer = ctx -> buf_p ;
314+ int packet_len = ctx -> buf_cnt ;
315+ bool ver_checksum = validate_rsp_packet (packet_buffer , packet_len ,
316+ packet_data_len , packet_data );
312317
318+ if (ver_checksum == 1 ) {
319+ rv = osd_gdbserver_write_data (ctx , "+" , 1 );
320+ } else {
321+ rv = osd_gdbserver_write_data (ctx , "-" , 1 );
322+ }
313323 if (OSD_FAILED (rv )) {
314324 return rv ;
315- } else {
316- if (ver_checksum == 1 ) {
317- rv = osd_gdbserver_write_data (ctx , "+" , 1 );
318- } else {
319- rv = osd_gdbserver_write_data (ctx , "-" , 1 );
320- }
321- if (OSD_FAILED (rv )) {
322- return rv ;
323- }
324325 }
326+
325327 return OSD_OK ;
326328}
327329
328330API_EXPORT
329- osd_result configure_rsp_packet (char * buffer , int len , char * packet_buffer )
331+ osd_result encode_rsp_packet (char * packet_data , int packet_data_len ,
332+ char * packet_buffer )
330333{
331334 int packet_checksum = 0 ;
332335 packet_buffer [0 ] = '$' ;
333- memcpy (packet_buffer + 1 , buffer , len );
334- int j = len + 1 ;
336+
337+ memcpy (packet_buffer + 1 , packet_data , packet_data_len );
338+ int j = packet_data_len + 1 ;
339+
335340 packet_buffer [j ++ ] = '#' ;
336- for (int i = 0 ; i < len ; i ++ ) {
337- packet_checksum += buffer [i ];
341+ for (int i = 0 ; i < packet_data_len ; i ++ ) {
342+ packet_checksum += packet_data [i ];
338343 }
339344 packet_buffer [j ++ ] = dectohex ((packet_checksum >> 4 ) & 0xf );
340345 packet_buffer [j ++ ] = dectohex (packet_checksum & 0xf );
@@ -343,16 +348,16 @@ osd_result configure_rsp_packet(char *buffer, int len, char *packet_buffer)
343348 return OSD_OK ;
344349}
345350
346- static osd_result send_rsp_packet (struct osd_gdbserver_ctx * ctx , char * buffer ,
347- int len )
351+ static osd_result send_rsp_packet (struct osd_gdbserver_ctx * ctx ,
352+ char * packet_data , int packet_data_len )
348353{
349- char packet_buffer [len + 5 ];
354+ char packet_buffer [packet_data_len + 5 ];
350355 osd_result rv ;
351356
352357 while (1 ) {
353- configure_rsp_packet ( buffer , len , packet_buffer );
358+ encode_rsp_packet ( packet_data , packet_data_len , packet_buffer );
354359
355- rv = osd_gdbserver_write_data (ctx , packet_buffer , len + 4 );
360+ rv = osd_gdbserver_write_data (ctx , packet_buffer , packet_data_len + 4 );
356361 if (OSD_FAILED (rv )) {
357362 return OSD_ERROR_FAILURE ;
358363 }
0 commit comments