X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=gdbserver%2Fgdb-server.c;h=0ddebb06f8a0bb21cfdaa8569ccf8b6f364247a6;hb=9fc5f77774168f179bdbf79de7a24a82a2835e1e;hp=e5e754bd897a0ebd72e7efb6cd2f6e36d81692c3;hpb=8f97b230fca22837643705449c49d82ce927ab5a;p=fw%2Fstlink diff --git a/gdbserver/gdb-server.c b/gdbserver/gdb-server.c index e5e754b..0ddebb0 100644 --- a/gdbserver/gdb-server.c +++ b/gdbserver/gdb-server.c @@ -209,7 +209,9 @@ int main(int argc, char** argv) { #endif do { - serve(sl, &state); + if (serve(sl, &state)) { + sleep (1); // don't go bezurk if serve returns with error + } /* Continue */ stlink_run(sl); @@ -306,7 +308,31 @@ static const char* const memory_map_template_F4 = " " //Sector 4 " 0x10000" //64kB " " - " " //Sectors 5..11 + " " //Sectors 5..11 + " 0x20000" //128kB + " " + " " // peripheral regs + " " // AHB3 Peripherals + " " // cortex regs + " " // bootrom + " " // option byte area + ""; + +static const char* const memory_map_template_F4_HD = + "" + "" + "" + " " // code = sram, bootrom or flash; flash is bigger + " " // ccm ram + " " // sram + " " //Sectors 0..3 + " 0x4000" //16kB + " " + " " //Sector 4 + " 0x10000" //64kB + " " + " " //Sectors 5..11 " 0x20000" //128kB " " " " // peripheral regs @@ -336,8 +362,10 @@ char* make_memory_map(stlink_t *sl) { char* map = malloc(4096); map[0] = '\0'; - if(sl->chip_id==STM32_CHIPID_F4 || sl->chip_id==STM32_CHIPID_F4_HD) { + if(sl->chip_id==STM32_CHIPID_F4) { strcpy(map, memory_map_template_F4); + } else if(sl->chip_id==STM32_CHIPID_F4_HD) { + strcpy(map, memory_map_template_F4_HD); } else { snprintf(map, 4096, memory_map_template, sl->flash_size, @@ -707,6 +735,9 @@ int serve(stlink_t *sl, st_state_t *st) { int status = gdb_recv_packet(client, &packet); if(status < 0) { ELOG("cannot recv: %d\n", status); +#ifdef __MINGW32__ + win32_close_socket(sock); +#endif return 1; } @@ -916,6 +947,9 @@ int serve(stlink_t *sl, st_state_t *st) { int status = gdb_check_for_interrupt(client); if(status < 0) { ELOG("cannot check for int: %d\n", status); +#ifdef __MINGW32__ + win32_close_socket(sock); +#endif return 1; } @@ -1230,6 +1264,9 @@ int serve(stlink_t *sl, st_state_t *st) { ELOG("cannot send: %d\n", result); free(reply); free(packet); +#ifdef __MINGW32__ + win32_close_socket(sock); +#endif return 1; } @@ -1239,5 +1276,9 @@ int serve(stlink_t *sl, st_state_t *st) { free(packet); } +#ifdef __MINGW32__ + win32_close_socket(sock); +#endif + return 0; }