summaryrefslogtreecommitdiff
path: root/src/app.c
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2018-02-17 23:04:55 +0200
committerJari Vetoniemi <mailroxas@gmail.com>2018-02-17 23:04:55 +0200
commitf378a448336d4fb3547b53c0712fd7307fc0ba3a (patch)
treeec1340379c497a1009384b2eb9035f5fc7be53d8 /src/app.c
parent33a9a63787154facfdaddaf719e727947c159800 (diff)
Add fake jvm
Diffstat (limited to 'src/app.c')
-rw-r--r--src/app.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/app.c b/src/app.c
index 6dd8e10..5d23a3d 100644
--- a/src/app.c
+++ b/src/app.c
@@ -4,6 +4,7 @@
#include <dlfcn.h>
#include <err.h>
#include <assert.h>
+#include "fakejvm/jvm.h"
extern void *apkenv_android_dlopen(const char*, int);
extern void *apkenv_android_dlclose(void*);
@@ -16,25 +17,32 @@ main(int argc, const char *argv[])
if (argc < 2)
errx(EXIT_FAILURE, "usage: so-file");
+ printf("loading runtime\n");
dlopen("libpthread.so", RTLD_NOW | RTLD_GLOBAL);
- printf("loading: %s\n", argv[1]);
+ printf("loading module: %s\n", argv[1]);
- char path[4096];
- snprintf(path, sizeof(path), "%s", argv[1]);
- apkenv_parse_library_path(dirname(path), ";");
+ {
+ char path[4096];
+ snprintf(path, sizeof(path), "%s", argv[1]);
+ apkenv_parse_library_path(dirname(path), ";");
+ }
void *handle;
if (!(handle = apkenv_android_dlopen(argv[1], RTLD_NOW | RTLD_LOCAL)))
errx(EXIT_FAILURE, "dlopen failed: %s", dlerror());
- printf("loaded: %s\n", argv[1]);
+ printf("trying JNI_OnLoad from: %s\n", argv[1]);
- void* (*JNI_OnLoad)(void*, void*) = apkenv_android_dlsym(handle, "JNI_OnLoad");
- assert(JNI_OnLoad);
+ {
+ struct jvm jvm;
+ jvm_init(&jvm);
- char data[1024];
- JNI_OnLoad(data, NULL);
+ void* (*JNI_OnLoad)(void*, void*) = apkenv_android_dlsym(handle, "JNI_OnLoad");
+ assert(JNI_OnLoad);
+
+ JNI_OnLoad(&jvm.vm, NULL);
+ }
// apkenv_android_dlclose(handle);
return EXIT_SUCCESS;