summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/gcj/runtime/SharedLibLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/gcj/runtime/SharedLibLoader.java')
-rw-r--r--libjava/gnu/gcj/runtime/SharedLibLoader.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/libjava/gnu/gcj/runtime/SharedLibLoader.java b/libjava/gnu/gcj/runtime/SharedLibLoader.java
new file mode 100644
index 00000000000..ac2f72d4b64
--- /dev/null
+++ b/libjava/gnu/gcj/runtime/SharedLibLoader.java
@@ -0,0 +1,75 @@
+/* Copyright (C) 2001 Free Software Foundation
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+package gnu.gcj.runtime;
+import java.util.Hashtable;
+
+/**
+ * A ClassLoader backed by a gcj-compiled shared library.
+ * @author Per Bothner <per@bothner.com>, Brainfood Inc.
+ */
+
+public class SharedLibLoader extends ClassLoader
+{
+ public native void finalize ();
+
+ /** Called during dlopen's processing of the init section. */
+ void registerClass(String name, Class cls)
+ {
+ classMap.put(name, cls);
+ }
+
+ /** Load a shared library, and associate a ClassLoader with it.
+ * @param libname named of shared library (passed to dlopen)
+ * @param parent the parent ClassLoader
+ * @parem flags passed to dlopen
+ */
+ public SharedLibLoader(String libname, ClassLoader parent, int flags)
+ {
+ super(parent);
+ init(libname, flags);
+ }
+
+
+ /** Load a shared library, and asociate a ClassLoader with it.
+ * @param libname named of shared library (passed to dlopen)
+ */
+ public SharedLibLoader(String libname)
+ {
+ super(getSystemClassLoader());
+ init(libname, 0);
+ }
+
+ void init(String libname, int flags)
+ {
+ init(libname.getBytes(), flags);
+ }
+
+ native void init(byte[] libname, int flags);
+
+ public Class loadClass(String name)
+ throws ClassNotFoundException
+ {
+ return super.loadClass(name);
+ }
+
+ public Class findClass(String name)
+ throws ClassNotFoundException
+ {
+ Object cls = classMap.get(name);
+ if (cls == null)
+ throw new ClassNotFoundException(name);
+ return (Class) cls;
+ }
+
+ /** The handle returned by dlopen. */
+ gnu.gcj.RawData handler;
+
+ /** Map classnames to Classes. */
+ Hashtable classMap = new Hashtable(20);
+}
OpenPOWER on IntegriCloud