1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/* !---- DO NOT EDIT: This file autogenerated by com\sun\gluegen\JavaEmitter.java on Mon Jul 31 16:26:59 PDT 2006 ----! */
#include <jni.h>
#include <assert.h>
#include "jogamp_common_os_UnixDynamicLinkerImpl.h"
#include <dlfcn.h>
#include <inttypes.h>
#ifndef RTLD_DEFAULT
#define RTLD_DEFAULT ((void *) 0)
#endif
// #define DEBUG_DLOPEN 1
#ifdef DEBUG_DLOPEN
typedef void *(*DLOPEN_FPTR_TYPE)(const char *filename, int flag);
#define VERBOSE_ON 1
#endif
// #define VERBOSE_ON 1
#ifdef VERBOSE_ON
#ifdef ANDROID
#include <android/log.h>
#define DBG_PRINT(...) __android_log_print(ANDROID_LOG_DEBUG, "JogAmp", __VA_ARGS__)
#else
#define DBG_PRINT(...) fprintf(stderr, __VA_ARGS__); fflush(stderr)
#endif
#else
#define DBG_PRINT(...)
#endif
/*
* Class: jogamp_common_os_UnixDynamicLinkerImpl
* Method: dlclose
* Signature: (J)I
*/
JNIEXPORT jint JNICALL
Java_jogamp_common_os_UnixDynamicLinkerImpl_dlclose(JNIEnv *env, jclass _unused, jlong arg0) {
int _res;
_res = dlclose((void *) (intptr_t) arg0);
return _res;
}
/*
* Class: jogamp_common_os_UnixDynamicLinkerImpl
* Method: dlerror
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
Java_jogamp_common_os_UnixDynamicLinkerImpl_dlerror(JNIEnv *env, jclass _unused) {
char * _res;
_res = dlerror();
if (_res == NULL) return NULL; return (*env)->NewStringUTF(env, _res);
}
/*
* Class: jogamp_common_os_UnixDynamicLinkerImpl
* Method: dlopen
* Signature: (Ljava/lang/String;I)J
*/
JNIEXPORT jlong JNICALL
Java_jogamp_common_os_UnixDynamicLinkerImpl_dlopen(JNIEnv *env, jclass _unused, jstring arg0, jint arg1) {
const char* _UTF8arg0 = NULL;
void * _res;
#ifdef DEBUG_DLOPEN
DLOPEN_FPTR_TYPE dlopenFunc = NULL;
DBG_PRINT("XXX dlopen.0\n");
#endif
if (arg0 != NULL) {
if (arg0 != NULL) {
_UTF8arg0 = (*env)->GetStringUTFChars(env, arg0, (jboolean*)NULL);
if (_UTF8arg0 == NULL) {
(*env)->ThrowNew(env, (*env)->FindClass(env, "java/lang/OutOfMemoryError"),
"Failed to get UTF-8 chars for argument \"arg0\" in native dispatcher for \"dlopen\"");
return 0;
}
}
}
#ifdef DEBUG_DLOPEN
dlopenFunc = (DLOPEN_FPTR_TYPE) dlsym(RTLD_DEFAULT, "dlopen");
DBG_PRINT("XXX dlopen.1: lib %s, dlopen-fptr %p %p (%d)\n", _UTF8arg0, dlopen, dlopenFunc, dlopen==dlopenFunc);
_res = dlopen((char *) _UTF8arg0, (int) arg1);
DBG_PRINT("XXX dlopen.2: %p\n", _res);
#else
_res = dlopen((char *) _UTF8arg0, (int) arg1);
#endif
if (arg0 != NULL) {
(*env)->ReleaseStringUTFChars(env, arg0, _UTF8arg0);
}
#ifdef DEBUG_DLOPEN
DBG_PRINT("XXX dlopen.X\n");
#endif
return (jlong) (intptr_t) _res;
}
/*
* Class: jogamp_common_os_UnixDynamicLinkerImpl
* Method: dlsym
* Signature: (JLjava/lang/String;)J
*/
JNIEXPORT jlong JNICALL
Java_jogamp_common_os_UnixDynamicLinkerImpl_dlsym(JNIEnv *env, jclass _unused, jlong arg0, jstring arg1) {
const char* _UTF8arg1 = NULL;
void * _res;
if (arg1 != NULL) {
if (arg1 != NULL) {
_UTF8arg1 = (*env)->GetStringUTFChars(env, arg1, (jboolean*)NULL);
if (_UTF8arg1 == NULL) {
(*env)->ThrowNew(env, (*env)->FindClass(env, "java/lang/OutOfMemoryError"),
"Failed to get UTF-8 chars for argument \"arg1\" in native dispatcher for \"dlsym\"");
return 0;
}
}
}
_res = dlsym((void *) (intptr_t) arg0, (char *) _UTF8arg1);
DBG_PRINT("XXX dlsym: handle %p, symbol %s -> %p\n", (void *) (intptr_t) arg0, _UTF8arg1, _res);
if (arg1 != NULL) {
(*env)->ReleaseStringUTFChars(env, arg1, _UTF8arg1);
}
return (jlong) (intptr_t) _res;
}
|