forked from auracaster/openocd
- add ability for openocd to communicate to gdb using pipes (stdin/stdout).
- this is enabled by new command line option option --pipe. git-svn-id: svn://svn.berlios.de/openocd/trunk@1242 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
INCLUDES = -I$(top_srcdir)/src $(all_includes) -I$(top_srcdir)/src/target
|
||||
INCLUDES = -I$(top_srcdir)/src $(all_includes) -I$(top_srcdir)/src/target -I$(top_srcdir)/src/server
|
||||
METASOURCES = AUTO
|
||||
AM_CPPFLAGS = -DPKGDATADIR=\"$(pkgdatadir)\" -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@
|
||||
noinst_LIBRARIES = libhelper.a
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "configuration.h"
|
||||
#include "time_support.h"
|
||||
#include "command.h"
|
||||
#include "server.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -108,9 +109,11 @@ static void log_puts(enum log_levels level, const char *file, int line, const ch
|
||||
#endif
|
||||
string);
|
||||
}
|
||||
else
|
||||
else if(server_use_pipes == 0)
|
||||
{
|
||||
if (strcmp(string, "\n")!=0)
|
||||
/* if we are using gdb through pipes then we do not want any output
|
||||
* to the pipe otherwise we get repeated strings */
|
||||
if (strcmp(string, "\n") != 0)
|
||||
{
|
||||
/* print human readable output - but skip empty lines */
|
||||
fprintf(log_output, "%s%s",
|
||||
@@ -203,6 +206,18 @@ int handle_debug_level_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||
if (debug_level > 3)
|
||||
debug_level = 3;
|
||||
|
||||
if (debug_level >= LOG_LVL_DEBUG && server_use_pipes == 1)
|
||||
{
|
||||
/* if we are enabling debug info then we need to write to a log file
|
||||
* otherwise the pipe will get full and cause issues with gdb */
|
||||
FILE* file = fopen("openocd.log", "w");
|
||||
if (file)
|
||||
{
|
||||
log_output = file;
|
||||
LOG_WARNING("enabling log output as we are using pipes");
|
||||
}
|
||||
}
|
||||
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,10 +24,13 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "replacements.h"
|
||||
|
||||
#include "types.h"
|
||||
#include "command.h"
|
||||
#include "configuration.h"
|
||||
#include "log.h"
|
||||
#include "server.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -43,8 +46,9 @@ static struct option long_options[] =
|
||||
{"debug", optional_argument, 0, 'd'},
|
||||
{"file", required_argument, 0, 'f'},
|
||||
{"search", required_argument, 0, 's'},
|
||||
{"log_output", required_argument, 0, 'l'},
|
||||
{"log_output", required_argument, 0, 'l'},
|
||||
{"command", required_argument, 0, 'c'},
|
||||
{"pipe", no_argument, 0, 'p'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
@@ -95,7 +99,7 @@ int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[]
|
||||
/* getopt_long stores the option index here. */
|
||||
int option_index = 0;
|
||||
|
||||
c = getopt_long(argc, argv, "hvd::l:f:s:c:", long_options, &option_index);
|
||||
c = getopt_long(argc, argv, "hvd::l:f:s:c:p", long_options, &option_index);
|
||||
|
||||
/* Detect the end of the options. */
|
||||
if (c == -1)
|
||||
@@ -140,7 +144,20 @@ int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[]
|
||||
add_config_command(optarg);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'p': /* --pipe | -p */
|
||||
#if BUILD_ECOSBOARD == 1
|
||||
/* pipes unsupported on hosted platforms */
|
||||
LOG_WARNING("pipes not supported on this platform");
|
||||
#else
|
||||
#ifdef IS_MINGW
|
||||
/* pipes currently unsupported on win32 */
|
||||
LOG_WARNING("pipes currently unsupported on win32");
|
||||
exit(1);
|
||||
#else
|
||||
server_use_pipes = 1;
|
||||
#endif
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,6 +171,7 @@ int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[]
|
||||
LOG_OUTPUT("--debug | -d\tset debug level <0-3>\n");
|
||||
LOG_OUTPUT("--log_output | -l\tredirect log output to file <name>\n");
|
||||
LOG_OUTPUT("--command | -c\trun <command>\n");
|
||||
LOG_OUTPUT("--pipe | -p\tuse pipes for gdb communication\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
@@ -161,7 +179,7 @@ int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[]
|
||||
{
|
||||
/* Nothing to do, version gets printed automatically. */
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user