X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=gdbserver%2Fgdb-server.c;h=5878222d8313e29901344886804e8e792664a4c2;hb=0c11337f0211766b1ac31c2f4adb49aa2457aab0;hp=6ea9baecf7937c7f98c8d42cfc4da844a47d83bb;hpb=b548f669672cecfa959aea66fb5663d5e76963d7;p=fw%2Fstlink diff --git a/gdbserver/gdb-server.c b/gdbserver/gdb-server.c index 6ea9bae..5878222 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); @@ -310,6 +312,34 @@ static const char* const memory_map_template_F4 = " 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 + " " // fmc bank 1 (nor/psram/sram) + " " // fmc bank 2 & 3 (nand flash) + " " // fmc bank 4 (pc card) + " " // fmc sdram bank 1 & 2 + " " //Sectors 0..3 + " 0x4000" //16kB + " " + " " //Sector 4 + " 0x10000" //64kB + " " + " " //Sectors 5..11 + " 0x20000" //128kB + " " + " " // peripheral regs " " // cortex regs " " // bootrom " " // option byte area @@ -336,8 +366,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 +739,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 +951,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 +1268,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 +1280,9 @@ int serve(stlink_t *sl, st_state_t *st) { free(packet); } +#ifdef __MINGW32__ + win32_close_socket(sock); +#endif + return 0; }