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