mirror of
https://github.com/corda/corda.git
synced 2025-03-22 12:05:59 +00:00
Merge branch 'master' of dice:git/vm
This commit is contained in:
commit
12fe480f1c
2
makefile
2
makefile
@ -82,7 +82,7 @@ endif
|
||||
ifeq ($(platform),darwin)
|
||||
build-cflags = $(common-cflags) -fPIC -fvisibility=hidden \
|
||||
-I$(JAVA_HOME)/include/linux -I$(src)
|
||||
lflags = $(common-lflags) -ldl
|
||||
lflags = $(common-lflags) -ldl -framework CoreFoundation
|
||||
strip-all = -S -x
|
||||
binaryToMacho = $(native-build)/binaryToMacho
|
||||
endif
|
||||
|
@ -1,3 +1,7 @@
|
||||
#ifdef __APPLE__
|
||||
#include "CoreFoundation/CoreFoundation.h"
|
||||
#undef assert
|
||||
#endif
|
||||
#include "sys/mman.h"
|
||||
#include "sys/types.h"
|
||||
#include "sys/stat.h"
|
||||
@ -116,6 +120,28 @@ allocate(System* s, unsigned size)
|
||||
return p;
|
||||
}
|
||||
|
||||
void
|
||||
pathOfExecutable(System* s, const char** retBuf, unsigned* size)
|
||||
{
|
||||
#ifdef __APPLE__
|
||||
CFBundleRef bundle = CFBundleGetMainBundle();
|
||||
CFURLRef url = CFBundleCopyExecutableURL(bundle);
|
||||
CFStringRef path = CFURLCopyPath(url);
|
||||
CFIndex pathSize = CFStringGetMaximumSizeOfFileSystemRepresentation(path);
|
||||
char* buffer = reinterpret_cast<char*>(allocate(s, pathSize));
|
||||
if (CFStringGetFileSystemRepresentation(path, buffer, pathSize)) {
|
||||
*size = pathSize;
|
||||
*retBuf = buffer;
|
||||
} else {
|
||||
abort();
|
||||
}
|
||||
#else
|
||||
if (s)
|
||||
*size = 0;
|
||||
*retBuf = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
const bool Verbose = false;
|
||||
|
||||
const unsigned Waiting = 1 << 0;
|
||||
@ -646,6 +672,7 @@ class MySystem: public System {
|
||||
bool mapName)
|
||||
{
|
||||
void* p;
|
||||
bool alreadyAllocated = false;
|
||||
unsigned nameLength = (name ? strlen(name) : 0);
|
||||
if (mapName) {
|
||||
unsigned size = nameLength + 3 + sizeof(SO_SUFFIX);
|
||||
@ -653,6 +680,10 @@ class MySystem: public System {
|
||||
snprintf(buffer, size, "lib%s" SO_SUFFIX, name);
|
||||
p = dlopen(buffer, RTLD_LAZY);
|
||||
} else {
|
||||
if (!name) {
|
||||
pathOfExecutable(this, &name, &nameLength);
|
||||
alreadyAllocated = true;
|
||||
}
|
||||
p = dlopen(name, RTLD_LAZY);
|
||||
}
|
||||
|
||||
@ -665,6 +696,9 @@ class MySystem: public System {
|
||||
if (name) {
|
||||
n = static_cast<char*>(allocate(this, nameLength + 1));
|
||||
memcpy(n, name, nameLength + 1);
|
||||
if (alreadyAllocated) {
|
||||
free(name, nameLength, false);
|
||||
}
|
||||
} else {
|
||||
n = 0;
|
||||
}
|
||||
|
@ -170,7 +170,7 @@ resolveNativeMethod2(Thread* t, object method)
|
||||
snprintf(decorated + decoratedSize - 1, 5, "@%d",
|
||||
footprint * BytesPerWord);
|
||||
|
||||
p = resolveNativeMethod(t, undecorated, decorated);
|
||||
p = ::resolveNativeMethod(t, undecorated, decorated);
|
||||
if (p) {
|
||||
return p;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user