From 9075411c934b33ad01e037683dfaffe5adcbc2fc Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Tue, 5 Mar 2019 19:06:32 +0100 Subject: [PATCH 1/3] Move gdb_if.c for stand-alone servers to common. --- src/platforms/{libftdi => common}/gdb_if.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/platforms/{libftdi => common}/gdb_if.c (100%) diff --git a/src/platforms/libftdi/gdb_if.c b/src/platforms/common/gdb_if.c similarity index 100% rename from src/platforms/libftdi/gdb_if.c rename to src/platforms/common/gdb_if.c From 3b75cb9a5a87dcf04cdf6392b4cf3aa6d307602d Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Tue, 5 Mar 2019 19:40:39 +0100 Subject: [PATCH 2/3] gdb-server: Allow multiple instance. --- src/platforms/libftdi/Makefile.inc | 1 + src/platforms/{common => pc}/gdb_if.c | 48 ++++++++++++++++++++------- 2 files changed, 37 insertions(+), 12 deletions(-) rename src/platforms/{common => pc}/gdb_if.c (74%) diff --git a/src/platforms/libftdi/Makefile.inc b/src/platforms/libftdi/Makefile.inc index cecb4596..2c0521a8 100644 --- a/src/platforms/libftdi/Makefile.inc +++ b/src/platforms/libftdi/Makefile.inc @@ -7,4 +7,5 @@ CFLAGS += -Wno-cast-function-type else ifneq (, $(findstring cygwin, $(SYS))) LDFLAGS += -lusb-1.0 -lws2_32 endif +VPATH += platforms/pc SRC += timing.c \ diff --git a/src/platforms/common/gdb_if.c b/src/platforms/pc/gdb_if.c similarity index 74% rename from src/platforms/common/gdb_if.c rename to src/platforms/pc/gdb_if.c index 810a33e6..5da42da4 100644 --- a/src/platforms/common/gdb_if.c +++ b/src/platforms/pc/gdb_if.c @@ -36,12 +36,16 @@ #include #include +#include +#include +#include #include "general.h" #include "gdb_if.h" static int gdb_if_serv, gdb_if_conn; - +#define DEFAULT_PORT 2000 +#define NUM_GDB_SERVER 4 int gdb_if_init(void) { #if defined(_WIN32) || defined(__CYGWIN__) @@ -50,20 +54,40 @@ int gdb_if_init(void) #endif struct sockaddr_in addr; int opt; + int port = DEFAULT_PORT - 1; - addr.sin_family = AF_INET; - addr.sin_port = htons(2000); - addr.sin_addr.s_addr = htonl(INADDR_ANY); + do { + port ++; + if (port > DEFAULT_PORT + NUM_GDB_SERVER) + return - 1; + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + addr.sin_addr.s_addr = htonl(INADDR_ANY); - assert((gdb_if_serv = socket(PF_INET, SOCK_STREAM, 0)) != -1); - opt = 1; - assert(setsockopt(gdb_if_serv, SOL_SOCKET, SO_REUSEADDR, (void*)&opt, sizeof(opt)) != -1); - assert(setsockopt(gdb_if_serv, IPPROTO_TCP, TCP_NODELAY, (void*)&opt, sizeof(opt)) != -1); + gdb_if_serv = socket(PF_INET, SOCK_STREAM, 0); + if (gdb_if_serv == -1) + continue; - assert(bind(gdb_if_serv, (void*)&addr, sizeof(addr)) != -1); - assert(listen(gdb_if_serv, 1) != -1); - - DEBUG("Listening on TCP:2000\n"); + opt = 1; + if (setsockopt(gdb_if_serv, SOL_SOCKET, SO_REUSEADDR, (void*)&opt, sizeof(opt)) == -1) { + close(gdb_if_serv); + continue; + } + if (setsockopt(gdb_if_serv, IPPROTO_TCP, TCP_NODELAY, (void*)&opt, sizeof(opt)) == -1) { + close(gdb_if_serv); + continue; + } + if (bind(gdb_if_serv, (void*)&addr, sizeof(addr)) == -1) { + close(gdb_if_serv); + continue; + } + if (listen(gdb_if_serv, 1) == -1) { + close(gdb_if_serv); + continue; + } + break; + } while(1); + DEBUG("Listening on TCP: %4d\n", port); return 0; } From 5aebef4f64d0fd4c19f794fb9725686c39a7e395 Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Tue, 5 Mar 2019 15:01:38 +0100 Subject: [PATCH 3/3] Makefile: Indicate high level SWD/JTAG implemenatation. --- src/Makefile | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Makefile b/src/Makefile index 00881ac1..27d03ec6 100644 --- a/src/Makefile +++ b/src/Makefile @@ -34,9 +34,6 @@ SRC = \ gdb_hostio.c \ gdb_packet.c \ hex_utils.c \ - jtag_scan.c \ - jtagtap.c \ - jtagtap_generic.c \ lmi.c \ lpc_common.c \ lpc11xx.c \ @@ -58,15 +55,22 @@ SRC = \ stm32h7.c \ stm32l0.c \ stm32l4.c \ - swdptap.c \ - swdptap_generic.c \ target.c \ include $(PLATFORM_DIR)/Makefile.inc + ifndef TARGET TARGET=blackmagic endif +ifndef SWD_HL +SRC += swdptap.c swdptap_generic.c +endif + +ifndef JTAG_HL +SRC += jtag_scan.c jtagtap.c jtagtap_generic.c +endif + OBJ = $(SRC:.c=.o) $(TARGET): include/version.h $(OBJ)