summaryrefslogtreecommitdiffstats
path: root/src/java
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2013-06-16 19:16:31 +0200
committerSven Gothel <[email protected]>2013-06-16 19:16:31 +0200
commit5d211c6fa6a0452cc4569712e436184e34504a88 (patch)
treebdd90a5b7ccad4a3b62350c0b6699d3e0c66a92a /src/java
parentd01cb422c4621fbc1b5ea2bcd7d19f3ff8602715 (diff)
Fix DynamicLinker Impl: Add Bionic specialization using Bionic's non POSIX values; Using same pattern for Mac OS X.
Add Bionic specialization using Bionic's non POSIX values - derive from UnixDynamicLinkerImpl - specify own flag and mode values - use UnixDynamicLinkerImpl native code Using same pattern for Mac OS X - derive from UnixDynamicLinkerImpl - specify own flag and mode values - use UnixDynamicLinkerImpl native code - drop MacOSXDynamicLinkerImpl native code
Diffstat (limited to 'src/java')
-rw-r--r--src/java/com/jogamp/common/os/NativeLibrary.java8
-rw-r--r--src/java/jogamp/common/os/BionicDynamicLinkerImpl.java54
-rw-r--r--src/java/jogamp/common/os/MacOSXDynamicLinkerImpl.java51
-rw-r--r--src/java/jogamp/common/os/UnixDynamicLinkerImpl.java29
-rw-r--r--src/java/jogamp/common/os/WindowsDynamicLinkerImpl.java7
5 files changed, 90 insertions, 59 deletions
diff --git a/src/java/com/jogamp/common/os/NativeLibrary.java b/src/java/com/jogamp/common/os/NativeLibrary.java
index 2351391..bfc5b07 100644
--- a/src/java/com/jogamp/common/os/NativeLibrary.java
+++ b/src/java/com/jogamp/common/os/NativeLibrary.java
@@ -43,6 +43,7 @@ package com.jogamp.common.os;
import com.jogamp.common.util.IOUtil;
import com.jogamp.common.util.cache.TempJarCache;
+import jogamp.common.os.BionicDynamicLinkerImpl;
import jogamp.common.os.MacOSXDynamicLinkerImpl;
import jogamp.common.os.PlatformPropsImpl;
import jogamp.common.os.UnixDynamicLinkerImpl;
@@ -87,9 +88,14 @@ public class NativeLibrary implements DynamicLookupHelper {
suffixes = new String[] { ".dylib", ".jnilib" };
break;
+ case ANDROID:
+ dynLink = new BionicDynamicLinkerImpl();
+ prefixes = new String[] { "lib" };
+ suffixes = new String[] { ".so" };
+ break;
+
/*
case FREEBSD:
- case DALVIK:
case SUNOS:
case HPUX:
case OPENKODE:
diff --git a/src/java/jogamp/common/os/BionicDynamicLinkerImpl.java b/src/java/jogamp/common/os/BionicDynamicLinkerImpl.java
new file mode 100644
index 0000000..3864ab2
--- /dev/null
+++ b/src/java/jogamp/common/os/BionicDynamicLinkerImpl.java
@@ -0,0 +1,54 @@
+package jogamp.common.os;
+
+import com.jogamp.common.util.SecurityUtil;
+
+/**
+ * Bionic specialization of {@link UnixDynamicLinkerImpl}
+ * utilizing Bionic's non POSIX flags and mode values.
+ * <p>
+ * Bionic is used on Android.
+ * </p>
+ */
+public class BionicDynamicLinkerImpl extends UnixDynamicLinkerImpl {
+ private static final long RTLD_DEFAULT = 0xffffffffL;
+ // static final long RTLD_NEXT = 0xfffffffeL;
+
+ private static final int RTLD_LAZY = 0x00001;
+ // static final int RTLD_NOW = 0x00000;
+ private static final int RTLD_LOCAL = 0x00000;
+ private static final int RTLD_GLOBAL = 0x00002;
+
+ // --- Begin CustomJavaCode .cfg declarations
+ public long openLibraryLocal(String pathname, boolean debug) throws SecurityException {
+ // Note we use RTLD_GLOBAL visibility to _NOT_ allow this functionality to
+ // be used to pre-resolve dependent libraries of JNI code without
+ // requiring that all references to symbols in those libraries be
+ // looked up dynamically via the ProcAddressTable mechanism; in
+ // other words, one can actually link against the library instead of
+ // having to dlsym all entry points. System.loadLibrary() uses
+ // RTLD_LOCAL visibility so can't be used for this purpose.
+ SecurityUtil.checkLinkPermission(pathname);
+ return dlopen(pathname, RTLD_LAZY | RTLD_LOCAL);
+ }
+
+ public long openLibraryGlobal(String pathname, boolean debug) throws SecurityException {
+ // Note we use RTLD_GLOBAL visibility to allow this functionality to
+ // be used to pre-resolve dependent libraries of JNI code without
+ // requiring that all references to symbols in those libraries be
+ // looked up dynamically via the ProcAddressTable mechanism; in
+ // other words, one can actually link against the library instead of
+ // having to dlsym all entry points. System.loadLibrary() uses
+ // RTLD_LOCAL visibility so can't be used for this purpose.
+ SecurityUtil.checkLinkPermission(pathname);
+ return dlopen(pathname, RTLD_LAZY | RTLD_GLOBAL);
+ }
+
+ public long lookupSymbolGlobal(String symbolName) {
+ final long addr = dlsym(RTLD_DEFAULT, symbolName);
+ if(DEBUG_LOOKUP) {
+ System.err.println("DynamicLinkerImpl.lookupSymbolGlobal("+symbolName+") -> 0x"+Long.toHexString(addr));
+ }
+ return addr;
+ }
+
+}
diff --git a/src/java/jogamp/common/os/MacOSXDynamicLinkerImpl.java b/src/java/jogamp/common/os/MacOSXDynamicLinkerImpl.java
index 95f7e63..09ee48d 100644
--- a/src/java/jogamp/common/os/MacOSXDynamicLinkerImpl.java
+++ b/src/java/jogamp/common/os/MacOSXDynamicLinkerImpl.java
@@ -1,32 +1,20 @@
-/* !---- DO NOT EDIT: This file autogenerated by com\sun\gluegen\JavaEmitter.java on Mon Jul 31 16:27:00 PDT 2006 ----! */
-
package jogamp.common.os;
-import com.jogamp.common.os.DynamicLinker;
import com.jogamp.common.util.SecurityUtil;
+/**
+ * Mac OS X specialization of {@link UnixDynamicLinkerImpl}
+ * utilizing OS X 's non POSIX flags and mode values.
+ */
+public class MacOSXDynamicLinkerImpl extends UnixDynamicLinkerImpl {
-public class MacOSXDynamicLinkerImpl implements DynamicLinker {
-
- public static final long RTLD_DEFAULT = -2;
-
- public static final int RTLD_LAZY = 0x1;
- public static final int RTLD_NOW = 0x2;
- public static final int RTLD_LOCAL = 0x4;
- public static final int RTLD_GLOBAL = 0x8;
-
- /** Interface to C language function: <br> <code> int dlclose(void * __handle); </code> */
- private static native int dlclose(long __handle);
-
- /** Interface to C language function: <br> <code> char * dlerror(void); </code> */
- private static native java.lang.String dlerror();
-
- /** Interface to C language function: <br> <code> void * dlopen(const char * __path, int __mode); </code> */
- private static native long dlopen(java.lang.String __path, int __mode);
-
- /** Interface to C language function: <br> <code> void * dlsym(void * __handle, const char * __symbol); </code> */
- private static native long dlsym(long __handle, java.lang.String __symbol);
+ private static final long RTLD_DEFAULT = -2L;
+ // static final long RTLD_NEXT = -1L;
+ private static final int RTLD_LAZY = 0x00001;
+ // static final int RTLD_NOW = 0x00002;
+ private static final int RTLD_LOCAL = 0x00004;
+ private static final int RTLD_GLOBAL = 0x00008;
// --- Begin CustomJavaCode .cfg declarations
public long openLibraryLocal(String pathname, boolean debug) throws SecurityException {
@@ -53,25 +41,12 @@ public class MacOSXDynamicLinkerImpl implements DynamicLinker {
return dlopen(pathname, RTLD_LAZY | RTLD_GLOBAL);
}
- public long lookupSymbol(long libraryHandle, String symbolName) {
- final long addr = dlsym(libraryHandle, symbolName);
- if(DEBUG_LOOKUP) {
- System.err.println("MaxOSXDynamicLinkerImpl.lookupSymbol(0x"+Long.toHexString(libraryHandle)+", "+symbolName+") -> 0x"+Long.toHexString(addr));
- }
- return addr;
- }
-
public long lookupSymbolGlobal(String symbolName) {
final long addr = dlsym(RTLD_DEFAULT, symbolName);
if(DEBUG_LOOKUP) {
- System.err.println("MacOSXDynamicLinkerImpl.lookupSymbolGlobal("+symbolName+") -> 0x"+Long.toHexString(addr));
+ System.err.println("DynamicLinkerImpl.lookupSymbolGlobal("+symbolName+") -> 0x"+Long.toHexString(addr));
}
return addr;
}
- public void closeLibrary(long libraryHandle) {
- dlclose(libraryHandle);
- }
- // ---- End CustomJavaCode .cfg declarations
-
-} // end of class MacOSXDynamicLinkerImpl
+}
diff --git a/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java b/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java
index 2258dfa..e4cdbda 100644
--- a/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java
+++ b/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java
@@ -1,5 +1,3 @@
-/* !---- DO NOT EDIT: This file autogenerated by com\sun\gluegen\JavaEmitter.java on Mon Jul 31 16:26:59 PDT 2006 ----! */
-
package jogamp.common.os;
import com.jogamp.common.os.DynamicLinker;
@@ -8,23 +6,25 @@ import com.jogamp.common.util.SecurityUtil;
public class UnixDynamicLinkerImpl implements DynamicLinker {
- public static final long RTLD_DEFAULT = 0;
- public static final int RTLD_LAZY = 0x00001;
- public static final int RTLD_NOW = 0x00002;
- public static final int RTLD_GLOBAL = 0x00100;
- public static final int RTLD_LOCAL = 0x00000;
+ private static final long RTLD_DEFAULT = 0;
+ // static final long RTLD_NEXT = -1L;
+
+ private static final int RTLD_LAZY = 0x00001;
+ // static final int RTLD_NOW = 0x00002;
+ private static final int RTLD_LOCAL = 0x00000;
+ private static final int RTLD_GLOBAL = 0x00100;
/** Interface to C language function: <br> <code> int dlclose(void * ); </code> */
- private static native int dlclose(long arg0);
+ /* pp */ static native int dlclose(long arg0);
/** Interface to C language function: <br> <code> char * dlerror(void); </code> */
- private static native java.lang.String dlerror();
+ /* pp */ static native java.lang.String dlerror();
/** Interface to C language function: <br> <code> void * dlopen(const char * , int); </code> */
- private static native long dlopen(java.lang.String arg0, int arg1);
+ /* pp */ static native long dlopen(java.lang.String arg0, int arg1);
/** Interface to C language function: <br> <code> void * dlsym(void * , const char * ); </code> */
- private static native long dlsym(long arg0, java.lang.String arg1);
+ /* pp */ static native long dlsym(long arg0, java.lang.String arg1);
// --- Begin CustomJavaCode .cfg declarations
@@ -55,7 +55,7 @@ public class UnixDynamicLinkerImpl implements DynamicLinker {
public long lookupSymbol(long libraryHandle, String symbolName) {
final long addr = dlsym(libraryHandle, symbolName);
if(DEBUG_LOOKUP) {
- System.err.println("UnixDynamicLinkerImpl.lookupSymbol(0x"+Long.toHexString(libraryHandle)+", "+symbolName+") -> 0x"+Long.toHexString(addr));
+ System.err.println("DynamicLinkerImpl.lookupSymbol(0x"+Long.toHexString(libraryHandle)+", "+symbolName+") -> 0x"+Long.toHexString(addr));
}
return addr;
}
@@ -63,7 +63,7 @@ public class UnixDynamicLinkerImpl implements DynamicLinker {
public long lookupSymbolGlobal(String symbolName) {
final long addr = dlsym(RTLD_DEFAULT, symbolName);
if(DEBUG_LOOKUP) {
- System.err.println("UnixDynamicLinkerImpl.lookupSymbolGlobal("+symbolName+") -> 0x"+Long.toHexString(addr));
+ System.err.println("DynamicLinkerImpl.lookupSymbolGlobal("+symbolName+") -> 0x"+Long.toHexString(addr));
}
return addr;
}
@@ -71,6 +71,5 @@ public class UnixDynamicLinkerImpl implements DynamicLinker {
public void closeLibrary(long libraryHandle) {
dlclose(libraryHandle);
}
- // ---- End CustomJavaCode .cfg declarations
-} // end of class UnixDynamicLinkerImpl
+}
diff --git a/src/java/jogamp/common/os/WindowsDynamicLinkerImpl.java b/src/java/jogamp/common/os/WindowsDynamicLinkerImpl.java
index eb02584..17d4adc 100644
--- a/src/java/jogamp/common/os/WindowsDynamicLinkerImpl.java
+++ b/src/java/jogamp/common/os/WindowsDynamicLinkerImpl.java
@@ -1,5 +1,3 @@
-/* !---- DO NOT EDIT: This file autogenerated by com\sun\gluegen\JavaEmitter.java on Tue May 27 02:37:55 PDT 2008 ----! */
-
package jogamp.common.os;
import com.jogamp.common.os.DynamicLinker;
@@ -51,7 +49,7 @@ public class WindowsDynamicLinkerImpl implements DynamicLinker {
}
}
if(DEBUG_LOOKUP) {
- System.err.println("WindowsDynamicLinkerImpl.lookupSymbol(0x"+Long.toHexString(libraryHandle)+", "+symbolName+") -> "+_symbolName+", 0x"+Long.toHexString(addr));
+ System.err.println("DynamicLinkerImpl.lookupSymbol(0x"+Long.toHexString(libraryHandle)+", "+symbolName+") -> "+_symbolName+", 0x"+Long.toHexString(addr));
}
return addr;
}
@@ -67,6 +65,5 @@ public class WindowsDynamicLinkerImpl implements DynamicLinker {
public void closeLibrary(long libraryHandle) {
FreeLibrary(libraryHandle);
}
- // ---- End CustomJavaCode .cfg declarations
-} // end of class WindowsDynamicLinkerImpl
+}