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;
}