Skip to content

Commit

Permalink
Windows build fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Ian Rogers committed Mar 25, 2009
1 parent 178f694 commit b6c53d2
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 64 deletions.
61 changes: 32 additions & 29 deletions tools/bootloader/jvm.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ static void *getFieldAsAddress(void *objPtr, int fieldOffset)
// Get the JNI environment object from the Processor.
static JNIEnv * getJniEnvFromVmThread(void *vmThreadPtr)
{
if (vmThreadPtr == 0)
return 0; // oops

// Follow chain of pointers:
// RVMThread -> JNIEnvironment -> thread's native JNIEnv
void *jniEnvironment =
getFieldAsAddress(vmThreadPtr, RVMThread_jniEnv_offset);
// Convert JNIEnvironment to JNIEnv* expected by native code
// by creating the appropriate interior pointer.
void *jniEnv = ((char*)jniEnvironment + JNIEnvironment_JNIExternalFunctions_offset);

void *jniEnvironment;
void *jniEnv;
if (vmThreadPtr == 0)
return 0; // oops

// Follow chain of pointers:
// RVMThread -> JNIEnvironment -> thread's native JNIEnv
jniEnvironment = getFieldAsAddress(vmThreadPtr, RVMThread_jniEnv_offset);
// Convert JNIEnvironment to JNIEnv* expected by native code
// by creating the appropriate interior pointer.
jniEnv = ((char*)jniEnvironment + JNIEnvironment_JNIExternalFunctions_offset);
return (JNIEnv*) jniEnv;
}

Expand Down Expand Up @@ -99,6 +99,7 @@ static jint AttachCurrentThread(JavaVM UNUSED * vm, /* JNIEnv */ void ** penv, /
{
JavaVMAttachArgs *aargs = (JavaVMAttachArgs *) args;
jint version;
jint retval;
if (args == NULL) {
version = JNI_VERSION_1_1;
} else {
Expand All @@ -112,7 +113,7 @@ static jint AttachCurrentThread(JavaVM UNUSED * vm, /* JNIEnv */ void ** penv, /
return JNI_EVERSION;

/* If we're already attached, we're gold. */
register jint retval = GetEnv(vm, penv, version);
retval = GetEnv(vm, penv, version);
if (retval == JNI_OK)
return retval;
else if (retval == JNI_EDETACHED) {
Expand All @@ -135,33 +136,36 @@ static jint DetachCurrentThread(JavaVM UNUSED *vm)

jint GetEnv(JavaVM UNUSED *vm, void **penv, jint version)
{
if (version > JNI_VERSION_1_4)
return JNI_EVERSION;
void *vmThread;
JNIEnv *env;
if (version > JNI_VERSION_1_4)
return JNI_EVERSION;

// Return NULL if we are not on a VM thread
void *vmThread = getVMThread();
if (vmThread == NULL) {
*penv = NULL;
return JNI_EDETACHED;
}
// Return NULL if we are not on a VM thread
vmThread = getVMThread();
if (vmThread == NULL) {
*penv = NULL;
return JNI_EDETACHED;
}

// Get the JNIEnv from the RVMThread object
JNIEnv *env = getJniEnvFromVmThread(vmThread);
// Get the JNIEnv from the RVMThread object
env = getJniEnvFromVmThread(vmThread);

*penv = env;
*penv = env;

return JNI_OK;
return JNI_OK;
}

/** JNI 1.4 */
/* TODO: Implement */
static jint AttachCurrentThreadAsDaemon(JavaVM UNUSED * vm, /* JNIEnv */ void UNUSED ** penv, /* JavaVMAttachArgs */ void UNUSED *args)
{
fprintf(stderr, "Unimplemented JNI call AttachCurrentThreadAsDaemon\n");
return JNI_ERR;
SYS_START();
ERROR_PRINTF("Unimplemented JNI call AttachCurrentThreadAsDaemon\n");
return JNI_ERR;
}

const struct JNIInvokeInterface_ externalJNIFunctions = {
static const struct JNIInvokeInterface_ externalJNIFunctions = {
NULL, // reserved0
NULL, // reserved1
NULL, // reserved2
Expand All @@ -172,12 +176,11 @@ const struct JNIInvokeInterface_ externalJNIFunctions = {
AttachCurrentThreadAsDaemon // JNI 1.4
};

struct JavaVM_ sysJavaVM = {
const struct JavaVM_ sysJavaVM = {
&externalJNIFunctions, // functions
NULL, // reserved0
NULL, // reserved1
NULL, // reserved2
NULL, // threadIDTable
NULL, // jniEnvTable
};

41 changes: 25 additions & 16 deletions tools/bootloader/sys.h
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@

#include <stdio.h>
#include <jni.h>
#include <stdint.h>
#include "cAttributePortability.h"
#ifdef __MACH__
#include <mach/mach_time.h>
#endif
#ifndef _WIN32
#include <stdint.h>
#endif

#ifdef __cplusplus
#define EXTERNAL extern "C"
Expand All @@ -40,6 +42,25 @@ EXTERNAL void VMI_Initialize();
EXTERNAL UDATA DefaultPageSize;
#endif

#ifdef _WIN32
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
#endif

#ifdef RVM_FOR_32_ADDR
typedef uint32_t Address;
typedef int32_t Offset;
typedef uint32_t Extent;
typedef uint32_t Word;
#else
typedef uint64_t Address;
typedef int64_t Offset;
typedef uint64_t Extent;
typedef uint64_t Word;
#endif

#ifndef __SIZEOF_POINTER__
# ifdef RVM_FOR_32_ADDR
# define __SIZEOF_POINTER__ 4
Expand All @@ -48,21 +69,9 @@ EXTERNAL UDATA DefaultPageSize;
# endif
#endif

#ifdef RVM_FOR_32_ADDR
# define Address uint32_t
# define Offset int32_t
# define Extent uint32_t
# define Word uint32_t
#else
# define Address uint64_t
# define Offset int64_t
# define Extent uint64_t
# define Word uint64_t
#endif

/** Macro that starts all sys related functions */
#ifdef RVM_FOR_HARMONY
#define SYS_START() PORT_ACCESS_FROM_VMI(VMI_GetVMIFromJavaVM(&sysJavaVM))
#define SYS_START() PORT_ACCESS_FROM_VMI(VMI_GetVMIFromJavaVM((JavaVM*)(&sysJavaVM)))
#else
#define SYS_START()
#endif
Expand Down Expand Up @@ -100,7 +109,7 @@ extern char **JavaArgs;
/** C access to shared C/Java boot record data structure */
extern struct BootRecord *bootRecord;
/** JVM datastructure used for JNI declared in jvm.c */
extern struct JavaVM_ sysJavaVM;
extern const struct JavaVM_ sysJavaVM;

#ifdef RVM_WITH_ALIGNMENT_CHECKING
extern volatile int numEnableAlignCheckingCalls;
Expand Down Expand Up @@ -232,7 +241,7 @@ EXTERNAL void sysExit(int) NORETURN;
EXTERNAL void sysStashVMThread(Address vmThread);
EXTERNAL void* getVMThread();
EXTERNAL int sysNumProcessors();
EXTERNAL void sysStartMainThread(jboolean vmInSeparateThread, Address ip, Address fp, Address tr, Address jtoc, uint32_t *bootCompleted);
EXTERNAL void sysStartMainThread(jboolean vmInSeparateThread, Address ip, Address fp, Address tr, Address jtoc, jint *bootCompleted);
EXTERNAL Address sysThreadCreate(Address ip, Address fp, Address tr, Address jtoc);
EXTERNAL void sysThreadTerminate();
EXTERNAL int sysThreadBindSupported();
Expand Down
2 changes: 1 addition & 1 deletion tools/bootloader/sysConsole.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,11 @@ EXTERNAL void sysConsoleWriteLong(long long value, int hexToo)
EXTERNAL void sysConsoleWriteDouble(double value, int postDecimalDigits)
{
SYS_START();
char tmp[5] = {'%', '.', '0'+postDecimalDigits, 'f', 0};
if (value != value) {
CONSOLE_PRINTF("NaN");
} else {
if (postDecimalDigits > 9) postDecimalDigits = 9;
char tmp[5] = {'%', '.', '0'+postDecimalDigits, 'f', 0};
CONSOLE_PRINTF(tmp, value);
}
}
6 changes: 4 additions & 2 deletions tools/bootloader/sysLibrary.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@
EXTERNAL void* sysDlopen(char *libname)
{
SYS_START();
TRACE_PRINTF("%s: sysDlopen %s\n", Me, libname);
#ifdef RVM_FOR_HARMONY
UDATA descriptor;
TRACE_PRINTF("%s: sysDlopen %s\n", Me, libname);
if (hysl_open_shared_library(libname, &descriptor, FALSE) != 0) {
TRACE_PRINTF("%s: error loading library %s\n", Me, libname);
return NULL;
Expand All @@ -37,6 +37,7 @@ EXTERNAL void* sysDlopen(char *libname)
}
#else
void * libHandler;
TRACE_PRINTF("%s: sysDlopen %s\n", Me, libname);
do {
libHandler = dlopen(libname, RTLD_LAZY|RTLD_GLOBAL);
}
Expand All @@ -55,16 +56,17 @@ EXTERNAL void* sysDlopen(char *libname)
EXTERNAL void* sysDlsym(Address libHandler, char *symbolName)
{
SYS_START();
TRACE_PRINTF("%s: sysDlsym %s\n", Me, symbolName);
#ifdef RVM_FOR_HARMONY
UDATA func;
char *argSignature=NULL;
TRACE_PRINTF("%s: sysDlsym %s\n", Me, symbolName);
if(hysl_lookup_name((UDATA)libHandler, symbolName, &func, argSignature) != 0) {
return NULL;
} else {
return (void*)func;
}
#else
TRACE_PRINTF("%s: sysDlsym %s\n", Me, symbolName);
return dlsym((void *) libHandler, symbolName);
#endif // RVM_FOR_HARMONY
}
15 changes: 10 additions & 5 deletions tools/bootloader/sysMemory.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,10 +207,10 @@ EXTERNAL void * sysMemoryReserve(char *start, size_t length,
jboolean exec, jboolean commit)
{
SYS_START();
TRACE_PRINTF("%s: sysMemoryReserve %p %d - %d %d %d %d\n",
Me, start, length, read, write, exec, commit);
#ifdef RVM_FOR_HARMONY
HyPortVmemIdentifier ident;
TRACE_PRINTF("%s: sysMemoryReserve %p %d - %d %d %d %d\n",
Me, start, length, read, write, exec, commit);
ident.pageSize = DefaultPageSize;
ident.mode = 0;
if (read) {
Expand All @@ -231,6 +231,8 @@ EXTERNAL void * sysMemoryReserve(char *start, size_t length,
int flags = MAP_PRIVATE;
int fd = -1;
off_t offset = 0;
TRACE_PRINTF("%s: sysMemoryReserve %p %d - %d %d %d %d\n",
Me, start, length, read, write, exec, commit);
#if defined(MAP_ANONYMOUS)
flags |= MAP_ANONYMOUS;
#elif defined(MAP_ANON)
Expand Down Expand Up @@ -306,10 +308,10 @@ EXTERNAL jboolean sysMemoryCommit(char *start, size_t length,
jboolean exec)
{
SYS_START();
TRACE_PRINTF("%s: sysMemoryCommit %p %d - %d %d %d\n",
Me, start, length, read, write, exec);
#ifdef RVM_FOR_HARMONY
HyPortVmemIdentifier ident;
TRACE_PRINTF("%s: sysMemoryCommit %p %d - %d %d %d\n",
Me, start, length, read, write, exec);
ident.pageSize = DefaultPageSize;
ident.mode = 0;
if (read) {
Expand All @@ -328,6 +330,8 @@ EXTERNAL jboolean sysMemoryCommit(char *start, size_t length,
}
#else
int protection = 0;
TRACE_PRINTF("%s: sysMemoryCommit %p %d - %d %d %d\n",
Me, start, length, read, write, exec);
if (read) {
protection |= PROT_READ;
}
Expand All @@ -354,16 +358,17 @@ EXTERNAL jboolean sysMemoryCommit(char *start, size_t length,
EXTERNAL jboolean sysMemoryDecommit(char *start, size_t length)
{
SYS_START();
TRACE_PRINTF("%s: sysMemoryDecommit %p %d\n", Me, start, length);
#ifdef RVM_FOR_HARMONY
HyPortVmemIdentifier ident;
TRACE_PRINTF("%s: sysMemoryDecommit %p %d\n", Me, start, length);
ident.pageSize = DefaultPageSize;
if(hyvmem_decommit_memory(start, length, &ident) == 0) {
return JNI_TRUE;
} else {
return JNI_FALSE;
}
#else
TRACE_PRINTF("%s: sysMemoryDecommit %p %d\n", Me, start, length);
return JNI_TRUE; // success - unsupported operation for UNIX environments
#endif // RVM_FOR_HARMONY
}
Expand Down
25 changes: 15 additions & 10 deletions tools/bootloader/sysMisc.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,18 @@ EXTERNAL unsigned int parse_memory_size(const char *sizeName, const char *sizeFl
int *fastExit)
{
SYS_START();
errno = 0;
double userNum;
char *endp; /* Should be const char *, but if we do that,
then the C++ compiler complains about the
prototype for strtold() or strtod(). This
is probably a bug in the specification
of the prototype. */
const char *factorStr = defaultFactor;
long double factor = 0.0; // 0.0 is a sentinel meaning Unset
long double tot_d;
unsigned tot;

errno = 0;
userNum = strtod(subtoken, &endp);
if (endp == subtoken) {
CONSOLE_PRINTF( "%s: \"%s\": -X%s must be followed by a number.\n", Me, token, sizeFlag);
Expand All @@ -144,9 +149,6 @@ EXTERNAL unsigned int parse_memory_size(const char *sizeName, const char *sizeFl

// First, set the factor appropriately, and make sure there aren't extra
// characters at the end of the line.
const char *factorStr = defaultFactor;
long double factor = 0.0; // 0.0 is a sentinel meaning Unset

if (*endp == '\0') {
/* no suffix. Along with the Sun JVM, we now assume Bytes by
default. (This is a change from previous Jikes RVM behaviour.) */
Expand Down Expand Up @@ -211,11 +213,11 @@ EXTERNAL unsigned int parse_memory_size(const char *sizeName, const char *sizeFl
}
return 0U; // Distinguished value meaning trouble.
}
long double tot_d = userNum * factor;
tot_d = userNum * factor;
if ((tot_d > (UINT_MAX - roundTo)) || (tot_d < 1)) {
ERROR_PRINTF("Unexpected memory size %f", tot_d);
}
unsigned tot = (unsigned) tot_d;
tot = (unsigned) tot_d;
if (tot % roundTo) {
unsigned newTot = tot + roundTo - (tot % roundTo);
CONSOLE_PRINTF("%s: Rounding up %s size from %u bytes to %u,\n"
Expand Down Expand Up @@ -244,11 +246,14 @@ EXTERNAL jlong sysParseMemorySize(const char *sizeName, const char *sizeFlag,
const char *token, const char *subtoken)
{
SYS_START();
TRACE_PRINTF("%s: sysParseMemorySize %s\n", Me, token);
int fastExit = 0;
unsigned ret_uns= parse_memory_size(sizeName, sizeFlag, defaultFactor,
(unsigned) roundTo, token, subtoken,
&fastExit);
unsigned ret_uns;

TRACE_PRINTF("%s: sysParseMemorySize %s\n", Me, token);

ret_uns= parse_memory_size(sizeName, sizeFlag, defaultFactor,
(unsigned) roundTo, token, subtoken,
&fastExit);
if (fastExit)
return -1;
else
Expand Down
5 changes: 4 additions & 1 deletion tools/bootloader/sysThread.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,11 @@ static void* sysThreadStartup(void *args);
EXTERNAL void sysInitialize()
{
#ifdef RVM_FOR_HARMONY
VMInterface *vmi;
HyPortLibrary *privatePortLibrary;
VMI_Initialize();
SYS_START(); /* start after VMI is initialized */
vmi = VMI_GetVMIFromJavaVM((JavaVM*)(&sysJavaVM));
privatePortLibrary = (*vmi)->GetPortLibrary(vmi);
DefaultPageSize = hyvmem_supported_page_sizes()[0];
#else
#ifdef __MACH__
Expand Down
3 changes: 3 additions & 0 deletions tools/bootloader/sysTime.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@
*/

#include "sys.h"

#ifndef RVM_FOR_HARMONY
#include <time.h>
#include <sys/time.h>
#endif

#if !defined(RVM_FOR_HARMONY) && defined(__MACH__)
mach_timebase_info_data_t timebaseInfo;
Expand Down

0 comments on commit b6c53d2

Please sign in to comment.