Commit Graph

4637 Commits

Author SHA1 Message Date
Joel Dice
80dc32094f fix openjdk/openjdk-src builds for latest JDKs 7 and 8
The tower of patches and hacks grows higher.  Ideally, we'll just drop
support for JDK 7 soon and clean this mess up a bit, but TravisCI
still hasn't gotten the memo that it's dead, so we muddle onward.

I've tested this on Windows, but not yet Linux or OS X.  Wanted to get
a PR before I move on to that.
2016-01-12 16:37:03 -08:00
Joshua Warner
505c2b8d93 Merge pull request #471 from lwahlmeier/master
Added missing apis to ByteBuffer
2016-01-11 01:02:01 +00:00
Luke Wahlmeier
62a03898c3 Merge remote-tracking branch 'rt/master' 2016-01-10 12:10:47 -07:00
Luke Wahlmeier
9d87e3b2a7 added get/put float/double to ByteBuffers, as well as duplicate 2016-01-10 03:03:03 -07:00
Joshua Warner
15b3a8289a Merge pull request #469 from keinhaar/master
Added support for HTTP URL connections, and fixed SocketInputStream and BufferedInputStream.
2015-12-28 18:21:45 +00:00
keinhaar
524f034bac Added support for HTTP URL connections, and fixed SocketInputStream and BufferedInputStream.
Did some cleanup as proposed by the main developers.
- Bigger HTTP Header Buffer
- Exception if Header is anyway exceeded.
- Linebreaks on HTTP Request fixed to standard.
- Only stop header reading on \r\n\r\n and no longer on \n\n\n\n
- Simplyfied the code to stop if buffer could not be filled.
- Handle special case if buffer has length 0, like specified in the Java API
- Socket will no longer fill the buffer completely
2015-12-26 11:58:40 +01:00
Joshua Warner
2d7347166c Merge pull request #470 from Xtansia/patch-1
Change Avian src volume path to match Dockerfile
2015-12-24 15:17:28 +00:00
Thomas Farr
d9f6cabcf6 Change Avian src volume path to match Dockerfile 2015-12-22 20:36:50 +13:00
Joshua Warner
0c71ba0763 Merge pull request #465 from dicej/no-mo-oss
update README to remove references to oss.readytalk.com
2015-11-10 03:48:25 +00:00
Joel Dice
19945346fc update README to remove references to oss.readytalk.com 2015-11-09 16:33:01 -07:00
Joel Dice
aeaf4c1f28 Merge pull request #464 from benstadin/master
- fixed building for iOS 9
2015-11-03 11:59:23 -07:00
Benjamin Stadin
dc010f9a92 - fixed building for iOS 9
- handle sim flag to better distinguish between ios simulator / ios
- added ios_deployment_target to set ios min version
- default to 64 bit build for iOS
2015-11-01 20:36:47 +01:00
Joshua Warner
7cc9f160f2 Merge pull request #459 from dicej/bootimage-test
add bootimage-test option to makefile
2015-10-20 17:33:58 +00:00
Joel Dice
b351c9d961 exit with error if bootimage-test=true specified without bootimage=true 2015-10-20 09:40:26 -06:00
Joel Dice
9abba8fe24 add bootimage-test option to makefile
This option specifies that the test classes should be AOT-compiled
along with the class library, which allows us to test that everything
works in AOT-compiled form as well as JIT-compiled form.  This is
primarily motivated by the need to test d906db6 (support for
AOT-compilation of Java 8 lambda expressions).

Note that I had to tweak Misc because it tested something that
couldn't be done in an AOT build without a lot of extra work, and
SystemClassLoader.getPackage because it was returning null when the
requested package could not be populated with JAR manifest metadata.
Technically, we probably *should* return null for packages that don't
exist at all (in the sense that no classes have been loaded from such
a package), but tracking that kind of thing seems like more trouble
than it's worth unless someone complains about it.
2015-10-19 15:10:53 -06:00
Joshua Warner
38731b28bf Merge pull request #457 from dicej/no-artifacts
disable TravisCI artifact publication
2015-10-12 12:49:37 -06:00
Joel Dice
5399c6bdbb disable TravisCI artifact publication
This stopped working recently, apparently due to obsolete jfrog.org
credentials.  Since no-one is actually using these artifacts as far as
we are aware, I'm just disabling the task so the build doesn't
continue to fail.
2015-10-12 12:31:45 -06:00
Joel Dice
126e3e4bac Merge pull request #456 from joshuawarner32/master
reorganize docker files, upgrade to java 8, gcc 4.9
2015-09-28 15:54:00 -06:00
Joshua Warner
d906db633c Merge pull request #454 from dicej/aot-lambda
support AOT-compilation of Java 8 lambda expressions
2015-09-28 07:44:51 -06:00
Joshua Warner
809feace0f reorganize docker files, upgrade to java 8, gcc 4.9 2015-09-28 02:18:01 +00:00
Joel Dice
d5a5b5309a support AOT-compilation of Java 8 lambda expressions
These expressions are tricky because they rely on invokedynamic, which
normally implies runtime code generation.  However, since lambdas
don't actually use the "dynamicness" of invokedynamic, we can convert
them into static calls to synthetic classes at compile time.

Since I had already written code to synthesize such classes in Java
and I didn't want to rewrite it in C++, I needed to add support for
running Java code to the bootimage generator.  And since the primary
VM used by the generator is purpose-built to generate AOT-compiled
code for a specific target architecture and is not capable of
generating or running JIT-compiled code for the host architecture, I
added support for loading a second, independent, host-specific VM for
running Java code.

The rest of the patch handles the fact that each method compilation
might cause new, synthetic classes to be created, so we need to make
sure those classes and their methods are included in the final heap
and code images.  This required breaking some giant code blocks out of
makeCodeImage into their own methods, which makes the diff look
scarier than it really is.
2015-09-13 14:21:24 -06:00
Joel Dice
c1df8b949c Merge pull request #446 from bgould/master
Added targets for Eclipse environment descriptor.
2015-09-13 14:15:18 -06:00
Joel Dice
bedf4d86db Merge pull request #453 from joshuawarner32/master
ignore leading / for files on Windows (fixes #452)
2015-09-13 14:14:32 -06:00
Joel Dice
763aada4b0 optionally specify reentrancy when creating a System object
This allows multiple Avian VMs to share the same process space,
provided they don't try to use functionality that involves global
shared resources (e.g. signal handling).
2015-09-12 20:08:54 -06:00
Joel Dice
9b2a02e92b avoid calling unrelated JNI methods during class initialization
The main goal here is to avoid making JNI calls from code that really
shouldn't need JNI (e.g. before this patch, ArrayList.add called
Math.max, which called Math.<clinit>, which called Random.<init>,
which called System.currentTimeMillis).

Besides following the "pay for only what you need" principle, this
change ensures we can call LambdaMetaFactory methods during AOT
compilation with a minimal VM (i.e. without compiling in JNI methods
we don't need).
2015-09-12 19:58:50 -06:00
Joshua Warner
e2f2ed68f0 ignore leading / for files on Windows (fixes #452) 2015-09-02 08:31:30 -06:00
Joshua Warner
9f70aa753e Merge pull request #451 from dicej/invoke-dynamic-stub
implement basic Java 8 lambda support
2015-08-18 12:53:16 -06:00
Joel Dice
03cf4f98a1 remove invoke.sh
This wasn't meant to be checked in long-term.
2015-08-07 20:49:50 -06:00
Joel Dice
549810deba allow building with Java 7 2015-08-06 17:23:14 -06:00
Joel Dice
66712a8cff add invokedynamic support to interpreter 2015-08-06 17:22:14 -06:00
Joel Dice
8a7944d25c add support for openjdk=$JDK8_HOME
All tests pass for the process=compile build.  Next step: process=interpret.
2015-08-06 13:30:18 -06:00
Joel Dice
2465459079 implement basic Java 8 lambda support
The two big pieces here are basic invokedynamic support and a working
version of LambdaMetaFactory.metafactory.  The latter works by
dynamically building a synthetic class with three methods: a static
factory method, a constructor for the factory method to call, and a
method to satisfy the requested interface which defers to the
specified MethodHandle.

This work relies heavily on Avian's specific MethodType and
MethodHandle implementations, which provide extra, non-standard
features to make code generation easier.  That means we'll probably
need to use Avian's versions of java.lang.invoke.* even when building
with the OpenJDK or Android class libraries.
2015-08-06 13:30:18 -06:00
joshuawarner32@gmail.com
792684b935 first pass at minimal invokedynamic support for Java 8 lambdas
This is a bunch of commits squashed into one per Josh's request.

add dynamicTable field

add invokedynamic instruction

add defaultDynamic bootimage field

add dummy invokedynamic support in bootimage-generator

add defaultDynamic thunk

check dynamicTable offset

comment defaultDynamicThunk to fix unused function

comment defaultDynamicThunk to fix unused function

add dynamicTable / dynamicIndex stuff

comment dynamicIndex and dynamicTable

add invokedynamic instruction impl

stub out addDynamic

unstub addDynamic

don't allow tail calls in invokedynamic

implement stub JVM_GetTemporaryDirectory method

(build broken) begin add InvokeDynamicTest

Revert "(build broken) begin add InvokeDynamicTest"

This reverts commit 77f9c54e32ac66d0803eeab93e4a10d3541987a8.

add InternalError

add URLClassPath.c for openjdk-src builds

implement stub JVM_KnownToNotExist and JVM_GetResourceLookupCache methods

intercept open0 / open for openjdk

add basic java/lang/invoke stubs

remove non-public java/lang/invoke classes

fix invokedynamic example building

<wip debugging>
2015-08-06 13:30:05 -06:00
BCG
4093036e6f Closeable extends AutoCloseable; RandomAccessFile implements DataInput 2015-08-06 13:28:47 -06:00
Joshua Warner
82fd3a8dcb fix #447: leak in compile.cpp (thanks, @mretallack!) 2015-08-06 13:28:47 -06:00
Joshua Warner
7e4bd18742 Merge pull request #450 from bgould/io-enhancements
Closeable extends AutoCloseable; RandomAccessFile implements DataInput
2015-07-29 08:24:32 -06:00
Joshua Warner
1c039c5258 Merge pull request #449 from bgould/printf-fix
Fixed method signatures on format() methods to return PrintStream as in OpenJDK
2015-07-29 07:53:09 -06:00
BCG
7013dbacfd Closeable extends AutoCloseable; RandomAccessFile implements DataInput 2015-07-28 23:11:22 -04:00
BCG
b766193966 Fixed method signatures on format() methods to return PrintStream as in OpenJDK 2015-07-28 22:41:40 -04:00
Joshua Warner
38e66d80c8 fix #447: leak in compile.cpp (thanks, @mretallack!) 2015-07-18 08:44:15 -06:00
BCG
bbcb4cb119 Fixed src symlink in eclipse config to actually point to source. 2015-07-16 23:59:27 -04:00
BCG
0a11724f15 Added targets for Eclipse environment descriptor.
Someone on the Google Groups site asked how to set up an Eclipse
project with Avian classpath. This patch creates the descriptor
that you can you use to do that at `$(build)/eclipse/jdk/avian.ee`.
The descriptor includes the Avian version, platform, architecture,
and build options to allow for multiple versions to exist side by
side.  Users can import the descriptor into Eclipse via:

    Window >> Preferences >> Java >> Installed JREs >> Add >> Execution
    Environment Description

Once the descriptor is imported, Avian can be used just like any other
JVM installation for Eclipse projects. Personally I use this in
conjunction with Eclim to gain code completion for Avian in vim.

The new targets also create symlinks to loosely mimic OpenJDK's
filenames and folder layout:

    build/linux-x86_64-tails-continuations/eclipse/jdk/
    ├── avian.ee
    ├── bin
    │   └── java -> ../../../avian
    ├── jre
    │   └── lib
    │       └── rt.jar -> ../../../../classpath.jar
    └── src -> ../../classpath

Annoyingly, Eclipse for some reason expects this layout to exist
even though the descriptor format has required parameters for
specifying these locations. I suppose that other software may
look for this "standard" layout in a JVM installation so it may be
generally useful.

These artifacts are only built if the platform is one of `windows`,
`linux`, or `macosx`. The symlinks might not actually work at all on
Windows, I'm not sure how things like cygwin/msys handle that and I
do not have the means to test it. If they do not work a fallback
for windows might be to actually copy the files instead of symlinking.

I realize this can be done outside of the makefile but it seemed
useful to put it here to gain access to the information about the
build location, platform, architecture, and other build options.

For the record, this contribution is my original work and is released
under the same license that Avian uses, found in the license.txt
file in this repository.
2015-07-16 11:00:26 -04:00
Joshua Warner
e7dbe89c74 Merge pull request #444 from dicej/immortal-fixies
fix GC crash for bootimage builds
2015-07-07 21:31:32 -06:00
Joel Dice
630d9a165e fix GC crash for bootimage builds
In a bootimage=true build, we create allocate certain objects as
"immortal fixies", which means they will never been deallocated at
runtime and should only be visited if/when they point to objects which
might move during garbage collection.  However, there was a bug in the
following case:

 1. immortal fixie F is updated to point to a movable object M and
 thus F is added to the list of fixies to visit during the next minor
 collection (but not the next major one, since all reachable objects
 are visited during a major collection, and there's no point in
 visiting an unreachable object, whereas during a minor collection we
 have to visit F because we don't know if it's reachable or not)

 2. a major collection occurs, but F is not reachable and thus is not
 visited, whereas M is moved

 3. a minor collection occurs, and since F is still in the list, it is
 visited, but since it contains a stale pointer to M's old location,
 we crash

The solution is to ensure unreachable immortal fixies are removed from
the above list after each major collection, thus guaranteeing they
won't be visited on any subsequent collection.
2015-07-07 17:28:32 -06:00
Joshua Warner
ebd6bb2e6d Merge pull request #442 from dicej/master
fix GCC 5.1 compiler warnings/errors
2015-06-25 12:33:27 -07:00
Joel Dice
0797665859 Merge pull request #441 from bigfatbrowncat/cp_fix2
fixed abs() compilation for Android classpath on OSX
2015-06-24 11:23:42 -06:00
Ilya Mizus
2c7e3960d6 llabs call fixed 2015-06-24 17:49:56 +03:00
Joel Dice
1aaef6ce88 fix GCC 5.1 compiler warnings/errors
GCC is a lot more sensitive about -Werror=unused-variable, to the
point that stuff declared in header files but unused in a given
compilation unit is flagged.  This may be due to the way we're
here's the fix.
2015-06-23 14:07:48 -06:00
Ilya Mizus
fe6f72d16e fixed abs() compilation for Android classpath on OSX 2015-06-23 16:04:42 +03:00
Joshua Warner
6ace3b655c Merge pull request #438 from tarotanaka0/jnifix
fix JNI stack alignment (for #436)
2015-06-05 16:30:17 +00:00