summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/gcj/runtime/FirstThread.java
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2001-08-26 11:30:09 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2001-08-26 11:30:09 +0000
commit2ab8f986fa5d0b5da175b8767f4017d5b9135618 (patch)
tree70a829a7aec07076169c6eefbc98e07abb6aa926 /libjava/gnu/gcj/runtime/FirstThread.java
parent2f3ed0b75a408d2506f6a71df1a52162a05621e3 (diff)
downloadppe42-gcc-2ab8f986fa5d0b5da175b8767f4017d5b9135618.tar.gz
ppe42-gcc-2ab8f986fa5d0b5da175b8767f4017d5b9135618.zip
* Makefile.am: New friends for java/lang/Thread.h.
* prims.cc (runFirst): Removed. (JvRunMain): Merged into _Jv_RunMain. Now just calls that. (_Jv_RunMain): Now takes either a klass or class name parameter. Create a gnu.gcj.runtime.FirstThread and attach the native thread to that, then run it using _Jv_ThreadRun. Remove special handling of jar files, instead pass is_jar parameter through to FirstThread. * gcj/javaprims.h: Add prototypes for _Jv_ThreadRun and new variant of _Jv_AttachCurrentThread. * gnu/gcj/runtime/FirstThread.java (FirstThread): Now extends Thread. (run): New method. Take care of looking up main class manifest attribute and calling forName if neccessary. Then call call_main. (call_main): New native method. * gnu/gcj/runtime/natFirstThread.cc (call_main): New function, code relocated from prims.cc. Look up and call main method. * java/lang/Thread.java (run_): Removed. * java/lang/natThread.cc (run_): Renamed to... (_Jv_ThreadRun): this. JVMPI notification code moved to ... (_Jv_NotifyThreadStart): here. New function. (countStackFrames, destroy, resume, suspend, stop): Throw UnsupportedOperationExceptions rather than JvFail'ing. (_Jv_AttachCurrentThread): New variant takes a Thread argument. Existing version wraps new variant. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45182 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/gcj/runtime/FirstThread.java')
-rw-r--r--libjava/gnu/gcj/runtime/FirstThread.java51
1 files changed, 45 insertions, 6 deletions
diff --git a/libjava/gnu/gcj/runtime/FirstThread.java b/libjava/gnu/gcj/runtime/FirstThread.java
index fd59261c8c8..c52ab42c0ef 100644
--- a/libjava/gnu/gcj/runtime/FirstThread.java
+++ b/libjava/gnu/gcj/runtime/FirstThread.java
@@ -17,11 +17,44 @@ import java.util.jar.*;
* @date August 24, 1998
*/
-// This is entirely internal to our implementation.
-
-final class FirstThread
+final class FirstThread extends Thread
{
- public static String getMain (String name)
+ public FirstThread (Class k, String[] args)
+ {
+ super (null, null, "main");
+ klass = k;
+ this.args = args;
+ }
+
+ public FirstThread (String class_name, String[] args, boolean is_jar)
+ {
+ super (null, null, "main");
+ klass_name = class_name;
+ this.args = args;
+ this.is_jar = is_jar;
+ }
+
+ public void run()
+ {
+ if (is_jar)
+ klass_name = getMain(klass_name);
+
+ if (klass == null)
+ {
+ try
+ {
+ klass = Class.forName(klass_name);
+ }
+ catch (ClassNotFoundException x)
+ {
+ throw new NoClassDefFoundError(klass_name);
+ }
+ }
+
+ call_main();
+ }
+
+ private String getMain (String name)
{
String mainName = null;
try {
@@ -37,15 +70,21 @@ final class FirstThread
}
if (mainName == null)
- System.err.println ("Failed to load Main-Class manifest attribute from\n"
- + name);
+ {
+ System.err.println ("Failed to load Main-Class manifest attribute from\n"
+ + name);
+ System.exit(1);
+ }
return mainName;
}
+ private native void call_main ();
+
// Private data.
private Class klass;
private String klass_name;
private Object args;
+ private boolean is_jar;
// If the user links statically then we need to ensure that these
// classes are linked in. Otherwise bootstrapping fails. These
OpenPOWER on IntegriCloud