aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--src/Makefile.am17
-rwxr-xr-xsrc/helper/bin2char.sh12
-rw-r--r--src/openocd.c8
-rw-r--r--src/openocd.h3
-rw-r--r--src/target/Makefile.am6
-rw-r--r--src/target/xscale.c14
7 files changed, 30 insertions, 34 deletions
diff --git a/.gitignore b/.gitignore
index bfb22ed6..3e6e1e94 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,8 +30,8 @@ src/jtag/drivers/OpenULINK/*.rst
*.swp
src/startup.tcl
-startup_tcl.c
-xscale_debug.h
+startup_tcl.inc
+xscale_debug.inc
bin2char
bin2char.exe
diff --git a/src/Makefile.am b/src/Makefile.am
index b539ec43..7d67e3d7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -32,8 +32,7 @@ endif
libopenocd_la_SOURCES = \
hello.c \
- openocd.c \
- startup_tcl.c
+ openocd.c
noinst_HEADERS = \
hello.h \
@@ -86,23 +85,23 @@ STARTUP_TCL_SRCS = \
EXTRA_DIST = $(STARTUP_TCL_SRCS)
-BUILT_SOURCES = startup.tcl
+BUILT_SOURCES = startup_tcl.inc
startup.tcl: $(STARTUP_TCL_SRCS)
cat $^ > $@
BIN2C = $(top_srcdir)/src/helper/bin2char.sh
-# Convert .tcl to cfile
-startup_tcl.c: startup.tcl $(BIN2C)
- $(BIN2C) openocd_startup_tcl < $< > $@ || rm -f $@
+# Convert .tcl to c-array
+startup_tcl.inc: startup.tcl $(BIN2C)
+ $(BIN2C) < $< > $@ || { rm -f $@; false; }
-# add startup_tcl.c to make clean list
-CLEANFILES = startup.tcl startup_tcl.c
+# add generated files to make clean list
+CLEANFILES = startup.tcl startup_tcl.inc
# we do not want generated file in the dist
dist-hook:
- rm -f $(distdir)/startup_tcl.c
+ rm -f $(distdir)/startup_tcl.inc
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
diff --git a/src/helper/bin2char.sh b/src/helper/bin2char.sh
index f9da3094..85a0fd6a 100755
--- a/src/helper/bin2char.sh
+++ b/src/helper/bin2char.sh
@@ -1,14 +1,14 @@
#!/bin/sh
-[ $# = 0 ] && {
- echo "Usage: $0 <varname>"
+[ $# != 0 ] && {
+ echo "Usage: $0"
echo
- echo "Read binary data from standard input and write it as a C character"
- echo "array <varname> to standard output. Add a final NULL for terminating."
+ echo "Read binary data from standard input and write it as a comma separated"
+ echo "list of hexadecimal byte values to standard ouput. The output is usable"
+ echo "as a C array initializer. It is terminated with a comma so it can be"
+ echo "continued e.g. for zero termination."
exit 1
}
echo "/* Autogenerated with $0 */"
-echo "unsigned const char $1[] = {"
od -v -A n -t x1 | sed 's/ *\(..\) */0x\1,/g'
-echo "0 /* NULL-terminated */ };"
diff --git a/src/openocd.c b/src/openocd.c
index 71e047f4..758febb4 100644
--- a/src/openocd.c
+++ b/src/openocd.c
@@ -50,6 +50,11 @@
#define OPENOCD_VERSION \
"Open On-Chip Debugger " VERSION RELSTR " (" PKGBLDDATE ")"
+static const char openocd_startup_tcl[] = {
+#include "startup_tcl.inc"
+0 /* Terminate with zero */
+};
+
/* Give scripts and TELNET a way to find out what version this is */
static int jim_version_command(Jim_Interp *interp, int argc,
Jim_Obj * const *argv)
@@ -228,8 +233,7 @@ struct command_context *setup_command_handler(Jim_Interp *interp)
log_init();
LOG_DEBUG("log_init: complete");
- const char *startup = openocd_startup_tcl;
- struct command_context *cmd_ctx = command_init(startup, interp);
+ struct command_context *cmd_ctx = command_init(openocd_startup_tcl, interp);
/* register subsystem commands */
typedef int (*command_registrant_t)(struct command_context *cmd_ctx_value);
diff --git a/src/openocd.h b/src/openocd.h
index 57bf4551..6d87c2af 100644
--- a/src/openocd.h
+++ b/src/openocd.h
@@ -31,7 +31,4 @@
*/
int openocd_main(int argc, char *argv[]);
-/** provides a hard-coded command environment setup */
-extern const char openocd_startup_tcl[];
-
#endif
diff --git a/src/target/Makefile.am b/src/target/Makefile.am
index efbeb33a..bf80c64c 100644
--- a/src/target/Makefile.am
+++ b/src/target/Makefile.am
@@ -16,12 +16,12 @@ EXTRA_DIST = \
startup.tcl \
$(wildcard $(srcdir)/xscale/*)
-DEBUG_HEADER = xscale_debug.h
+DEBUG_HEADER = xscale_debug.inc
BUILT_SOURCES = $(DEBUG_HEADER)
CLEANFILES = $(DEBUG_HEADER)
-$(DEBUG_HEADER): $(BIN2C) $(DEBUG_HANDLER)
- $(BIN2C) < $(DEBUG_HANDLER) xscale_debug_handler > xscale_debug.h
+$(DEBUG_HEADER): $(DEBUG_HANDLER) $(BIN2C)
+ $(BIN2C) < $< > $@ || { rm -f $@; false; }
METASOURCES = AUTO
noinst_LTLIBRARIES = libtarget.la
diff --git a/src/target/xscale.c b/src/target/xscale.c
index e88a2311..04189a14 100644
--- a/src/target/xscale.c
+++ b/src/target/xscale.c
@@ -73,14 +73,10 @@ static int xscale_read_trace(struct target *);
/* This XScale "debug handler" is loaded into the processor's
* mini-ICache, which is 2K of code writable only via JTAG.
- *
- * FIXME the OpenOCD "bin2char" utility currently doesn't handle
- * binary files cleanly. It's string oriented, and terminates them
- * with a NUL character. Better would be to generate the constants
- * and let other code decide names, scoping, and other housekeeping.
*/
-static /* unsigned const char xscale_debug_handler[] = ... */
-#include "xscale_debug.h"
+static const uint8_t xscale_debug_handler[] = {
+#include "xscale_debug.inc"
+};
static char *const xscale_reg_list[] = {
"XSCALE_MAINID", /* 0 */
@@ -1549,7 +1545,7 @@ static int xscale_deassert_reset(struct target *target)
* coprocessors, trace data, etc.
*/
address = xscale->handler_address;
- for (unsigned binary_size = sizeof xscale_debug_handler - 1;
+ for (unsigned binary_size = sizeof xscale_debug_handler;
binary_size > 0;
binary_size -= buf_cnt, buffer += buf_cnt) {
uint32_t cache_line[8];
@@ -3028,7 +3024,7 @@ static int xscale_target_create(struct target *target, Jim_Interp *interp)
{
struct xscale_common *xscale;
- if (sizeof xscale_debug_handler - 1 > 0x800) {
+ if (sizeof xscale_debug_handler > 0x800) {
LOG_ERROR("debug_handler.bin: larger than 2kb");
return ERROR_FAIL;
}