openssl/c6x/run6x.js
Andy Polyakov e576b67e1a 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 <rsalz@openssl.org>
Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Stephen Henson <steve@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4265)

(cherry picked from commit 781280094a)
2017-08-30 21:27:46 +01:00

91 lines
3.2 KiB
JavaScript
Executable file

#!/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);
}