Mercurial > hg > truffle
annotate ASSEMBLY_EXCEPTION @ 11825:463f51256c86
AMD64HotSpot: emit jump to IC miss handler directly instead of emitting it inside verfied_entry
for empty methods we emitted something like this if a inline cache is needed:
prefix:
00: < IC check >
...
0b: jne <ic_miss_call>
11: nop
...
verified_entry:
20: ret
ic_miss_call:
21: jmp <entry of runtime function>
when a method is deoptimized, HotSpot patches the verified_entry (0x20) with a
jump to a stub that handles call-sites that has been made non-entrant. since this jump
is 5 bytes long, it will overwrite ic_miss_call and blow up every caller that
calls this method via the unverified entry (prefix).
the fix is to emit the jump to the runtime function inside the unverfied entry:
prefix:
00: < IC check >
...
0b: je <verified_entry>
11: jeq <entry of runtime function>
16: nop
...
verified_entry:
20: ret
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Mon, 30 Sep 2013 09:32:18 +0200 |
parents | c18cbe5936b8 |
children |
rev | line source |
---|---|
0 | 1 |
2 OPENJDK ASSEMBLY EXCEPTION | |
3 | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
4 The OpenJDK source code made available by Oracle at openjdk.java.net and |
0 | 5 openjdk.dev.java.net ("OpenJDK Code") is distributed under the terms of the |
6 GNU General Public License <http://www.gnu.org/copyleft/gpl.html> version 2 | |
7 only ("GPL2"), with the following clarification and special exception. | |
8 | |
9 Linking this OpenJDK Code statically or dynamically with other code | |
10 is making a combined work based on this library. Thus, the terms | |
11 and conditions of GPL2 cover the whole combination. | |
12 | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
13 As a special exception, Oracle gives you permission to link this |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
14 OpenJDK Code with certain code licensed by Oracle as indicated at |
0 | 15 http://openjdk.java.net/legal/exception-modules-2007-05-08.html |
16 ("Designated Exception Modules") to produce an executable, | |
17 regardless of the license terms of the Designated Exception Modules, | |
18 and to copy and distribute the resulting executable under GPL2, | |
19 provided that the Designated Exception Modules continue to be | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
20 governed by the licenses under which they were offered by Oracle. |
0 | 21 |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
22 As such, it allows licensees and sublicensees of Oracle's GPL2 OpenJDK Code to |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
23 build an executable that includes those portions of necessary code that Oracle |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
24 could not provide under GPL2 (or that Oracle has provided under GPL2 with the |
0 | 25 Classpath exception). If you modify or add to the OpenJDK code, that new |
26 GPL2 code may still be combined with Designated Exception Modules if the | |
27 new code is made subject to this exception by its copyright holder. |