From bf853b3bc460fbb2f4c87fde42a5e4a1c1adea99 Mon Sep 17 00:00:00 2001 From: Guy Zana <guy@cloudius-systems.com> Date: Tue, 7 May 2013 11:02:38 +0300 Subject: [PATCH] jni: added run_elf(), a method to execute an elf file in a thread --- java/jni/elf-loader.cc | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 java/jni/elf-loader.cc diff --git a/java/jni/elf-loader.cc b/java/jni/elf-loader.cc new file mode 100644 index 000000000..dea6e2084 --- /dev/null +++ b/java/jni/elf-loader.cc @@ -0,0 +1,39 @@ +#include <algorithm> +#include "elf.hh" +#include <jni.h> +#include <string.h> + +extern elf::program* prog; + +const int argc_max_arguments = 256; + +bool run_elf(int argc, char** argv, int *return_code) +{ + if ((argc <= 0) || (argc > argc_max_arguments)) { + return (false); + } + + auto obj = prog->add_object(argv[0]); + if (!obj) { + return (false); + } + + auto main = obj->lookup<int (int, char**)>("main"); + if (!main) { + return (false); + } + + /* call main in a thread */ + int rc = main(argc, argv); + + /* cleanups */ + prog->remove_object(argv[0]); + + /* set the return code */ + if (return_code) { + *return_code = rc; + } + + return (true); +} + -- GitLab