Commit Graph

1883 Commits

Author SHA1 Message Date
Joel Dice
0372d999d3 use TargetBytesPerWord instead of BytesPerWord where appropriate 2011-09-23 23:25:52 -06:00
Joel Dice
3fa4a7001d fix x86->powerpc boot image cross build
This fixes the remaining cross-endian translation issues needed to
build powerpc boot images on x86.
2011-09-23 22:31:24 -06:00
Joel Dice
e6c780e4e8 whitespace tweak for usage message in bootimage.cpp 2011-09-23 22:31:24 -06:00
Joel Dice
21d1a6c883 add __attribute__ ((used)) to EXPORT macro definition
This ensures that exported functions are not stripped when using the
-dead_strip option to the Apple linker.
2011-09-22 16:57:44 -06:00
Joel Dice
559af69269 various ARM fixes 2011-09-20 19:50:38 -06:00
Joel Dice
c537dcfd34 generate read-only code image in bootimage build
This avoids the requirement of putting the code image in a
section/segment which is both writable and executable, which is good
for security and avoids trouble with systems like iOS which disallow
such things.

The implementation relies on relative addressing such that the offset
of the desired address is fixed as a compile-time constant relative to
the start of the memory area of interest (e.g. the code image, heap
image, or thunk table).  At runtime, the base pointer to the memory
area is retrieved from the thread structure and added to the offset to
compute the final address.  Using the thread pointer allows us to
generate read-only, position-independent code while avoiding the use
of IP-relative addressing, which is not available on all
architectures.
2011-09-20 16:30:30 -06:00
Joel Dice
349d381d95 progress towards cross-endian bootimage builds
This fixes a number of bugs concerning cross-architecture bootimage
builds involving diffent endianesses.  There will be more work to do
before it works.
2011-09-16 20:53:08 -06:00
Joel Dice
178dd7af34 Merge remote branch 'origin/master' into ios 2011-09-16 20:46:03 -06:00
Joel Dice
d342c9b8c5 fix 64-bit Windows openjdk-src build 2011-09-16 19:01:14 -06:00
Joel Dice
ab840c91db Merge branch 'oss-master' into ios 2011-09-12 20:27:59 -06:00
Joel Dice
be01e5b687 fix handling of 64-bit arguments to Method.invoke on 32-bit architectures
The previous code failed to account for alignment padding in the
Double and Long classes.
2011-09-12 20:26:32 -06:00
Joel Dice
8a30efc52f only generate crash dumps for access violations and divides-by-zero
Some apps and libraries may generate recoverable SEH exceptions on
Windows, in which cases we don't want to waste time and disk space
generating memory dumps.
2011-09-12 13:45:21 -06:00
Joel Dice
84a6daa400 fix unused parameter warning 2011-09-01 11:36:00 -06:00
Joel Dice
66bc326523 Merge branch 'cross-bootimage' into ios 2011-09-01 10:53:39 -06:00
Joel Dice
6949fc3d60 Merge remote-tracking branch 'origin/master' into ios 2011-09-01 10:53:20 -06:00
Joel Dice
e3fc8d3dd2 enable cross-architecture ARM bootimage builds 2011-09-01 10:51:56 -06:00
Joel Dice
e505cbe99d more progress towards cross-architecture bootimage builds
This commit fixes a lot of bugs.  All tests are now pass for Linux
x86_64 to Linux i386 cross builds.
2011-08-31 21:18:00 -06:00
Joel Dice
5d55d61c17 fix use of uninitalized memory in jnienv.cpp 2011-08-31 21:16:22 -06:00
Joel Dice
67300c229a change local variable name to avoid shadowing another variable 2011-08-31 21:15:41 -06:00
Joel Dice
5b4f17997f progress towards cross-architecture bootimage builds
This monster commit is the first step towards supporting
cross-architecture bootimage builds.  The challenge is to build a heap
and code image for the target platform where the word size and
endianess may differ from those of the build architecture.  That means
the memory layout of objects may differ due to alignment and size
differences, so we can't just copy objects into the heap image
unchanged; we must copy field by field, resizing values, reversing
endianess and shifting offsets as necessary.

This commit also removes POD (plain old data) type support from the
type generator because it added a lot of complication and little
value.
2011-08-29 19:00:17 -06:00
Joel Dice
f0cb26ec51 treat carriage returns as whitespace when parsing types.def
On Windows, some versions of Git automatically translate Unix line
endings to Windows line endings, which can break the build unless we
treat carriage returns as whitespace when parsing.
2011-08-29 14:31:30 -06:00
Joel Dice
4c47f4fae8 Merge remote-tracking branch 'origin/master' into ios 2011-08-23 16:40:01 -06:00
Joel Dice
b4661d2ccd Merge remote branch 'origin/master' into ios 2011-08-15 07:09:44 -06:00
Joel Dice
3df3892d34 throw AbstractMethodError when appropriate in prepareMethodForCall
Otherwise, we'll crash later when we try to compile an abstract
method.
2011-08-12 14:19:21 -06:00
Joel Dice
8d2ca7aaf5 fix Thread.interrupt deadlock
Previously, we returned immediately from Monitor.wait if we found we
had been interrupted, but this caused deadlock when waiting to enter
the exclusive state, since we never released Machine::stateLock to
allow active threads to transition into the idle state.  This commit
ensures that we at least briefly release the lock without actually
waiting in that case.
2011-08-11 07:35:03 -06:00
Joel Dice
44f7bd9fe0 fix argument alignment for Darwin/ARM 2011-08-10 21:33:56 -06:00
Joel Dice
39cffb8933 set minimum capacity to one if it's zero in Segment constructor
Allocating an empty Segment causes problems for later computations, so
we avoid it even if the caller would otherwise permit it.
2011-08-10 21:30:55 -06:00
Joel Dice
e5a8d5c824 add support for Apple iOS on ARM
Most tests are passing, but not all, so this still needs more work.
2011-08-10 19:21:48 -06:00
Joel Dice
4b9cb4f4e4 enable JMX support for openjdk-src build and implement GetInputArgumentArray 2011-08-05 18:06:29 -06:00
Joel Dice
801327752a accept (but currently ignore) -client and -server options for command-line compatibility with java 2011-07-18 14:17:22 -06:00
Joel Dice
c3824c6844 fix crash when encountering invokespecial call to abstract method
We must throw an AbstractMethodError when such a call is executed (not
when the call is compiled), so we compile this case as a call to a
thunk which throws such an error.
2011-07-17 19:54:55 -06:00
Joel Dice
08d4fddbb4 handle case of class with no methods in classInitializer 2011-07-17 19:51:48 -06:00
Joel Dice
753b90a811 request an object mask when allocating a singleton
Singletons may have embedded object references, and if they are
allocated at fixed memory locations (e.g. if they are larger than
64KB), they must have object masks so the garbage collector knows were
to find said references.
2011-07-17 19:48:28 -06:00
Joel Dice
adbe74efbe add debug logging to finder.cpp 2011-07-17 19:48:12 -06:00
Joel Dice
20091031da increase HeapCapacity to 256MB in bootimage.cpp
This is necessary to avoid running out of memory when building
bootimages of certain apps with OpenJDK using ProGuard'ed code.
2011-07-17 19:45:58 -06:00
Joel Dice
f6d489ff88 memoize padding calculations in x86.cpp
These calculations were appearing high on profiles of apps which force
a lot of methods to be compiled at startup.
2011-07-16 19:12:45 -06:00
Joel Dice
67cbc79613 fix crash in BranchEvent::compile for bootimage builds
We can't reduce a conditional branch to an unconditional jump unless
both arguments to the comparison are constants *and* those constants
have been resolved.  The latter may not be true in the case of a
bootimage build.
2011-07-16 19:10:05 -06:00
Joel Dice
a2933c1f9e update copyright years in compile.cpp 2011-07-16 19:08:39 -06:00
Joel Dice
3ec4ef9bd2 fix stack unwinding from native methods for tails=true build
We can't clear t->trace->targetMethod until after findUnwindTarget has
been called or we'll lose track of where we are on the stack.
2011-07-13 18:06:02 -06:00
Joel Dice
e3662f13a9 update copyright years and increment version number 2011-07-13 08:25:21 -06:00
Joel Dice
7a82ee6b38 add new System::Monitor::waitAndClearInterrupted method
We had be using System::Monitor::wait to block threads internally in
the VM as well as to implement Object.wait.  However, the interrupted
flag should only be cleared in the latter case, not the former.  This
commit adds a new method and changes the semantics of the old one in
order to acheive the desired behavior.
2011-07-12 18:01:17 -06:00
Joel Dice
c3fa08c430 fix Thread.interrupt and Thread.interrupted
These were both totally broken; the latter wasn't even implemented.
This commit fixes/implements them and adds a simple test to exercise
them.
2011-07-12 14:15:43 -06:00
Joel Dice
ab8e6cdc80 convert classpath paths to absolute paths
This is necessary because some apps expect CodeSource.getLocation() to
return URL containing an absolute path.
2011-07-11 10:56:53 -06:00
Joel Dice
19d5022456 fix GC safety bugs in getClassAddendum and makeArrayClass 2011-07-09 18:01:00 -06:00
Joel Dice
ec4568d806 handle strings of arbitrary size in makeByteArray 2011-07-09 18:00:19 -06:00
Joel Dice
b4169ede91 fix reversed arguments to maybeRex in sseMoveRR
This was causing 8-byte SSE-to-SSE moves involving registers
xmm8-xmm15 to be misencoded on x86_64, leading to incorrect code
generation in methods with lots of local variables of type double.
2011-07-06 11:09:06 -06:00
Joel Dice
6dc9c98604 fix Set[Static]DoubleField regression for 32-bit platforms
We were truncating 64-bit doubles to 32-bit values with zany results.
2011-06-20 14:24:11 -06:00
Joel Dice
9356ade4fd Revert "Updated powerpc build to disable stack overflow checks for now due to a problem we found with large enums."
This reverts commit 8e736327d4.
2011-06-03 17:36:47 -06:00
Joel Dice
50a699a08f Merge remote branch 'origin/B14038_Lion_appshare' into oss-master 2011-06-03 17:35:40 -06:00
Joel Dice
bcc72e8c9d Merge remote branch 'remotes/origin/B14038_Lion_appshare' into oss-master 2011-06-03 14:39:50 -06:00
Matt Klich
c7c0a45a61 Revert "OSX Lion build changes"
This commit introduced conditional includes which is not the preferred
method. Will do it in the makefile instead.

This reverts commit 7148556979.
2011-06-01 13:56:03 -06:00
Joel Dice
92adc83caf remove NPE debug logging 2011-05-29 11:16:52 -06:00
Joel Dice
05f26983d0 implement more sun.misc.Unsafe methods 2011-05-26 17:41:15 -06:00
Joel Dice
24f7b42d45 ensure class initialized in {Get|Set}Static*Field
All static field accesses must trigger class initialization if it
hasn't happened already, including JNI accesses.
2011-05-26 17:39:19 -06:00
Matt Klich
7148556979 OSX Lion build changes 2011-05-26 11:57:30 -06:00
Joel Dice
7bea2b6b7d fix putstatic/putfield for 64-bit volatiles
We must call acquireMonitorForObject before popping the
putstatic/pushfield operands off the stack to avoid clobbering said
operands.
2011-05-23 12:38:12 -06:00
Joel Dice
bfe6934183 support multiline Class-Path properties in JAR manifests 2011-05-16 10:34:10 -06:00
Joel Dice
2b229b4b6d add stub implementations of JVM_{Enable|Disable}Compiler 2011-05-16 10:33:46 -06:00
Joel Dice
fa7d46c322 handle methods ending with large blocks properly when generating constant pools
We can only omit the jump past a constant pool if it's placed at the
end of a method, which is only true if the pool belongs to the last
block of that method and that block is not so large that the pool must
be placed inside the block instead of after it.
2011-05-11 19:56:29 -06:00
Joel Dice
b76cbbfa56 fix instruction offset calculation in powerpc.cpp
The previous code did not take into account any padding embedded in a
basic block due to inline jump tables, which led to invalid code
generation in large methods
2011-05-11 19:50:45 -06:00
Mike Keesey
8e736327d4 Updated powerpc build to disable stack overflow checks for now due to a problem we found with large enums. 2011-04-22 20:22:47 -06:00
Joel Dice
0987255552 tolerate missing classes in interceptFileOperations
If we fail to resolve a given class (e.g. due to ProGuard obfuscating
or eliminating it), just move on to the next one rather than return
immediately.  Otherwise, we may miss intercepting methods of classes
we can resolve.
2011-04-10 17:01:38 -06:00
Joel Dice
7c30e44601 add appropriate memory barriers to double-checked locking code 2011-04-10 14:46:53 -06:00
Joel Dice
88c95615c7 fix cut-and-paste error in ACQUIRE_FIELD_FOR_WRITE definition 2011-04-10 14:42:46 -06:00
Joel Dice
8091803b59 set MaxNativeCallFootprint to 5 on 32-bit systems
Thunks such as divideLong now take a pointer and two int64_t
arguments, which amounts to 5 words of stack space on a 32-bit system.
2011-04-10 12:55:42 -06:00
Joel Dice
ed8a72af9e fix MSVC build 2011-04-10 12:55:12 -06:00
Joel Dice
3febd7cea7 load libfontmanager.so before trying to resolve FontManager.initIDs
sun.font.FontManager.initIDs is a native method defined in
libfontmanager.so, yet there seems to be no mechanism in OpenJDK's
class library to actually load that library, so we lazily load it
before trying to resolve the method.
2011-04-10 11:26:44 -06:00
Joel Dice
d5fb7f97b9 implement sun.misc.Unsafe.getFloat 2011-04-10 11:26:01 -06:00
Joel Dice
00b829b8e8 fix Class.getDeclaredMethods
Internally, the VM augments the method tables for abstract classes
with any inherited abstract methods to make code simpler elsewhere,
but that means we can't use that table to construct the result of
Class.getDeclaredMethods since it would include methods not actually
declared in the class.  This commit ensures that we preserve and use
the original, un-augmented table for that purpose.
2011-04-09 21:20:56 -06:00
Joel Dice
1476243662 implement sun.misc.Unsafe.putShort 2011-04-09 21:20:21 -06:00
Joel Dice
6707116dd4 implement sun.misc.Unsafe.addressSize 2011-04-09 21:19:49 -06:00
Joel Dice
e1d45cf7c8 add stub implementation of JVM_GetManagement
This is the minimum needed to get Apache Geronimo running.
2011-04-09 21:18:33 -06:00
Joel Dice
b3d65fab9b fix handling of interfaces in isAssignableFrom
The old version was both incorrect (in the case where both arguments
are interfaces) and inefficient.
2011-04-09 21:09:59 -06:00
Joel Dice
948a2523f1 use vm::run to implement IsAssignableFrom and IsInstanceOf
Under certain circumstances, the implementations of these functions
may throw errors, so we need to wrap them using vm::run so we don't
try to unwind past the JNI boundary.
2011-04-09 21:07:10 -06:00
Joel Dice
239fd98781 fix compilation of unusual exception handlers
As described in commit 36aa0d6, apps such as jython which generate
bytecode dynamically can produce patterns of bytecode for which the
VM's compiler could not handle properly.  However, that commit
introduced a regression and had to be partially reverted.

It turns out the real problem was the call to Compiler::restoreState
which we made before checking whether we were actually ready to
compile the exception handler (we delay compiling an exception handler
until and unless the try/catch block it serves has been compiled so we
can calculate the stack maps properly).  That confused the compiler in
rare cases, so we now only call restoreState once we're actually ready
to compile the handler.
2011-04-09 12:44:28 -06:00
Joel Dice
97aec1691e fix jsr/ret stack mapping regression
My last commit introduced a regression in JIT compilation of
subroutines.  This reverts the specific change which caused the
regression.  Further work will be needed to address the case which
that change was intended to fix (namely, exception handlers which
apply to multiple try/catch blocks).
2011-04-08 20:15:36 -06:00
Joel Dice
36aa0d6792 improve handling of unusual bytecode in JIT compiler
Bytecode generated by compilers other than javac or ecj (such as
jython's dynamically generated classes) can contain unreachable code
and exception handlers which apply to more than one try/catch scope.
Previously, the VM's JIT compiler did not handle either of these cases
well, hence this commit.
2011-04-08 18:50:22 -06:00
Joel Dice
60db8cc047 add some commented-out debug code to defineClass
When uncommented, this code will write each defined class to disk,
which allows one to examine e.g. dynamically-generated classes using
e.g. javap.
2011-04-08 18:46:43 -06:00
Joel Dice
d3581be38e don't abort when parsing malformed UTF8 strings
Previously, we would abort the process if we encountered a truncated
multibyte character in parseUtf8NonAscii (called by the JNI method
NewStringUTF).  Now we simply terminate the string at that point.
2011-04-07 14:39:27 -06:00
Joel Dice
af9288f4ee don't abort when parsing malformed UTF8 strings
Previously, we would abort the process if we encountered a truncated
multibyte character in parseUtf8NonAscii (called by the JNI method
NewStringUTF).  Now we simply terminate the string at that point.
2011-04-07 14:26:54 -06:00
Joel Dice
b0ae6343ad provide proper implementations of JVM_GetDeclaredClasses, JVM_GetDeclaringClass 2011-03-31 19:47:26 -06:00
Joel Dice
ef86530080 call static initializer of superclass before that of class itself
Also, assume any class which has an ancestor class which has a static
initializer needs initialization even if it doesn't have one itself,
per the Java Language Spec.
2011-03-31 19:43:49 -06:00
Joel Dice
1c7abe782d specify valid code source for system classes
This enables use of a class's protection domain to determine what JAR
or directory it came from.
2011-03-31 19:38:44 -06:00
Joel Dice
8d9412c1e8 remove redundant statement in parseUtf8
VM heap allocated memory is already zero'd out, so there's no need to
explicitly end strings with a null character.
2011-03-31 19:10:20 -06:00
Joel Dice
384682431a implement JVM_GetSystemPackages stub 2011-03-31 19:00:42 -06:00
Joel Dice
916e6787de set Thread.blocker during thread construction
This avoids an NPE in Thread.blockedOn.
2011-03-31 18:58:59 -06:00
Joel Dice
6506760dd9 implement Unsafe.putByte 2011-03-28 08:55:20 -06:00
Joel Dice
572f2d81eb handle case where value has acquired more than one resource in resetFrame 2011-03-28 08:54:37 -06:00
Joel Dice
3e92f18ab0 remove redundant conditional from resetFrame 2011-03-27 21:15:54 -06:00
Joel Dice
9fe41b2afc only return declared interfaces from Class.getInterfaces
The result of Class.getInterfaces should not include interfaces
declared to be implemented/extended by superclasses/superinterfaces,
only those declared by the class itself.  This is important because it
influences how java.io.ObjectStreamClass calculates serial version
IDs.
2011-03-27 20:29:31 -06:00
Joel Dice
56e832d3e8 fix JVM_GetArrayElement and JVM_SetArrayElement
The old versions only handled object arrays properly, but they need to
handle primitive arrays as well.
2011-03-27 20:25:47 -06:00
Joel Dice
62e10cf992 return only non-negative values from takeHash
Some broken code implicitly relies on System.identityHashCode always
returning a non-negative number (e.g. old versions of
com/sun/xml/bind/v2/util/CollisionCheckStack.hash).
2011-03-27 20:22:59 -06:00
Joel Dice
c75cf7ebb6 release all resources in resetFrame
Code including subroutines and conditionals can result in frame and
register resources being held by values which aren't in scope when
resetFrame is called, so we need to clean them up after cleaning the
in-scope values.
2011-03-27 14:15:05 -06:00
Joel Dice
8283e1da46 ignore instances of DelegatingClassLoader in JVM_LatestUserDefinedLoader 2011-03-27 14:13:36 -06:00
Joel Dice
d16bf57634 implement JVM_MaxObjectInspectionAge stub and Unsafe.getShort 2011-03-27 14:12:41 -06:00
Joel Dice
686cbc3637 implement JVM_ResolveClass
This just reuses code in avian.Classes which was formerly only used in
the Avian classpath build.
2011-03-26 23:24:48 -06:00
Joel Dice
ba028b86bf set java.vm.vendor system property during startup 2011-03-26 23:24:05 -06:00
Joel Dice
ad79bbcbd5 update class loader map when creating new array class
This ensures that we don't create redundant array classes later.
2011-03-26 23:21:37 -06:00
Joel Dice
d5ae053f11 handle invokevirtual calls to non-virtual methods
OpenJDK's sun.reflect.MethodAccessorGenerator can generate
invokevirtual calls to private methods (which we normally consider
non-virtual); we must compile them as non-virtual calls since they
aren't in the vtable.
2011-03-26 23:13:05 -06:00
Joel Dice
0f38673baa fix line number and exception handler scope regression
It turns out commit 31eb047 was too aggressive and led to incorrect
calculation of line numbers for machine addresses, as well as
potentially incorrect exception handler scope calculation.  This fixes
the regression.
2011-03-26 19:55:23 -06:00