[kaffe] CVS kaffe (inaba): Fix build fail for '--with-threads=unix-jthreads'.
Kaffe CVS
cvs-commits at kaffe.org
Mon May 9 17:13:12 PDT 2005
PatchSet 6455
Date: 2005/05/10 00:08:14
Author: inaba
Branch: HEAD
Tag: (none)
Log:
Fix build fail for '--with-threads=unix-jthreads'.
Members:
ChangeLog:1.3982->1.3983
kaffe/kaffevm/systems/unix-jthreads/jthread.h:INITIAL->1.69
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.3982 kaffe/ChangeLog:1.3983
--- kaffe/ChangeLog:1.3982 Mon May 9 23:46:05 2005
+++ kaffe/ChangeLog Tue May 10 00:08:14 2005
@@ -1,5 +1,10 @@
2005-05-10 Kiyo Inaba <inaba at src.ricoh.co.jp>
+ * kaffe/kaffevm/systems/unix-jthreads:
+ Fix build fail for '--with-threads=unix-jthreads'.
+
+2005-05-10 Kiyo Inaba <inaba at src.ricoh.co.jp>
+
* config/m68k/jit-m68k.def:
Fix bug for optimization.
===================================================================
Checking out kaffe/kaffe/kaffevm/systems/unix-jthreads/jthread.h
RCS: /home/cvs/kaffe/kaffe/kaffe/kaffevm/systems/unix-jthreads/jthread.h,v
VERS: 1.69
***************
--- /dev/null Sun Aug 4 19:57:58 2002
+++ kaffe/kaffe/kaffevm/systems/unix-jthreads/jthread.h Tue May 10 00:13:12 2005
@@ -0,0 +1,387 @@
+/*
+ * jthread.h
+ *
+ * Thread support using internal system.
+ *
+ * Copyright (c) 1996, 1997, 1998
+ * Transvirtual Technologies, Inc. All rights reserved.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file.
+ *
+ * Written by Godmar Back <gback at cs.utah.edu> and
+ * Tim Wilkinson <tim at transvirtual.com>
+ */
+
+#ifndef __jthread_h
+#define __jthread_h
+
+/*
+ * The file is independent of Kaffe, but if compiled as part of the Kaffe
+ * build process, it will use Kaffe's constants and config options.
+ * This should make it machine-independent or at least aid in porting it.
+ *
+ * We use the preprocessor constant "HAVE_CONFIG_H" to determine whether that is
+ * the case or not.
+ */
+#if defined(HAVE_CONFIG_H)
+
+/*======== begin of definitions that apply to Kaffe ========*/
+
+#include "debug.h"
+#include "config.h"
+#include "config-setjmp.h"
+#include "config-std.h"
+#include "config-mem.h"
+#include "config-io.h"
+#include "config-signal.h"
+#include "gtypes.h" /* for jlong */
+#include "lerrno.h"
+#include "support.h" /* XXX: for currentTime */
+#include "md.h"
+#include "threadData.h"
+
+#include <sys/resource.h>
+
+#if defined (HAVE_SYS_POLL_H) || defined(HAVE_POLL_H)
+#define USE_POLL 1
+#endif
+
+#if defined(__WIN32__)
+#define SIG_T void(*)()
+#else
+#define SIG_T void*
+#endif
+
+/*======== end of definitions that apply to Kaffe ========*/
+
+#else /* !PACKAGE_VERSION */
+
+/*
+ * all definitions for compilation under plain UNIX are in this file
+ */
+#include "config-jthreads.h"
+
+/*======== end of definitions that apply to plain UNIX only ========*/
+
+#endif /* !PACKAGE_VERSION */
+
+#include "jqueue.h"
+#include "lock-impl.h"
+
+/* thread status */
+#define THREAD_SUSPENDED 0
+#define THREAD_RUNNING 1
+#define THREAD_DEAD 2
+
+/* thread flags */
+#define THREAD_FLAGS_GENERAL 0
+#define THREAD_FLAGS_NOSTACKALLOC 1 /* this flag is not used anymore */
+#define THREAD_FLAGS_KILLED 2
+#define THREAD_FLAGS_ALARM 4
+#define THREAD_FLAGS_EXITING 8
+#define THREAD_FLAGS_DONTSTOP 16
+#define THREAD_FLAGS_DYING 32
+#define THREAD_FLAGS_BLOCKEDEXTERNAL 64
+#define THREAD_FLAGS_INTERRUPTED 128
+#define THREAD_FLAGS_WAIT_MUTEX 256
+#define THREAD_FLAGS_WAIT_CONDVAR 512
+
+/*
+ * This is our internal structure representing the "native" threads.
+ * This used to be called "ctx".
+ */
+typedef struct _jthread {
+ threadData localData;
+ unsigned char status;
+ unsigned char priority;
+ void* restorePoint;
+ void* stackBase;
+ void* stackEnd;
+ void* suspender;
+ unsigned int suspendCount;
+ jlong time;
+ jlong startUsed;
+ jlong totalUsed;
+ KaffeNodeQueue* blockqueue;
+ unsigned long flags;
+ void (*func)(void *);
+ int daemon;
+ int stopCounter;
+
+ JTHREAD_JMPBUF env;
+#if defined(SAVED_FP_SIZE)
+ char fpstate[SAVED_FP_SIZE];
+#endif
+ /*
+ * note that this causes gdb under Solaris to crash when trying to
+ * print a struct jthread
+ */
+ /* for alignment (Gcc extension) */
+ double align[0];
+} jthread, *jthread_t;
+
+extern jthread_t currentJThread;
+
+/****************************************************************************
+ *
+ * The following functions form the interface provided by the
+ * revised internal threading system.
+ */
+
+/*
+ * initialize the threading system
+ */
+struct _Collector;
+void
+jthread_init(
+ int preemptive, /* preemptive scheduling */
+ int maxpr, /* maximum priority */
+ int minpr, /* minimum priority */
+ struct _Collector *collector,
+ void (*_destructor1)(void*), /* called when a thread exits */
+ void (*_onstop)(void), /* called when a thread is stopped */
+ void (*_ondeadlock)(void)); /* called when we detect deadlock */
+
+/*
+ * Create the first thread - actually bind the first thread to the java
+ * context.
+ */
+jthread_t
+jthread_createfirst(size_t mainThreadStackSize,
+ unsigned int prio, void* jlThread);
+
+/*
+ * create a thread with a given priority
+ */
+jthread_t
+jthread_create(unsigned int pri, /* initial priority */
+ void (*func)(void *), /* start function */
+ int isDaemon, /* is this thread a daemon? */
+ void *jlThread, /* cookie for this thread */
+ size_t threadStackSize); /* stack size to be allocated */
+
+struct _exceptionFrame;
+typedef void (*exchandler_t)(struct _exceptionFrame*);
+
+/*
+ * Register handlers for null pointer accesses and floating point exceptions
+ */
+void
+jthread_initexceptions(exchandler_t _nullHandler,
+ exchandler_t _floatingHandler,
+ exchandler_t _stackOverflowHandler);
+
+/*
+ * set a function to be run when last non-daemon dies
+ * this is used to run the finalizer on exit.
+ */
+void jthread_atexit(void (*f)(void));
+
+/**
+ * walk all live threads, and invoke `func', passing in their cookie
+ * this is used with `func' set to walkMemory
+ */
+void jthread_walkLiveThreads(void (*func)(jthread_t, void*), void*);
+
+/**
+ * walk all live threads, and invoke `func', passing in their cookie
+ * this is used with `func' set to walkMemory.
+ * This function is reentrant.
+ */
+void jthread_walkLiveThreads_r(void (*func)(jthread_t, void*), void*);
+
+/*
+ * destroy this jthread structure
+ */
+void jthread_destroy(jthread_t jtid);
+
+/*
+ * set the priority of a thread
+ */
+void jthread_setpriority(jthread_t jtid, int prio);
+
+/*
+ * yield to another thread
+ */
+void jthread_yield(void);
+
+/*
+ * sleep for time milliseconds
+ */
+void jthread_sleep(jlong millis);
+
+/*
+ * return the current thread
+ */
+jthread_t jthread_current(void);
+
+/*
+ * count the number of stack frames - unimplemented
+ */
+int jthread_frames(jthread_t thrd);
+
+/*
+ * return whether this thread is alive or not
+ */
+int jthread_alive(jthread_t jtid);
+
+/*
+ * stop this thread
+ */
+void jthread_stop(jthread_t jtid);
+
+/*
+ * interrupt this thread
+ */
+void jthread_interrupt(jthread_t jtid);
+
+/*
+ * have the current thread exit
+ */
+void jthread_exit(void);
+
+/*
+ * determine whether a location is on the stack of the current thread
+ */
+int jthread_on_current_stack(void *bp);
+
+/*
+ * Check for room on stack.
+ */
+int jthread_stackcheck(int left);
+
+/*
+ * Get the current stack limit.
+ */
+void jthread_relaxstack(int yes);
+
+void* jthread_stacklimit(void);
+
+/*
+ * determine the "interesting" stack range a conservative gc must walk
+ */
+int jthread_extract_stack(jthread_t jtid, void **from, unsigned *len);
+
+/*
+ * Disallow cancellation for current thread
+ */
+void jthread_disable_stop(void);
+
+/*
+ * Reallow cancellation for current thread
+ * If a cancellation is pending, the stop method will be called
+ */
+void jthread_enable_stop(void);
+
+/*
+ * functions to disable and restore interrupts
+ * These are *not* part of the public interface.
+ */
+#define INTS_DISABLED() intsDisabled()
+int intsDisabled(void);
+
+/*
+ * Prevent all other threads from running.
+ * In this uniprocessor implementation, this is simple.
+ */
+void jthread_suspendall(void);
+
+/*
+ * Reallow other threads.
+ * In this uniprocessor implementation, this is simple.
+ */
+void jthread_unsuspendall(void);
+
+/**
+ * Special GC mutex lock.
+ */
+void jthread_lockGC(void);
+
+/**
+ * Special GC mutex unlock.
+ */
+void jthread_unlockGC(void);
+
+/*
+ * Print info about a given jthread to stderr
+ */
+void jthread_dumpthreadinfo(jthread_t tid);
+
+/*
+ * return thread-specific data for a given jthread
+ */
+threadData* jthread_get_data(jthread_t tid);
+
+/*
+ * API related to I/O
+ */
+int jthreadedOpen(const char* path, int flags, int mode, int*);
+int jthreadedSocket(int af, int type, int proto, int*);
+int jthreadedConnect(int fd, struct sockaddr* addr, int len, int timeout);
+int jthreadedAccept(int fd, struct sockaddr* addr, socklen_t* len,
+ int timeout, int *);
+int jthreadedRead(int fd, void* buf, size_t len, ssize_t *);
+int jthreadedTimedRead(int fd, void* buf, size_t len, int timeout, ssize_t *);
+int jthreadedTimedWrite(int fd, const void* buf, size_t len, int timeout, ssize_t *);
+int jthreadedWrite(int fd, const void* buf, size_t len, ssize_t *);
+int jthreadedRecvfrom(int fd, void* buf, size_t len, int flags,
+ struct sockaddr* from, socklen_t* fromlen, int timeout, ssize_t *);
+int jthreadedWaitpid(int wpid, int* status, int options, int *);
+int jthreadedForkExec(char **argv, char **arge,
+ int ioes[/* 4 */], int *, const char *);
+int
+jthreadedSelect(int a, fd_set* b, fd_set* c, fd_set* d,
+ struct timeval* e, int* out);
+int jthreadedPipeCreate(int *read_fd, int *write_fd);
+
+void jthread_set_blocking(int fd, int blocking);
+
+int jthread_is_blocking(int fd);
+
+/* restore an fd, i.e., put it in blocking state without async I/O */
+#define JTHREAD_RESTORE_FD
+void jthreadRestoreFD(int fd);
+
+/* Spinlocks: simple since we're uniprocessor */
+void jthread_spinon(void *arg);
+
+void jthread_spinoff(void *arg);
+
+void jthread_suspend(jthread_t jt, void *suspender);
+void jthread_resume(jthread_t jt, void *suspender);
+
+jthread_t jthread_from_data(threadData *td, void *suspender);
+
+jlong jthread_get_usage(jthread_t jt);
+
+int jthread_get_status(jthread_t jt);
+
+int jthread_is_interrupted(jthread_t jt);
+
+int jthread_interrupted(jthread_t jt);
+
+int jthread_on_mutex(jthread_t jt);
+
+int jthread_on_condvar(jthread_t jt);
+
+void jthread_clear_run(jthread_t jt);
+
+int jthread_has_run(jthread_t jt);
+
+/* let main thread loop until all threads finish, for tests */
+void jthread_exit_when_done(void) NONRETURNING;
+
+static inline
+bool jthread_attach_current_thread(UNUSED bool isDaemon)
+{
+ return false;
+}
+
+static inline
+bool jthread_detach_current_thread (void)
+{
+ return false;
+}
+
+#endif
More information about the kaffe
mailing list