Skip to content

Commit

Permalink
Merge branch 'breakpoints'
Browse files Browse the repository at this point in the history
  • Loading branch information
XaviDCR92 committed Jun 5, 2020
2 parents b00d0f8 + 6164039 commit 1301270
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 3 deletions.
63 changes: 60 additions & 3 deletions gdbstub.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ typedef int (*dbg_dec_func)(const char *buf, size_t buf_len, char *data, size_t
* Const Data
****************************************************************************/

const char digits[] = "0123456789abcdef";

/*****************************************************************************
* Prototypes
****************************************************************************/
Expand Down Expand Up @@ -172,6 +170,7 @@ int dbg_strtol(const char *str, size_t len, int base, const char **endptr)
char dbg_get_digit(int val)
{
if ((val >= 0) && (val <= 0xf)) {
static const char digits[] = "0123456789abcdef";
return digits[val];
} else {
return EOF;
Expand Down Expand Up @@ -742,7 +741,7 @@ int dbg_read(char *buf, size_t buf_len, size_t len)
int dbg_main(struct dbg_state *state)
{
address addr;
char pkt_buf[512];
char pkt_buf[600];
int status;
size_t length;
size_t pkt_len;
Expand Down Expand Up @@ -929,6 +928,7 @@ int dbg_main(struct dbg_state *state)
*/
case 'c':
dbg_continue();
state->signum = 0;
return 0;

/*
Expand All @@ -937,12 +937,69 @@ int dbg_main(struct dbg_state *state)
*/
case 's':
dbg_step();
state->signum = 5;
return 0;

case '?':
dbg_send_signal_packet(pkt_buf, sizeof(pkt_buf), state->signum);
break;

/*
* Breakpoint
* Command Format: Z0,[addr],[type]
*/
case 'Z': {
int zero;
size_t brk_sz;

ptr_next += 1;
token_expect_integer_arg(zero);
token_expect_seperator(',');
token_expect_integer_arg(addr);
token_expect_seperator(',');
token_expect_integer_arg(brk_sz);

if (zero) {
goto error;
}

/* Set breakpoint */
if (dbg_sys_breakpoint(addr)) {
goto error;
}

dbg_send_ok_packet(pkt_buf, sizeof(pkt_buf));
}
break;

/*
* Remove Breakpoint
* Command Format: Z0,[addr],[type]
*/
case 'z': {
int zero;
size_t brk_sz;

ptr_next += 1;
token_expect_integer_arg(zero);
token_expect_seperator(',');
token_expect_integer_arg(addr);
token_expect_seperator(',');
token_expect_integer_arg(brk_sz);

if (zero) {
goto error;
}

/* Set breakpoint */
if (dbg_sys_del_breakpoint(addr)) {
goto error;
}

dbg_send_ok_packet(pkt_buf, sizeof(pkt_buf));
}
break;

/*
* Unsupported Command
*/
Expand Down
2 changes: 2 additions & 0 deletions gdbstub.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,5 +82,7 @@ int dbg_sys_mem_readb(address addr, char *val);
int dbg_sys_mem_writeb(address addr, char val);
int dbg_sys_continue(void);
int dbg_sys_step(void);
int dbg_sys_breakpoint(address addr);
int dbg_sys_del_breakpoint(address addr);

#endif

0 comments on commit 1301270

Please sign in to comment.