Skip to content

Commit

Permalink
Fix DynamicLinker Impl: Add Bionic specialization using Bionic's non …
Browse files Browse the repository at this point in the history
…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
  • Loading branch information
sgothel committed Jun 16, 2013
1 parent d01cb42 commit 5d211c6
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 154 deletions.
6 changes: 2 additions & 4 deletions make/build.xml
Expand Up @@ -100,7 +100,6 @@
<mkdir dir="${src.generated.java}" />
<mkdir dir="${src.generated.c}" />
<mkdir dir="${src.generated.c}/Unix" />
<mkdir dir="${src.generated.c}/MacOSX" />
<mkdir dir="${src.generated.c}/Windows" />
<mkdir dir="${classes}" />

Expand Down Expand Up @@ -440,7 +439,7 @@
<echo message="MacOSX" />
<property name="compiler.cfg.id" value="compiler.cfg.macosx" />
<property name="linker.cfg.id" value="linker.cfg.macosx" />
<property name="c.src.dir.os" value="macosx" />
<property name="c.src.dir.os" value="unix" />
</target>

<target name="declare.freebsd.amd64" if="isFreeBSDAMD64">
Expand Down Expand Up @@ -514,7 +513,6 @@
<javah destdir="${src.generated.c}" classpath="${classes}" class="jogamp.common.jvm.JVMUtil" />
<javah destdir="${src.generated.c}" classpath="${classes}" class="com.jogamp.common.nio.PointerBuffer" />
<javah destdir="${src.generated.c}/Unix" classpath="${classes}" class="jogamp.common.os.UnixDynamicLinkerImpl" />
<javah destdir="${src.generated.c}/MacOSX" classpath="${classes}" class="jogamp.common.os.MacOSXDynamicLinkerImpl" />
<javah destdir="${src.generated.c}/Windows" classpath="${classes}" class="jogamp.common.os.WindowsDynamicLinkerImpl"/>

<echo message="Output lib name = ${output.lib.name} -> ${output.lib.name.os}" />
Expand Down Expand Up @@ -555,7 +553,7 @@

<includepath path="${src.generated.c}" />
<includepath path="${src.generated.c}/Unix" if="isUnix"/>
<includepath path="${src.generated.c}/MacOSX" if="isOSX"/>
<includepath path="${src.generated.c}/Unix" if="isOSX"/>
<includepath path="${src.generated.c}/Windows" if="isWindows"/>
</compiler>

Expand Down
8 changes: 7 additions & 1 deletion src/java/com/jogamp/common/os/NativeLibrary.java
Expand Up @@ -43,6 +43,7 @@
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;
Expand Down Expand Up @@ -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:
Expand Down
54 changes: 54 additions & 0 deletions 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;
}

}
51 changes: 13 additions & 38 deletions 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 {
Expand All @@ -53,25 +41,12 @@ public long openLibraryGlobal(String pathname, boolean debug) throws SecurityExc
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
}
29 changes: 14 additions & 15 deletions 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;
Expand All @@ -8,23 +6,25 @@

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
Expand Down Expand Up @@ -55,22 +55,21 @@ public long openLibraryGlobal(String pathname, boolean debug) throws SecurityExc
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;
}

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;
}

public void closeLibrary(long libraryHandle) {
dlclose(libraryHandle);
}
// ---- End CustomJavaCode .cfg declarations

} // end of class UnixDynamicLinkerImpl
}
7 changes: 2 additions & 5 deletions 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;
Expand Down Expand Up @@ -51,7 +49,7 @@ public long lookupSymbol(long libraryHandle, String symbolName) {
}
}
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;
}
Expand All @@ -67,6 +65,5 @@ public long lookupSymbolGlobal(String symbolName) {
public void closeLibrary(long libraryHandle) {
FreeLibrary(libraryHandle);
}
// ---- End CustomJavaCode .cfg declarations

} // end of class WindowsDynamicLinkerImpl
}
91 changes: 0 additions & 91 deletions src/native/macosx/MacOSXDynamicLinkerImpl_JNI.c

This file was deleted.

0 comments on commit 5d211c6

Please sign in to comment.