This is an automated email from Gerrit. Christian Eggers (cegg...@gmx.de) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/1919
-- gerrit commit 8efcfffb6e51d1876ce1c9d9156ad7e7e82b3b0d Author: Christian Eggers <cegg...@gmx.de> Date: Sun Feb 2 21:44:31 2014 +0100 topic: Constify received GDB packet With only one exception, the received packet will not be altered in any of the processing functions. Some it can be made "const". - rtos/linux.c: mark some functions static - gdb_server.c: decode_xfer_read(): o removed unused parameter "annex" o work with copy of input buffer Change-Id: I7bb410224cf6daa74a6c494624176ccb9ae638ac Signed-off-by: Christian Eggers <cegg...@gmx.de> diff --git a/src/rtos/linux.c b/src/rtos/linux.c index b98cf45..4276cbc 100644 --- a/src/rtos/linux.c +++ b/src/rtos/linux.c @@ -351,7 +351,7 @@ const struct rtos_type Linux_os = { .ps_command = linux_ps_command, }; -static int linux_thread_packet(struct connection *connection, char *packet, +static int linux_thread_packet(struct connection *connection, char const *packet, int packet_size); static void linux_identify_current_threads(struct target *target); @@ -1116,8 +1116,8 @@ static int linux_task_update(struct target *target, int context) return ERROR_OK; } -int linux_gdb_thread_packet(struct target *target, - struct connection *connection, char *packet, +static int linux_gdb_thread_packet(struct target *target, + struct connection *connection, char const *packet, int packet_size) { int retval; @@ -1152,8 +1152,8 @@ int linux_gdb_thread_packet(struct target *target, return ERROR_OK; } -int linux_gdb_thread_update(struct target *target, - struct connection *connection, char *packet, +static int linux_gdb_thread_update(struct target *target, + struct connection *connection, char const *packet, int packet_size) { int found = 0; @@ -1199,8 +1199,8 @@ int linux_gdb_thread_update(struct target *target, return ERROR_OK; } -int linux_thread_extra_info(struct target *target, - struct connection *connection, char *packet, +static int linux_thread_extra_info(struct target *target, + struct connection *connection, char const *packet, int packet_size) { int64_t threadid = 0; @@ -1246,8 +1246,8 @@ int linux_thread_extra_info(struct target *target, return ERROR_OK; } -int linux_gdb_T_packet(struct connection *connection, - struct target *target, char *packet, int packet_size) +static int linux_gdb_T_packet(struct connection *connection, + struct target *target, char const *packet, int packet_size) { int64_t threadid; struct linux_os *linux_os = (struct linux_os *) @@ -1307,8 +1307,8 @@ int linux_gdb_T_packet(struct connection *connection, return retval; } -int linux_gdb_h_packet(struct connection *connection, - struct target *target, char *packet, int packet_size) +static int linux_gdb_h_packet(struct connection *connection, + struct target *target, char const *packet, int packet_size) { struct linux_os *linux_os = (struct linux_os *) target->rtos->rtos_specific_params; @@ -1376,7 +1376,7 @@ int linux_gdb_h_packet(struct connection *connection, return ERROR_OK; } -static int linux_thread_packet(struct connection *connection, char *packet, +static int linux_thread_packet(struct connection *connection, char const *packet, int packet_size) { int retval = ERROR_OK; diff --git a/src/rtos/rtos.c b/src/rtos/rtos.c index aadc467..62740ce 100644 --- a/src/rtos/rtos.c +++ b/src/rtos/rtos.c @@ -46,7 +46,7 @@ static struct rtos_type *rtos_types[] = { NULL }; -int rtos_thread_packet(struct connection *connection, char *packet, int packet_size); +int rtos_thread_packet(struct connection *connection, const char *packet, int packet_size); int rtos_smp_init(struct target *target) { @@ -138,7 +138,7 @@ int rtos_create(Jim_GetOptInfo *goi, struct target *target) return JIM_ERR; } -int gdb_thread_packet(struct connection *connection, char *packet, int packet_size) +int gdb_thread_packet(struct connection *connection, char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); if (target->rtos == NULL) @@ -186,7 +186,7 @@ static char *next_symbol(struct rtos *os, char *cur_symbol, uint64_t cur_addr) * * rtos_qsymbol() returns 1 if an RTOS has been detected, or 0 otherwise. */ -int rtos_qsymbol(struct connection *connection, char *packet, int packet_size) +int rtos_qsymbol(struct connection *connection, char const *packet, int packet_size) { int rtos_detected = 0; uint64_t addr; @@ -254,7 +254,7 @@ done: return rtos_detected; } -int rtos_thread_packet(struct connection *connection, char *packet, int packet_size) +int rtos_thread_packet(struct connection *connection, char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); diff --git a/src/rtos/rtos.h b/src/rtos/rtos.h index 1ff4f11..ab3fa16 100644 --- a/src/rtos/rtos.h +++ b/src/rtos/rtos.h @@ -56,7 +56,7 @@ struct rtos { threadid_t current_thread; struct thread_detail *thread_details; int thread_count; - int (*gdb_thread_packet)(struct connection *connection, char *packet, int packet_size); + int (*gdb_thread_packet)(struct connection *connection, char const *packet, int packet_size); void *rtos_specific_params; }; @@ -95,12 +95,12 @@ int rtos_generic_stack_read(struct target *target, int64_t stack_ptr, char **hex_reg_list); int rtos_try_next(struct target *target); -int gdb_thread_packet(struct connection *connection, char *packet, int packet_size); +int gdb_thread_packet(struct connection *connection, char const *packet, int packet_size); int rtos_get_gdb_reg_list(struct connection *connection); int rtos_update_threads(struct target *target); void rtos_whipe_threadlist(struct rtos *rtos); int rtos_smp_init(struct target *target); /* function for handling symbol access */ -int rtos_qsymbol(struct connection *connection, char *packet, int packet_size); +int rtos_qsymbol(struct connection *connection, char const *packet, int packet_size); #endif /* RTOS_H */ diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c index 149af77..bf3be4c 100644 --- a/src/server/gdb_server.c +++ b/src/server/gdb_server.c @@ -1034,7 +1034,7 @@ static void gdb_send_error(struct connection *connection, uint8_t the_error) } static int gdb_last_signal_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); struct gdb_connection *gdb_con = connection->priv; @@ -1091,7 +1091,7 @@ static void gdb_str_to_target(struct target *target, /* copy over in register buffer */ static void gdb_target_to_reg(struct target *target, - char *tstr, int str_len, uint8_t *bin) + char const *tstr, int str_len, uint8_t *bin) { if (str_len % 2) { LOG_ERROR("BUG: gdb value with uneven number of characters encountered"); @@ -1112,7 +1112,7 @@ static void gdb_target_to_reg(struct target *target, } static int gdb_get_registers_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); struct reg **reg_list; @@ -1168,14 +1168,14 @@ static int gdb_get_registers_packet(struct connection *connection, } static int gdb_set_registers_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); int i; struct reg **reg_list; int reg_list_size; int retval; - char *packet_p; + char const *packet_p; #ifdef _DEBUG_GDB_IO_ LOG_DEBUG("-"); @@ -1223,7 +1223,7 @@ static int gdb_set_registers_packet(struct connection *connection, } static int gdb_get_register_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); char *reg_packet; @@ -1262,7 +1262,7 @@ static int gdb_get_register_packet(struct connection *connection, } static int gdb_set_register_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); char *separator; @@ -1328,7 +1328,7 @@ static int gdb_error(struct connection *connection, int retval) * 8191 bytes by the looks of it. Why 8191 bytes instead of 8192????? */ static int gdb_read_memory_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); char *separator; @@ -1399,7 +1399,7 @@ static int gdb_read_memory_packet(struct connection *connection, } static int gdb_write_memory_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); char *separator; @@ -1446,7 +1446,7 @@ static int gdb_write_memory_packet(struct connection *connection, } static int gdb_write_memory_binary_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); char *separator; @@ -1503,7 +1503,7 @@ static int gdb_write_memory_binary_packet(struct connection *connection, } static int gdb_step_continue_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); int current = 0; @@ -1513,7 +1513,6 @@ static int gdb_step_continue_packet(struct connection *connection, LOG_DEBUG("-"); if (packet_size > 1) { - packet[packet_size] = 0; address = strtoul(packet + 1, NULL, 16); } else current = 1; @@ -1532,7 +1531,7 @@ static int gdb_step_continue_packet(struct connection *connection, } static int gdb_breakpoint_watchpoint_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); int type; @@ -1660,16 +1659,19 @@ static void xml_printf(int *retval, char **xml, int *pos, int *size, } } -static int decode_xfer_read(char *buf, char **annex, int *ofs, unsigned int *len) +static int decode_xfer_read(char const *_buf, int *ofs, unsigned int *len) { + int ret = 0; + char *buf = strdup(_buf); char *separator; /* Extract and NUL-terminate the annex. */ - *annex = buf; while (*buf && *buf != ':') buf++; - if (*buf == '\0') - return -1; + if (*buf == '\0') { + ret = -1; + goto out; + } *buf++ = 0; /* After the read marker and annex, qXfer looks like a @@ -1677,12 +1679,16 @@ static int decode_xfer_read(char *buf, char **annex, int *ofs, unsigned int *len *ofs = strtoul(buf, &separator, 16); - if (*separator != ',') - return -1; + if (*separator != ',') { + ret = -1; + goto out; + } *len = strtoul(separator + 1, NULL, 16); - return 0; +out: + free(buf); + return ret; } static int compare_bank(const void *a, const void *b) @@ -1700,7 +1706,7 @@ static int compare_bank(const void *a, const void *b) } static int gdb_memory_map(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { /* We get away with only specifying flash here. Regions that are not * specified are treated as if we provided no memory map(if not we @@ -2250,7 +2256,7 @@ error: } static int gdb_query_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct command_context *cmd_ctx = connection->cmd_ctx; struct gdb_connection *gdb_connection = connection->priv; @@ -2361,12 +2367,11 @@ static int gdb_query_packet(struct connection *connection, int offset; unsigned int length; - char *annex; /* skip command character */ packet += 20; - if (decode_xfer_read(packet, &annex, &offset, &length) < 0) { + if (decode_xfer_read(packet, &offset, &length) < 0) { gdb_send_error(connection, 01); return ERROR_OK; } @@ -2398,7 +2403,7 @@ static int gdb_query_packet(struct connection *connection, } static int gdb_v_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct gdb_connection *gdb_connection = connection->priv; struct gdb_service *gdb_service = connection->service->priv; @@ -2415,20 +2420,20 @@ static int gdb_v_packet(struct connection *connection, unsigned long addr; unsigned long length; - char *parse = packet + 12; + char const *parse = packet + 12; if (*parse == '\0') { LOG_ERROR("incomplete vFlashErase packet received, dropping connection"); return ERROR_SERVER_REMOTE_CLOSED; } - addr = strtoul(parse, &parse, 16); + addr = strtoul(parse, (char **)&parse, 16); if (*(parse++) != ',' || *parse == '\0') { LOG_ERROR("incomplete vFlashErase packet received, dropping connection"); return ERROR_SERVER_REMOTE_CLOSED; } - length = strtoul(parse, &parse, 16); + length = strtoul(parse, (char **)&parse, 16); if (*parse != '\0') { LOG_ERROR("incomplete vFlashErase packet received, dropping connection"); @@ -2471,13 +2476,13 @@ static int gdb_v_packet(struct connection *connection, int retval; unsigned long addr; unsigned long length; - char *parse = packet + 12; + char const *parse = packet + 12; if (*parse == '\0') { LOG_ERROR("incomplete vFlashErase packet received, dropping connection"); return ERROR_SERVER_REMOTE_CLOSED; } - addr = strtoul(parse, &parse, 16); + addr = strtoul(parse, (char **)&parse, 16); if (*(parse++) != ':') { LOG_ERROR("incomplete vFlashErase packet received, dropping connection"); return ERROR_SERVER_REMOTE_CLOSED; @@ -2492,7 +2497,7 @@ static int gdb_v_packet(struct connection *connection, /* create new section with content from packet buffer */ retval = image_add_section(gdb_connection->vflash_image, - addr, length, 0x0, (uint8_t *)parse); + addr, length, 0x0, (uint8_t const *)parse); if (retval != ERROR_OK) return retval; @@ -2544,7 +2549,7 @@ static int gdb_detach(struct connection *connection) * Fretcode,errno,Ctrl-C flag;call-specific attachment */ static int gdb_fileio_response_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); char *separator; @@ -2616,7 +2621,7 @@ static int gdb_input_inner(struct connection *connection) struct gdb_service *gdb_service = connection->service->priv; struct target *target = gdb_service->target; - char *packet = gdb_packet_buffer; + char const *packet = gdb_packet_buffer; int packet_size; int retval; struct gdb_connection *gdb_con = connection->priv; @@ -2635,12 +2640,12 @@ static int gdb_input_inner(struct connection *connection) */ do { packet_size = GDB_BUFFER_SIZE-1; - retval = gdb_get_packet(connection, packet, &packet_size); + retval = gdb_get_packet(connection, gdb_packet_buffer, &packet_size); if (retval != ERROR_OK) return retval; /* terminate with zero */ - packet[packet_size] = 0; + gdb_packet_buffer[packet_size] = '\0'; if (LOG_LEVEL_IS(LOG_LVL_DEBUG)) { if (packet[0] == 'X') { diff --git a/src/target/image.c b/src/target/image.c index 8bcba34..07420b1 100644 --- a/src/target/image.c +++ b/src/target/image.c @@ -902,7 +902,7 @@ int image_read_section(struct image *image, return ERROR_OK; } -int image_add_section(struct image *image, uint32_t base, uint32_t size, int flags, uint8_t *data) +int image_add_section(struct image *image, uint32_t base, uint32_t size, int flags, uint8_t const *data) { struct imagesection *section; diff --git a/src/target/image.h b/src/target/image.h index 9741308..5aeba2f 100644 --- a/src/target/image.h +++ b/src/target/image.h @@ -99,7 +99,7 @@ int image_read_section(struct image *image, int section, uint32_t offset, void image_close(struct image *image); int image_add_section(struct image *image, uint32_t base, uint32_t size, - int flags, uint8_t *data); + int flags, uint8_t const *data); int image_calculate_checksum(uint8_t *buffer, uint32_t nbytes, uint32_t *checksum); diff --git a/src/target/smp.c b/src/target/smp.c index d14ceba..e688304 100644 --- a/src/target/smp.c +++ b/src/target/smp.c @@ -56,7 +56,7 @@ /* packet j :smp status request */ int gdb_read_smp_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); int retval = ERROR_OK; @@ -77,7 +77,7 @@ int gdb_read_smp_packet(struct connection *connection, /* J : smp set request */ int gdb_write_smp_packet(struct connection *connection, - char *packet, int packet_size) + char const *packet, int packet_size) { struct target *target = get_target_from_connection(connection); char *separator; diff --git a/src/target/smp.h b/src/target/smp.h index fa9fda0..69a5cd8 100644 --- a/src/target/smp.h +++ b/src/target/smp.h @@ -21,7 +21,7 @@ #include "server/server.h" int gdb_read_smp_packet(struct connection *connection, - char *packet, int packet_size); + char const *packet, int packet_size); int gdb_write_smp_packet(struct connection *connection, - char *packet, int packet_size); + char const *packet, int packet_size); -- ------------------------------------------------------------------------------ WatchGuard Dimension instantly turns raw network data into actionable security intelligence. It gives you real-time visual feedback on key security issues and trends. Skip the complicated setup - simply import a virtual appliance and go from zero to informed in seconds. http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk _______________________________________________ OpenOCD-devel mailing list OpenOCD-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openocd-devel