xscale: better fix for debug_handler.bin
Generate a C struct with the data, and use that, instead of an assembly language file. The assembly language causes issues on Darwin and MS-Windows, which don't necessarily use GNU AS; or if they do, don't necessarily use its ELF syntax. It's also better in two other ways: fewer global symbols; and the init-time size check gets optimized away at compile time. (Unless it fails, in which case bigger chunks of the file vanish.) Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
This commit is contained in:
parent
a61b57a87f
commit
cb7965da15
|
@ -16,7 +16,6 @@ AC_LANG_C
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
AC_PROG_CC_C99
|
AC_PROG_CC_C99
|
||||||
AM_PROG_CC_C_O
|
AM_PROG_CC_C_O
|
||||||
AM_PROG_AS
|
|
||||||
AC_PROG_RANLIB
|
AC_PROG_RANLIB
|
||||||
|
|
||||||
dnl disable checks for C++, Fortran and GNU Java Compiler
|
dnl disable checks for C++, Fortran and GNU Java Compiler
|
||||||
|
|
|
@ -52,12 +52,16 @@ noinst_HEADERS = \
|
||||||
startup.tcl \
|
startup.tcl \
|
||||||
bin2char.c
|
bin2char.c
|
||||||
|
|
||||||
bin2char$(EXEEXT_FOR_BUILD): bin2char.c
|
BIN2C = bin2char$(EXEEXT_FOR_BUILD)
|
||||||
|
|
||||||
|
BUILT_SOURCES = $(BIN2C)
|
||||||
|
|
||||||
|
$(BIN2C): bin2char.c
|
||||||
${CC_FOR_BUILD} ${CFLAGS_FOR_BUILD} $(srcdir)/bin2char.c -o $@
|
${CC_FOR_BUILD} ${CFLAGS_FOR_BUILD} $(srcdir)/bin2char.c -o $@
|
||||||
|
|
||||||
# Convert .tcl to cfile
|
# Convert .tcl to cfile
|
||||||
startup_tcl.c: startup.tcl bin2char$(EXEEXT_FOR_BUILD)
|
startup_tcl.c: startup.tcl $(BIN2C)
|
||||||
./bin2char$(EXEEXT_FOR_BUILD) startup_tcl < $(srcdir)/startup.tcl > $@
|
./$(BIN2C) startup_tcl < $(srcdir)/startup.tcl > $@
|
||||||
|
|
||||||
# add startup_tcl.c to make clean list
|
# add startup_tcl.c to make clean list
|
||||||
CLEANFILES = startup_tcl.c bin2char$(EXEEXT_FOR_BUILD)
|
CLEANFILES = startup_tcl.c bin2char$(EXEEXT_FOR_BUILD)
|
||||||
|
|
|
@ -10,11 +10,10 @@ AM_CPPFLAGS = \
|
||||||
-I$(top_srcdir)/src/jtag \
|
-I$(top_srcdir)/src/jtag \
|
||||||
-I$(top_srcdir)/src/xsvf
|
-I$(top_srcdir)/src/xsvf
|
||||||
|
|
||||||
# ideally this would be specific to xscale_debug.S ...
|
BIN2C = $(top_srcdir)/src/helper/bin2char$(EXEEXT_FOR_BUILD)
|
||||||
libtarget_la_CCASFLAGS = \
|
|
||||||
-Wa,-I$(top_srcdir)/src/target \
|
|
||||||
$(AM_CCASFLAGS)
|
|
||||||
|
|
||||||
|
xscale_debug.h: $(BIN2C) xscale/debug_handler.bin
|
||||||
|
$(BIN2C) < xscale/debug_handler.bin xscale_debug_handler > xscale_debug.h
|
||||||
|
|
||||||
METASOURCES = AUTO
|
METASOURCES = AUTO
|
||||||
noinst_LTLIBRARIES = libtarget.la
|
noinst_LTLIBRARIES = libtarget.la
|
||||||
|
@ -41,7 +40,6 @@ libtarget_la_SOURCES = \
|
||||||
feroceon.c \
|
feroceon.c \
|
||||||
etb.c \
|
etb.c \
|
||||||
xscale.c \
|
xscale.c \
|
||||||
xscale_debug.S \
|
|
||||||
arm_simulator.c \
|
arm_simulator.c \
|
||||||
image.c \
|
image.c \
|
||||||
armv7m.c \
|
armv7m.c \
|
||||||
|
@ -62,6 +60,9 @@ libtarget_la_SOURCES = \
|
||||||
mips_ejtag.c \
|
mips_ejtag.c \
|
||||||
avrt.c
|
avrt.c
|
||||||
|
|
||||||
|
BUILT_SOURCES = \
|
||||||
|
xscale_debug.h
|
||||||
|
|
||||||
noinst_HEADERS = \
|
noinst_HEADERS = \
|
||||||
target.h \
|
target.h \
|
||||||
target_type.h \
|
target_type.h \
|
||||||
|
@ -85,6 +86,7 @@ noinst_HEADERS = \
|
||||||
arm926ejs.h \
|
arm926ejs.h \
|
||||||
etb.h \
|
etb.h \
|
||||||
xscale.h \
|
xscale.h \
|
||||||
|
xscale_debug.h \
|
||||||
arm_simulator.h \
|
arm_simulator.h \
|
||||||
image.h \
|
image.h \
|
||||||
armv7m.h \
|
armv7m.h \
|
||||||
|
|
|
@ -69,6 +69,17 @@ static int xscale_unset_breakpoint(struct target_s *, breakpoint_t *);
|
||||||
static int xscale_read_trace(target_t *);
|
static int xscale_read_trace(target_t *);
|
||||||
|
|
||||||
|
|
||||||
|
/* 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 char *const xscale_reg_list[] =
|
static char *const xscale_reg_list[] =
|
||||||
{
|
{
|
||||||
"XSCALE_MAINID", /* 0 */
|
"XSCALE_MAINID", /* 0 */
|
||||||
|
@ -1594,7 +1605,7 @@ static int xscale_deassert_reset(target_t *target)
|
||||||
* force that, so writing new contents is reliable...
|
* force that, so writing new contents is reliable...
|
||||||
*/
|
*/
|
||||||
address = xscale->handler_address;
|
address = xscale->handler_address;
|
||||||
for (unsigned binary_size = xscale_debug_handler_size;
|
for (unsigned binary_size = sizeof xscale_debug_handler - 1;
|
||||||
binary_size > 0;
|
binary_size > 0;
|
||||||
binary_size -= buf_cnt, buffer += buf_cnt)
|
binary_size -= buf_cnt, buffer += buf_cnt)
|
||||||
{
|
{
|
||||||
|
@ -3030,7 +3041,7 @@ static int xscale_target_create(struct target_s *target, Jim_Interp *interp)
|
||||||
{
|
{
|
||||||
xscale_common_t *xscale;
|
xscale_common_t *xscale;
|
||||||
|
|
||||||
if (xscale_debug_handler_size > 0x800) {
|
if (sizeof xscale_debug_handler - 1 > 0x800) {
|
||||||
LOG_ERROR("debug_handler.bin: larger than 2kb");
|
LOG_ERROR("debug_handler.bin: larger than 2kb");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -170,10 +170,4 @@ enum
|
||||||
|
|
||||||
#define ERROR_XSCALE_NO_TRACE_DATA (-1500)
|
#define ERROR_XSCALE_NO_TRACE_DATA (-1500)
|
||||||
|
|
||||||
/* This XScale "debug handler" is loaded into the processor's
|
|
||||||
* mini-ICache, which is 2K of code writable only via JTAG.
|
|
||||||
*/
|
|
||||||
extern const uint8_t xscale_debug_handler[];
|
|
||||||
extern const uint32_t xscale_debug_handler_size;
|
|
||||||
|
|
||||||
#endif /* XSCALE_H */
|
#endif /* XSCALE_H */
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
.section .rodata
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
.global xscale_debug_handler
|
|
||||||
xscale_debug_handler:
|
|
||||||
.incbin "xscale/debug_handler.bin"
|
|
||||||
.size xscale_debug_handler, . - xscale_debug_handler
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
.global xscale_debug_handler_size
|
|
||||||
xscale_debug_handler_size:
|
|
||||||
.word . - xscale_debug_handler
|
|
||||||
.size xscale_debug_handler_size, 4
|
|
Loading…
Reference in New Issue