mirror of
https://github.com/corda/corda.git
synced 2025-06-16 22:28:15 +00:00
various fixes to get Eclipse 3.6 working
* add libnet.so and libnio.so to built-in libraries for openjdk-src build * implement sun.misc.Unsafe.park/unpark * implement JVM_SetClassSigners/JVM_GetClassSigners * etc.
This commit is contained in:
@ -64,6 +64,7 @@ typedef int socklen_t;
|
||||
# include <fcntl.h>
|
||||
# include <errno.h>
|
||||
# include <sched.h>
|
||||
# include <dlfcn.h>
|
||||
|
||||
# define OPEN open
|
||||
# define CLOSE close
|
||||
@ -244,6 +245,22 @@ class MyClasspath : public Classpath {
|
||||
sb.append(SO_SUFFIX);
|
||||
sb.append('\0');
|
||||
|
||||
this->netLibrary = sb.pointer;
|
||||
sb.append(this->libraryPath);
|
||||
sb.append("/");
|
||||
sb.append(SO_PREFIX);
|
||||
sb.append("net");
|
||||
sb.append(SO_SUFFIX);
|
||||
sb.append('\0');
|
||||
|
||||
this->nioLibrary = sb.pointer;
|
||||
sb.append(this->libraryPath);
|
||||
sb.append("/");
|
||||
sb.append(SO_PREFIX);
|
||||
sb.append("nio");
|
||||
sb.append(SO_SUFFIX);
|
||||
sb.append('\0');
|
||||
|
||||
this->tzMappings = sb.pointer;
|
||||
sb.append(javaHome);
|
||||
sb.append("/lib/tzmappings");
|
||||
@ -414,6 +431,8 @@ class MyClasspath : public Classpath {
|
||||
const char* classpath;
|
||||
const char* libraryPath;
|
||||
const char* zipLibrary;
|
||||
const char* netLibrary;
|
||||
const char* nioLibrary;
|
||||
const char* tzMappings;
|
||||
const char* embedPrefix;
|
||||
unsigned tzMappingsLength;
|
||||
@ -561,7 +580,10 @@ getFileAttributes
|
||||
stringChars(t, path, RUNTIME_ARRAY_BODY(p));
|
||||
replace('\\', '/', RUNTIME_ARRAY_BODY(p));
|
||||
|
||||
if (pathEqual(cp->zipLibrary, RUNTIME_ARRAY_BODY(p))) {
|
||||
if (pathEqual(cp->zipLibrary, RUNTIME_ARRAY_BODY(p))
|
||||
or pathEqual(cp->netLibrary, RUNTIME_ARRAY_BODY(p))
|
||||
or pathEqual(cp->nioLibrary, RUNTIME_ARRAY_BODY(p)))
|
||||
{
|
||||
return Exists | Regular;
|
||||
} else {
|
||||
EmbeddedFile ef(cp, RUNTIME_ARRAY_BODY(p), stringLength(t, path));
|
||||
@ -1665,6 +1687,41 @@ Avian_sun_misc_Unsafe_ensureClassInitialized
|
||||
initClass(t, jclassVmClass(t, reinterpret_cast<object>(arguments[1])));
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Avian_sun_misc_Unsafe_unpark
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
object thread = reinterpret_cast<object>(arguments[1]);
|
||||
|
||||
monitorAcquire(t, local::interruptLock(t, thread));
|
||||
threadUnparked(t, thread) = true;
|
||||
monitorNotify(t, local::interruptLock(t, thread));
|
||||
monitorRelease(t, local::interruptLock(t, thread));
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Avian_sun_misc_Unsafe_park
|
||||
(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
bool absolute = arguments[1];
|
||||
int64_t time; memcpy(&time, arguments + 2, 8);
|
||||
|
||||
if (absolute) {
|
||||
time -= t->m->system->now();
|
||||
}
|
||||
|
||||
if (time <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
monitorAcquire(t, local::interruptLock(t, t->javaThread));
|
||||
while (not (threadUnparked(t, t->javaThread)
|
||||
or monitorWait(t, local::interruptLock(t, t->javaThread), time)))
|
||||
{ }
|
||||
threadUnparked(t, t->javaThread) = false;
|
||||
monitorRelease(t, local::interruptLock(t, t->javaThread));
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jint JNICALL
|
||||
EXPORT(JVM_GetInterfaceVersion)()
|
||||
{
|
||||
@ -1879,7 +1936,13 @@ EXPORT(JVM_MaxMemory)()
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jint JNICALL
|
||||
EXPORT(JVM_ActiveProcessorCount)(void) { abort(); }
|
||||
EXPORT(JVM_ActiveProcessorCount)()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jint JNICALL
|
||||
net_JNI_OnLoad(JavaVM*, void*);
|
||||
|
||||
extern "C" JNIEXPORT void* JNICALL
|
||||
EXPORT(JVM_LoadLibrary)(const char* path)
|
||||
@ -1892,9 +1955,18 @@ EXPORT(JVM_LoadLibrary)(const char* path)
|
||||
#ifdef AVIAN_OPENJDK_SRC
|
||||
if (local::pathEqual
|
||||
(static_cast<local::MyClasspath*>(t->m->classpath)->zipLibrary,
|
||||
RUNTIME_ARRAY_BODY(p))
|
||||
or local::pathEqual
|
||||
(static_cast<local::MyClasspath*>(t->m->classpath)->nioLibrary,
|
||||
RUNTIME_ARRAY_BODY(p)))
|
||||
{
|
||||
return t->m->libraries;
|
||||
} else if (local::pathEqual
|
||||
(static_cast<local::MyClasspath*>(t->m->classpath)->netLibrary,
|
||||
RUNTIME_ARRAY_BODY(p)))
|
||||
{
|
||||
net_JNI_OnLoad(t->m, 0);
|
||||
return t->m->libraries;
|
||||
}
|
||||
#endif // AVIAN_OPENJDK_SRC
|
||||
|
||||
@ -1915,6 +1987,10 @@ EXPORT(JVM_FindLibraryEntry)(void* library, const char* name)
|
||||
|
||||
ENTER(t, Thread::ActiveState);
|
||||
|
||||
if (library == 0) {
|
||||
library = t->m->libraries;
|
||||
}
|
||||
|
||||
return static_cast<System::Library*>(library)->resolve(name);
|
||||
}
|
||||
|
||||
@ -2411,10 +2487,25 @@ EXPORT(JVM_IsInterface)(Thread* t, jclass c)
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jobjectArray JNICALL
|
||||
EXPORT(JVM_GetClassSigners)(Thread*, jclass) { abort(); }
|
||||
EXPORT(JVM_GetClassSigners)(Thread* t, jclass c)
|
||||
{
|
||||
ENTER(t, Thread::ActiveState);
|
||||
|
||||
object runtimeData = getClassRuntimeDataIfExists(t, jclassVmClass(t, *c));
|
||||
|
||||
return runtimeData ? makeLocalReference
|
||||
(t, classRuntimeDataSigners(t, runtimeData)) : 0;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
EXPORT(JVM_SetClassSigners)(Thread*, jclass, jobjectArray) { abort(); }
|
||||
EXPORT(JVM_SetClassSigners)(Thread* t, jclass c, jobjectArray signers)
|
||||
{
|
||||
ENTER(t, Thread::ActiveState);
|
||||
|
||||
object runtimeData = getClassRuntimeData(t, jclassVmClass(t, *c));
|
||||
|
||||
set(t, runtimeData, ClassRuntimeDataSigners, *signers);
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jobject JNICALL
|
||||
EXPORT(JVM_GetProtectionDomain)(Thread* t, jclass)
|
||||
|
@ -2625,7 +2625,7 @@ throw_(MyThread* t, object o)
|
||||
(t, Machine::NullPointerExceptionType);
|
||||
}
|
||||
|
||||
// printTrace(t, t->exception);
|
||||
// printTrace(t, t->exception);
|
||||
|
||||
unwind(t);
|
||||
}
|
||||
@ -7178,7 +7178,7 @@ class SegFaultHandler: public System::SignalHandler {
|
||||
t->exception = root(t, Machine::NullPointerException);
|
||||
}
|
||||
|
||||
printTrace(t, t->exception);
|
||||
// printTrace(t, t->exception);
|
||||
|
||||
object continuation;
|
||||
findUnwindTarget(t, ip, base, stack, &continuation);
|
||||
|
@ -222,7 +222,7 @@ class DataRegion: public System::Region {
|
||||
}
|
||||
|
||||
virtual void dispose() {
|
||||
allocator->free(this, sizeof(*this));
|
||||
allocator->free(this, sizeof(*this) + length_);
|
||||
}
|
||||
|
||||
System* s;
|
||||
|
@ -1882,9 +1882,6 @@ resolveObjectArrayClass(Thread* t, object loader, object elementClass)
|
||||
void
|
||||
removeMonitor(Thread* t, object o)
|
||||
{
|
||||
expect(t, t->state == Thread::ExclusiveState
|
||||
or t->state == Thread::ExitState);
|
||||
|
||||
unsigned hash;
|
||||
if (DebugMonitors) {
|
||||
hash = objectHash(t, o);
|
||||
@ -1893,8 +1890,6 @@ removeMonitor(Thread* t, object o)
|
||||
object m = hashMapRemove
|
||||
(t, root(t, Machine::MonitorMap), o, objectHash, objectEqual);
|
||||
|
||||
expect(t, m);
|
||||
|
||||
if (DebugMonitors) {
|
||||
fprintf(stderr, "dispose monitor %p for object %x\n", m, hash);
|
||||
}
|
||||
|
@ -3061,6 +3061,17 @@ resolveMethod(Thread* t, object method, unsigned index)
|
||||
object
|
||||
vectorAppend(Thread*, object, object);
|
||||
|
||||
inline object
|
||||
getClassRuntimeDataIfExists(Thread* t, object c)
|
||||
{
|
||||
if (classRuntimeDataIndex(t, c)) {
|
||||
return vectorBody(t, root(t, Machine::ClassRuntimeDataTable),
|
||||
classRuntimeDataIndex(t, c) - 1);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
inline object
|
||||
getClassRuntimeData(Thread* t, object c)
|
||||
{
|
||||
@ -3070,7 +3081,7 @@ getClassRuntimeData(Thread* t, object c)
|
||||
ACQUIRE(t, t->m->classLock);
|
||||
|
||||
if (classRuntimeDataIndex(t, c) == 0) {
|
||||
object runtimeData = makeClassRuntimeData(t, 0, 0, 0);
|
||||
object runtimeData = makeClassRuntimeData(t, 0, 0, 0, 0);
|
||||
|
||||
setRoot(t, Machine::ClassRuntimeDataTable, vectorAppend
|
||||
(t, root(t, Machine::ClassRuntimeDataTable), runtimeData));
|
||||
|
@ -40,7 +40,8 @@
|
||||
(type classRuntimeData
|
||||
(object arrayClass)
|
||||
(object jclass)
|
||||
(object pool))
|
||||
(object pool)
|
||||
(object signers))
|
||||
|
||||
(type methodRuntimeData
|
||||
(object native))
|
||||
@ -187,6 +188,7 @@
|
||||
(require object sleepLock)
|
||||
(require object interruptLock)
|
||||
(require uint8_t interrupted)
|
||||
(require uint8_t unparked)
|
||||
(alias peer uint64_t eetop))
|
||||
|
||||
(type threadGroup java/lang/ThreadGroup)
|
||||
|
Reference in New Issue
Block a user