Spencer Oliver wrote:
Zachary T Welch wrote:
Hi all,
These patches clean up the server and system startup. The first patch
factors the GDB server setup to be more conducive to deferred
initialization of targets (in a later series).
The second provides the 'noinit' command which can be used in a script
to removing 'init' from the end of the startup sequence. Scripts
that do not add this command will continue to see the same behavior, but
this allows new scripts to defer initialization to be done through the
TCL server or by hand over telnet.
The later use case is particular useful in order to interactively learn
the command set with help. The final patch takes advantage of this and
hides those commands which cannot be used in the current command mode.
Hi,
Just done a quick test on native win32 and this breaks the server.
As win32 requires that WSAStartup is called before any socket operations.
The failure is in gdb_target_start that is called before server_init.
I can look into a fix, but struggle to keep up with all the code changes.
Attached is a patch for review.
I have added a server_preinit function that calls WSAStartup before any
config file parsing etc.
No objections i will commit.
Cheers
Spen
>From 1a8418386037ba9b6b1f5451547d46cb5816c48d Mon Sep 17 00:00:00 2001
From: Spencer Oliver <[email protected]>
Date: Thu, 10 Dec 2009 13:07:18 +0000
Subject: [PATCH 2/2] server: add server_preinit which is called before config
file is parsed.
This fixes the issue under native win32 of the socket interface not being
enabled (via WSAStartup) before init is called from a script.
Signed-off-by: Spencer Oliver <[email protected]>
---
src/openocd.c | 5 +++--
src/server/server.c | 11 ++++++++++-
src/server/server.h | 1 +
3 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/src/openocd.c b/src/openocd.c
index 8cb8674..1105d2a 100644
--- a/src/openocd.c
+++ b/src/openocd.c
@@ -62,7 +62,6 @@ COMMAND_HANDLER(handle_version_command)
return ERROR_OK;
}
-
static int log_target_callback_event_handler(struct target *target, enum
target_event event, void *priv)
{
switch (event)
@@ -255,13 +254,15 @@ int openocd_main(int argc, char *argv[])
"http://openocd.berlios.de/doc/doxygen/bugs.html"
"\n");
-
command_context_mode(cmd_ctx, COMMAND_CONFIG);
command_set_output_handler(cmd_ctx, configuration_output_handler, NULL);
if (parse_cmdline_args(cmd_ctx, argc, argv) != ERROR_OK)
return EXIT_FAILURE;
+ if (server_preinit() != ERROR_OK)
+ return EXIT_FAILURE;
+
ret = parse_config_file(cmd_ctx);
if (ret != ERROR_OK)
return EXIT_FAILURE;
diff --git a/src/server/server.c b/src/server/server.c
index 2f4bfb0..75a6bed 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -487,8 +487,12 @@ void sig_handler(int sig) {
}
#endif
-int server_init(struct command_context *cmd_ctx)
+int server_preinit(void)
{
+ /* this currently only calls WSAStartup on native win32 systems
+ * before any socket operations are performed.
+ * This is an issue if you call init in your config script */
+
#ifdef _WIN32
WORD wVersionRequested;
WSADATA wsaData;
@@ -518,6 +522,11 @@ int server_init(struct command_context *cmd_ctx)
signal(SIGABRT, sig_handler);
#endif
+ return ERROR_OK;
+}
+
+int server_init(struct command_context *cmd_ctx)
+{
int ret = tcl_init(cmd_ctx);
if (ERROR_OK != ret)
return ret;
diff --git a/src/server/server.h b/src/server/server.h
index be1afbe..a25920e 100644
--- a/src/server/server.h
+++ b/src/server/server.h
@@ -74,6 +74,7 @@ int add_service(char *name, enum connection_type type,
unsigned short port,
input_handler_t in_handler, connection_closed_handler_t
close_handler,
void *priv);
+int server_preinit(void);
int server_init(struct command_context *cmd_ctx);
int server_quit(void);
--
1.6.1.2
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development