Esempio n. 1
0
int gdb_get_byte(uint8_t *data, size_t len, uint8_t *store)
{
   if(len < 2)
      return 0;

   return __hex_to_uint8(data, store);
}
Esempio n. 2
0
static int gdb_checksum_verify(uint8_t *data, size_t len, uint8_t *chk)
{
   uint8_t chkv;

   if(!__hex_to_uint8(chk, &chkv))
      return 0;

   if(__gdb_checksum(data, len) != chkv)
      return 0;

   return 1;
}
Esempio n. 3
0
static void gdb_cmd_wr_mem(uint8_t *data, size_t len)
{
   offset_t addr;
   loc_t    bytes;
   size_t   size, lbytes, can, i;
   uint8_t  store[128];

   if(!__gdb_setup_mem_op(data, len, &addr, &size, &bytes))
      return;

   debug(GDBSTUB_CMD, "write mem: addr 0x%X size %D\n", addr, size);

   lbytes = (size_t)data + len - bytes.linear;
   if(lbytes/2 != size)
   {
      debug(GDBSTUB_CMD, "gdb cmd_wr_mem missing bytes\n");
      gdb_unsupported();
   }

   while(size)
   {
      can = min(size, sizeof(store));

      for(i=0 ; i<can ; i++, bytes.u16++)
      {
	 if(!__hex_to_uint8(bytes.u8, &store[i]))
	 {
	    debug(GDBSTUB_CMD, "gdb cmd_wr_mem invalid byte\n");
	    gdb_unsupported();
	 }
      }

      if(!gdb_mem_write(addr, store, can))
      {
	 debug(GDBSTUB_CMD, "access failure\n");
	 gdb_err_mem();
	 return;
      }

      addr += can;
      size -= can;
   }

   gdb_ok();
}