diff -r 1f5dc732e4d6 -r 79a66d3d5e77 jdk/src/solaris/hpi/native_threads/include/threads_md.h --- a/jdk/src/solaris/hpi/native_threads/include/threads_md.h Mon Jan 24 13:21:20 2011 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,218 +0,0 @@ -/* - * Copyright (c) 1994, 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * Implementation of the Java threads HPI on top of Solaris threads - */ - -#ifndef _JAVASOFT_SOLARIS_THREADS_MD_H_ -#define _JAVASOFT_SOLARIS_THREADS_MD_H_ - -#include "porting.h" - -#ifdef sparc -#define N_TRACED_REGS 12 -#elif i386 -#define N_TRACED_REGS 7 -#elif amd64 -#define N_TRACED_REGS 15 -#elif ppc -#define N_TRACED_REGS 1 -#elif m68k -#define N_TRACED_REGS 8 -#elif ia64 -/* [RGV] I don't think this is referenced in the linux code */ -#define N_TRACED_REGS 32 -#else -// TODO: delete this file - threads_md.[ch] is obsolete. struct sys_thread is -// never used. Define a value just to keep compiler happy. -#define N_TRACED_REGS 32 -#endif - -/* Turn on if we want all java threads to be bound tolwps */ -/* #define BOUND_THREADS */ -/* Use /proc soln to stop lwps in place of siglwp soln */ -#define PROCLWP - -/* - * Thread C stack overflow check -#define sysThreadCheckStack(redzone, var) \ - ((var = sysThreadSelf()) && \ - (unsigned int)((char *)&(var) - (char *)(var)->stack_base)\ - < (redzone)) -*/ -/* - * Forward definition of machine dependent monitor struct - */ -struct sys_mon; - -/* - * The following thread states are really hints since there is no - * interface to get at a native thread's true state. The states - * are maintained by updating the states where ever possible - * such as a transition to CONDVAR_WAIT occurs in the definition of - * the routine condvarWait(). - * This state maintenance should disappear once we have a threads interface - * to obtain a thread's state. - */ -typedef enum { - FIRST_THREAD_STATE, - RUNNABLE = FIRST_THREAD_STATE, - SUSPENDED, - CONDVAR_WAIT, - NUM_THREAD_STATES -} thread_state_t; - -#if defined( USE_PTHREADS) && !defined(__linux__) -/* - * Mechanism for starting a new thread suspended. - */ -typedef enum { - NEW_THREAD_MUST_REQUEST_SUSPEND, - NEW_THREAD_REQUESTED_SUSPEND, - NEW_THREAD_SUSPENDED -} new_thr_state_t; - -typedef struct { - pthread_mutex_t m; - pthread_cond_t c; - new_thr_state_t state; -} new_thr_cond_t; -#endif /* USE_PTHREADS */ - -/* - * Machine dependent info in a sys_thread_t - */ -struct sys_thread { - /* - * Fields below this point may change on a per-architecture basis - * depending on how much work is needed to present the sysThread - * model on any given thread implementation. - */ - mutex_t mutex; /* per thread lock to protect thread fields */ - thread_t sys_thread; /* The native thread id */ - struct sys_thread *next; /* Pointer to next thread in the */ - /* queue of all threads. */ - thread_state_t state; - - /* Thread status flags */ - unsigned int primordial_thread:1; - unsigned int system_thread:1; - unsigned int cpending_suspend:1; -#ifdef __linux__ - unsigned int pending_interrupt:1; -#endif - unsigned int interrupted:1; - unsigned int onproc:1; /* set if thread is on an LWP */ - unsigned int :0; - -#ifdef BOUND_THREADS - lwpid_t lwpid; -#endif - -#ifdef __linux__ - void *sp; -#else - unsigned long sp; /* sp at time of last (native) thread switch */ -#endif - void * stack_bottom; /* The real bottom (high address) of stack */ - void * stack_top; /* should be equal to stack_bottom - stack_size */ - long stack_size; /* The stack size for a native thread */ - - long regs[N_TRACED_REGS]; /* stores registers as GC roots. */ - - /* Monitor specific. - - Every monitor keeps track of the number of times it is - entered. When that count goes to 0, the monitor can be - freed up. But each thread has its own entry count on a - particular monitor, because multiple threads can be using a - single monitor (as one does a wait, another enters, etc.). - Each thread can only be waiting in exactly one monitor. - That monitor waited on is saved in mon_wait, and the value - of the monitor's entry_count when the wait was performed is - saved in monitor_entry_count. That is restored into the - monitor when this waiting thread is notified. */ - - long monitor_entry_count; /* For recursive monitor entry */ - struct sys_mon *mon_wait; /* CONDVAR_WAIT'ing */ - - struct sys_mon *mon_enter; /* blocked waiting to enter */ - - void (*start_proc)(void *); - void *start_parm; - int lwp_id; - long last_sum; - - struct sys_thread *prevBlocked; /* Used by nonblocking close semantics */ - struct sys_thread *nextBlocked; -#ifdef USE_PTHREADS - int suspend_count; -#ifdef __linux__ - sem_t sem_suspended; - sem_t sem_ready_to_suspend; - sem_t sem_selfsuspend; - int selfsuspended; -#endif -#ifdef USE_MUTEX_HANDSHAKE - new_thr_cond_t ntcond; -#else - sem_t sem; -#endif /* USE_MUTEX_HANDSHAKE */ -#endif /* USE_PTHREADS */ -}; - -#define SYS_THREAD_NULL ((sys_thread_t *) 0) - -/* - * following macro copied from sys/signal.h since inside #ifdef _KERNEL there. - */ -#ifndef sigmask -#define sigmask(n) ((unsigned int)1 << (((n) - 1) & (32 - 1))) -#endif - -#ifdef __linux__ -extern thread_key_t intrJmpbufkey; -#else -extern thread_key_t sigusr1Jmpbufkey; -extern sigset_t sigusr1Mask; -#endif - -extern sys_mon_t *_sys_queue_lock; - -#define SYS_QUEUE_LOCK(self) sysMonitorEnter(self, _sys_queue_lock) -#define SYS_QUEUE_LOCKED(self) sysMonitorEntered(self, _sys_queue_lock) -#define SYS_QUEUE_UNLOCK(self) sysMonitorExit(self, _sys_queue_lock) -#define SYS_QUEUE_NOTIFYALL(self) sysMonitorNotifyAll(self, _sys_queue_lock) -#define SYS_QUEUE_WAIT(self) sysMonitorWait(self, _sys_queue_lock, \ - SYS_TIMEOUT_INFINITY) - -extern void setFPMode(void); - -extern sys_thread_t *ThreadQueue; - -extern int ActiveThreadCount; /* All threads */ - -#endif /* !_JAVASOFT_SOLARIS_THREADS_MD_H_ */