Fix some problems with the bin2char utility
Don't hardcode the type for the array, just output the array initializer so the includer can choose the type and storage class, zero-terminate at will and so on. Change-Id: I6d5e0710eaaba0a218b3eb32f6569177356f4462 Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Reviewed-on: http://openocd.zylin.com/2176 Tested-by: jenkins Reviewed-by: Paul Fertser <fercerpav@gmail.com>__archive__
parent
f1b04a20dc
commit
91e47f3ab8
|
@ -30,8 +30,8 @@ src/jtag/drivers/OpenULINK/*.rst
|
||||||
*.swp
|
*.swp
|
||||||
|
|
||||||
src/startup.tcl
|
src/startup.tcl
|
||||||
startup_tcl.c
|
startup_tcl.inc
|
||||||
xscale_debug.h
|
xscale_debug.inc
|
||||||
|
|
||||||
bin2char
|
bin2char
|
||||||
bin2char.exe
|
bin2char.exe
|
||||||
|
|
|
@ -32,8 +32,7 @@ endif
|
||||||
|
|
||||||
libopenocd_la_SOURCES = \
|
libopenocd_la_SOURCES = \
|
||||||
hello.c \
|
hello.c \
|
||||||
openocd.c \
|
openocd.c
|
||||||
startup_tcl.c
|
|
||||||
|
|
||||||
noinst_HEADERS = \
|
noinst_HEADERS = \
|
||||||
hello.h \
|
hello.h \
|
||||||
|
@ -86,23 +85,23 @@ STARTUP_TCL_SRCS = \
|
||||||
|
|
||||||
EXTRA_DIST = $(STARTUP_TCL_SRCS)
|
EXTRA_DIST = $(STARTUP_TCL_SRCS)
|
||||||
|
|
||||||
BUILT_SOURCES = startup.tcl
|
BUILT_SOURCES = startup_tcl.inc
|
||||||
|
|
||||||
startup.tcl: $(STARTUP_TCL_SRCS)
|
startup.tcl: $(STARTUP_TCL_SRCS)
|
||||||
cat $^ > $@
|
cat $^ > $@
|
||||||
|
|
||||||
BIN2C = $(top_srcdir)/src/helper/bin2char.sh
|
BIN2C = $(top_srcdir)/src/helper/bin2char.sh
|
||||||
|
|
||||||
# Convert .tcl to cfile
|
# Convert .tcl to c-array
|
||||||
startup_tcl.c: startup.tcl $(BIN2C)
|
startup_tcl.inc: startup.tcl $(BIN2C)
|
||||||
$(BIN2C) openocd_startup_tcl < $< > $@ || rm -f $@
|
$(BIN2C) < $< > $@ || { rm -f $@; false; }
|
||||||
|
|
||||||
# add startup_tcl.c to make clean list
|
# add generated files to make clean list
|
||||||
CLEANFILES = startup.tcl startup_tcl.c
|
CLEANFILES = startup.tcl startup_tcl.inc
|
||||||
|
|
||||||
# we do not want generated file in the dist
|
# we do not want generated file in the dist
|
||||||
dist-hook:
|
dist-hook:
|
||||||
rm -f $(distdir)/startup_tcl.c
|
rm -f $(distdir)/startup_tcl.inc
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
|
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
[ $# = 0 ] && {
|
[ $# != 0 ] && {
|
||||||
echo "Usage: $0 <varname>"
|
echo "Usage: $0"
|
||||||
echo
|
echo
|
||||||
echo "Read binary data from standard input and write it as a C character"
|
echo "Read binary data from standard input and write it as a comma separated"
|
||||||
echo "array <varname> to standard output. Add a final NULL for terminating."
|
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
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "/* Autogenerated with $0 */"
|
echo "/* Autogenerated with $0 */"
|
||||||
echo "unsigned const char $1[] = {"
|
|
||||||
od -v -A n -t x1 | sed 's/ *\(..\) */0x\1,/g'
|
od -v -A n -t x1 | sed 's/ *\(..\) */0x\1,/g'
|
||||||
echo "0 /* NULL-terminated */ };"
|
|
||||||
|
|
|
@ -50,6 +50,11 @@
|
||||||
#define OPENOCD_VERSION \
|
#define OPENOCD_VERSION \
|
||||||
"Open On-Chip Debugger " VERSION RELSTR " (" PKGBLDDATE ")"
|
"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 */
|
/* Give scripts and TELNET a way to find out what version this is */
|
||||||
static int jim_version_command(Jim_Interp *interp, int argc,
|
static int jim_version_command(Jim_Interp *interp, int argc,
|
||||||
Jim_Obj * const *argv)
|
Jim_Obj * const *argv)
|
||||||
|
@ -228,8 +233,7 @@ struct command_context *setup_command_handler(Jim_Interp *interp)
|
||||||
log_init();
|
log_init();
|
||||||
LOG_DEBUG("log_init: complete");
|
LOG_DEBUG("log_init: complete");
|
||||||
|
|
||||||
const char *startup = openocd_startup_tcl;
|
struct command_context *cmd_ctx = command_init(openocd_startup_tcl, interp);
|
||||||
struct command_context *cmd_ctx = command_init(startup, interp);
|
|
||||||
|
|
||||||
/* register subsystem commands */
|
/* register subsystem commands */
|
||||||
typedef int (*command_registrant_t)(struct command_context *cmd_ctx_value);
|
typedef int (*command_registrant_t)(struct command_context *cmd_ctx_value);
|
||||||
|
|
|
@ -31,7 +31,4 @@
|
||||||
*/
|
*/
|
||||||
int openocd_main(int argc, char *argv[]);
|
int openocd_main(int argc, char *argv[]);
|
||||||
|
|
||||||
/** provides a hard-coded command environment setup */
|
|
||||||
extern const char openocd_startup_tcl[];
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -16,12 +16,12 @@ EXTRA_DIST = \
|
||||||
startup.tcl \
|
startup.tcl \
|
||||||
$(wildcard $(srcdir)/xscale/*)
|
$(wildcard $(srcdir)/xscale/*)
|
||||||
|
|
||||||
DEBUG_HEADER = xscale_debug.h
|
DEBUG_HEADER = xscale_debug.inc
|
||||||
BUILT_SOURCES = $(DEBUG_HEADER)
|
BUILT_SOURCES = $(DEBUG_HEADER)
|
||||||
CLEANFILES = $(DEBUG_HEADER)
|
CLEANFILES = $(DEBUG_HEADER)
|
||||||
|
|
||||||
$(DEBUG_HEADER): $(BIN2C) $(DEBUG_HANDLER)
|
$(DEBUG_HEADER): $(DEBUG_HANDLER) $(BIN2C)
|
||||||
$(BIN2C) < $(DEBUG_HANDLER) xscale_debug_handler > xscale_debug.h
|
$(BIN2C) < $< > $@ || { rm -f $@; false; }
|
||||||
|
|
||||||
METASOURCES = AUTO
|
METASOURCES = AUTO
|
||||||
noinst_LTLIBRARIES = libtarget.la
|
noinst_LTLIBRARIES = libtarget.la
|
||||||
|
|
|
@ -73,14 +73,10 @@ static int xscale_read_trace(struct target *);
|
||||||
|
|
||||||
/* This XScale "debug handler" is loaded into the processor's
|
/* This XScale "debug handler" is loaded into the processor's
|
||||||
* mini-ICache, which is 2K of code writable only via JTAG.
|
* 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[] = ... */
|
static const uint8_t xscale_debug_handler[] = {
|
||||||
#include "xscale_debug.h"
|
#include "xscale_debug.inc"
|
||||||
|
};
|
||||||
|
|
||||||
static char *const xscale_reg_list[] = {
|
static char *const xscale_reg_list[] = {
|
||||||
"XSCALE_MAINID", /* 0 */
|
"XSCALE_MAINID", /* 0 */
|
||||||
|
@ -1549,7 +1545,7 @@ static int xscale_deassert_reset(struct target *target)
|
||||||
* coprocessors, trace data, etc.
|
* coprocessors, trace data, etc.
|
||||||
*/
|
*/
|
||||||
address = xscale->handler_address;
|
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 > 0;
|
||||||
binary_size -= buf_cnt, buffer += buf_cnt) {
|
binary_size -= buf_cnt, buffer += buf_cnt) {
|
||||||
uint32_t cache_line[8];
|
uint32_t cache_line[8];
|
||||||
|
@ -3028,7 +3024,7 @@ static int xscale_target_create(struct target *target, Jim_Interp *interp)
|
||||||
{
|
{
|
||||||
struct xscale_common *xscale;
|
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");
|
LOG_ERROR("debug_handler.bin: larger than 2kb");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue