Loading gdbstub.c +67 −19 Original line number Diff line number Diff line Loading @@ -954,7 +954,7 @@ static inline int xlat_gdb_type(CPUState *cpu, int gdbtype) } #endif static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type) static int gdb_breakpoint_insert(int type, target_ulong addr, target_ulong len) { CPUState *cpu; int err = 0; Loading Loading @@ -991,7 +991,7 @@ static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type) } } static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type) static int gdb_breakpoint_remove(int type, target_ulong addr, target_ulong len) { CPUState *cpu; int err = 0; Loading Loading @@ -1609,6 +1609,52 @@ static void handle_set_thread(GdbCmdContext *gdb_ctx, void *user_ctx) } } static void handle_insert_bp(GdbCmdContext *gdb_ctx, void *user_ctx) { int res; if (gdb_ctx->num_params != 3) { put_packet(gdb_ctx->s, "E22"); return; } res = gdb_breakpoint_insert(gdb_ctx->params[0].val_ul, gdb_ctx->params[1].val_ull, gdb_ctx->params[2].val_ull); if (res >= 0) { put_packet(gdb_ctx->s, "OK"); return; } else if (res == -ENOSYS) { put_packet(gdb_ctx->s, ""); return; } put_packet(gdb_ctx->s, "E22"); } static void handle_remove_bp(GdbCmdContext *gdb_ctx, void *user_ctx) { int res; if (gdb_ctx->num_params != 3) { put_packet(gdb_ctx->s, "E22"); return; } res = gdb_breakpoint_remove(gdb_ctx->params[0].val_ul, gdb_ctx->params[1].val_ull, gdb_ctx->params[2].val_ull); if (res >= 0) { put_packet(gdb_ctx->s, "OK"); return; } else if (res == -ENOSYS) { put_packet(gdb_ctx->s, ""); return; } put_packet(gdb_ctx->s, "E22"); } static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; Loading Loading @@ -1864,24 +1910,26 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, "OK"); break; case 'Z': { static const GdbCmdParseEntry insert_bp_cmd_desc = { .handler = handle_insert_bp, .cmd = "Z", .cmd_startswith = 1, .schema = "l?L?L0" }; cmd_parser = &insert_bp_cmd_desc; } break; case 'z': type = strtoul(p, (char **)&p, 16); if (*p == ',') p++; addr = strtoull(p, (char **)&p, 16); if (*p == ',') p++; len = strtoull(p, (char **)&p, 16); if (ch == 'Z') res = gdb_breakpoint_insert(addr, len, type); else res = gdb_breakpoint_remove(addr, len, type); if (res >= 0) put_packet(s, "OK"); else if (res == -ENOSYS) put_packet(s, ""); else put_packet(s, "E22"); { static const GdbCmdParseEntry remove_bp_cmd_desc = { .handler = handle_remove_bp, .cmd = "z", .cmd_startswith = 1, .schema = "l?L?L0" }; cmd_parser = &remove_bp_cmd_desc; } break; case 'H': { Loading Loading
gdbstub.c +67 −19 Original line number Diff line number Diff line Loading @@ -954,7 +954,7 @@ static inline int xlat_gdb_type(CPUState *cpu, int gdbtype) } #endif static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type) static int gdb_breakpoint_insert(int type, target_ulong addr, target_ulong len) { CPUState *cpu; int err = 0; Loading Loading @@ -991,7 +991,7 @@ static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type) } } static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type) static int gdb_breakpoint_remove(int type, target_ulong addr, target_ulong len) { CPUState *cpu; int err = 0; Loading Loading @@ -1609,6 +1609,52 @@ static void handle_set_thread(GdbCmdContext *gdb_ctx, void *user_ctx) } } static void handle_insert_bp(GdbCmdContext *gdb_ctx, void *user_ctx) { int res; if (gdb_ctx->num_params != 3) { put_packet(gdb_ctx->s, "E22"); return; } res = gdb_breakpoint_insert(gdb_ctx->params[0].val_ul, gdb_ctx->params[1].val_ull, gdb_ctx->params[2].val_ull); if (res >= 0) { put_packet(gdb_ctx->s, "OK"); return; } else if (res == -ENOSYS) { put_packet(gdb_ctx->s, ""); return; } put_packet(gdb_ctx->s, "E22"); } static void handle_remove_bp(GdbCmdContext *gdb_ctx, void *user_ctx) { int res; if (gdb_ctx->num_params != 3) { put_packet(gdb_ctx->s, "E22"); return; } res = gdb_breakpoint_remove(gdb_ctx->params[0].val_ul, gdb_ctx->params[1].val_ull, gdb_ctx->params[2].val_ull); if (res >= 0) { put_packet(gdb_ctx->s, "OK"); return; } else if (res == -ENOSYS) { put_packet(gdb_ctx->s, ""); return; } put_packet(gdb_ctx->s, "E22"); } static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; Loading Loading @@ -1864,24 +1910,26 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, "OK"); break; case 'Z': { static const GdbCmdParseEntry insert_bp_cmd_desc = { .handler = handle_insert_bp, .cmd = "Z", .cmd_startswith = 1, .schema = "l?L?L0" }; cmd_parser = &insert_bp_cmd_desc; } break; case 'z': type = strtoul(p, (char **)&p, 16); if (*p == ',') p++; addr = strtoull(p, (char **)&p, 16); if (*p == ',') p++; len = strtoull(p, (char **)&p, 16); if (ch == 'Z') res = gdb_breakpoint_insert(addr, len, type); else res = gdb_breakpoint_remove(addr, len, type); if (res >= 0) put_packet(s, "OK"); else if (res == -ENOSYS) put_packet(s, ""); else put_packet(s, "E22"); { static const GdbCmdParseEntry remove_bp_cmd_desc = { .handler = handle_remove_bp, .cmd = "z", .cmd_startswith = 1, .schema = "l?L?L0" }; cmd_parser = &remove_bp_cmd_desc; } break; case 'H': { Loading