diff --git a/makefile b/makefile index 147bb6f3de..08287d14f9 100755 --- a/makefile +++ b/makefile @@ -321,7 +321,7 @@ ifeq ($(platform),darwin) ifeq ($(build-arch),powerpc) converter-cflags += -DOPPOSITE_ENDIAN endif - flags = -arch armv6 -isysroot \ + flags = -arch armv7 -isysroot \ /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/ openjdk-extra-cflags += $(flags) cflags += $(flags) diff --git a/src/binaryToObject/mach-o.cpp b/src/binaryToObject/mach-o.cpp index fefde4a467..8b37e85aaf 100644 --- a/src/binaryToObject/mach-o.cpp +++ b/src/binaryToObject/mach-o.cpp @@ -38,7 +38,7 @@ #define CPU_SUBTYPE_I386_ALL 3 #define CPU_SUBTYPE_X86_64_ALL CPU_SUBTYPE_I386_ALL #define CPU_SUBTYPE_POWERPC_ALL 0 -#define CPU_SUBTYPE_ARM_V6 6 +#define CPU_SUBTYPE_ARM_V7 9 #if (BITS_PER_WORD == 64) # define Magic MH_MAGIC_64 @@ -321,7 +321,7 @@ MAKE_NAME(writeMachO, BITS_PER_WORD, Object) cpuSubType = CPU_SUBTYPE_POWERPC_ALL; } else if (strcmp(architecture, "arm") == 0) { cpuType = CPU_TYPE_ARM; - cpuSubType = CPU_SUBTYPE_ARM_V6; + cpuSubType = CPU_SUBTYPE_ARM_V7; } else { fprintf(stderr, "unsupported architecture: %s\n", architecture); return false; diff --git a/src/bootimage.cpp b/src/bootimage.cpp index 28f45dd382..3d75f4401c 100644 --- a/src/bootimage.cpp +++ b/src/bootimage.cpp @@ -435,6 +435,10 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code, memberFields[memberIndex] = *f; + while (targetMemberOffset % f->targetSize) { + ++ targetMemberOffset; + } + targetMemberOffset += f->targetSize; ++ memberIndex; diff --git a/src/machine.cpp b/src/machine.cpp index 65213cd637..47b53dccbf 100644 --- a/src/machine.cpp +++ b/src/machine.cpp @@ -3058,7 +3058,7 @@ popResources(Thread* t) } object -makeByteArray(Thread* t, const char* format, va_list a, int size) +makeByteArrayV(Thread* t, const char* format, va_list a, int size) { THREAD_RUNTIME_ARRAY(t, char, buffer, size); @@ -3080,7 +3080,7 @@ makeByteArray(Thread* t, const char* format, ...) while (true) { va_list a; va_start(a, format); - object s = makeByteArray(t, format, a, size); + object s = makeByteArrayV(t, format, a, size); va_end(a); if (s) { @@ -3098,7 +3098,7 @@ makeString(Thread* t, const char* format, ...) while (true) { va_list a; va_start(a, format); - object s = makeByteArray(t, format, a, size); + object s = makeByteArrayV(t, format, a, size); va_end(a); if (s) { diff --git a/src/machine.h b/src/machine.h index 44b239c690..a52cf30a73 100644 --- a/src/machine.h +++ b/src/machine.h @@ -2216,7 +2216,7 @@ make(Thread* t, object class_) } object -makeByteArray(Thread* t, const char* format, va_list a, int size); +makeByteArrayV(Thread* t, const char* format, va_list a, int size); object makeByteArray(Thread* t, const char* format, ...); @@ -2642,25 +2642,37 @@ makeThrowable } inline object -makeThrowable(Thread* t, Machine::Type type, const char* format, va_list a) +makeThrowableV(Thread* t, Machine::Type type, const char* format, va_list a, + int size) { - object s = makeByteArray(t, format, a); + object s = makeByteArrayV(t, format, a, size); - object message = t->m->classpath->makeString - (t, s, 0, byteArrayLength(t, s) - 1); + if (s) { + object message = t->m->classpath->makeString + (t, s, 0, byteArrayLength(t, s) - 1); - return makeThrowable(t, type, message); + return makeThrowable(t, type, message); + } else { + return 0; + } } inline object makeThrowable(Thread* t, Machine::Type type, const char* format, ...) { - va_list a; - va_start(a, format); - object r = makeThrowable(t, type, format, a); - va_end(a); + int size = 256; + while (true) { + va_list a; + va_start(a, format); + object r = makeThrowableV(t, type, format, a, size); + va_end(a); - return r; + if (r) { + return r; + } else { + size *= 2; + } + } } void @@ -2696,12 +2708,19 @@ throwNew inline void NO_RETURN throwNew(Thread* t, Machine::Type type, const char* format, ...) { - va_list a; - va_start(a, format); - object r = makeThrowable(t, type, format, a); - va_end(a); + int size = 256; + while (true) { + va_list a; + va_start(a, format); + object r = makeThrowableV(t, type, format, a, size); + va_end(a); - throw_(t, r); + if (r) { + throw_(t, r); + } else { + size *= 2; + } + } } object