From e576b67e1a79a846d45b641b73ee378db212d763 Mon Sep 17 00:00:00 2001 From: Andy Polyakov Date: Fri, 25 Nov 2016 11:52:06 +0100 Subject: [PATCH] c6x/* "facelift": - make scripts executable; - "parameterize" platform selection in c6x/do_fips; - add c6x/fips_algvs.mak; - add c6x/run6x.js launcher for more recent CCS versions; Reviewed-by: Rich Salz Reviewed-by: Tim Hudson Reviewed-by: Stephen Henson (Merged from https://github.com/openssl/openssl/pull/4265) (cherry picked from commit 781280094ad389e8958631b97e70f498becbd9cb) --- Configure | 3 +- c6x/do_fips | 7 +++- c6x/fips_algvs.mak | 14 +++++++ c6x/fips_standalone_sha1 | 0 c6x/incore6x | 0 c6x/run6x | 0 c6x/run6x.js | 91 ++++++++++++++++++++++++++++++++++++++++ test/fips_algvs.c | 2 +- util/mk1mf.pl | 2 +- 9 files changed, 115 insertions(+), 4 deletions(-) mode change 100644 => 100755 c6x/do_fips create mode 100644 c6x/fips_algvs.mak mode change 100644 => 100755 c6x/fips_standalone_sha1 mode change 100644 => 100755 c6x/incore6x mode change 100644 => 100755 c6x/run6x create mode 100755 c6x/run6x.js diff --git a/Configure b/Configure index 4fff98b031..075367510c 100755 --- a/Configure +++ b/Configure @@ -624,13 +624,14 @@ my %table=( "uClinux-dist64","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):SIXTY_FOUR_BIT_LONG:${no_asm}:$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::", "c64xplus","cl6x:-mv6400+ -o2 -ox -ms -pden -DNO_SYS_TYPES_H -DGETPID_IS_MEANINGLESS -DMD32_REG_T=int -DOPENSSL_SMALL_FOOTPRINT:::DSPBIOS::BN_LLONG:c64xpluscpuid.o:bn-c64xplus.o c64xplus-gf2m.o::aes-c64xplus.o aes_cbc.o aes_ctr.o:::sha1-c64xplus.o sha256-c64xplus.o sha512-c64xplus.o:::::::ghash-c64xplus.o::void:", +"c64x","cl6x:-mv6400 -o2 -ox -ms -as -pden -DNO_SYS_TYPES_H -DGETPID_IS_MEANINGLESS -DMD32_REG_T=int -DOPENSSL_SMALL_FOOTPRINT:::DSPBIOS:::c64xcpuid.o:::aes-c64x.o aes_cbc.o aes_ctr.o:::sha1-c64x.o sha256-c64x.o sha512-c64x.o:::::::::void:", ); my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A debug-VC-WIN64I debug-VC-WIN64A VC-NT VC-CE VC-WIN32 debug-VC-WIN32 - BC-32 c64xplus + BC-32 c64xplus c64x netware-clib netware-clib-bsdsock netware-libc netware-libc-bsdsock); diff --git a/c6x/do_fips b/c6x/do_fips old mode 100644 new mode 100755 index c1c29fcf83..4045e605ce --- a/c6x/do_fips +++ b/c6x/do_fips @@ -1,6 +1,11 @@ #!/bin/sh -perl Configure c64xplus fipscanisteronly no-engine +if ! which cl6x > /dev/null 2>&1; then + echo 'fatal: cl6x is not on $PATH' + exit 1 +fi + +perl Configure ${C6XPLATFORM:-c64xplus} fipscanisteronly no-engine perl util/mkfiles.pl > MINFO perl util/mk1mf.pl auto > c6x/fips.mak make -f c6x/fips.mak diff --git a/c6x/fips_algvs.mak b/c6x/fips_algvs.mak new file mode 100644 index 0000000000..7f67927fbd --- /dev/null +++ b/c6x/fips_algvs.mak @@ -0,0 +1,14 @@ +CC=cl6x +CFLAGS=-mv$${C6XSILICON:-6400+} -o2 -I. -Ic6x/inc -Ifips -DNO_SYS_TYPES_H +OBJ_D=c6x/tmp +OUT_D=c6x + +all: $(OUT_D)/fips_algvs.out + +$(OBJ_D)/fips_algvs.obj: test/fips_algvs.c + $(CC) --obj_directory=$(OBJ_D) $(CFLAGS) -c $< + +$(OUT_D)/fips_algvs.out: $(OBJ_D)/fips_algvs.obj $(OUT_D)/fipscanister.obj c6x/fips_algvs.cmd + $(OUT_D)/fips_standalone_sha1 -verify $(OUT_D)/fipscanister.obj + $(CC) -z -o $@ -m $(OUT_D)/fips_algvs.map $< $(OUT_D)/fipscanister.obj c6x/fips_algvs.cmd + $(OUT_D)/incore6x $@ || rm $@ diff --git a/c6x/fips_standalone_sha1 b/c6x/fips_standalone_sha1 old mode 100644 new mode 100755 diff --git a/c6x/incore6x b/c6x/incore6x old mode 100644 new mode 100755 diff --git a/c6x/run6x b/c6x/run6x old mode 100644 new mode 100755 diff --git a/c6x/run6x.js b/c6x/run6x.js new file mode 100755 index 0000000000..6d94949751 --- /dev/null +++ b/c6x/run6x.js @@ -0,0 +1,91 @@ +#!/usr/bin/env dss.sh +// +// Debug Server Scripting C6x launcher. +// + +importPackage(Packages.com.ti.debug.engine.scripting); +importPackage(Packages.com.ti.ccstudio.scripting.environment); +importPackage(Packages.java.lang); + +if (arguments.length == 0) { + // Extract script name from eclipse + var regex = new RegExp("-dss\\.rhinoArgs\n(.*)"); + var matches = regex.exec(environment["eclipse.commands"]); + + System.err.println("Usage: " + matches[1] + " executable [args]"); + System.err.println(); + System.err.println("You're also required to set CCSTARGETCONFIG " + + "environment variable to appoint"); + System.err.println("proper .ccxml file, customarily one of " + + "$HOME/ti/CCSTargetConfigurations/*.ccxml"); + quit(1); +} + +try { + var prog = arguments[0]; + var script = ScriptingEnvironment.instance(); + + var debugServer = script.getServer("DebugServer.1"); + + // CCSTARGETCONFIG environment variable should point at proper .ccxml, + // customarily one of $HOME/ti/CCSTargetConfigurations/*.ccxml. + debugServer.setConfig(System.getenv("CCSTARGETCONFIG")); + + var debugSession = debugServer.openSession("*", "*"); + + // Redirect GEL output to |prog|.gel file, so that it doesn't clobber + // standard output from the program... + var dot = prog.lastIndexOf("."); + var gel_out = prog + ".gel"; + if (dot > 0) { + gel_out = prog.substr(0,dot) + ".gel"; + } + debugSession.expression.evaluate('GEL_EnableFileOutput("' + + gel_out + '", 0, 0)'); + + debugSession.target.connect(); + + // It should be noted that "current working directory" for program + // executed on the target system is one where |prog| resides, and + // not where script executed [as one would expect]... + debugSession.memory.loadProgram(prog, arguments); + + // Pull exit()'s address and set breakpoint, then just execute till + // it's reached... + var exitAddr = debugSession.symbol.getAddress("exit"); + debugSession.breakpoint.add(exitAddr); + + while (1) { + debugSession.target.run(); + + var PC = debugSession.expression.evaluate("PC"); + if (PC == exitAddr) { + break; + } + } + + // Snatch value passed to exit(), so that it can be passed down to + // shell as exit code from this script... + var exitCode = debugSession.expression.evaluate("A4"); + + // Last run to termination... + debugSession.target.run(); + // Clean up... + debugSession.terminate(); + debugServer.stop(); + + // It should be noted that there is kind of a bug in C6x run-time. + // Return value from main() is not passed to last implicit exit() + // call [as it would on other systems], but instead constant 1 is + // passed, which conventionally indicates an error. So that if one + // wants to pass specific exit code, or even 0 indicating "success", + // one has to call exit() explicitly instead of relying on value + // returned by main()... + quit(exitCode); + +} catch (e) { + // We catch everything, because default handler terminates script with + // "success" exit code upon exception... + System.err.println(e.rhinoException); + quit(139); +} diff --git a/test/fips_algvs.c b/test/fips_algvs.c index 8ff75dcd2e..2bfd213a0e 100644 --- a/test/fips_algvs.c +++ b/test/fips_algvs.c @@ -150,7 +150,7 @@ extern int fips_rsavtest_main(int argc, char **argv); extern int fips_shatest_main(int argc, char **argv); extern int fips_test_suite_main(int argc, char **argv); -#if !defined(_TMS320C6400_PLUS) +#if !defined(_TMS320C6400_PLUS) && !defined(_TMS320C6400) #include "fips_aesavs.c" #include "fips_cmactest.c" #include "fips_desmovs.c" diff --git a/util/mk1mf.pl b/util/mk1mf.pl index 2325607e8f..b0a868a392 100755 --- a/util/mk1mf.pl +++ b/util/mk1mf.pl @@ -249,7 +249,7 @@ elsif (($platform eq "netware-clib") || ($platform eq "netware-libc") || $BSDSOCK=1 if ($platform eq "netware-libc-bsdsock") || ($platform eq "netware-clib-bsdsock"); require 'netware.pl'; } -elsif ($platform eq "c64xplus") +elsif ($platform =~ /^c64x/) { require "TI_CGTOOLS.pl"; } -- 2.25.1