Compare commits

...

663 Commits

Author SHA1 Message Date
Alexander Lobas
7d31563471 JBR-4305 (#119)
* IDEA-283934 Top panel (toolbar, Editor tabs) hides under the Mac menu in full-screen mode

* IDEA-283934 Top panel (toolbar, Editor tabs) hides under the Mac menu in full-screen mode

* JBR-4305 IDEA-283934 Top panel (toolbar, Editor tabs) hides under the Mac menu in full-screen mode

* JBR-4305 IDEA-283934 Top panel (toolbar, Editor tabs) hides under the Mac menu in full-screen mode
2022-03-10 20:23:11 +01:00
Alexey Ushakov
36ded60698 JBR-3365 SIGILL at [libsystem_kernel] __kill in java.lang.RuntimeException: Failed to convert, no screen / primaryScreen
Wrapped the native exception and added logging
2022-03-10 14:28:18 +01:00
Dmitry Batrak
d53de90f8a JBR-3751 Window content isn't rendered with some window managers on Linux
(cherry picked from commit 8d22e4dcb0)
2022-03-09 13:40:40 +03:00
VladimirKempik
6196076b95 JBR-4291: Ability to ignore all add-opens 2022-03-04 15:05:43 +03:00
Vitaly Provodin
0ee50cbed6 JBR-4272 generate and save debug symbols for JBR on macos/linux 2022-03-03 19:34:10 +07:00
Roland Westrelin
d6e6d315d2 JBR-4256: backport 8280799: С2: assert(false) failed: cyclic dependency prevents range check elimination
Reviewed-by: thartmann, kvn
2022-02-28 18:31:45 +07:00
Roland Westrelin
0a3f7bd9b1 JBR-4256: 8275330: C2: assert(n->is_Root() || n->is_Region() || n->is_Phi() || n->is_MachMerge() || def_block->dominates(block)) failed: uses must be dominated by definitions
Reviewed-by: thartmann, chagedorn
(cherry picked from commit 3e798dd40c)
2022-02-28 18:31:43 +07:00
Vladimir Kempik
a2636bc8b2 JBR-4283: Provide native JBR builds for alpine Linux-aarch64 2022-02-28 11:11:24 +03:00
Dmitry Batrak
11ad455c7a JBR-4281 Window losing focus isn't detected in some cases on macOS
(cherry picked from commit 363650bbf4)
2022-02-25 00:35:34 +03:00
Vitaly Provodin
4141e567c0 exclude java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java due to 8282232 2022-02-23 06:32:04 +07:00
Ivan Lopatin
8373eeea85 exclude javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java due to 8253184 2022-02-23 06:31:35 +07:00
Nikita Gubarkov
9f10f63459 Fixed threading issues & restoring of default titlebar for custom titlebar on macOS 2022-02-21 22:16:31 +03:00
Nikita Provotorov
0cb7b4565c JBR-4271: JBR17 and dev built without --with-vendor-name parameter have invalid value of the java.vm.vendor property.
Changes the default JBR's vendor from "Oracle Corporation" to "JetBrains s.r.o.".
2022-02-21 22:35:35 +07:00
Nikita Provotorov
e19109f401 Revert "Changing the default JBR's vendor from "Oracle Corporation" to "JetBrains s.r.o"."
This reverts commit 409e4932ad. Just for JBR-4271.
2022-02-21 22:24:47 +07:00
Nikita Gubarkov
c450a40e16 JBR-4266 Fix JBR API ProxyInfoResolvingTest, missing JBR-side implementation now doesn't throw an exception 2022-02-21 15:20:26 +03:00
Maxim Kartashev
fe79f047d0 fixup! JBR-3917 Problem using windows certificate store (trustStoreType=Windows-ROOT not recognized) 2022-02-18 13:25:20 +03:00
Vladimir Kempik
484bc6f18f JBR-4242:Provide native JBR builds for alpine Linux 2022-02-18 09:36:56 +03:00
Nikita Gubarkov
1af965d658 Refactored internal services in JBR API
Fixed IllegalAccessException when retrieving lists of known proxies & services
2022-02-17 20:25:15 +03:00
Maxim Kartashev
d330782b50 fixup! JBR-3917 Problem using windows certificate store (trustStoreType=Windows-ROOT not recognized) 2022-02-17 15:20:49 +03:00
Maxim Kartashev
ff6002ab87 JBR-3917 Problem using windows certificate store (trustStoreType=Windows-ROOT not recognized) 2022-02-17 12:31:06 +03:00
Nikita Gubarkov
ee9fe4ee55 Custom macOS window decorations via JBR API 2022-02-16 22:11:59 +03:00
Nikita Gubarkov
b8e1373b53 Added internal services to JBR API 2022-02-16 22:10:30 +03:00
Vitaly.Provodin
1b9f385336 exclude java/awt/Dialog/NonResizableDialogSysMenuResize/NonResizableDialogSysMenuResize.java and java/awt/Dialog/NestedDialogs/Modeless/NestedModelessDialogTest.java on windows-all 2022-02-16 16:37:32 +07:00
Vitaly Provodin
cd9cc5f395 exclude javax/imageio/plugins/external_plugin_tests/TestClassPathPlugin.sh from commit testing 2022-02-16 16:34:53 +07:00
Vitaly Provodin
54199dc06c JBR-4154 extract version info from sources 2022-02-16 16:14:21 +07:00
Anton Tarasov
66ddc58397 JBR-4208 LWCToolkit.invokeAndWait should not stuck on invocation loss 2022-02-16 11:38:31 +03:00
Nikita Gubarkov
c5d124735c JBR API v0.0.4 - Implemented client-side fallbacks for JBR API 2022-02-15 18:30:17 +03:00
Nikita Provotorov
409e4932ad Changing the default JBR's vendor from "Oracle Corporation" to "JetBrains s.r.o". 2022-02-15 04:27:14 +07:00
Nikita Gubarkov
3bbd930114 JBR API v0.0.3
JBR-4228 report HTMINBUTTON, HTMAXBUTTON, HTCLOSE, HTMENU, HTCAPTION targets via JBR API & handle corresponding non-client mouse events for windows with custom decorations
2022-02-14 19:17:39 +03:00
Alexey Ushakov
0019142eaf JBR-4224 java/awt/image/VolatileImage/GradientPaints.java: Number of mismatches (300000) exceeds limit (54000) with tolerance=5
Updated reg test to handle contentLost event
2022-02-11 16:44:31 +01:00
Artem Semenov
41feaaedf0 8281338: NSAccessibilityPressAction action for tree node and NSAccessibilityShowMenuAcgtion action not working
Reviewed-by: ant, kizune
2022-02-10 17:58:28 +03:00
Vitaly Provodin
3948c3538c JBR-4099 make test-image on jbrsdk_jcef step, introduce do_maketest flag 2022-02-10 16:30:41 +07:00
Maxim Kartashev
497d00d82e JBR-3950 javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java: The expected background color for Selected Text was not found
Made Robot image capture work when sun.java2d.uiScale
doesn't match the desktop scale on Linux.
Improved tests to verify that color picking is precise to the pixel
(only on Linux and Windows; Mac may not always give precise color
of the desired pixel).
2022-02-10 12:24:59 +03:00
Dmitry Batrak
37ceee0ce3 JBR-4194 RenderPerfTest: TextNoAA >10% degradation in OGL
(cherry picked from commit 42fa3e3d34)
2022-02-10 11:48:28 +03:00
Vitaly Provodin
74dfdfbbfe update the link to JBR17 for IDEA 2022.1 EAP 2022-02-10 04:04:26 +07:00
Nikita Provotorov
8f1223d69a JBR-3299: The test /jb/sun/awt/macos/NationalLayoutTest/Layout_ABC.java fails on MacOS.
Fixes the Layout_*.java tests by giving them to know the <Ctrl + key> combinations can generate KEY_TYPED event.

(cherry picked from commit eae5198b20)
2022-02-09 01:52:57 +07:00
Fairoz Matte
6d4c958c9a 8274718: runtime/cds/appcds/LambdaEagerInit.java fails with -XX:-CompactStrings
Reviewed-by: iklam, ccheung
(cherry picked from commit d8f6b6c19a)
2022-02-08 10:48:58 +07:00
Alexey Ushakov
8730341c70 JBR-4112 macOS: SIGILL at [libsystem_kernel] __kill in OOME: Java heap space at java.awt.image.DataBufferInt.<init>
Reg test update: replace management api with jfr
2022-02-07 10:49:06 +01:00
Vitaly Provodin
2aff4529b9 exclude java/awt/Frame/FrameSetSizeStressTest/FrameSetSizeStressTest.java on Wayland
sun/security/pkcs11/Signature/TestDSAKeyLength.java                                 8279941 linux-all
2022-02-05 04:04:04 +07:00
Vitaly Provodin
efd58e83eb exclude sun/security/pkcs11/Signature/TestDSAKeyLength.java due to 8279941 2022-02-04 14:53:40 +07:00
Maxim Kartashev
1aa5510721 JBR-4064 Windows: update build scripts to produce more deterministic output
Changed -pathmap option value to use "normal", Unix-style paths. Those will
be changed to Windows style by the fixpath script. But if Windows-style paths
are used, this script will wreck them by removing the backslash characters.
2022-02-04 08:47:17 +03:00
Vitaly Provodin
c14bfc9349 JBR-4099 make test-image on jbrsdk_jcef step 2022-02-02 17:04:57 +07:00
Maxim Kartashev
4d7b0f15c1 JBR-4064 Windows: update build scripts to produce more deterministic output
Passed the configure script options necessary to enable reproducible builds
on Windows. With this options, the resulting jars are reproducible, but
native executables and libraries aren't.
2022-02-02 10:15:26 +03:00
Maxim Kartashev
ac03a7a1e8 JBR-3950 javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java: The expected background color for Selected Text was not found
The Gtk API for capturing images works with unscaled coordinates and
sizes, but Robot pre-scales both even before passing the data to the
native code. This commit undoes that for Gtk3 in the native code.

Also fixed two HiDPI tests that should have been failing due to the
above bug, but didn't because they only checked one point in the middle
of a large painted area. Changed those tests to verify 5 pixels instead:
4 at the corners and one in the middle.

Also marked the relevant tests that use Robot as a color picker to
require "pure" X server on Linux so that they don't fail under XWayland.

(cherry picked from commit 93ba9e86f9)
2022-01-31 21:51:59 -08:00
Nikita Provotorov
ba5209ec06 JBR-4207, IDEA-287559: IDEA incorrectly handles AltGr key modifier.
This commit reverts the fix of JDK-8041928 and disables its regression tests.
2022-02-01 01:57:50 +07:00
Nikita Provotorov
ed60a9c2bd JBR-4207, IDEA-287559: IDEA incorrectly handles AltGr key modifier.
Renames the test AltGrMustGenerateAltGrModifierTest3838.java to AltGrMustGenerateAltGrModifierTest4207.java.
2022-02-01 01:57:50 +07:00
Dmitry Batrak
9b4827a596 JBR-4186 Unexpected desktop switch after moving a window to another desktop
(cherry picked from commit 67b6cd871f)
2022-01-31 13:46:46 +03:00
Maxim Kartashev
609406c21b JBR-4173 Tier1 test failures in jdk/javadoc/doclet/testModules
Introduction of JBR API changed the order of modules appearing in Java
Doc. This commit updates the corresponding tests to match the current
output with JBR API.
2022-01-28 17:17:38 +03:00
Mikhail Grishchenko
d9fca0ae84 JBR-3975 added script comparing jbr size 2022-01-28 13:31:17 +07:00
Vitaly Provodin
b5dfaff0b2 JBR-4154 extract version info from tags 2022-01-28 11:41:02 +07:00
Fairoz Matte
0d120c99f8 8277529: SIGSEGV in C2 CompilerThread Node::rematerialize() compiling Packet::readUnsignedTrint
Reviewed-by: thartmann, chagedorn
Backport-of: 01cb2b9883
2022-01-28 11:25:44 +07:00
Evan Whelan
b60a1fc232 8263364: sun/net/www/http/KeepAliveStream/KeepAliveStreamCloseWithWrongContentLength.java wedged in getInputStream
Reviewed-by: dfuchs
Backport-of: 5caa77b043
2022-01-28 11:25:43 +07:00
Aleksey Shipilev
cf1b173338 8277981: String Deduplication table is never cleaned up due to bad dead_factor_for_cleanup
Backport-of: 8d7958e469
2022-01-28 11:25:42 +07:00
Alex Kasko
afee118edf 8277159: Fix java/nio/file/FileStore/Basic.java test by ignoring /run/user/* mount points
Backport-of: b6876649a8
2022-01-28 11:25:41 +07:00
Matthias Baesken
b987b3e5a8 8274265: Suspicious string concatenation in logTestUtils.inline.hpp
Backport-of: c57a6c62ba
2022-01-28 11:25:40 +07:00
Richard Reingruber
ec795e498c 8274716: JDWP Spec: the description for the Dispose command confuses suspend with resume.
Reviewed-by: sspitsyn
Backport-of: 29dcbb72a2
2022-01-28 11:25:39 +07:00
Anton Tarasov
0011d15c7d 8275720: CommonComponentAccessibility.createWithParent isWrapped causes mem leak
Reviewed-by: kizune
Backport-of: 574f8903ee
2022-01-28 11:25:38 +07:00
Claes Redestad
9154812750 8275863: Use encodeASCII for ASCII-compatible DoubleByte encodings
Backport-of: 6c05cc9d15
2022-01-28 11:25:36 +07:00
Claes Redestad
0b25395903 8274242: Implement fast-path for ASCII-compatible CharsetEncoders on x86
Backport-of: aaa36cc006
2022-01-28 11:25:35 +07:00
Evan Whelan
b364b35049 8276774: Cookie stored in CookieHandler not sent if user headers contain cookie
Reviewed-by: dfuchs
Backport-of: 03debf2775
2022-01-28 11:25:33 +07:00
Alexander Zuev
90a8c9e0b5 8275071: [macos] A11y cursor gets stuck when combobox is closed
Backport-of: 5d249c46ab
2022-01-28 11:24:15 +07:00
Alexander Zuev
b6b87d5005 8264297: Create implementation for NSAccessibilityProgressIndicator protocol peer
Backport-of: 851a362479
2022-01-28 11:22:01 +07:00
Sean Coffey
41c809d3f3 8272859: Javadoc external links should only have feature version number in URL
Backport-of: b94fd32f08
2022-01-28 11:22:00 +07:00
Ramkumar Sunderbabu
5921059497 8271323: [TESTBUG] serviceability/sa/ClhsdbCDSCore.java fails with -XX:TieredStopAtLevel=1
Backport-of: 9bc52afa48
2022-01-28 11:21:58 +07:00
Artem Semenov
bf86fcb0be 8273678: TableAccessibility and TableRowAccessibility miss autorelease
Reviewed-by: kizune, pbansal, ant
Backport-of: 3221a14f9e
2022-01-28 11:21:57 +07:00
Alex Kasko
6d31c536cf 8272047: java/nio/channels/FileChannel/Transfer2GPlus.java failed with Unexpected transfer size: 2147418112
Backport-of: b53828b7c2
2022-01-28 11:21:56 +07:00
Anton Tarasov
d9b0e176b0 8275809: crash in [CommonComponentAccessibility getCAccessible:withEnv:]
Reviewed-by: kizune, pbansal
Backport-of: 7c88a59b7b
2022-01-28 11:21:55 +07:00
Anton Tarasov
ad639db7d7 8275819: [TableRowAccessibility accessibilityChildren] method is ineffective
Reviewed-by: kizune, pbansal
Backport-of: b98ed55060
2022-01-28 11:21:54 +07:00
Alexander Zuev
b5047905a4 8264293: Create implementation for NSAccessibilityMenu protocol peer
8264296: Create implementation for NSAccessibilityPopUpButton protocol peer
8264295: Create implementation for NSAccessibilityMenuItem protocol peer
8264294: Create implementation for NSAccessibilityMenuBar protocol peer

Backport-of: 8f5a8f740b
2022-01-28 11:21:53 +07:00
Roger Riggs
e727549fc7 8277093: Vector should throw ClassNotFoundException for a missing class of an element
Reviewed-by: smarks
2022-01-28 11:21:51 +07:00
Stefan Karlsson
e1532defb9 8277212: GC accidentally cleans valid megamorphic vtable inline caches
Backport-of: 976c2bb056
2022-01-28 11:21:50 +07:00
Alex Kasko
6530fc05bb 8140241: (fc) Data transfer from FileChannel to itself causes hang in case of overlap
Backport-of: 428d51694f
2022-01-28 11:21:49 +07:00
Alex Kasko
94afbb913f 8272095: ProblemList java/nio/channels/FileChannel/Transfer2GPlus.java on linux-aarch64
Backport-of: f4cf2f7cef
2022-01-28 11:21:48 +07:00
Martin Doerr
10fdd46bb6 8276927: [ppc64] Port shenandoahgc to linux on ppc64le
Reviewed-by: shade
Backport-of: 57eb864765
2022-01-28 11:21:47 +07:00
Sean Coffey
035c5b2cb9 8275811: Incorrect instance to dispose
Backport-of: cddc6ce446
2022-01-28 11:21:46 +07:00
Prajwal Kumaraswamy
a9775f3bc0 8274736: Concurrent read/close of SSLSockets causes SSLSessions to be invalidated unnecessarily
Backport-of: 8822d41fdc
2022-01-28 11:21:44 +07:00
Jie Fu
a0c5dcc044 8276139: TestJpsHostName.java not reliable, better to expand HostIdentifierCreate.java test
Backport-of: 2af9e5976f
2022-01-28 11:21:43 +07:00
Artem Semenov
c5f50b0ac3 8277195: missing CAccessibility definition in [CommonComponentAccessibility accessibilityHitTest]
Reviewed-by: ant, kizune, pbansal
2022-01-28 11:21:42 +07:00
Adam Farley
0e9cb59458 8273235: tools/launcher/HelpFlagsTest.java Fails on Windows 32bit
Backport-of: fc0fe25679
2022-01-28 11:21:41 +07:00
Guoxiong Li
a72afdcce2 8274942: AssertionError at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:155)
Backport-of: 2b02b6f513
2022-01-28 11:21:39 +07:00
Aleksey Shipilev
060e6dc535 8275226: Shenandoah: Relax memory constraint for worker claiming tasks/ranges
Backport-of: 3b0b6adc3d
2022-01-28 11:21:38 +07:00
Aleksey Shipilev
10177f87da 8276864: Update boot JDKs to 17.0.1 in GHA
Reviewed-by: clanger
Backport-of: f561d3c194
2022-01-28 11:21:38 +07:00
Aleksey Shipilev
f5518c018b 8275426: PretouchTask num_chunks calculation can overflow
Reviewed-by: kbarrett
Backport-of: 60cb27dcda
2022-01-28 11:21:37 +07:00
Sean Coffey
12e14bb4b7 8277224: sun.security.pkcs.PKCS9Attributes.toString() throws NPE
Backport-of: 6bb04626af
2022-01-28 11:21:36 +07:00
Mandy Chung
906eef2412 8275703: System.loadLibrary fails on Big Sur for libraries hidden from filesystem
Reviewed-by: phh
Backport-of: 309acbf0e8
2022-01-28 11:21:35 +07:00
Thomas Schatzl
2c24d922b5 8272170: Missing memory barrier when checking active state for regions
Backport-of: 35a831d5a7
2022-01-28 11:21:34 +07:00
Zhengyu Gu
c4219bef06 8276801: gc/stress/CriticalNativeStress.java fails intermittently with Shenandoah
Backport-of: 73e6d7d74d
2022-01-28 11:21:26 +07:00
Alex Kasko
1999623480 8271308: (fc) FileChannel.transferTo() transfers no more than Integer.MAX_VALUE bytes in one call
Backport-of: e2c5bfe083
2022-01-28 11:21:16 +07:00
Alex Kasko
2cd05cb7f1 8233020: (fs) UnixFileSystemProvider should use StaticProperty.userDir().
Backport-of: fd4de1ed40
2022-01-28 11:21:15 +07:00
Thomas Stuefe
4854fde98c 8277029: JMM GetDiagnosticXXXInfo APIs should verify output array sizes
Backport-of: b8d33a2a4e
2022-01-28 11:21:14 +07:00
Aleksey Shipilev
74cfa29cfe 8272854: split runtime/CommandLine/PrintTouchedMethods.java test
Backport-of: c94dc2ab60
2022-01-28 11:21:05 +07:00
Aleksey Shipilev
db17e0a923 8275604: Zero: Reformat opclabels_data
Backport-of: 724bf3be14
2022-01-28 11:20:55 +07:00
Aleksey Shipilev
f36ad85954 8276845: (fs) java/nio/file/spi/SetDefaultProvider.java fails on x86_32
Backport-of: 0f463a7bf7
2022-01-28 11:20:55 +07:00
Aleksey Shipilev
8fe827966f 8276805: java/awt/print/PrinterJob/CheckPrivilege.java fails due to disabled SecurityManager
Backport-of: fd0a25e62b
2022-01-28 11:20:54 +07:00
Aleksey Shipilev
9089e97233 8276306: jdk/jshell/CustomInputToolBuilder.java fails intermittently on storage acquisition
Backport-of: 75adf54bdc
2022-01-28 11:20:45 +07:00
Andrew Haley
69fbf4816d 8271567: AArch64: AES Galois CounterMode (GCM) interleaved implementation using vector instructions
Reviewed-by: adinn
Backport-of: 4f3b626a36
2022-01-28 11:20:36 +07:00
Zhengyu Gu
3b7eefd5f9 8276205: Shenandoah: CodeCache_lock should always be held for initializing code cache iteration
Reviewed-by: shade
Backport-of: 99b7b95e01
2022-01-28 11:20:36 +07:00
Martin Doerr
328029e1de 8268882: C2: assert(n->outcnt() != 0 || C->top() == n || n->is_Proj()) failed: No dead instructions after post-alloc
Backport-of: 0699220830
2022-01-28 11:20:26 +07:00
Yoshiki Sato
e71c8161b0 8275766: (tz) Update Timezone Data to 2021e
8275849: TestZoneInfo310.java fails with tzdata2021e
8276536: Update TimeZoneNames files to follow the changes made by JDK-8275766

Reviewed-by: coffeys
2022-01-28 11:20:17 +07:00
Aleksey Shipilev
eabc3d4960 8263059: security/infra/java/security/cert/CertPathValidator/certification/ComodoCA.java fails due to revoked cert
Backport-of: 4bc9b04984
2022-01-28 11:20:16 +07:00
Aleksey Shipilev
4412ce93ec 8276854: Windows GHA builds fail due to broken Cygwin
Backport-of: 403f3185f0
2022-01-28 11:20:08 +07:00
Ao Qi
0cce368b34 8273595: tools/jpackage tests do not work on apt-based Linux distros like Debian
Backport-of: f189dff5cb
2022-01-28 11:19:59 +07:00
Alex Kasko
3128b837d3 8271315: Redo: Nimbus JTree renderer properties persist across L&F changes
Backport-of: e43a907f20
2022-01-28 11:19:57 +07:00
Alex Kasko
8afb6b199c 8272369: java/io/File/GetXSpace.java failed with "RuntimeException: java.nio.file.NoSuchFileException: /run/user/0"
Backport-of: a68b5b9c1d
2022-01-28 11:19:50 +07:00
Aleksey Shipilev
b00dd0df6d 8273486: Zero: Handle DiagnoseSyncOnValueBasedClasses VM option
Reviewed-by: phh
2022-01-28 11:19:48 +07:00
Aleksey Shipilev
9be936a8a2 8276105: C2: Conv(D|F)2(I|L)Nodes::Ideal should handle rounding correctly
Reviewed-by: aph
Backport-of: 0488ebdf14
2022-01-28 11:19:39 +07:00
Aleksey Shipilev
0c81cfcdfc 8276846: JDK-8273416 is incomplete for UseSSE=1
Reviewed-by: aph
Backport-of: a0b84453b0
2022-01-28 11:19:30 +07:00
Aleksey Shipilev
09171c000d 8274521: jdk/jfr/event/gc/detailed/TestGCLockerEvent.java fails when other GC is selected
Backport-of: 0828273b89
2022-01-28 11:19:29 +07:00
Aleksey Shipilev
f1a9026d78 8268860: Windows-Aarch64 build is failing in GitHub actions
Backport-of: acc3d99535
2022-01-28 11:19:29 +07:00
Aleksey Shipilev
7939c32bd3 8276157: C2: Compiler stack overflow during escape analysis on Linux x86_32
Backport-of: 465d350d0b
2022-01-28 11:19:20 +07:00
Tobias Hartmann
c5e0ec78a6 8276112: Inconsistent scalar replacement debug info at safepoints
Backport-of: c29cab8ab4
2022-01-28 11:19:12 +07:00
Alex Kasko
2367542a3a 8268294: Reusing HttpClient in a WebSocket.Listener hangs.
Backport-of: 2d088fa91d
2022-01-28 11:19:10 +07:00
Alex Kasko
332af97374 8269481: SctpMultiChannel never releases own file descriptor
Backport-of: d1cecaaa22
2022-01-28 11:18:56 +07:00
Aleksey Shipilev
ae8696f031 8273416: C2: assert(false) failed: bad AD file after JDK-8252372 with UseSSE={0,1}
Backport-of: 89ade1d7e8
2022-01-28 11:18:46 +07:00
Aleksey Shipilev
dd39d8a55c 8274560: JFR: Add test for OldObjectSample event when using Shenandoah
Backport-of: ef0922e885
2022-01-28 11:18:45 +07:00
Alex Kasko
542e5dc8c5 8268927: Windows: link error: unresolved external symbol "int __cdecl convert_to_unicode(char const *,wchar_t * *)"
Backport-of: e84461072a
2022-01-28 11:18:45 +07:00
Alex Kasko
2798a15be6 8274606: Fix jaxp/javax/xml/jaxp/unittest/transform/SurrogateTest.java test
Backport-of: 7eb0372e55
2022-01-28 11:18:37 +07:00
Sergey Nazarkin
0dbd4008eb 8274501: c2i entry barriers read int as long on AArch64
Backport-of: f08180f35f
2022-01-28 11:18:29 +07:00
Sandhya Viswanathan
e774738ae8 8276025: Hotspot's libsvml.so may conflict with user dependency
Reviewed-by: kvn
Backport-of: 9ad4d3d06b
2022-01-28 11:18:20 +07:00
Andrew John Hughes
60fd9c18cd 8275872: Sync J2DBench run and analyze Makefile targets with build.xml
Backport-of: f1f5e2690c
2022-01-28 11:18:17 +07:00
Alex Kasko
90c64dc20b 8238649: Call new Win32 API SetThreadDescription in os::set_native_thread_name
Backport-of: 9f3c7e74ff
2022-01-28 11:18:17 +07:00
Aleksey Shipilev
410c59ebc2 8261579: AArch64: Support for weaker memory ordering in Atomic
Reviewed-by: aph
Backport-of: a97715755d
2022-01-28 11:18:15 +07:00
Sandhya Viswanathan
eafe1b197f 8273450: Fix the copyright header of SVML files
Backport-of: d7efd0e8cf
2022-01-28 11:18:13 +07:00
Andrew John Hughes
cd0adc909b 8276572: Fake libsyslookup.so library causes tooling issues
Backport-of: a472433209
2022-01-28 11:18:12 +07:00
Aleksey Shipilev
edfccd5922 8275666: serviceability/jvmti/GetObjectSizeClass.java shouldn't have vm.flagless
Backport-of: cea3f01046
2022-01-28 11:18:12 +07:00
Aleksey Shipilev
becb0a0468 8274523: java/lang/management/MemoryMXBean/MemoryTest.java test should handle Shenandoah
Backport-of: f8415a9b2f
2022-01-28 11:18:11 +07:00
Aleksey Shipilev
15c92b8166 8274522: java/lang/management/ManagementFactory/MXBeanException.java test fails with Shenandoah
Backport-of: c0533ef2d8
2022-01-28 11:18:11 +07:00
Aleksey Shipilev
182bb41f86 8276550: Use SHA256 hash in build.tools.depend.Depend
Backport-of: afb502e28a
2022-01-28 11:18:10 +07:00
Ilarion Nakonechnyy
1edd1e825a 8273026: Slow LoginContext.login() on multi threading application
Backport-of: c0cda1db4f
2022-01-28 11:18:10 +07:00
Alex Kasko
48622c0349 8271895: UnProblemList javax/swing/JComponent/7154030/bug7154030.java in JDK18
Backport-of: 7728423f8a
2022-01-28 11:17:30 +07:00
Alexey Pavlyutkin
ac3d2d08d2 8270533: AArch64: size_fits_all_mem_uses should return false if its output is a CAS
Backport-of: 6750c34c92
2022-01-28 11:16:10 +07:00
Zhengyu Gu
6b4b97338c 8276201: Shenandoah: Race results degenerated GC to enter wrong entry point
Backport-of: dbf5100dd7
2022-01-28 11:15:57 +07:00
Yi Yang
45d8c9c970 8273021: C2: Improve Add and Xor ideal optimizations
Backport-of: a73c06de2a
2022-01-28 11:15:49 +07:00
Yi Yang
86ba0fa9ef 8270901: Typo PHASE_CPP in CompilerPhaseType
Backport-of: 072fe486c9
2022-01-28 11:15:47 +07:00
Zhengyu Gu
a7c13c2ecd 8274338: com/sun/jdi/RedefineCrossEvent.java failed "assert(m != __null) failed: NULL mirror"
Backport-of: 172aed1a2d
2022-01-28 11:15:47 +07:00
Alex Kasko
b6303f542c 8272345: macos doesn't check os::set_boot_path() result
Backport-of: bd27bb9cbe
2022-01-28 11:15:46 +07:00
Alex Kasko
4aa3dc209c 8272114: Unused _last_state in osThread_windows
Backport-of: 11cddd3261
2022-01-28 11:15:45 +07:00
Alex Kasko
ed5de3e56e 8268626: Remove native pre-jdk9 support for jtreg failure handler
Backport-of: 2e70bc35df
2022-01-28 11:15:44 +07:00
Alex Kasko
c668f0d0b4 4819544: SwingSet2 JTable Demo throws NullPointerException
Backport-of: 64d18d45ef
2022-01-28 11:15:42 +07:00
Alex Kasko
c6a764930d 8268457: XML Transformer outputs Unicode supplementary character incorrectly to HTML
Backport-of: 83bce94cc8
2022-01-28 11:15:41 +07:00
Alex Kasko
c75dbd734b 8266510: Nimbus JTree default tree cell renderer does not use selected text color
Backport-of: ecd445562f
2022-01-28 11:15:40 +07:00
Alex Kasko
8f69f5e367 8269637: javax/swing/JFileChooser/FileSystemView/SystemIconTest.java fails on windows
Backport-of: a033866d78
2022-01-28 11:15:39 +07:00
Alex Kasko
78d98bd187 8268361: Fix the infinite loop in next_line
Backport-of: 72672277e4
2022-01-28 11:15:38 +07:00
Alex Kasko
06d5800d30 8268464: Remove dependancy of TestHttpsServer, HttpTransaction, HttpCallback from open/test/jdk/sun/net/www/protocol/https/ tests
Backport-of: 7621fa37ef
2022-01-28 11:15:37 +07:00
Alex Kasko
55b6d27961 8269216: Useless initialization in com/sun/crypto/provider/PBES2Parameters.java
Backport-of: e515873f88
2022-01-28 11:15:36 +07:00
Alex Kasko
5cb3b2e787 8270290: NTLM authentication fails if HEAD request is used
Backport-of: 3e0d7c33d4
2022-01-28 11:15:35 +07:00
Jie Fu
7c90e1ed97 8276066: Reset LoopPercentProfileLimit for x86 due to suboptimal performance
Backport-of: 0ab910d626
2022-01-28 11:15:34 +07:00
Saravana Kumar Vijayasekaran
ec431706ee 8276076: Updating RE Configs for BUILD REQUEST 17.0.2+3
Reviewed-by: kcr, erikj
2022-01-28 11:15:06 +07:00
Mandy Chung
fa8d0fe822 8274848: LambdaMetaFactory::metafactory on REF_invokeSpecial impl method has incorrect behavior
Backport-of: 21da218387
2022-01-28 11:11:39 +07:00
Ekaterina Vergizova
3207a7b73a 8275302: unexpected compiler error: cast, intersection types and sealed
Backport-of: fd10f1996e
2022-01-28 11:11:38 +07:00
Erik Joelsson
f0988f43f6 8276122: Change openjdk project in jcheck to jdk-updates
Reviewed-by: iris, kcr
2022-01-28 11:11:30 +07:00
Christoph Langer
e3fcafcf77 8276130: Fix Github Actions of JDK17u to account for update version scheme
Reviewed-by: stuefe
2022-01-28 11:11:17 +07:00
Olga Mikhaltsova
60f34376ed 8273575: memory leak in appendBootClassPath(), paths must be deallocated
Backport-of: 74ffe12267
2022-01-28 11:11:09 +07:00
Ao Qi
bcad02cbf5 8273965: some testlibrary_tests/ir_framework tests fail when c1 disabled
Backport-of: 517405e462
2022-01-28 11:11:08 +07:00
Thejasvi Voniadka
6bbc645a21 8174819: java/nio/file/WatchService/LotsOfEvents.java fails intermittently
Backport-of: 633eab23f0
2022-01-28 11:11:07 +07:00
Ao Qi
3c4355dc90 8275104: IR framework does not handle client VM builds correctly
Backport-of: 1da5e6b0e2
2022-01-28 11:10:54 +07:00
Alexey Pavlyutkin
dcbe0b7bd8 8190753: (zipfs): Accessing a large entry (> 2^31 bytes) leads to a negative initial size for ByteArrayOutputStream
Backport-of: c3d8e9228d
2022-01-28 11:10:49 +07:00
Evan Whelan
7a0b62b20c 8274779: HttpURLConnection: HttpClient and HttpsClient incorrectly check request method when set to POST
Backport-of: 45ce06c9f3
2022-01-28 11:10:48 +07:00
Ilarion Nakonechnyy
0254a010c8 8272305: several hotspot runtime/modules don't check exit codes
Backport-of: b2c272d4e2
2022-01-28 11:10:47 +07:00
Ilarion Nakonechnyy
608f519563 8272391: Undeleted debug information
Backport-of: e4766ee0aa
2022-01-28 11:10:40 +07:00
Ilarion Nakonechnyy
5c69760cf1 8272335: runtime/cds/appcds/MoveJDKTest.java doesn't check exit codes
Backport-of: 75a06421e5
2022-01-28 11:10:32 +07:00
Ilarion Nakonechnyy
9f263c851c 8271215: Fix data races in G1PeriodicGCTask
Backport-of: f2c359a882
2022-01-28 11:10:31 +07:00
Naoto Sato
54924e53d0 8275145: file.encoding system property has an incorrect value on Windows
Reviewed-by: iris
2022-01-28 11:10:29 +07:00
Ravi Reddy
1b97719353 8251329: (zipfs) Files.walkFileTree walks infinitely if zip has dir named "." inside
Reviewed-by: lancea
Backport-of: 3e3051e2ee
2022-01-28 11:10:28 +07:00
Alexey Bakhtin
bbbe3586d5 8274205: Handle KDC_ERR_SVC_UNAVAILABLE error code from KDC
Backport-of: 5ba0d09fe4
2022-01-28 11:10:27 +07:00
Alexey Bakhtin
51faccae87 8270946: X509CertImpl.getFingerprint should not return the empty String
Backport-of: fc80a6b493
2022-01-28 11:10:26 +07:00
Matthias Baesken
0c03472df7 8273808: Cleanup AddFontsToX11FontPath
Backport-of: 35f6f1d69f
2022-01-28 11:10:25 +07:00
Martin Doerr
09457346ad 8274851: [ppc64] Port zgc to linux on ppc64le
Backport-of: 337b73a459
2022-01-28 11:10:24 +07:00
Saravana Kumar Vijayasekaran
9c343f9e3f 8271335: Updating RE Configs for BUILD REQUEST 17.0.1+4
Reviewed-by: rsunderbabu, tvoniadka, coffeys
2022-01-28 11:10:23 +07:00
Ekaterina Vergizova
b8682d18d8 8274347: Passing a *nested* switch expression as a parameter causes an NPE during compile
Backport-of: b870468bdc
2022-01-28 11:10:22 +07:00
Ekaterina Vergizova
ee4cfb4957 8273234: extended 'for' with expression of type tvar causes the compiler to crash
Backport-of: 8c37909274
2022-01-28 11:10:21 +07:00
Martin Doerr
7aa7e87613 8275049: [ZGC] missing null check in ZNMethod::log_register
Backport-of: cf828673a9
2022-01-28 11:10:20 +07:00
Martin Doerr
c02e44f5fe 8274401: C2: GraphKit::load_array_element bypasses Access API
Backport-of: a8210c53e7
2022-01-28 11:10:19 +07:00
Martin Doerr
a502988ede 8274770: [PPC64] resolve_jobject needs a generic implementation to support load barriers
Backport-of: e16b93ad52
2022-01-28 11:10:18 +07:00
Martin Doerr
0ccc4c2723 8271855: [TESTBUG] Wrong weakCompareAndSet assumption in UnsafeIntrinsicsTest
Backport-of: c4d115701d
2022-01-28 11:10:17 +07:00
Martin Doerr
cfc18dc57c 8274550: c2i entry barriers read int as long on PPC
Backport-of: 5e4b514e6e
2022-01-28 11:10:16 +07:00
Martin Doerr
32b236925a 8274773: [TESTBUG] UnsafeIntrinsicsTest intermittently fails on weak memory model platform
Backport-of: 49f8ce6e9c
2022-01-28 11:10:16 +07:00
Ilarion Nakonechnyy
c395f39b8f 8272720: Fix the implementation of loop unrolling heuristic with LoopPercentProfileLimit
Backport-of: 1ea437a4b8
2022-01-28 11:10:15 +07:00
Phil Race
2bea35ea99 8275131: Exceptions after a touchpad gesture on macOS
Backport-of: 89999f70e0
2022-01-28 11:09:16 +07:00
Zhengyu Gu
ac6240d62a 8275051: Shenandoah: Correct ordering of requested gc cause and gc request flag
Backport-of: 1ab64143c0
2022-01-28 11:05:26 +07:00
Zhengyu Gu
137b9de6d0 8273614: Shenandoah: intermittent timeout with ConcurrentGCBreakpoint tests
Backport-of: 3f07337722
2022-01-28 11:05:25 +07:00
Harold Seigel
57a175d0c3 8273505: runtime/cds/appcds/loaderConstraints/DynamicLoaderConstraintsTest.java#default-cl crashed with SIGSEGV in MetaspaceShared::link_shared_classes
Reviewed-by: ccheung
Backport-of: a67f0f9dc0
2022-01-28 11:05:23 +07:00
Yoshiki Sato
fdce96a5a1 8274407: (tz) Update Timezone Data to 2021c
8274467: TestZoneInfo310.java fails with tzdata2021b
8274468: TimeZoneTest.java fails with tzdata2021b

Reviewed-by: coffeys
2022-01-28 11:05:22 +07:00
Goetz Lindenmaier
f88d4379ed 8269656: The test test/langtools/tools/javac/versions/Versions.java has duplicate test cycles
Backport-of: 04b73bc4e0
2022-01-28 11:05:21 +07:00
Goetz Lindenmaier
d983325000 8137101: [TEST_BUG] javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java failure due to timing
Reviewed-by: mdoerr
Backport-of: dcdb1b6aaa
2022-01-28 11:05:20 +07:00
Ao Qi
4b97ca1957 8270517: Add Zero support for LoongArch
Backport-of: e92e2fd4e0
2022-01-28 11:05:19 +07:00
Matthias Baesken
a63676451a 8273176: handle latest VS2019 in abstract_vm_version
Backport-of: 0e14bf70cf
2022-01-28 11:05:18 +07:00
Tobias Hartmann
58734e492a 8274145: C2: condition incorrectly made redundant with dominating main loop exit condition
Backport-of: 2aacd4220a
2022-01-28 11:05:16 +07:00
Tobias Hartmann
9c62d0f352 8271459: C2: Missing NegativeArraySizeException when creating StringBuilder with negative capacity
Reviewed-by: chagedorn
Backport-of: 3953e0774c
2022-01-28 11:05:14 +07:00
Tobias Hartmann
bfcbf80361 8272562: C2: assert(false) failed: Bad graph detected in build_loop_late
Backport-of: 980c50dc60
2022-01-28 11:05:13 +07:00
Mat Carter
b058c95245 8267256: Extend minimal retry for loopback connections on Windows to PlainSocketImpl
Reviewed-by: clanger
2022-01-28 11:05:12 +07:00
Jie Fu
daa1f215cc 8275008: gtest build failure due to stringop-overflow warning with gcc11
Backport-of: c55dd365e3
2022-01-28 11:05:10 +07:00
Tobias Hartmann
800986663b 8274406: RunThese30M.java failed "assert(!LCA_orig->dominates(pred_block) || early->dominates(pred_block)) failed: early is high enough"
Backport-of: dfc557cbea
2022-01-28 11:05:08 +07:00
Yi Yang
f79d9612cd 8273790: Potential cyclic dependencies between Gregorian and CalendarSystem
Backport-of: ddc262746a
2022-01-28 11:05:07 +07:00
Tobias Hartmann
ef4aedd8b9 8274074: SIGFPE with C2 compiled code with -XX:+StressGCM
Backport-of: b0983df5a4
2022-01-28 11:05:05 +07:00
Matthias Baesken
32fb92b38d 8271142: package help is not displayed for missing X11/extensions/Xrandr.h
Backport-of: b7f75c0a73
2022-01-28 11:05:04 +07:00
Jie Fu
5c5aabb7c0 8274329: Fix non-portable HotSpot code in MethodMatcher::parse_method_pattern
Backport-of: c833b4d130
2022-01-28 11:05:03 +07:00
Jie Fu
85a9e58a82 8274325: C4819 warning at vm_version_x86.cpp on Windows after JDK-8234160
Backport-of: 7426fd4c9c
2022-01-28 11:05:02 +07:00
Martin Doerr
8bff101e64 8274642: jdk/jshell/CommandCompletionTest.java fails with NoSuchElementException after JDK-8271287
Backport-of: 47262670f3
2022-01-28 11:05:01 +07:00
Sean Coffey
32ce4d242e 8273826: Correct Manifest file name and NPE checks
Backport-of: 03a8d342b8
2022-01-28 11:05:00 +07:00
Ekaterina Vergizova
13ccb0a20c 8269113: Javac throws when compiling switch (null)
Backport-of: 1887028408
2022-01-28 11:04:59 +07:00
Ekaterina Vergizova
f566f843fe 8268885: duplicate checkcast when destination type is not first type of intersection type
Backport-of: dd1209e4ae
2022-01-28 11:04:58 +07:00
Ekaterina Vergizova
f173a9119d 8262095: NPE in Flow$FlowAnalyzer.visitApply: Cannot invoke getThrownTypes because tree.meth.type is null
Backport-of: 75d987a0dd
2022-01-28 11:04:56 +07:00
Robbin Ehn
5271d821c5 8273695: Safepoint deadlock on VMOperation_lock
Reviewed-by: dholmes
Backport-of: 7957994273
2022-01-28 10:55:59 +07:00
Aleksey Shipilev
9dde8877f2 8272856: DoubleFlagWithIntegerValue uses G1GC-only flag
Backport-of: 6ace805f8c
2022-01-28 10:55:08 +07:00
Aleksey Shipilev
074f0229c7 8273489: Zero: Handle UseHeavyMonitors on all monitorenter paths
Backport-of: e3bda63ce2
2022-01-28 10:55:07 +07:00
Thomas Stuefe
ea6c11f15b 8273958: gtest/MetaspaceGtests executes unnecessary tests in debug builds
Backport-of: bb9d142759
2022-01-28 10:54:09 +07:00
Harold Seigel
8def8c6031 8273342: Null pointer dereference in classFileParser.cpp:2817
Backport-of: 8609ea55ac
2022-01-28 10:54:06 +07:00
Pavel Kharskii
81a8f78479 8275141: recover corrupted line endings for the version-numbers.conf
Reviewed-by: jwilhelm
2022-01-28 10:54:04 +07:00
pavel_kharskii
6f87be33e9 8275110: Correct RE Configs for CPU Release 17.0.2 on master branch for jdk17u-cpu and jdk17u-cpu-open repos.
Reviewed-by: vaibhav, jwilhelm
2022-01-28 10:53:54 +07:00
Jayathirth D V
93c8d0e234 8274096: Improve decoding of image files
Backport-of: 62ce0cd73a2dc0c7e3e65783a2707a0984ba4acf
2022-01-28 10:52:56 +07:00
Joakim Nordström
6e11fae58e 8273229: Update OS detection code to recognize Windows Server 2022
Reviewed-by: kevinw
Backport-of: c2e015c3c1
2022-01-28 10:52:37 +07:00
Sean Coffey
b6053c6af5 8270392: Improve String constructions
Backport-of: bfa21d073b1e301919bbe1f46fa4182958f458f0
2022-01-28 10:52:36 +07:00
Evan Whelan
8d5cbeb3ab 8264934: Enhance cross VM serialization
Reviewed-by: rriggs
Backport-of: 4369957f6699993d94481c766348fb554d53cd6d
2022-01-28 10:52:34 +07:00
Aleksey Shipilev
4d04db4747 8272846: Move some runtime/Metaspace/elastic/ tests out of tier1
Backport-of: ebd62bc043
2022-01-28 10:52:19 +07:00
Aleksey Shipilev
a9a4cea691 8272703: StressSeed should be set via FLAG_SET_ERGO
Backport-of: 66ce09f51e
2022-01-28 10:52:01 +07:00
Aleksey Shipilev
24aa4222a5 8273376: Zero: Disable vtable/itableStub gtests
Backport-of: a522d6b53c
2022-01-28 10:52:00 +07:00
Aleksey Shipilev
9c674d73f1 8273487: Zero: Handle "zero" variant in runtime tests
Backport-of: 8c16f485b3
2022-01-28 10:51:48 +07:00
David Holmes
cb38a6dd02 8274349: ForkJoinPool.commonPool() does not work with 1 CPU
Backport-of: 2e542e33b8
2022-01-28 10:51:25 +07:00
Aleksey Shipilev
e9d4459d0b 8274083: Update testing docs to mention tiered testing
Backport-of: 971aa353aa
2022-01-28 10:51:12 +07:00
Aleksey Shipilev
5c2755613b 8273314: Add tier4 test groups
Backport-of: 1f8af524ff
2022-01-28 10:50:59 +07:00
Aleksey Shipilev
9746207332 8273318: Some containers/docker/TestJFREvents.java configs are running out of memory
Backport-of: 7d24a33421
2022-01-28 10:50:48 +07:00
Aleksey Shipilev
573bdee5e8 8273315: Parallelize and increase timeouts for java/foreign/TestMatrix.java test
Backport-of: dc33bd8b6c
2022-01-28 10:50:46 +07:00
Aleksey Shipilev
64a660bbda 8272836: Limit run time for java/lang/invoke/LFCaching tests
Backport-of: a3308af060
2022-01-28 10:50:45 +07:00
Aleksey Shipilev
2a749e6aea 8273894: ConcurrentModificationException raised every time ReferralsCache drops referral
Backport-of: 2166ed1369
2022-01-28 10:50:38 +07:00
Aleksey Shipilev
190654c009 8273806: compiler/cpuflags/TestSSE4Disabled.java should test for CPU feature explicitly
Backport-of: 09ecb11927
2022-01-28 10:50:24 +07:00
Aleksey Shipilev
9d0dcee631 8273807: Zero: Drop incorrect test block from compiler/startup/NumCompilerThreadsCheck.java
Backport-of: 1c5de8b86b
2022-01-28 10:50:23 +07:00
Aleksey Shipilev
53acae7cd4 8273335: compiler/blackhole tests should not run with interpreter-only VMs
Backport-of: 4d25e6f6c7
2022-01-28 10:50:22 +07:00
Aleksey Shipilev
f893db9b7d 8273483: Zero: Clear pending JNI exception check in native method handler
Backport-of: aa9311182a
2022-01-28 10:50:13 +07:00
Aleksey Shipilev
04fae2df0d 8273440: Zero: Disable runtime/Unsafe/InternalErrorTest.java
Backport-of: 286a1f6b7c
2022-01-28 10:49:59 +07:00
Aleksey Shipilev
076fd5afbe 8273333: Zero should warn about unimplemented -XX:+LogTouchedMethods
Backport-of: 81c719be39
2022-01-28 10:49:58 +07:00
Aleksey Shipilev
82a2107baf 8273606: Zero: SPARC64 build fails with si_band type mismatch
Backport-of: 241ac89f12
2022-01-28 10:49:44 +07:00
Aleksey Shipilev
1e839eb0dc 8273373: Zero: Cannot invoke JVM in primordial threads on Zero
Backport-of: 0f31d0fb2c
2022-01-28 10:49:40 +07:00
Ekaterina Vergizova
a9f8ee61fd 8274435: EXCEPTION_ACCESS_VIOLATION in BFSClosure::closure_impl
Backport-of: c05dc268ac
2022-01-28 10:49:36 +07:00
Aleksey Shipilev
6b7264d970 8272914: Create hotspot:tier2 and hotspot:tier3 test groups
Backport-of: 5ee5dd9b18
2022-01-28 10:49:32 +07:00
Aleksey Shipilev
cad31d2d2a 8273361: InfoOptsTest is failing in tier1
Backport-of: 267c61a16a
2022-01-28 10:49:31 +07:00
Thejasvi Voniadka
046720f12d 8271287: jdk/jshell/CommandCompletionTest.java fails with "lists don't have the same size expected"
Backport-of: 71788c69db
2022-01-28 10:49:29 +07:00
Aleksey Shipilev
f027ad82e5 8273378: Shenandoah: Remove the remaining uses of os::is_MP
Backport-of: fc546d6de9
2022-01-28 10:49:28 +07:00
Sergey Bylokhov
c26e0c4c74 8273887: [macos] java/awt/color/ICC_ColorSpace/MTTransformReplacedProfile.java timed out
Backport-of: 1bd11a7f2c
2022-01-28 10:49:27 +07:00
Guoxiong Li
d142680a31 8266239: Some duplicated javac command-line options have repeated effect
Backport-of: d05494f98b
2022-01-28 10:49:26 +07:00
Phil Race
ab939a202a 8274326: [macos] Ensure initialisation of sun/lwawt/macosx/CAccessibility in JavaComponentAccessibility.m
Backport-of: 2cffe4c8e0
2022-01-28 10:49:25 +07:00
jovanstevanovic
9380dd5f34 8273278: Support XSLT on GraalVM Native Image--deterministic bytecode generation in XSLT
Backport-of: f690a01f1e
2022-01-28 10:49:24 +07:00
Sergey Bylokhov
684b2220aa 8273135: java/awt/color/ICC_ColorSpace/MTTransformReplacedProfile.java crashes in liblcms.dylib with NULLSeek+0x7
Backport-of: 1017a2c2d7
2022-01-28 10:49:23 +07:00
Andy Herrick
59976901c5 8274087: Windows DLL path not set correctly.
Backport-of: f36a2bbd15
2022-01-28 10:49:21 +07:00
Andy Herrick
f05ca5157d 8271170: Add unit test for what jpackage app launcher puts in the environment
Backport-of: 44f137ff9c
2022-01-28 10:49:20 +07:00
Rajat Mahajan
94bea6b973 8270116: Expand ButtonGroupLayoutTraversalTest.java to run in all LaFs, including Aqua on macOS
Backport-of: cb36880281
2022-01-28 10:49:17 +07:00
Tobias Hartmann
35c3aa4f2b 8273498: compiler/c2/Test7179138_1.java timed out
Reviewed-by: chagedorn
Backport-of: c81690d716
2022-01-28 10:49:17 +07:00
Yoshiki Sato
6c705ab4df 8273924: ArrayIndexOutOfBoundsException thrown in java.util.JapaneseImperialCalendar.add()
Backport-of: d39aad9230
2022-01-28 10:49:08 +07:00
Tobias Hartmann
9409c282d4 8271341: Opcode() != Op_If && Opcode() != Op_RangeCheck) || outcnt() == 2 assert failure with Test7179138_1.java
Backport-of: 99fb12c798
2022-01-28 10:48:53 +07:00
Tobias Hartmann
eaa524b0ed 8273359: CI: ciInstanceKlass::get_canonical_holder() doesn't respect instance size
Backport-of: f7e9f56e23
2022-01-28 10:48:41 +07:00
Tobias Hartmann
8358fd1998 8244675: assert(IncrementalInline || (_late_inlines.length() == 0 && !has_mh_late_inlines()))
Backport-of: 28ba78e647
2022-01-28 10:48:27 +07:00
Tobias Hartmann
58468217c9 8223923: C2: Missing interference with mismatched unsafe accesses
Backport-of: 86add21a85
2022-01-28 10:48:14 +07:00
Tobias Hartmann
f86a961542 8271600: C2: CheckCastPP which should closely follow Allocate is sunk of a loop
Backport-of: 2ff4c01d42
2022-01-28 10:48:01 +07:00
Tobias Hartmann
a19915def8 8270886: Crash in PhaseIdealLoop::verify_strip_mined_scheduling
Backport-of: 6afcf5f5a2
2022-01-28 10:47:47 +07:00
Tobias Hartmann
f1d46557a0 8271340: Crash PhaseIdealLoop::clone_outer_loop
Backport-of: 2abf3b3b27
2022-01-28 10:47:35 +07:00
Tobias Hartmann
10c85f32ab 8272413: Incorrect num of element count calculation for vector cast
Backport-of: 7e662e7b9d
2022-01-28 10:47:22 +07:00
Tobias Hartmann
2abf160ebb 8272574: C2: assert(false) failed: Bad graph detected in build_loop_late
Backport-of: 16c3ad1ff4
2022-01-28 10:47:10 +07:00
Tobias Hartmann
a80f48d7f2 8271954: C2: assert(false) failed: Bad graph detected in build_loop_late
Backport-of: c86e24d4be
2022-01-28 10:46:52 +07:00
Tobias Hartmann
1ad825b7ce 8273165: GraphKit::combine_exception_states fails with "matching stack sizes" assert
Backport-of: 632a7e0885
2022-01-28 10:46:50 +07:00
Tobias Hartmann
7d9e851885 8272570: C2: crash in PhaseCFG::global_code_motion
Backport-of: 0f428ca533
2022-01-28 10:46:39 +07:00
Guoxiong Li
d7742281a3 8271254: javac generates unreachable code when using empty semicolon statement
Backport-of: fe89dd3b0d
2022-01-28 10:46:29 +07:00
Guoxiong Li
da76620f74 8273408: java.lang.AssertionError: typeSig ERROR on generated class property of record
Backport-of: e07ab82ee5
2022-01-28 10:46:09 +07:00
Thejasvi Voniadka
51854a7e8e 8273961: jdk/nio/zipfs/ZipFSTester.java fails if file path contains '+' character
Backport-of: 7f78803b09
2022-01-28 10:46:07 +07:00
Andy Herrick
694478fd20 8272328: java.library.path is not set properly by Windows jpackage app launcher
Backport-of: cd2dbe5f00
2022-01-28 10:45:55 +07:00
Sergey Bylokhov
24732deaae 8271718: Crash when during color transformation the color profile is replaced
Backport-of: 148935279d
2022-01-28 10:45:52 +07:00
Guoxiong Li
104e336b24 8268894: forged ASTs can provoke an AIOOBE at com.sun.tools.javac.jvm.ClassWriter::writePosition
Backport-of: a9188f237e
2022-01-28 10:45:43 +07:00
Thomas Stuefe
627c47b942 8268893: jcmd to trim the glibc heap
Backport-of: 6096dd9765
2022-01-28 10:45:27 +07:00
Volker Simonis
eff04ea10b 8273902: Memory leak in OopStorage due to bug in OopHandle::release()
Backport-of: bc48a0ac29
2022-01-28 10:45:25 +07:00
Christian Hagedorn
b67c326fac 8272014: Better array indexing
Reviewed-by: thartmann
Backport-of: 937c31d896d05aa24543b74e98a2ea9f05b5d86f
2022-01-28 10:45:14 +07:00
Ravi Reddy
b2437bcbb7 8270492: Better resolution of URIs
Backport-of: ceda336a2ddea62e2ff8df653f54e08d45fc197a
2022-01-28 10:45:12 +07:00
Alexander Zuev
2e8685fe9e 8272462: Enhance image handling
Backport-of: 3d1745d54b93a62a7f404e33c70211db0e31d536
2022-01-28 10:45:04 +07:00
Jayathirth D V
6529030bff 8273838: Enhanced BMP processing
Backport-of: f5cc6f23a46bee06731fdd2b257c8ea8007eebad
2022-01-28 10:44:45 +07:00
Ravi Reddy
44e539dd8d 8273968: JCK javax_xml tests fail in CI
Backport-of: d1910329352e878badf8fdc6634a177dd4745d4a
2022-01-28 10:44:43 +07:00
Evan Whelan
56065030b1 8272236: Improve serial forms for transport
Reviewed-by: rriggs
Backport-of: ed0621893e7c365673ed87fbd4aca2bca27b9b73
2022-01-28 10:44:31 +07:00
Olga Mikhaltsova
4462f2a8b1 8273451: Remove unreachable return in mutexLocker::wait
Backport-of: 9b5991e811
2022-01-28 10:44:16 +07:00
Olga Mikhaltsova
19fa9e9117 8273375: Remove redundant 'new String' calls after concatenation in java.desktop
Backport-of: 59c9f75041
2022-01-28 10:44:03 +07:00
Sergey Nazarkin
b641b7e12f 8261236: C2: ClhsdbJstackXcompStress test fails when StressGCM is enabled
Backport-of: 752b6df34c
2022-01-28 10:43:59 +07:00
Rajan Halade
51e0d85f26 8274215: Remove globalsignr2ca root from 17.0.2
Reviewed-by: mullan
2022-01-28 10:43:48 +07:00
Thejasvi Voniadka
0c45e3541e 8273646: Add openssl from path variable also in to Default System Openssl Path in OpensslArtifactFetcher
Backport-of: a5108a605e
2022-01-28 10:43:38 +07:00
Jonathan Dowland
fd05a48ade 8272342: [TEST_BUG] java/awt/print/PrinterJob/PageDialogMarginTest.java catches all exceptions
Backport-of: a5ad7720d2
2022-01-28 10:43:24 +07:00
Joe Darcy
02cf460d11 8273514: java/util/DoubleStreamSums/CompensatedSums.java failure
Backport-of: f531b5c796
2022-01-28 10:43:21 +07:00
Joe Darcy
d5c387fb3a 8214761: Bug in parallel Kahan summation implementation
Backport-of: dd871819a0
2022-01-28 10:43:12 +07:00
Aleksey Shipilev
2cfedb0b0d 8272318: Improve performance of HeapDumpAllTest
Backport-of: 73da66ffb7
2022-01-28 10:42:57 +07:00
Aleksey Shipilev
54df3a0d3e 8271605: Update JMH devkit to 1.32
Backport-of: e74537f924
2022-01-28 10:42:55 +07:00
Aleksey Shipilev
6f52d9b43f 8271862: C2 intrinsic for Reference.refersTo() is often not used
Backport-of: 3f723ca457
2022-01-28 10:42:44 +07:00
Aleksey Shipilev
b9360450d0 8272970: Parallelize runtime/InvocationTests/
Backport-of: 6cfe314262
2022-01-28 10:42:35 +07:00
Aleksey Shipilev
76d8ef4ed7 8272850: Drop zapping values in the Zap* option descriptions
Backport-of: c5a271259d
2022-01-28 10:42:23 +07:00
Aleksey Shipilev
b65787d352 8263375: Support stack watermarks in Zero VM
Backport-of: 857a930bde
2022-01-28 10:42:22 +07:00
Aleksey Shipilev
2da239bbb3 8272838: Move CriticalJNI tests out of tier1
Backport-of: f55d5ab517
2022-01-28 10:42:20 +07:00
Andy Herrick
b39f04092e 8272639: jpackaged applications using microphone on mac
Reviewed-by: asemenyuk
2022-01-28 10:42:11 +07:00
Sean Coffey
2509264ac4 8272026: Verify Jar Verification
Backport-of: 0e2b2951adc965d6b71ffbc63b4293fd9fb68eaa
2022-01-28 10:41:59 +07:00
Rob McKenna
da4618a8c3 8273308: PatternMatchTest.java fails on CI
Backport-of: 1a5bacfcf8e0c22e49b29c0f484f0e879227dc05
2022-01-28 10:41:58 +07:00
Rob McKenna
d01b4b29a6 8268813: Better String matching
Reviewed-by: igraves
Backport-of: c1b73a786d5881315cb7119d89f719b79c6a0c67
2022-01-28 10:41:56 +07:00
Jayathirth D V
e4685adfac 8273756: Enhance BMP image support
Backport-of: 2ee2053a0dde445237924f136c859c8b18ab882e
2022-01-28 10:41:48 +07:00
Alexander Zuev
7fd062b897 8273290: Enhance sound handling
Backport-of: 5d4a8f3c9ca82ed501944c670823b5de5e1ba344
2022-01-28 10:41:33 +07:00
Rob McKenna
a61c01b8b5 8270646: Improved scanning of XML entities
Backport-of: 2b6dad98a6739df983a01b96cffea971268d1523
2022-01-28 10:41:31 +07:00
Fairoz Matte
1a7cea34cf 8270320: JDK-8270110 committed invalid copyright headers
Backport-of: 353e9c8607
2022-01-28 10:41:20 +07:00
Richard Reingruber
92ed17db7d 8271722: [TESTBUG] gc/g1/TestMixedGCLiveThreshold.java can fail if G1 Full GC uses >1 workers
Backport-of: 4abe531140
2022-01-28 10:41:18 +07:00
Christoph Langer
d35ad94f84 8269951: [macos] Focus not painted in JButton when setBorderPainted(false) is invoked
Backport-of: 481c1f0549
2022-01-28 10:41:09 +07:00
Andy Herrick
51e8b167f0 8273593: [REDO] Warn user when using mac-sign option with unsigned app-image.
Reviewed-by: kcr, asemenyuk
2022-01-28 10:40:54 +07:00
Aleksey Shipilev
a245a7eb8d 8269687: pauth_aarch64.hpp include name is incorrect
Backport-of: b690f29699
2022-01-28 10:40:53 +07:00
Lutz Schmidt
26168a7e27 8271490: [ppc] [s390]: Crash in JavaThread::pd_get_top_frame_for_profiling
Backport-of: 276b07b36a
2022-01-28 10:40:40 +07:00
Andy Herrick
0edeeaebaa 8273592: Backout JDK-8271868
Reviewed-by: kcr, asemenyuk
2022-01-28 10:40:27 +07:00
Andy Herrick
df735d8692 8271868: Warn user when using mac-sign option with unsigned app-image.
Reviewed-by: asemenyuk
2022-01-28 10:40:22 +07:00
Clive Verghese
92a1c953a8 8270317: Large Allocation in CipherSuite
Backport-of: e627caec84
2022-01-28 10:40:11 +07:00
Saravana Kumar Vijayasekaran
a3b4dcbaa3 8263773: Reenable German localization for builds at Oracle
Reviewed-by: erikj
2022-01-28 10:39:59 +07:00
Aleksey Shipilev
401aed5bed 8272973: Incorrect compile command used by TestIllegalArrayCopyBeforeInfiniteLoop
Backport-of: 9166ba37b6
2022-01-28 10:39:43 +07:00
Per Liden
f081e8f08c 8271121: ZGC: stack overflow (segv) when -Xlog:gc+start=debug
Reviewed-by: eosterlund, ayang
Backport-of: 18dd4d469d
2022-01-28 10:39:34 +07:00
Aleksey Shipilev
68659132ab 8270110: Shenandoah: Add test for JDK-8269661
Backport-of: 548bb3119c
2022-01-28 10:39:32 +07:00
Aleksey Shipilev
c674f24951 8270171: Shenandoah: Cleanup TestStringDedup and TestStringDedupStress tests
Backport-of: e4c24f01ef
2022-01-28 10:39:32 +07:00
Aleksey Shipilev
77708e018b 8272783: Epsilon: Refactor tests to improve performance
Backport-of: 7f80683cfe
2022-01-28 10:39:24 +07:00
Chris Hegarty
53d9f23052 8272473: Parsing epoch seconds at a DST transition with a non-UTC parser is wrong
Backport-of: fe7d70886c
2022-01-28 10:39:11 +07:00
Thejasvi Voniadka
ab0aecb85e 8271560: sun/security/ssl/DHKeyExchange/LegacyDHEKeyExchange.java still fails due to "An established connection was aborted by the software in your host machine"
Backport-of: f18c0fac11
2022-01-28 10:39:09 +07:00
Matthias Baesken
3daa6999c3 8269031: linux x86_64 check for binutils 2.25 or higher after 8265783
Backport-of: 18a1dd261c
2022-01-28 10:39:02 +07:00
Aleksey Shipilev
5ee0d59226 8269280: (bf) Replace StringBuffer in *Buffer.toString()
Backport-of: 3a8f3d6cac
2022-01-28 10:38:51 +07:00
Aleksey Shipilev
dbae3e0af5 8269924: Shenandoah: Introduce weak/strong marking asserts
Backport-of: 515113d858
2022-01-28 10:38:50 +07:00
Evan Whelan
32f0981825 8270416: Enhance construction of Identity maps
Reviewed-by: jboes
Backport-of: d445bf3f60c654bee77dcabe86f6fa28eaf5abfa
2022-01-28 10:38:48 +07:00
Rob McKenna
57e86a0638 8270498: Improve SAX Parser configuration management
Reviewed-by: joehw
2022-01-28 10:38:40 +07:00
Harold Seigel
e7f946ff88 8271987: Manifest improved manifest entries
Backport-of: 885f3699edf517d11d17607aad41e32d059f547a
2022-01-28 10:38:23 +07:00
Prasadrao Koppula
0f56c4c151 8268488: More valuable DerValues
Backport-of: 99f72cf1c44c58682d93a81ee76ef9c3707152a9
2022-01-28 10:38:20 +07:00
Rajan Halade
645554a10e 8273150: Revert "8225083: Remove Google certificate that is expiring in December 2021"
Reviewed-by: mullan
2022-01-28 10:38:11 +07:00
Kevin Walls
97fd5cc5cb 8272272: Enhance jcmd communication
Backport-of: 1a67dd1ba853d535c718840dcdada12e1b312eb8
2022-01-28 10:38:09 +07:00
Prajwal Kumaraswamy
0bcd0c63df 8269151: Better construction of EncryptedPrivateKeyInfo
Backport-of: 9fd7b2d4f333834f03a0e4fbc1e2a7d867331961
2022-01-28 10:38:09 +07:00
Ramkumar Sunderbabu
1a5041e6e5 8266988: compiler/jvmci/compilerToVM/IsMatureTest.java fails with Unexpected isMature state for multiple times invoked method: expected false to equal true
Backport-of: 7468bbcd64
2022-01-28 10:38:08 +07:00
Phil Race
ad6c9653f2 8272602: [macos] not all KEY_PRESSED events sent when control modifier is used
Backport-of: ddcd851c43
2022-01-28 10:37:16 +07:00
Ioi Lam
62e8f8a6d5 8270386: Better verification of scan methods
Reviewed-by: coleenp
Backport-of: ac329cef45979bd0159ecd1347e36f7129bb2ce4
2022-01-28 10:31:03 +07:00
Vladimir Ivanov
2105783eb7 8268494: Better inlining of inlined interfaces
Backport-of: 3c7fbbd703a50a9762e7f7dbafa8d44191346f52
2022-01-28 10:31:03 +07:00
Prajwal Kumaraswamy
fe29cd4e68 8268512: More content for ContentInfo
Backport-of: 4a1ea63840ec90e52c036c408baef4a1cf0abdff
2022-01-28 10:30:51 +07:00
Rajan Halade
ef99d5e53e 8225083: Remove Google certificate that is expiring in December 2021
Backport-of: 1cbf41a87b
2022-01-28 10:30:50 +07:00
Phil Race
5f6b600cc9 8271962: Better TrueType font loading
Backport-of: 27827c186c43a7a2d983788f6d5e8b7f31e5e079
2022-01-28 10:30:48 +07:00
Prajwal Kumaraswamy
8b1bb75939 8269944: Better HTTP transport redux
Backport-of: 0e123d6e0e50cdac714a001b9f67dfc7c1c2b293
2022-01-28 10:30:47 +07:00
Phil Race
a828a9c55f 8270952: Improve TIFF file handling
Backport-of: 4db9acd53f549cac1603c6c41566b16ee939c04b
2022-01-28 10:30:46 +07:00
Harold Seigel
ff3cdec42e 8271968: Better canonical naming
Backport-of: a716aacb662bb49aa5b1e805175196c29d8cb77a
2022-01-28 10:30:45 +07:00
Jayathirth D V
f798e5f09f 8270893: IndexOutOfBoundsException while reading large TIFF file
Backport-of: efcdcc7fb7
2022-01-28 10:30:44 +07:00
Saravana Kumar Vijayasekaran
53e54740ab 8271463: Updating RE Configs for Upcoming CPU Release 17.0.2 on master branch for jdk17u-cpu and jdk17u-cpu-open repos.
Reviewed-by: vaibhav, ssahoo, coffeys
2022-01-28 10:30:41 +07:00
Christoph Langer
6eaed94afc 8262731: [macOS] Exception from "Printable.print" is swallowed during "PrinterJob.print"
Backport-of: c0b4407d09
2022-01-28 10:30:40 +07:00
Nikita Gubarkov
0de1110110 JBR-2567 Fix max file path buffer size for fontpath.c 2022-01-28 03:46:38 +03:00
Vitaly Provodin
ced125f975 fixup! JBR-3337 jb/java/jcef/HandleJSQueryTest3314.sh: fails on macOS-aarch64 with "JS Query was not handled in 2nd opened browser" 2022-01-27 04:47:55 +07:00
Vitaly Provodin
b04a317b1f exclude sun/security/pkcs11/Signature/TestDSAKeyLength.java on Ubuntu 21.04 due to 8279941 2022-01-27 04:47:48 +07:00
Vitaly Provodin
71a196ca83 exclude compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/NativeCallTest.java on macosx-aarch64 due to 8262901 2022-01-27 04:34:26 +07:00
Chris Plummer
acd143779c 8270341: Test serviceability/dcmd/gc/HeapDumpAllTest.java timed-out
Reviewed-by: dcubed
(cherry picked from commit 77fbd99f79)
2022-01-27 04:34:26 +07:00
greg
2f82cb6a13 macOS: add methods to setup transparent titlebar with custom height (#100)
* macOS: add methods to setup transparent titlebar with custom height

* make windowTransparentTitleBarHeight CPlatfromWindow property

* add windowTransparentTitleBarHeight test

* Prevent mouseUp events on the transparent header on macOS when the window is being dragged

Co-authored-by: Manuel Unterhofer <manuel.unterhofer@jetbrains.com>
2022-01-26 20:23:22 +01:00
Anton Tarasov
f169b363b5 JBR-4204 provide an option to disable a11y support on macOS
(cherry picked from commit ee3c56abdc)
2022-01-26 18:16:02 +03:00
Maxim Kartashev
3d9a846821 JBR-4203 test/hotspot/jtreg/compiler/arguments: Option should be unknown (non-X86CPU)
Added the -XX:-IgnoreUnrecognizedVMOptions option to the test driver for
command line options, since it is often used to check that a certain
option is not supported.
2022-01-26 13:33:45 +03:00
Alexey Ushakov
9f65e4290a JBR-4112 macOS: SIGILL at [libsystem_kernel] __kill in OOME: Java heap space at java.awt.image.DataBufferInt.<init>
Removed double allocation of surface data
2022-01-25 15:11:43 +01:00
Maxim Kartashev
7fc4f93143 fixup! JBR-4118 NIO methods fail on Google Drive's virtual volume 2022-01-25 13:05:40 +03:00
Vitaly Provodin
f5ecf32aa9 exclude two swing tests on Windows due to JBR-4197 2022-01-23 12:29:41 +07:00
Alexey Ushakov
726d626d01 JBR-4177 libc++abi: terminating with uncaught exception of type NSException
Added check for AppContext
2022-01-20 18:13:47 +01:00
Vitaly Provodin
02e39d6554 JBR-4188 add exec permissions && fix misprint in checking if headers exist 2022-01-20 04:57:40 +07:00
Alexey Ushakov
c76198e9de JBR-4187 java/awt/GraphicsDevice/DisplayModes/UnknownRefrshRateTest.java.UnknownRefrshRateTest fails on mac
Constrained display modes count used by the test
2022-01-19 15:49:57 +01:00
Alexey Ushakov
f7091b322f JBR-4174 java/awt/FullScreen/FullScreenInsets/FullScreenInsets.java fails on mac aarch64
Hide cursor to fix OGL&Metal Robot issue (it reads cursor image). Added tolerance to fix Metal Robot inaccuracy.
2022-01-19 15:49:49 +01:00
Maxim Kartashev
6f4a268bb7 JBR-4118 NIO methods fail on Google Drive's virtual volume
If NtQueryDirectoryFile() failed with STATUS_INVALID_PARAMETER,
try again asking for less information with the FileDirectoryInformation
option as "information class". This option works on a mounted
Google Drive, but it doesn't provide file ids, which speed
up file listing. So it is used only as a fall-back solution.

(cherry picked from commit 82693aa985)
2022-01-19 16:26:04 +03:00
Vitaly Provodin
156f23a065 exclude tests failing in 289 test cycle 2022-01-18 16:02:50 +07:00
Dmitry Batrak
e6a7cc1e4f JBR-4181 JB focus tests failed on macos-12
(cherry picked from commit c040e05703)
2022-01-17 20:43:44 +03:00
Vitaly Provodin
56a3b07c99 exclude two tests carshing test runs on macosx-aarch64 2022-01-16 08:33:56 +07:00
Alexey Ushakov
a8afa8da75 JBR-4164 IDEs cannot be launched via launch configuration
Moved execution of displayChanged() to EDT
2022-01-14 22:33:35 +01:00
Artem Semenov
0a4ee1132a JBR-4167 [JCK] AccassibleJTree tests fail on Ubuntu 2022-01-14 19:30:30 +03:00
Maxim Kartashev
2bc2ee6614 JBR-4043 Make jar and module files in JBR build reproducible
Added a separate build step that invokes the freshly-built jar that supports
the --date option on jrt-fs.jar before the latter is added to java.base.jmod.
This way both jrt-fs.jar and java.base.jmod have files timestamped with
a pre-determined date in the "reproducible build" mode.
2022-01-14 10:12:28 +03:00
Vitaly Provodin
797b2893fe JBR-4169 add jdk.javadoc into JBR 2022-01-14 04:00:15 +07:00
Andrew Leonard
4483339cac JBR-4062 8279834: Alpine Linux fails to build when --with-source-date enabled
Reviewed-by: erikj
2022-01-12 10:38:02 +03:00
Maxim Kartashev
c32af223f5 JBR-4145 Make builds independent from build directory
Supplied the --disable-absolute-path-in-output option to the configure script
when building JBR. This option, however, didn't affect the generated
debug info, so added -fdebug-prefix-map to the list of C and
assembler options, which normalized debug info fully on MacOS and partly
on Linux.
On Linux, libjvm.debuginfo contained an ELF symbol of type FILE with an absolute
path name of linux_x86_64.o. This was solved by explicitly specifying
the .file assembler directive in that file and all the other asm files
without one for uniformity.
2022-01-11 16:42:42 +03:00
Nikita Gubarkov
306bc0e3f8 JBR API v0.0.2
Fixed NPE in JBRFileDialog
2022-01-11 01:43:28 +03:00
Alexey Ushakov
dc8888f2e0 JBR-3044 Regression test java/awt/Graphics2D/DrawString/LCDTextSrcEa.sh fails on macOS BigSur (11.1 aarch64 and 11.2 x64)
Disable the test on mac (there is no way to enable LCD)
2022-01-02 15:07:34 +01:00
Vitaly Provodin
df843f11b5 exclude java/awt/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java due to 8266283
& java/awt/dnd/URIListBetweenJVMsTest/URIListBetweenJVMsTest.java on linux due to JBR-881 linux-all
2021-12-31 03:49:10 +07:00
Vitaly Provodin
b1564db09a add exclude exclude list for the IDEA VMoptions test run cofnigs 2021-12-31 03:49:10 +07:00
Vladimir Dvorak
bc69f1d27b JBR-4148 - removed meaningless copying of data to itself 2021-12-29 17:40:27 +01:00
Alexey Ushakov
2aeb7aeab4 JBR-4150 IDE regularly locks up at sun.lwawt.macosx.LWCToolkit.getScreenInsets
Restored caching screen insets. Added handling of dock resize.
2021-12-29 14:05:10 +01:00
Vladimir Dvorak
9da926bdf0 JBR-4110 - disable UseEmptySlotsInSupers
dcevm instance transformation expects increasing field's offset when
fields of class are iterated. This ordering is no more valid if
UseEmptySlotsInSupers=true.
2021-12-27 12:36:28 +01:00
Vladimir Dvorak
b916bf4ef7 JBR-4125 - fix wrong addition of java.lang.Object as superclass 2021-12-27 12:36:18 +01:00
Dmitry Batrak
495e3f013c JBR-2907 [JCK] Font.equals(Font) returns false after serialization/deserialization
(cherry picked from commit 9cc82c39d9)
2021-12-27 12:16:15 +03:00
Vitaly Provodin
d07bd76482 exclude java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java on Wayland configs due to 8279256 2021-12-24 17:58:48 +07:00
Vitaly Provodin
4050e7a552 exclude java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java on Scale2 configs due to 8279190 2021-12-24 17:58:34 +07:00
Vitaly Provodin
c35fc04bf9 exclude java/awt/FullScreen/UninitializedDisplayModeChangeTest/UninitializedDisplayModeChangeTest.java due to 827361 2021-12-24 17:58:11 +07:00
Vitaly Provodin
3dec9908c9 add exclude list for Wayland failures 2021-12-24 17:57:09 +07:00
Vitaly Provodin
7ac92634f9 exclude javax/swing/plaf/basic/BasicComboPopup/JComboBoxPopupLocation /JComboBoxPopupLocation.java on macOS due to 8194945 2021-12-24 17:57:09 +07:00
Vitaly Provodin
a8b7dae06f exclude sun/java2d/SunGraphics2D/EmptyClipRenderingTest.java on windows due to 8144029 2021-12-24 17:57:09 +07:00
Andrew Leonard
71a2f4d6fb JBR-4062 8279182: MakeZipReproducible ZipEntry timestamps not localized to UTC
Reviewed-by: erikj
2021-12-24 10:44:54 +03:00
Andrew Leonard
4f3c1319de JBR-4043 8278766: Enable OpenJDK build support for reproducible jars and jmods using --date
Reviewed-by: erikj
2021-12-24 10:37:28 +03:00
Aleksandr Veselov
ba8cdbab2b JBR-4141 Access Bridge: Wrong frame position and hit test result on HiDPI display
(cherry picked from commit 094719bd90)
2021-12-23 19:31:12 +03:00
Maxim Kartashev
60eb17210c JBR-3948 Linux: SIGSEGV at [libawt_xawt] Java_sun_awt_X11_XInputMethod_createXICNative
The problem: the crashes occur in createStatusWindow() when calls like
adata->AwtColorMatch() end up going to 0x0 pc or some random inaccessible
memory. The only reason for that seems to be the
getDefaultConfig(screen) returning either NULL or garbage. That, in turn, probably
happens because of the wrong screen number provided. Before JBR-3623 was
fixed, awt_numScreens could've changed between the time the screen
number was chosen and the getDefaultConfig() call. After JBR-3623 was
fixed, this change is protected with the AWT lock, which this code
holds.
The fix: obtain the screen number via the Xlib API rather than the
ad-hoc loop though the root windows and return NULL if
getDefaultConfig() doesn't return useable data.

(cherry picked from commit 3d23e8d6a5)
2021-12-23 10:34:07 +03:00
Sergey Bylokhov
c9944f2428 JBR-4142 8275843: Random crashes while the UI code is executed
Reviewed-by: azvegint
(cherry picked from commit a9c1acbb8a)
2021-12-22 20:30:28 +03:00
Anton Tarasov
0750870b71 enable java/awt/dnd/RemoveDropTargetCrashTest/RemoveDropTargetCrashTest.java in VO
because JBR-4042 was marked as fixed
actually the test does not crash runtime as it was described in JBR-4081
2021-12-22 04:32:16 +07:00
Dmitry Batrak
49523acab1 JBR-4131 Popup doesn't get focus if created from context menu
(cherry picked from commit 685562aafc)
2021-12-21 08:26:29 +03:00
Maxim Kartashev
df9156d5ff JBR-3923 8277447: Hotspot C1 compiler crashes on Kotlin suspend fun with loop
Reviewed-by: kvn, neliasso
2021-12-20 14:25:03 +03:00
Maxim Kartashev
2db11b1bb8 Revert "JBR-3923 Internal Error in c1_Instruction.cpp"
This reverts commit 9d8433f220.
2021-12-20 13:32:21 +03:00
Vitaly Provodin
909474716a add exclude list for Scale2 test runs 2021-12-18 04:01:24 +07:00
Vitaly Provodin
f04b33438d exclude java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java due to 8134231 2021-12-18 04:01:24 +07:00
Artem Semenov
5a329c4000 JBR-3775 Optimize the algorithm for obtaining tree elements 2021-12-16 18:09:02 +03:00
Vitaly Provodin
14923c6719 JBR-4053 integrate DCEVM patches as usual commits 2021-12-16 10:21:56 +07:00
Vladimir Dvorak
7fc2ee1bc2 JBR-4053 - Fix fastdebug compilation issue 2021-12-16 10:21:55 +07:00
Vladimir Dvorak
f41360553e JBR-3997 - fix _invokehandle and _invokedynamic race conditions
Old clear mechanism of CpCacheEntry has cleared partially _flags and the
entire _f1, but both values could be later used in interpreter for
invocation. It ended up with various types of crashes. To prevent dcevm
crashes, we keep the old _f1 and _flags values until they are resolved
again. We need a new flag 'is_f1_null_dcevm_shift' indicating that _f1
is NULL (while f1 keeps old value).
2021-12-16 10:21:36 +07:00
Vladimir Dvorak
38ab8e7648 JBR-4018 - fix zero variant compilation issues 2021-12-16 10:21:33 +07:00
Vladimir Dvorak
aedea79dfc JBR-3867 - fix dcevm redefinition stops due the not updated weak oops
Dcevm must update also oops in weak storage using WeakProcessor. Oops
storage is new concept in java17.
2021-12-16 10:21:32 +07:00
Vladimir Dvorak
048fcd01d6 G1 fixes, code cleanup 2021-12-16 10:21:31 +07:00
Vladimir Dvorak
726466e32f JBR-3937 Fix crashes in C1/C2 compilers
There is a race condition in enhanced redefinition with C1/C2. Therefore
the patch stops C1/C2 compilation before redefinition and release after
redefinition finishing. There is no performance impact since dcevm
flushes all code cache.
2021-12-16 10:21:11 +07:00
Vladimir Dvorak
1faa9806fa Attempt to fix JBR-3887 2021-12-16 10:20:53 +07:00
Vladimir Dvorak
e729ba65ad JBR-3867 - fix msvc compilation issue with non const array on stack 2021-12-16 10:20:51 +07:00
Vladimir Dvorak
3af4462dab JBR-3867 - update keys of jvmti TAG map after redefinition
jdwp keeps relation class_ptr->class_ref in jvmti tag. class_ptr is used
as a tag key, tag value is refnode. There are new class_ptrs after
redefinition, therefore jdwp redefinition method update all affected
keys in the tag map.
2021-12-16 10:20:49 +07:00
Vladimir Dvorak
e1662a8791 Remove duplicated lambdaFormInvokers.cpp 2021-12-16 10:20:37 +07:00
Vladimir Dvorak
687b19a7a6 Search for affected classes in all initialized classes in cld
Fix also case when lambda interface is redefined. Lambda class is
missing in cld dictionary since it is hidden since j17
2021-12-16 10:20:35 +07:00
Vladimir Dvorak
15fad5255c Fix, pass SystemDictionary::resolve_from_stream cl_info param 2021-12-16 10:20:34 +07:00
Vladimir Dvorak
adb27adeee Fix "implicit conversion of NULL constant to 'bool'" 2021-12-16 10:20:33 +07:00
Vladimir Dvorak
0b6bab2d97 Fix init_method_MemberName after Thread to JavaThread refactorization 2021-12-16 10:20:24 +07:00
Vladimir Dvorak
2ba1d60736 Fix dcevm issues related to refactorization of Thread to JavaThread 2021-12-16 10:20:23 +07:00
Vladimir Dvorak
b34b4e9ce2 Fix compilation issue
Fix compilation problems

Fix fastdebug compilation issues - cast_to_oop
2021-12-16 10:20:12 +07:00
Vladimir Dvorak
97e5abd8a1 JBR-3459: Fix race condition in ClassLoaderDataGraph::classes_do
InstanceKlass in ClassLoaderData can be uninitialized when
ClassLoaderDataGraph::classes_do is called. Using
ClassLoaderDataGraph::dictionary_classes_do is safe but problem is still
persisting with anonymous classes.
2021-12-16 10:20:10 +07:00
Vladimir Dvorak
9861d1cadf JBR-3458: Skip dynamic proxy classes based on com.sun.proxy 2021-12-16 10:20:01 +07:00
Vladimir Dvorak
8060e0ad45 Support for redefinition of Well Known classses (java.*,jdk.*, sun.*) 2021-12-16 10:19:44 +07:00
Vladimir Dvorak
938162b224 JBR-3140 - support for modularized HotswapAgent
Add -XX:HotswapAgent=[disabled,fatjar.core]
2021-12-16 10:19:42 +07:00
Vladimir Dvorak
f591e82c0f Add ClassLoaderDataGraph_lock to define new class in enhanced
redefiniton

ClassLoaderDataGraph locking for introduced in redefinition in
java.version>11
2021-12-16 10:19:40 +07:00
Vladimir Dvorak
c1327f4088 JBR-3111 Update class in all dictionaries where it was already defined
This patch keeps compatibility with std redefinition, that does not
create a new Klass, but modifies it, then it is modified in all
dictionaries containing this class.
2021-12-16 10:19:38 +07:00
Vladimir Dvorak
c286eb044f Check InstanceKlass::has_nestmate_access_to with active classes
Dcevm can leave old host in nested class if nested class is not
redefined together with host class
2021-12-16 10:19:22 +07:00
Vladimir Dvorak
7b94c10d08 Rename confusing method name old_if_redefined to old_if_redefining 2021-12-16 10:19:14 +07:00
Vladimir Dvorak
22c965de86 Fix crash on GrowableArray allocation in C_HEAP 2021-12-16 10:19:12 +07:00
Vladimir Dvorak
6059fd8cc2 dcevm17 - fix compilation issues 2021-12-16 10:19:10 +07:00
Vladimir Dvorak
6c6854823e Disable AllowEnhancedClassRedefinition in flight recorder 2021-12-16 10:19:09 +07:00
Vladimir Dvorak
8754d0a2ee Cleanup and review comments 2021-12-16 10:18:53 +07:00
Vladimir Dvorak
7e03d34536 dcevm15 - DON'T clear F2 in CP cache after indy unevolving
It's not clear why it was cleared in dcevm7-11
2021-12-16 10:18:39 +07:00
Vladimir Dvorak
4d2d5ce5fd dcevm15 - fix hidded classes 2021-12-16 10:18:38 +07:00
Vladimir Dvorak
3b177e381f dcevm15 - mark_as_scavengable only alive methods 2021-12-16 10:18:37 +07:00
Vladimir Dvorak
48fcbe09e0 dcevm15 - check if has_nestmate_access_to has newest host class 2021-12-16 10:18:34 +07:00
Vladimir Dvorak
76129891a0 dcevm15 - fix Universe::root_oops_do
Removed ClassLoaderDataGraph::cld_do was cause of crashes due multiple
oop patching. ClassLoaderDataGraph::cld_do replaced in dcevm15
previously used and removed SystemDictionary:oops_do
2021-12-16 10:18:17 +07:00
Vladimir Dvorak
b4c445c0ee dcevm15 - add ClassLoaderDataGraph_lock on
ClassLoaderDataGraph::classes_do

ClassLoaderDataGraph::classes_do and need safepoint or lock,
find_sorted_affected_classes is not in safepoint therefore it must be
locked
ClassLoaderDataGraph::rollback_redefinition need safepoint too
2021-12-16 10:18:06 +07:00
Vladimir Dvorak
a472902b34 dcevm15 - fix java15 compilation issues 2021-12-16 10:18:04 +07:00
Vladimir Dvorak
05e19f7515 Fix LoadedClassesClosure - fixes problems with remote debugging 2021-12-16 10:18:03 +07:00
Vladimir Dvorak
1991550ffb Clear dcevm code separation 2021-12-16 10:18:00 +07:00
Vladimir Dvorak
25e7585af8 Set HOTSPOT_VM_DISTRO=Dynamic Code Evolution 2021-12-16 10:17:59 +07:00
Vladimir Dvorak
4559f38048 AllowEnhancedClassRedefinition is false (disabled) by default 2021-12-16 10:17:58 +07:00
Vladimir Dvorak
2fbb1b6bd6 Support for G1 gc 2021-12-16 10:17:56 +07:00
Vladimir Dvorak
2a4e3a76f7 Replace deleted method with Universe::throw_no_such_method_error
+ Change log level in advanced redefinition
- Change log level for "Comparing different class ver.." to debug
- Fix adjust_method_entries_dcevm logging levels and severity
2021-12-16 10:17:55 +07:00
Vladimir Dvorak
1593a19212 Fix "no original bytecode found" error if method with bkp is missing
Sometimes IDE can deploy class with erroneous method, such method has
n bytecode, but breakpoint position can still exist.
2021-12-16 10:17:54 +07:00
Vladimir Dvorak
3ef1406649 Support for Lambda class redefinition 2021-12-16 10:17:53 +07:00
Vladimir Dvorak
84e5be15b0 Fix class cast exception on redefinition of class A, that is superclass
of B that has anonymous class C
2021-12-16 10:17:52 +07:00
Vladimir Dvorak
89a7d096de dcevm11 fixes
1. We need to set classRedefinitionCount on new class, not old class.

2.Fix crashes in MetadataOnStackMark::~MetadataOnSta

MetadataOnStackMark should not remove dcevm stuff. It was added
accidentaly in dcevm9 and never was part of doit() in previous versions.

3. Fix problem with nested members

Reported at :
https://stackoverflow.com/questions/53370380/hotswapagent-incompatibleclasschangeerror-type-headerpanel1-is-not-a-nest-mem

4. Use init_mark_raw()

method changed since j8 - it used init_mark()

5. Fix methodHandles and fieldHandles

6. Code cleanup

7. Fix force_forward in dead space

8. Fix check_class

9. increment_class_counter() using orig dcevm code

Probably it is cause of SISEGV on:
_
VM_EnhancedRedefineClasses::redefine_single_class->java_mirror()

10 Fix 11.0.7 compilation issues

11. Refactor ClearCpoolCacheAndUnpatch

12. not nullable oop_store_not_null() method+handle NULL in mem_name in
dmh

13. Use INCLUDE_CDS condition on "UseSharedSpaces" block from master

14. Add codecache flush optimization, but just flush all cache.

15. Cleanup

16. Use original code for adjust_method_entries in standard redefinition

17. iterate old method version only in dcevm

18. Revert code for !AllowEnhancedClassRedefinition

19. Code cleanup

20. Activate cpCache definition asserts for !dcevm

21. Skip GC runs for redefinitions without instance size change

22. This is the 2nd commit message:

23. dcevm15 - Cleanup code related to removed CMS
2021-12-16 10:17:50 +07:00
Vladimir Dvorak
5f7206c99d Apply basic dcevm11 patch 2021-12-16 10:17:49 +07:00
Nikita Gubarkov
39b8999c95 JBR API v0.0.1
Added constant extraction to JBR API

Added file dialog customization via JBR API & fixed bugs in windows common item dialog
2021-12-15 15:44:41 +03:00
Dmitry Batrak
496733339a JBR-4117 HBShaper.c cleanup
(cherry picked from commit 09c2d5fd74)
2021-12-14 17:26:27 +03:00
Dmitry Batrak
1a19acfd57 JBR-4113 java/awt/KeyboardFocusmanager/TypeAhead/TestDialogTypeAhead.java fails by time out on macOS
(cherry picked from commit d8d4c55a61)
2021-12-14 17:26:21 +03:00
Anton Tarasov
12fe307afe JBR-4042 VO: java/awt/dnd/RemoveDropTargetCrashTest/RemoveDropTargetCrashTest.java - SIGBUS (0xa) at sun.lwawt.macosx.CAccessibility$9.call()Ljava/lang/Boolean;+4 java.desktop@17.0.1 2021-12-14 15:37:02 +07:00
Vitaly Provodin
c79f2b17cf JBR-3931 add the module jdk.unsupported.desktop into jbr
(cherry picked from commit 32def2fd42)
2021-12-14 04:42:02 +07:00
Alexey Ushakov
2c0601fbcd JBR-4111 [JBR17] Make possible to select files and directories independently
Implemented apple.awt.fileDialogForFiles property
2021-12-13 16:11:40 +01:00
Andrew Leonard
814ea9e8fb JBR-4062 8276766: Enable jar and jmod to produce deterministic timestamped content
Reviewed-by: ihse, lancea, alanb, jgneff
(cherry picked from commit db68a0ce1c)
2021-12-13 14:13:41 +03:00
Dmitry Batrak
50556747fe JBR-741 Modal dialog stays above other process windows.
(cherry picked from commit 755a231799)
2021-12-13 13:11:37 +03:00
Dmitry Batrak
27196ffcb2 JBR-4114 Rollback JBR-10 fix
(cherry picked from commit c785b3de0e)
2021-12-13 12:35:28 +03:00
Vitaly Provodin
a5c9a208ed enable fixed hotspot tests to regular runs 2021-12-11 08:24:07 +07:00
Leonid Mesnik
86b93a57af 8225313: serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorStatObjectCorrectnessTest.java failed with Unexpected high difference percentage
Reviewed-by: dholmes, kevinw

(cherry picked from commit 09e5321763)
2021-12-11 08:21:52 +07:00
Vitaly Provodin
c838f55dd9 enable fixed tests to regular runs 2021-12-11 06:52:53 +07:00
Alexander Zuev
8d188ad27f 8017175: [TESTBUG] javax/swing/JPopupMenu/4634626/bug4634626.java sometimes failed on mac
Reviewed-by: serb
(cherry picked from commit 4c3491bfa5)
2021-12-11 06:47:13 +07:00
Alexander Zuev
d87fc06c41 8268284: javax/swing/JComponent/7154030/bug7154030.java fails with "Exception: Failed to hide opaque button"
Reviewed-by: serb
(cherry picked from commit 534f00510e)
2021-12-11 06:46:08 +07:00
Naoto Sato
b17c748949 7008363: TEST_BUG: test/java/lang/StringCoding/CheckEncodings.sh does nothing and is very slow at that
Reviewed-by: iris, lancea, bpb, whuang
(cherry picked from commit 8a3e0a1fc1)
2021-12-11 06:44:15 +07:00
Alexander Zvegintsev
03783189d0 8233648: [TESTBUG] DefaultMenuBarTest.java failing on macos
Reviewed-by: pbansal, serb, psadhukhan, prr
(cherry picked from commit 46b5bfbc38)
2021-12-11 06:43:21 +07:00
Alisen Chung
05fbf8507c 8233558: [TESTBUG] WindowOwnedByEmbeddedFrameTest.java fails on macos
Reviewed-by: serb, kizune, prr
(cherry picked from commit d1e3ca4ee3)
2021-12-11 06:41:56 +07:00
Jayathirth D V
80de7efe15 8213120: java/awt/TextArea/AutoScrollOnSelectAndAppend/AutoScrollOnSelectAndAppend.java fails on mac10.13
Reviewed-by: psadhukhan

(cherry picked from commit 2f979ecb5b)
2021-12-11 06:40:20 +07:00
Alexander Zuev
6d1add0393 8169468: NoResizeEventOnDMChangeTest.java fails because FS Window didn't receive all resizes!
Reviewed-by: serb

(cherry picked from commit b0a463fa59)
2021-12-11 06:39:03 +07:00
Jayathirth D V
f57241bcf8 8255898: Test java/awt/FileDialog/FilenameFilterTest/FilenameFilterTest.java fails on Mac OS
Reviewed-by: prr, serb
(cherry picked from commit 947d52c4c3)
2021-12-11 06:36:28 +07:00
Alexander Zuev
3fca5bee90 8202667: java/awt/Debug/DumpOnKey/DumpOnKey.java times out on Windows
Reviewed-by: prr
(cherry picked from commit cd778f5b04)
2021-12-11 06:35:00 +07:00
Jayathirth D V
60330c9b3e 8255724: [XRender] the BlitRotateClippedArea test fails on Linux in the XR pipeline
Reviewed-by: psadhukhan
(cherry picked from commit dcd6e0da24)
2021-12-11 06:30:30 +07:00
Phil Race
4a16c3b8c8 8192931: Regression test java/awt/font/TextLayout/CombiningPerf.java fails
Reviewed-by: serb, jdv, kizune
(cherry picked from commit 54a29a4470)
2021-12-11 06:26:37 +07:00
Alexander Zvegintsev
2ece56c057 8196440: Regression automated Test 'java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java' fails
Reviewed-by: serb, psadhukhan
(cherry picked from commit f610ef0dbc)
2021-12-11 06:23:54 +07:00
Alexander Zuev
c3a506172b 8196017: java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java fails
Reviewed-by: serb
(cherry picked from commit b7104ba9a9)
2021-12-11 06:23:19 +07:00
Alexander Zvegintsev
c81d4030eb 6854300: [TEST_BUG] java/awt/event/MouseEvent/SpuriousExitEnter/SpuriousExitEnter_3.java fails in jdk6u14 & jdk7
Reviewed-by: serb
(cherry picked from commit a1ec4f9618)
2021-12-11 06:21:28 +07:00
Alexander Zuev
32fb930e85 8168388: GetMousePositionTest fails with the message "Mouse position should not be null"
Reviewed-by: psadhukhan, serb
(cherry picked from commit 0c3eaea11c)
2021-12-11 06:18:53 +07:00
Pankaj Bansal
0ef1d9a4a9 8198626: java/awt/KeyboardFocusmanager/TypeAhead/TestDialogTypeAhead.html fails on mac
Reviewed-by: serb
(cherry picked from commit a60e91259b)
2021-12-11 06:18:21 +07:00
Vitaly Provodin
07ee0a2471 exclude javax/swing tests on mac-aarch64 due to 8277816 2021-12-11 05:48:20 +07:00
Aleksandr Veselov
c4cb87ff06 JBR-4107 A11y: macOS - wrong frame position if window is not on primary screen 2021-12-10 18:26:06 +03:00
Alexander Lobas
6b36a9227d JBR-3442 Native file dialog on OSX (for open file) doesn't allow pasting path
(cherry-picked from commit 7d8cc524ca)
2021-12-10 07:28:14 +07:00
Vitaly Provodin
83ca27f8b2 exclude javax/swing/border/TestTitledBorderLeak.java on windows due to 8213531 2021-12-10 05:23:35 +07:00
Maxim Kartashev
c539ca4ddf fixup! JBR-4061 Specify build user for the build
Specify build user via the environment variable rather than the
configure option because the latter isn't supported for OpenJDK17u.
2021-12-09 09:31:09 +03:00
Mandy Chung
51ec2c610e JBR-4062 8276650: GenGraphs does not produce deterministic output
Reviewed-by: iris
(cherry picked from commit e21b5c7b37)
2021-12-08 16:44:46 +03:00
Jaikiran Pai
2b8ee942e0 JBR-4062 8258117: jar tool sets the time stamp of module-info.class entries to the current time
Reviewed-by: lancea, ihse, alanb
(cherry picked from commit a81e4fc07b)
2021-12-08 16:31:20 +03:00
Andrew Leonard
9b17148ef4 JBR-4062 8276764: Enable deterministic file content ordering for Jar and Jmod
Reviewed-by: mchung, ihse
(cherry picked from commit 24e586a043)
2021-12-08 15:10:06 +03:00
Magnus Ihse Bursie
02289f478f JBR-4062 8277069: [REDO] JDK-8276743 Make openjdk build Zip Archive generation "reproducible"
Co-authored-by: Andrew Leonard <aleonard@openjdk.org>
Co-authored-by: Magnus Ihse Bursie <ihse@openjdk.org>
Reviewed-by: erikj
(cherry picked from commit c93552c8bb)
2021-12-08 14:55:59 +03:00
Vitaly Provodin
2f0eb2bba8 JBR-4067 fix misprint with applying obsolete exclude_jcef_module.patch 2021-12-08 15:17:32 +07:00
Vitaly Provodin
740bf2b3e5 JBR-3756 remove JNF from mac-aarch64 binaries 2021-12-08 15:17:32 +07:00
Denis Fokin
88d7361bd9 JBR-4038 [JBR17] Force Touch events are not supported on macOS
Added missing files and handlers from JBR11
2021-12-07 19:31:12 +01:00
Dmitry Batrak
87c6482c0e JBR-4084 Default font '. AppleSystemUIFont' does not have bold weight on Chinese characters
(cherry picked from commit 4fde082d53)
2021-12-06 19:22:24 +03:00
Maxim Kartashev
b2a9372d70 JBR-3899 SIGSEGV at [libjvm] _ZN23JfrNetworkInterfaceName11on_rotationEv
Prevent JfrNetworkInterfaceName::on_rotation() to dereference a
potentially NULL pointer.
2021-12-06 19:03:53 +03:00
Dmitry Batrak
d0d8a63e0b JBR-4072 Migrate font fallback implementation on macOS to cascade lists
(cherry picked from commit a155760e94)
2021-12-06 17:59:44 +03:00
Maxim Kartashev
09c200ccfd fixup! JBR-3833 ServerSocketChannel.open(StandardProtocolFamily.UNIX) fails with IAE with non-standard filesystems on JBR17
Windows implementation of PipeImpl (that is used in the
ServerSockerChannel implementation) probes for the availability of Unix
Domain Sockets by trying to bind to a unique temporary name.  That call
throws IAE when a non-default Java file system is installed while the
probing code (PipeImpl.createListener()) only expects
UnsupportedOperationException or IOException.

The fix is to re-throw UOE instead of IAE in
UnixDomainSockets.genrateTempName(). This is more consistent with the
definition of the excpetion purpose ("requested operation is not
supported"). So with this change, a loopback network socket will be used
to implement a pipe on a non-default Java file system. Also, pipes do
not rely on the default Java file system on other platforms (Linux,
MacOS) as well.
2021-12-06 11:44:54 +03:00
Vitaly Provodin
42a22e0cc4 JBR-4082 create JBR & JBRSDK installer packages 2021-12-06 05:16:12 +07:00
Artem Semenov
71d54051d2 JBR-4012 On Idea Vo often speeks selected element of tables, lists, and trees. 2021-12-03 13:57:07 +03:00
Alexey Ushakov
d4fc6bc380 JBR-4060 [JBR17+Metal] Flickering on button's shadow
Removed unnecessary global flag. Optimized mask cache texture clearing code.
2021-12-03 01:38:41 +01:00
Vitaly Provodin
1e1f71f907 exclude failing tests #198.2 cycle 2021-12-03 07:24:05 +07:00
Prasanta Sadhukhan
6d26c9353f 8273578: javax/swing/JMenu/4515762/bug4515762.java fails on macOS 12
Reviewed-by: jdv, serb

(cherry picked from commit 45adc9227a)
2021-12-03 07:24:05 +07:00
Alexander Zvegintsev
adabf8c677 8202932: java/awt/Component/NativeInLightShow/NativeInLightShow.java fails
Reviewed-by: serb
(cherry picked from commit 7cf68b1901)
2021-12-03 04:40:30 +07:00
Maxim Kartashev
5e0ec47ce9 JBR-4061 Specify build user for the build 2021-12-02 08:56:21 +03:00
Andrew Leonard
9ec9457d8b JBR-4062 8277762: Allow configuration of HOTSPOT_BUILD_USER
Reviewed-by: erikj
2021-12-02 08:29:16 +03:00
Maxim Kartashev
e1a1b6814d JBR-4063 macOS: update build scripts to produce more deterministic output
Make mkimages.sh produce more deterministic .tar.gz archives on MacOS.
NB: build notarization is not in the scope of this change.
2021-12-01 14:33:59 +03:00
Maxim Kartashev
944797005c JBR-4033 Linux: update build scripts to produce more deterministic output
This commits achieves almost the same build output with the same build
input on Linux. Exceptions are:
- class files timestamps differ in jrt-fs.jar (for all output),
- class files timestamps differ in all the jmod files (for
  jbrsdk...tar.gz).
NB: jbrsdk...test...tar.gz does not need to be deterministic.

This was achieved mainly by
- setting several environment variables (SOURCE_DATE_EPOCH, TZ),
- providing the necessary options to the configure script,
- setting the timestamp of all files that make up the resulting
  archive to SORUCE_DATE_EPOCH and normalizing the list of said
  files before archiving.
2021-12-01 14:33:59 +03:00
Ioi Lam
507f4d716a JBR-4032 8273092: Sort classlist in JDK image
NB: this commit has been adopted for version 17.

Reviewed-by: redestad, ihse, dfuchs
(based on commit 1996f649a3)
2021-12-01 14:33:59 +03:00
Ioi Lam
67c24c9b88 JBR-4032 8272113: Build compare script fails with differences in classlist
Reviewed-by: tschatzl, hseigel
(cherry picked from commit 272fcb423a)
2021-12-01 14:33:59 +03:00
Andrew Leonard
2ef4de692d JBR-4032 8276654: element-list order is non deterministic
Reviewed-by: ihse
(cherry picked from commit 14d66bd438)
2021-12-01 14:33:59 +03:00
Jaikiran Pai
f20b2dca0f JBR-4032 8231640: (prop) Canonical property storage
Reviewed-by: rriggs, smarks, dfuchs, ihse
(cherry picked from commit af50772d39)
2021-12-01 14:33:59 +03:00
Maxim Kartashev
0b9397cf4c JBR-4032 Correct reproducible builds documentation 2021-12-01 14:33:59 +03:00
Magnus Ihse Bursie
392cf1c31a JBR-4032 8275745: Reproducible copyright headers
Reviewed-by: ihse, erikj
(cherry picked from commit a0227965bb)
2021-12-01 14:33:59 +03:00
Magnus Ihse Bursie
b269750318 JBR-4032 8276746: Add section on reproducible builds in building.md
Reviewed-by: erikj, sgehwolf, aleonard
(cherry picked from commit 59c3dcc761)
2021-12-01 14:33:58 +03:00
Jaikiran Pai
0676b50884 JBR-4032 8275509: ModuleDescriptor.hashCode isn't reproducible across builds
Reviewed-by: alanb, ihse
(cherry picked from commit 396132ff1e)
2021-12-01 14:33:58 +03:00
Maxim Kartashev
4df6fbd251 JBR-4059 Create Dockerfile for building on AArch64 Linux 2021-12-01 08:27:52 +03:00
bobpengxie
006cd74964 8274293: Build failure on macOS with Xcode 13.0 as vfork is deprecated
Reviewed-by: alanb, stuefe, rriggs
(cherry picked from commit 252aaa9249)
2021-11-30 09:19:46 +01:00
Alexey Ushakov
57289a0ad5 8272392 Lanai: SwingSet2. Black background on expanding tree node
Removed creation of the separate encoder depending on destination properties as we don't use this info to customize the encoder properties
Fixed incorrect addition of the values into pipeline state cache. Refactored index initialization. Removed unused flags from MTLClip.
2021-11-26 14:02:58 +01:00
Dmitry Batrak
4916d26f47 JBR-4021 Unexpected focus event order on window showing
(cherry picked from commit 2a398ebb24)
2021-11-24 09:47:53 +03:00
Nikita Gubarkov
2daed21814 JBR-4017 Open com.jetbrains.bootstrap package only for reflection 2021-11-23 11:22:08 +03:00
Ivan Lopatin
d99872c962 IDEA-229577: Marked i3wm as GravityBuggy 2021-11-22 21:21:05 +07:00
Maxim Kartashev
ae5963a094 JBR-4020 Test ObsoleteFlagErrorMessage fails after +IgnoreUnrecognizedVMOptions has become the default 2021-11-22 11:12:32 +03:00
Maxim Kartashev
9d8433f220 JBR-3923 Internal Error in c1_Instruction.cpp
Make C1 hotspot compiler bail out during CFG construction if there's a
cycle in the graph that isn't a natural loop and that has led to an
unexpected state of stack/locals like missing a phi function.

This is a temporary measure that lets hotspot continue working
even after encountering such bytecode patterns. The full solution
will probably involve more sophisticated CFG checks.

(cherry picked from commit aa0b61cb75)
2021-11-22 10:05:53 +03:00
Artem Semenov
2f4a7f66ab JBR-3868 Combobox list is not voiced of VoiceOver 2021-11-18 20:01:34 +03:00
Jayathirth D V
28289bcf00 JBR-3908 8276905: Use appropriate macosx_version_minimum value while compiling metal shaders
Reviewed-by: ihse, kcr, erikj, prr
(cherry picked from commit 9a9a157a7d)
2021-11-17 04:25:27 +07:00
Dmitry Batrak
71597c1b0e JBR-4007 [JCK] javax.swing.text.GlyphView.calcBreakSpots method breaks public API
(cherry picked from commit 1002eff4f3)
2021-11-16 19:52:25 +03:00
Dmitry Batrak
80efac6e25 JBR-4006 [JCK] javax.swing.text.html.CSS$Attribute.OVERFLOW_WRAP field breaks public API
(cherry picked from commit f20a3d8679)
2021-11-16 19:21:32 +03:00
Dmitry Batrak
641688b88a JBR-4005 [JCK] java.awt.Font.LAYOUT_NO_PAIRED_CHARS_AT_SCRIPT_SPLIT field breaks public API
(cherry picked from commit 961e036158)
2021-11-16 16:44:50 +03:00
Vitaly Provodin
b6699ce7a2 update the link to JBR17 for IDEA 2021.3 EAP 2021-11-16 04:26:13 +07:00
Dmitry Batrak
cf7d0ecb1f JBR-3989 Broken focus state after a quick succession of activation/deactivation events on Windows
(cherry picked from commit cafb374afc)
2021-11-15 16:08:52 +03:00
Alexey Ushakov
93fe26f579 JBR-3954 Transparent text color rendering (needed for experimental UI)
Performed conversion from ARGB_PRE to ARGB in the grayscale text shader
2021-11-11 20:06:45 +01:00
Dmitry Batrak
f4ecc22b1b JBR-3979 Focus is not transferred to parent window
(cherry picked from commit 25e087d269)
2021-11-11 09:58:53 +03:00
Nikita Gubarkov
290f700127 JBR-3982 Fixed non-antialiased text rendering on macOS 2021-11-11 01:27:46 +03:00
Vitaly Provodin
acdb9fccbd update the link to JBR17 for IDEA 2021.3 EAP 2021-11-11 04:19:31 +07:00
Nikita Gubarkov
1e79cf4924 JBR-3976 fix emoji scaling on macOS 2021-11-10 15:49:48 +03:00
Nikita Gubarkov
00ce50d5d9 JBR-3957 Disable hinting when retrieving outline via freetype and fix negative bounds size for text rotated by 180 degrees. 2021-11-10 13:54:10 +03:00
Vitaly Provodin
17acd28d7c JBR-3937 Fix crashes in C1/C2 compilers &
G1 fixes, code cleanup &
JBR-3867 fix dcevm redefinition stops due the not updated weak oops
2021-11-10 06:54:16 +07:00
Nikita Gubarkov
c6f3522d16 fixup! JBR-2135 Use CoreText api to select the font with the most recent version 2021-11-09 14:11:59 +03:00
Nikita Gubarkov
8b35a7e88c JBR-2917 disable GDI rendering on Windows for colored fonts & select glyph rendering loop depending on actual glyph format instead of antialiasing mode
JBR-3951 Pass real glyph type from native code instead of guessing it by rowBytes & width
2021-11-09 14:11:58 +03:00
Pavel
6e15088b7e JBR-3926 make AwtComponent transparent for hit events by default
* JBR-3926 make AwtComponent transparent for hit events by default

* [WIP] pass hittest event to frame only if custom decoration is enabled and frame ready to handle it
(cherry picked from commit c0e26ff5d5)
2021-11-08 17:11:48 +03:00
Vitaly Provodin
3a0d06b873 update the link to JBR17 for IDEA 2021.3 EAP 2021-11-08 12:32:21 +07:00
Vitaly Provodin
531f97d905 JBR-3908 add MACOSX_VERSION_MAX parameter into cofnigure 2021-11-06 09:34:49 +07:00
Vitaly Provodin
32a8087610 exclude java/awt/Window/GetScreenLocation/GetScreenLocationTest.java & java/awt/image/multiresolution/MultiresolutionIconTest.java on linux-aarch64 2021-11-05 17:56:34 +07:00
Sergey Bylokhov
0cd0b7ff8e 8273638: javax/swing/JTable/4235420/bug4235420.java fails in GTK L&F
Reviewed-by: pbansal, psadhukhan, azvegint
(cherry picked from commit 6cf70f5f08)
2021-11-05 09:04:41 +07:00
Vitaly Provodin
4bdaf472a8 exclude java/awt/Graphics2D/CopyAreaOOB.java on linux-all due to 7001973 2021-11-04 09:08:21 +07:00
Alexey Ushakov
8ba4251ad5 JBR-3952 [bkp JBR17] JBR-3924 CMD+Tilda does not switch app windows
Introduced vm property to disable capturing of next app window shortcut
2021-11-03 15:14:15 +01:00
Nikita Gubarkov
2d029761c2 fixup! JBR-2917 Added emoji support for Windows 2021-11-03 00:03:30 +03:00
Nikita Gubarkov
91a5488284 JBR-2917 Added emoji support for Windows 2021-11-02 21:48:21 +03:00
Nikita Gubarkov
49536a0988 JBR-3915 Fix comment about subpixel glyph resolution in freetype implementation 2021-11-02 21:48:12 +03:00
Ivan Lopatin
3641a3d262 JBR-3388: Fixed wrong graphic config in Component on primary display change 2021-11-01 23:19:21 +07:00
Nikita Gubarkov
c3c844caab fixup! JBR-3915 Render glyph multiple times instead of downscaling when subpixel resolution is enabled to preserve hinting (Windows, Linux) 2021-10-29 14:01:51 +03:00
Nikita Gubarkov
4165302aed JBR-3915 Render glyph multiple times instead of downscaling when subpixel resolution is enabled to preserve hinting (Windows, Linux) 2021-10-29 02:18:09 +03:00
Maxim Kartashev
d6600f1ccd JBR-3896 Abysmally slow input and UI performance since upgrade to IU-213.4928.7 from previous 2021.3 EAP version
The slowness was the result of XWM.getInsetsFromExtents() repeated
attempts to acquire frame extents from a property that under Sway is
simply unavailable. Each attempt added at least 20ms to every re-draw.

Prior to (repeatedly) checking for NET_FRAME_EXTENTS property of a
window, check that the property is supported by the window manager.

(cherry picked from commit b40cc1c791)
2021-10-28 19:35:33 +03:00
Phil Race
8c8728873a 8273358: macOS Monterey does not have the font Times needed by Serif
Backport-of: efe3ed1e70
(cherry picked from commit 75240a5872)
2021-10-28 11:45:06 +07:00
Christoph Langer
e4f6f6308c 8269993: [Test]: java/net/httpclient/DigestEchoClientSSL.java contains redundant @run tags
Backport-of: 4e18ec26dd
(cherry picked from commit 5e04e45271)
2021-10-28 11:45:06 +07:00
Abdul Kolarkunnu
db1699c5eb 8272581: sun/security/pkcs11/Provider/MultipleLogins.sh fails after JDK-8266182
Backport-of: a199ebc017
(cherry picked from commit ff6a9382f5)
2021-10-28 11:45:05 +07:00
Abdul Kolarkunnu
e11878c0b8 8266182: Automate manual steps listed in the test jdk/sun/security/pkcs12/ParamsTest.java
Backport-of: ed57cf1cf3
(cherry picked from commit 9248bd08cf)
2021-10-28 11:45:05 +07:00
David Holmes
b2d03d5cb9 8269934: RunThese24H.java failed with EXCEPTION_ACCESS_VIOLATION in java_lang_Thread::get_thread_status
Backport-of: 7e518f42c9
(cherry picked from commit 671dab6154)
2021-10-28 11:45:04 +07:00
Phil Race
07afb903e6 8272806: [macOS] "Apple AWT Internal Exception" when input method is changed
Backport-of: f681d6544a
(cherry picked from commit 71a6aae38d)
2021-10-28 11:45:04 +07:00
Sean Coffey
fc24e5fa7b 8270344: Session resumption errors
Backport-of: 04a806ec86
(cherry picked from commit 20d00ebaf7)
2021-10-28 11:45:03 +07:00
Aleksey Shipilev
56c82ffa44 8269897: Shenandoah: Resolve UNKNOWN access strength, where possible
Backport-of: 7ac08161a8
(cherry picked from commit 37de147bea)
2021-10-28 11:45:03 +07:00
Jie Fu
9409bc69f7 8272700: [macos] Build failure with Xcode 13.0 after JDK-8264848
Backport-of: d007be0952
(cherry picked from commit 648f3f6a8f)
2021-10-28 11:45:02 +07:00
Christoph Langer
19f159ede7 8270137: Kerberos Credential Retrieval from Cache not Working in Cross-Realm Setup
Backport-of: 67869b491a
(cherry picked from commit 9a7046d649)
2021-10-28 11:45:02 +07:00
David Holmes
81ff7dee0c 8272472: StackGuardPages test doesn't build with glibc 2.34
Backport-of: f77a1a156f
(cherry picked from commit bb7c412e25)
2021-10-28 11:45:01 +07:00
Thejasvi Voniadka
7f094b020e 8272708: [Test]: Cleanup: test/jdk/security/infra/java/security/cert/CertPathValidator/certification/BuypassCA.java no longer needs ocspEnabled
Backport-of: 4bd37c3153
(cherry picked from commit 567fdbf4b5)
2021-10-28 11:45:01 +07:00
Aleksey Shipilev
12bb636c5f 8270096: Shenandoah: Optimize gc/shenandoah/TestRefprocSanity.java for interpreter mode
Backport-of: 4f322a9b6c
(cherry picked from commit 7d6c3adef3)
2021-10-28 11:45:00 +07:00
Aleksey Shipilev
d4aa4cef24 8270094: Shenandoah: Provide human-readable labels for test configurations
Backport-of: 676f1d76ca
(cherry picked from commit 3c1023c1b9)
2021-10-28 11:45:00 +07:00
Aleksey Shipilev
a0582f582d 8269478: Shenandoah: gc/shenandoah/mxbeans tests should be more resilient
Backport-of: 23d2996fee
(cherry picked from commit 9554fba495)
2021-10-28 11:44:59 +07:00
Ravi Reddy
fed7797313 8265776: Improve Stream handling for SSL
Backport-of: 345c6d3045e4e37e4f8dca30f5b1104c5eb403a9
(cherry picked from commit 0a08534703)
2021-10-28 11:44:59 +07:00
Joe Darcy
181652c300 8272326: java/util/Random/RandomTestMoments.java had two Gaussian fails
Backport-of: cf64c3e7e2
(cherry picked from commit 24e5c1a040)
2021-10-28 11:42:58 +07:00
Thejasvi Voniadka
0cf709a181 8248899: security/infra/java/security/cert/CertPathValidator/certification/QuoVadisCA.java fails, Certificate has been revoked
Backport-of: d6bb846159
(cherry picked from commit 704e6b93aa)
2021-10-28 11:42:57 +07:00
Thejasvi Voniadka
a1de736544 8243543: jtreg test security/infra/java/security/cert/CertPathValidator/certification/BuypassCA.java fails
Backport-of: 45abbeed2f
(cherry picked from commit efeb10b5ca)
2021-10-28 11:42:57 +07:00
Harold Seigel
c4652d8ab4 8272124: Cgroup v1 initialization causes NullPointerException when cgroup path contains colon
Backport-of: 4d6593ce02
(cherry picked from commit f0028333d8)
2021-10-28 11:42:56 +07:00
Tobias Hartmann
5ff1f7fae4 8272131: PhaseMacroExpand::generate_slow_arraycopy crash when clone null CallProjections.fallthrough_ioproj
Backport-of: 5350b9901c
(cherry picked from commit 790d9a9fda)
2021-10-28 11:42:56 +07:00
Tobias Hartmann
5c5b3b032a 8271203: C2: assert(iff->Opcode() == Op_If || iff->Opcode() == Op_CountedLoopEnd || iff->Opcode() == Op_RangeCheck) failed: Check this code when new subtype is added
Backport-of: 3f38a50c52
(cherry picked from commit 8a20dfe546)
2021-10-28 11:42:55 +07:00
Tobias Hartmann
3b52ea1aa3 8271276: C2: Wrong JVM state used for receiver null check
Backport-of: e8f1219d6f
(cherry picked from commit 66bd0d57ee)
2021-10-28 11:42:55 +07:00
Tobias Hartmann
ceef54ac0a 8268963: [IR Framework] Some default regexes matching on PrintOptoAssembly in IRNode.java do not work on all platforms
Backport-of: 9856ace828
(cherry picked from commit 32f026ab74)
2021-10-28 11:42:54 +07:00
Tobias Hartmann
85b8bac5e1 8271925: ZGC: Arraycopy stub passes invalid oop to load barrier
Backport-of: d53d94b14d
(cherry picked from commit 9489ab7b8b)
2021-10-28 11:42:54 +07:00
Tobias Hartmann
727fcd37a7 8268019: C2: assert(no_dead_loop) failed: dead loop detected
Backport-of: 489e5fd12a
(cherry picked from commit 90341dbccd)
2021-10-28 11:42:53 +07:00
Tobias Hartmann
9a610ddc73 8270098: ZGC: ZBarrierSetC2::clone_at_expansion fails with "Guard against surprises" assert
Backport-of: 2384e12888
(cherry picked from commit 52c3e7dcf1)
2021-10-28 11:42:53 +07:00
Joe Darcy
f0c0b86f90 8261088: Repeatable annotations without @Target cannot have containers that target module declarations
Backport-of: 60c11fef00
(cherry picked from commit cb7e311dc6)
2021-10-28 11:42:52 +07:00
Severin Gehwolf
9a7c6bea31 8272332: --with-harfbuzz=system doesn't add -lharfbuzz after JDK-8255790
Backport-of: d38b31438d
(cherry picked from commit e506cb23cf)
2021-10-28 11:42:52 +07:00
Vladimir Kozlov
f9a9101f57 8271589: fatal error with variable shift count integer rotate operation.
Backport-of: 392fcc9df7
(cherry picked from commit 9c213825ae)
2021-10-28 11:42:51 +07:00
Sean Coffey
fb847c4826 8271730: Client authentication using RSASSA-PSS fails after correct certificate requests
Backport-of: 5891fccf178797ef12e429637897d4149a7ae59a
(cherry picked from commit 7d799fe4e7)
2021-10-28 11:42:51 +07:00
Jamsheed Mohammed C M
80601bbc19 8271723: Unproblemlist runtime/InvocationTests/invokevirtualTests.java
Backport-of: 058379cdf91fd46793744a6bd7450c669f3bf787
(cherry picked from commit 5e8b87038b)
2021-10-28 11:42:50 +07:00
Evan Whelan
acd17c74c4 8267712: Better LDAP reference processing
Backport-of: 0d2a239cb4b7fdc88adb54eb66b36f5f5157418f
(cherry picked from commit eac2c999f2)
2021-10-28 11:42:50 +07:00
Prajwal Kumaraswamy
462f3efa87 8263314: Enhance XML Dsig modes
Reviewed-by: coffeys, pkoppula
Backport-of: fe318432e184c2df95d802212b4eb510d3729459
(cherry picked from commit c3bbf5bd28)
2021-10-28 11:42:49 +07:00
Prasadrao Koppula
08a4d41204 8266103: Better specified spec values
Backport-of: 9bd20b57e1d79bd2bb386fb5df48e681fbbbd981
(cherry picked from commit 55c8adf6c6)
2021-10-28 11:42:49 +07:00
Prasadrao Koppula
126a349e06 8266689: More Constrained Delegation
Backport-of: 723438b38868c373d1b8d7e6db576835be392932
(cherry picked from commit 2cb686567b)
2021-10-28 11:42:48 +07:00
Evgeny Astigeevich
1ba0d66607 8268427: Improve AlgorithmConstraints:checkAlgorithm performance
Backport-of: 3b83bc1bc3
(cherry picked from commit 456735f772)
2021-10-28 11:42:48 +07:00
Severin Gehwolf
0ac93f103b 8269851: OperatingSystemMXBean getProcessCpuLoad reports incorrect process cpu usage in containers
Backport-of: 25f00d787c
(cherry picked from commit 02ea80a6f0)
2021-10-28 11:42:47 +07:00
Christoph Langer
34095d9e40 8267625: AARCH64: typo in LIR_Assembler::emit_profile_type
Reviewed-by: aph
Backport-of: 3d090e7ee5
(cherry picked from commit 9175a8d217)
2021-10-28 11:42:47 +07:00
Jamsheed Mohammed C M
6164766ac8 8269624: Enhance method selection support
Backport-of: acd1fa5d8fabd424ec3b125b56e5ca482b25f2d9
(cherry picked from commit c38902db6b)
2021-10-28 11:42:46 +07:00
Richard Reingruber
d45fb152cd 8269574: C2: Avoid redundant uncommon traps in GraphKit::builtin_throw() for JVMTI exception events
Backport-of: 72530ef666
(cherry picked from commit a575f5c090)
2021-10-28 11:42:46 +07:00
Vladimir Kozlov
0eb220c53f 8268261: C2: assert(n != __null) failed: Bad immediate dominator info.
Backport-of: 4ed548b3ee
(cherry picked from commit de808a5e92)
2021-10-28 11:42:45 +07:00
Rajan Halade
c70fb9a9f0 8225082: Remove IdenTrust certificate that is expiring in September 2021
Backport-of: 2ec45dc2dd
(cherry picked from commit 9b97129e8c)
2021-10-28 11:42:44 +07:00
Harold Seigel
5b5a1ec040 8270398: Enhance canonicalization
Backport-of: 0a6c6a2c954d7889934d3caa4256124a1c5662a0
(cherry picked from commit fc8f959e6b)
2021-10-28 11:39:57 +07:00
Harold Seigel
042e9bde60 8270404: Better canonicalization
Backport-of: a0a8a41bb1da9261b2d3c4a43a6738fbf3286b5d
(cherry picked from commit b6003a87e4)
2021-10-28 11:39:56 +07:00
Christoph Langer
983c12795d 8267666: Add option to jcmd GC.heap_dump to use existing file
Backport-of: 7cbb67a3f8
(cherry picked from commit 9b6aa5304c)
2021-10-28 11:39:55 +07:00
Christoph Langer
94b02105aa 8263531: Remove unused buffer int
Backport-of: ca806ef319
(cherry picked from commit 00ffb8f1b9)
2021-10-28 11:39:55 +07:00
Prasanta Sadhukhan
665dc9f72c 8269763: The JEditorPane is blank after JDK-8265167
Backport-of: 36aac3987938688c97c06f34fdc8688e0b24a4fa
(cherry picked from commit da18f64548)
2021-10-28 11:39:54 +07:00
Prasanta Sadhukhan
e4a5f15a17 8265580: Enhanced style for RTF kit
Backport-of: dd4a17f711b0027ed6377ca57c43a7d68d4df566
(cherry picked from commit 4fa8b8fd54)
2021-10-28 11:39:53 +07:00
Prasanta Sadhukhan
5e4c9fa497 8265574: Improve handling of sheets
Backport-of: a20f56155d675fd606ed57fddb153aeb9dc270ae
(cherry picked from commit 4fcc43dce7)
2021-10-28 11:39:53 +07:00
Prajwal Kumaraswamy
3b442f1387 8266115: More Manifest Jar Loading
Reviewed-by: coffeys, weijun
Backport-of: 1834a749a1d51c82fb1a1c34770c7ab5b4ff9fce
(cherry picked from commit 78cb6a1e6c)
2021-10-28 11:39:52 +07:00
Jamil Nimeh
2bc5573c0d 8268199: Correct certificate requests
Backport-of: afeccc7639d3d09041b58cf0f5672eb7310b2cbd
(cherry picked from commit da5e349088)
2021-10-28 11:39:52 +07:00
Hai-May Chao
97fe70e623 8268500: Better specified ParameterSpecs
Backport-of: 04ba2a665d4f2af34ed7896e2f1b2b5f9cdf31a4
(cherry picked from commit 82d44a79de)
2021-10-28 11:39:51 +07:00
Jamil Nimeh
4bf5b250e8 8268193: Improve requests of certificates
Reviewed-by: ascarpino
Backport-of: ce8b2eac4f9643575a87617ae8091657e9458c22
(cherry picked from commit 33cd383a96)
2021-10-28 11:39:50 +07:00
Xue-Lei Andrew Fan
6a6b306d4b 8268205: Enhance DTLS client handshake
Reviewed-by: jnimeh
Backport-of: 4a0c4038401e48d5111449ca35c0795d94f9ab83
(cherry picked from commit 5adbf765a2)
2021-10-28 11:39:50 +07:00
Xue-Lei Andrew Fan
d1f850624e 8269618: Better session identification
Reviewed-by: jnimeh
Backport-of: 116b77755f0a5d8c786a0c0ead4fc557ce359e6e
(cherry picked from commit cf73d51d77)
2021-10-28 11:39:49 +07:00
Kiran Sidhartha Ravikumar
f3fdcb0714 8268506: More Manifest Digests
Backport-of: 306a51b13f5307b0de9d2f04daa983ccd8f92284
(cherry picked from commit b3054c8168)
2021-10-28 11:39:49 +07:00
pavel_kharskii
4880125640 8269297: Bump version numbers for JDK 17.0.1
Reviewed-by: robm, erikj
(cherry picked from commit 040f1053aa)
2021-10-28 11:39:48 +07:00
Jayathirth D V
0c68210497 8267735: Better BMP support
Backport-of: 67ddc7e7f3b178998ea59f68758a5fa510624e12
(cherry picked from commit b24dff5fef)
2021-10-28 11:39:47 +07:00
Weijun Wang
7541d7b433 8267086: ArrayIndexOutOfBoundsException in java.security.KeyFactory.generatePublic
Backport-of: 2e375ae9ed459527393f9dd13d15d1031ad6095f
(cherry picked from commit 87b5f1bd82)
2021-10-28 11:39:47 +07:00
Prajwal Kumaraswamy
5927fc769b 8266137: Improve Keystore integrity
Reviewed-by: coffeys, hchao
Backport-of: 06acda364f1483c15adca105d612a24f1d50112c
(cherry picked from commit 0102000658)
2021-10-28 11:39:46 +07:00
Julia Boes
8236ede496 8266097: Better hashing support
Reviewed-by: chegar, dfuchs, ahgross, smarks, rhalade
(cherry picked from commit 8f31f0d343)
2021-10-28 11:39:45 +07:00
Weijun Wang
d67378295f 8266109: More Resilient Classloading
Reviewed-by: rhalade
Backport-of: 00c10ed10286a1989a339bc35cb64302630427ae
(cherry picked from commit 4b289d6ab5)
2021-10-28 11:39:45 +07:00
Xue-Lei Andrew Fan
7d0ad85c28 8267729: Improve TLS client handshaking
Reviewed-by: jnimeh, ahgross, rhalade
(cherry picked from commit 80dd63d0d7)
2021-10-28 11:39:44 +07:00
Prasanta Sadhukhan
9b692eeaf0 8265167: Richer Text Editors
Backport-of: c59311d94c3f010b9017825d767db8241c69a2a7
(cherry picked from commit 3888c76ac3)
2021-10-28 11:39:44 +07:00
Maxim Kartashev
3a15dfad37 JBR-3623 SIGSEGV at [libawt_xawt] Java_sun_awt_X11GraphicsDevice_getConfigColormap
This fix addresses two possible causes of crashes:
1. makeDefaultConfig() returning NULL. The fix is to die gracefully
instead of crashing in an attempt to de-reference the NULL pointer.

2. A race condition when the number of screens change (this is only an
issue with the number of xinerama screens; the number of X11 screens is
static for the duration of the X session).

The race scenario: X11GraphisDevice.makeDefaultConfiguration() is called
on EDT so the call can race with X11GraphisDevice.invalidate() that
re-sets the screen number of the device; the latter is invoked on the
"AWT-XAWT" thread from X11GraphicsEnvironment.rebuildDevices(). So by
the time makeDefaultConfiguration() makes a native call with the
device's current screen number, the x11Screens array maintained by the
native code could have become shorter. And the native methods like
Java_sun_awt_X11GraphicsDevice_getConfigColormap() assume that the
screen number passed to them is always current and valid. The AWT lock
only protects against the changes during the native methods invocation,
but does not protect against them being called with an outdated screen
number.

The fix is to eliminate the race by protecting X11GraphisDevice.screen
with the AWT lock.

(cherry picked from commit 0b53cd291f)
2021-10-27 11:35:11 +03:00
Nikita Gubarkov
b3ce2ef163 JBR-3915 Render glyph multiple times instead of downscaling when subpixel resolution is enabled to preserve hinting (macOS) 2021-10-27 02:14:15 +03:00
Maxim Kartashev
4517168648 JBR-3916 Deadlock in pGetBounds() on Linux
The deadlock occurred because one thread was holding the AWT lock and
waiting for boundsCacheLock in resetBoundsCache() and the other vice
versa stuck in pGetBounds() owning boundsCacheLock and waiting for the
AWT lock.

The solution is to get rid of boundsCacheLock altogether. It was
introduced in order to never return null from getBoundsCached() so that
resetBoundsCache() wouldn't interfere. But the same effect can be
achieved by simply using a local variable to hold a copy of the current
bounds. The worst case scenario now is that two threads update
boundsCached immediately one after another (if they both have observed
the null value there at about the same time), but that's harmless as
pGetBounds() grabs the AWT lock when necessary.

(cherry picked from commit dc6ad31524)
2021-10-26 18:31:58 +03:00
Vitaly Provodin
3bae514df5 JBR-3905 add incremental JBR building 2021-10-24 08:53:21 +07:00
Vitaly Provodin
68cfc784e7 JBR-3904 fix the image directory name of macos builds 2021-10-24 07:16:55 +07:00
Anton Tarasov
4bc0b1e833 include a11y test into regular runs after fixing JBR-3730 & JBR-3733 2021-10-23 08:31:12 +07:00
Vitaly Provodin
a87d48867a JBR-3902 create jbr_all test group 2021-10-23 08:28:25 +07:00
Vitaly Provodin
de10f3a55e port dcevm fixes for JBR-3867 and JBR-3887
JBR-3867 update keys of jvmti TAG map after redefinition

JBR-3887 fix M1 dcevm SIGBUS crash by using correct var arg processing
2021-10-23 04:52:26 +07:00
Vitaly Provodin
18e1552b9d 8267887 exclude javax/management/remote/mandatory/connection/RMIConnector_NPETest.java 2021-10-22 19:32:10 +07:00
Thejasvi Voniadka
7714eca9e2 8270280: security/infra/java/security/cert/CertPathValidator/certification/LetsEncryptCA.java OCSP response error
Backport-of: f4b3ee5dca
(cherry picked from commit e9fd4b9fc4)
2021-10-22 19:32:10 +07:00
Alexander Zuev
5b559a8764 8269269: [macos11] SystemIconTest fails with ClassCastException
Reviewed-by: jdv
(cherry picked from commit eab959cbfa)
2021-10-22 19:32:09 +07:00
Thomas Schatzl
34b306300d 8263461: jdk/jfr/event/gc/detailed/TestEvacuationFailedEvent.java uses wrong mechanism to cause evacuation failure
Reviewed-by: kbarrett, iwalulya, ayang

(cherry-picked from commit ee0247f056)
2021-10-22 19:32:09 +07:00
Alexander Lobas
0cf6d2da8d JBR-2893 Big Sur: Add support of opening project as tabs IDEA-257932 Big Sur: IDEA hangs after closing a project tab after exiting and entering full screen
Converted JNF to JNIUtilites

(cherry picked from commit f02e31a440)
(cherry-picked from commit a84736ebcc)
2021-10-21 14:10:37 +02:00
Artem Semenov
67ab7032c8 JBR-3881 8271071: accessibility of a table on macOS lacks cell navigation
Reviewed-by: ant, kizune, pbansal
2021-10-18 11:06:11 +07:00
Alexey Ushakov
cd4ef878a0 JBR-3843 IDE text is misaligned vertically when using Consolas font
Use usWinAscent/usWinDescent for metrics on Windows
2021-10-14 18:58:52 +02:00
Alexey Ushakov
5b43a3aef3 JBR-3872 [JBR17+Metal] Wrong color for scrollbars and inlay hints
Corrected typo in setTxtUniforms and fixed alpha blending in frag_gmc_text shader
2021-10-14 18:58:52 +02:00
Nikita Gubarkov
ce2a99a6ec JBR-3876 Changed visibility of FontUtilities#getSubpixelResolution and FontUtilities#subpixelResolution to package-private 2021-10-14 14:41:29 +03:00
Matthias Baesken
882d1064e7 JBR-3874 8274840: Update OS detection code to recognize Windows 11
Co-authored-by: Arno Zeller <arno.zeller@sap.com>
Reviewed-by: clanger, dholmes
(cherry picked from commit 51a590b2e8)
2021-10-14 15:47:51 +07:00
Nikita Gubarkov
45ca486b96 Fixed text spacing on macOS 2021-10-14 07:09:20 +03:00
Vitaly Provodin
a3bfa02ec0 move the script comparing performance results from jdk8u_test 2021-10-14 09:23:35 +07:00
Vitaly Provodin
a9ed023347 JBR-3167 exclude java/awt/Frame/HugeFrame/HugeFrame.java & sun/java2d/ClassCastExceptionForInvalidSurface.java crashing GNOME on Ubuntu-21.04 2021-10-13 10:00:52 +07:00
Maxim Kartashev
92c7e3a9c3 JBR-3871 Disable remote.x11.workaround by default
-Dremote.x11.workaround=true can still be used to enabled it, but
there's no automatic on switch anymore.

(cherry picked from commit fb12f6d7f1)
2021-10-12 00:59:17 -07:00
Vitaly Provodin
e1724ac304 exclude image/multiresolution/MultiresolutionIconTest.java and Window/GetScreenLocation/GetScreenLocationTest.java failing on linux 2021-10-10 05:50:35 +07:00
Nikita Gubarkov
51bb3ddb2f Fixed JBR API JTreg tests 2021-10-09 19:26:37 +03:00
Nikita Provotorov
10c7694d60 fixup! JBR-3838 AltGr on Polish keyboard triggers Ctrl+Alt shortcut.
Workaround for the regression test when it misses a focus for the awt.Component.
2021-10-06 18:09:50 +07:00
Maxim Kartashev
59ea9d809d JBR-3833 ServerSocketChannel.open(StandardProtocolFamily.UNIX) fails with IAE with non-standard filesystems on JBR17
Lazy-initialize the static member UNNAMED of UnixDomainSockets so that this
initialization doesn't throw unless actually used. This is only
necessary when using a non-default file system.
2021-10-05 16:00:27 +03:00
Alexey Ushakov
ab146e18bd JBR-3740 JBR17: Font metrics problem in text fields
Aligned code with openjdk (JDK-8263583)
2021-10-05 13:45:03 +02:00
Nikita Gubarkov
0ca9b169b0 Added JBR API 2021-10-05 02:21:20 +03:00
Maxim Kartashev
289f756f70 JBR-3835 Cropped messages in all Message Dialogs in Idea on Ubuntu 18.04.5 LTS with swing alerts enabled
The _NET_FRAME_EXTENTS property that is used to obtain the initial
insets of a dialog window does not immediately get its value and may be
returned as 0 if queried too soon after the window creation.

In order to avoid (incorrect) guessing of dialog's insets, make 3
attempts at getting the insets with a small but increasing pause
in between them.
2021-10-04 12:15:04 -07:00
Nikita Provotorov
ba84093c7d JBR-3838 AltGr on Polish keyboard triggers Ctrl+Alt shortcut.
Add regression test.

(cherry picked from commit 8df43eef4b)
2021-10-03 13:24:39 +07:00
Vitaly Provodin
46702cad3c fix name for -windows-test-x64 tarball 2021-10-03 05:44:17 +07:00
Artem Semenov
ac8ffa0ba7 8274381: missing CAccessibility definitions in JNI code
Reviewed-by: pbansal, ant, kizune
2021-10-02 08:55:36 +07:00
Alexey Ushakov
fae062d45f JBR-3820 Gamma correction for grayscale text in Metal rendering pipeline
Implemented gamma correction using the same approach that we did for OGL grayscale text rendering (OGLTextRenderer.c). Applied some optimisations to shader code.
2021-10-01 14:11:10 +02:00
Artem Semenov
0e87047b7e 8274383: JNI call of getAccessibleSelection on a wrong thread
Reviewed-by: kizune, ant
2021-09-30 16:17:18 +07:00
Vitaly Provodin
0106ef8fef add the link to the latest JBR release 2021-09-29 11:27:53 +07:00
Vitaly Provodin
a69031c54b a11y: exclude tests crashing JBR in the runs with enabled Voice Over 2021-09-29 05:49:39 +07:00
Nikita Gubarkov
8b96b1e115 Remove old JBR API 2021-09-29 00:04:48 +03:00
Maxim Kartashev
48186ebbfb JBR-3813 Regression after fix for JBR-3688
1. Cached bounds and insets must be cloned before return because they
aren't immutable objects.
2. Fixed the deadlock in resetBoundsCache() by synchronizing on a dedicated
lock.

(cherry picked from commit cd5314db8b)
2021-09-27 11:53:08 -07:00
Maxim Kartashev
6877bb6cd1 JBR-3680 Cherry-pick Google's NIO patches to get faster file listing
Fix regression introduced by Google's NIO patches:
- do not attempt to get the next entry after the directory stream has
been closed already,
- fix FaultyFileSystem that is used in StreamTest.java to throw
the right exception even when getFileAttributeView() is used instead of
readAttributes(),
- removed unnecessary type cast that caused a compilation warning.

Added a test for walking a directory with a non-latin name.

(cherry picked from commit 152a4e886d)
2021-09-24 16:50:53 +03:00
Lance Andersen
aab6c2301d 8273935: (zipfs) Files.getFileAttributeView() throws UOE instead of returning null when view not supported
Reviewed-by: alanb, bpb, sgehwolf

(Cherry-picked from 161fdb4afb)
(AKA JBR-3680 Cherry-pick Google's NIO patches to get faster file listing)
2021-09-24 16:50:53 +03:00
Renaud Paquay
8b63dd1c22 Add BasicWithKeyFileAttributeView interface
This new interface is similar to `BasicFileAttributeView` except it
gives implementations a hint that the fileKey() should be acquired
even at some performance cost.

`FileTreeWalker` uses this new interface to request a file key
in addition to regular file attributes so that file equality can
be efficiently performed when checking for loops during file
tree traversal.

This makes `FileTreeWalker` about 2x faster when traversing non
trivial file system trees with the FOLLOW_LINKS option.

Change-Id: I8de047c8fc241dbab9ad57c5e361118a3a94893d

(AKA JBR-3680 Cherry-pick Google's NIO patches to get faster file listing)

(cherry picked from commit 6d1c3f06c4)
2021-09-24 16:50:53 +03:00
Renaud Paquay
9baaee86b0 Improve performance of WindowsDirectoryStream
Use `NtQueryDirectoryInformation` instead of `FindFirst/FindNext` to
retrieve the list of entries of a directory.

`NtQueryDirectionInformation` has 2 main benefits over
`FindFist`/`FindNext`:

* Performance is about 40% faster

* Each retrieved entry retrieved contains a 64-bit `FileId` in addition
  to the usual attributes, ensuring that returned `java.nio.Path`
  instances hold onto a `BasicFileAttributes` instance that exposes a
  non-null `java.nio.file.attribute.BasicFileAttributes.fileKey()`.

This change also requires creating a new WindowsFileKey class, similar
to UnixFileKey class, so that
`java.nio.file.attribute.BasicFileAttributes.fileKey()` can return an
Object instance that can be used to compare files for equality.

With this change, the Windows implementation of Files.walkFileTree is
about 40% faster when the FOLLOW_LINKS option is not used, and about
2.5x faster when the FOLLOW_LINKS option is used.

When the FOLLOW_LINKS option is used, most calls to
`Files.isSameFile`, which is expensive as it requires 2 file I/O
operations, are avoided because the Path entries returned by the
new WindowsDirectoryStream implementation now contain a non-null
BasicFileAttributes.fileKey(). The remaining calls to
`Files.isSameFile` are performed when Files.walkFileTree need
to compare the initial directory with other entries.

Change-Id: Id79d89d477a6d5dcf151c63a9d6072c6f7ef43b2

(AKA JBR-3680 Cherry-pick Google's NIO patches to get faster file listing)

(cherry picked from commit 7c2d7541ba)
2021-09-24 16:50:53 +03:00
Artem Semenov
9e0ff20be5 8274056: JavaAccessibilityUtilities leaks JNI objects
Reviewed-by: aivanov, ant
2021-09-24 16:07:18 +07:00
Roger Riggs
f51e55a20f 8269850: Most JDK releases report macOS version 12 as 10.16 instead of 12.0
Reviewed-by: naoto, clanger
(cherry picked from commit 3b1b8fc646)
(AKA JBR-3804 Cherry-pick 8269850 from OpenJDK11)
2021-09-24 09:09:10 +03:00
Dmitry Batrak
e68d154a63 JBR-3799 Broken input of supplementary plane Unicode characters on macOS
apply upstream fix (JDK-8272602)

(cherry picked from commit 7d915be754)
2021-09-22 15:20:21 +03:00
Dmitry
b526f948ff JBR-3793 Accept unrecognized options and make them available in Java
This patch:

- Change default behavior to ignore unrecognized options (+IgnoreUnrecognizedVMOptions)

- Store all ignored values to: "java.vm.unrecognized.options" as "+BogusOption01 +BogusOption02" (space separated), see testcase

- Explicitly set -IgnoreUnrecognizedVMOptions for couple of tests, that rely on default behavior
2021-09-21 18:47:56 +03:00
Dmitry Batrak
fdbb6f02b8 improve the stability of TypeaheadRequestFocusTest
it failed sometimes under MATE desktop environment on Linux

(cherry picked from commit 37901295e1)
2021-09-21 13:04:10 +03:00
Ivan Migalev
6743f36c32 JBR-3785: don't touch the active keyboard layout on input method activation / deactivation.
origin PR: github.com/JetBrains/JetBrainsRuntime/pull/78.

(cherry picked from commit 2f772fd1a2)
2021-09-21 09:45:55 +01:00
Vitaly Provodin
f706b93717 exclude tests failing due to JDK-8253184 2021-09-21 12:04:20 +07:00
Dmitry Batrak
6f046e9f68 make NestedDialogHideTest more reliable
currently, if fails on KDE, if multiple workspaces are configured, because mouse cursor happens to be located over 'pin' button in window title bar,
and that hover causes a tooltip to be shown, which blocks mouse clicks

(cherry picked from commit ad1595b5c2)
2021-09-20 18:21:26 +03:00
Dmitry Batrak
bac641fe77 JBR-3786 javax/swing/plaf/aqua/CustomComboBoxFocusTest.java fails on MacOS by timeout
(cherry picked from commit f5c5388fb5)
2021-09-20 17:27:07 +03:00
Dmitry Batrak
8dfcb3fd5a JBR-3779 Unexpected Alt+Tab behaviour for Java frames on Cinnamon DE
(cherry picked from commit 0bf13985d5)
2021-09-20 12:27:42 +03:00
Maxim Kartashev
ef651ca1bb JBR-3688 PyCharm incredibly slow with fakexrandr
Cache screen bounds and insets and (conservatively) reset those caches
upon any possibility of a change.
This feature can be disabled with -Dx11.cache.screen.insets=false and
-Dx11.cache.screen.bounds=false.

Based on commit accef6f21e.
2021-09-20 10:55:38 +03:00
Maxim Kartashev
3092ca0461 JBR-3772 java/beans/PropertyEditor/TestFontClass.java: access denied ("java.util.PropertyPermission" "sun.awt.x11.trace" "read")
Instead of using System.getProperty() directly, wrap the call into
GetPropertyAction and use AccessController to execute it.
2021-09-16 09:19:54 +03:00
Dmitry Batrak
3caa06a639 JBR-3726 Modal windows 'disappear' on minimize in KDE
revert changes not needed anymore

(cherry picked from commit f0ed32fca4)
2021-09-14 18:41:53 +03:00
Dmitry Batrak
6c50ed6690 JBR-3726 Modal windows 'disappear' on minimize in KDE
re-implement the fix without using _NET_WM_STATE_MODAL - it causes other issues

(cherry picked from commit 5c4fd9ceaf)
2021-09-14 18:41:45 +03:00
Nikita Gubarkov
805a5b4f75 Add ExtendedGlyphCache and remove SampleJBRApi from JBR API 2021-09-13 16:47:25 +03:00
Artem Semenov
efabfd0370 8267385: Create NSAccessibilityElement implementation for JavaComponentAccessibility
8262031: Create implementation for NSAccessibilityNavigableStaticText protocol
8264287: Create implementation for NSAccessibilityComboBox protocol peer
8264303: Create implementation for NSAccessibilityTabGroup protocol peer
8264292: Create implementation for NSAccessibilityList protocol peer
8267387: Create implementation for NSAccessibilityOutline protocol
8267388: Create implementation for NSAccessibilityTable protocol
8264286: Create implementation for NSAccessibilityColumn protocol peer
8264298: Create implementation for NSAccessibilityRow protocol peer
8264291: Create implementation for NSAccessibilityCell protocol peer

Reviewed-by: kizune, pbansal, serb
2021-09-11 06:08:56 +07:00
Dmitry Batrak
f757a39090 JBR-3504 a11y focus is set on the wrong element when opening popups
(cherry-picked from commit a69e12e0d2)
2021-09-10 17:49:14 +03:00
Dmitry Batrak
1039653b97 JBR-3726 Modal windows 'disappear' on minimize in KDE
restrict change to KDE only, as it causes problems on GNOME (JBR-3750)

(cherry picked from commit 9c2841028f)
2021-09-10 17:49:09 +03:00
Maxim Kartashev
65fa801231 JBR-3665 Typing is slow in remote X session
Only call XGetKeyboardMapping() once for all valid codes and cache the
resulting table. Use the cache on the subsequent calls to
keycodeToKeysym().
2021-09-10 12:35:45 +03:00
Nikita Gubarkov
3d9ae4dbe8 JBR-3638 Adjust subpixel glyph positions for correct rounding in CStrike#getGlyphImageBounds 2021-09-08 04:23:24 +03:00
Maxim Kartashev
ef8e01b0d4 JBR-2273 JBR musl port
Detect if we're running on a musl-based system by checking for the presence
of the libgcompat.so glibc compatibility library in the process' map.
If so, java is re-started with LD_LIBRARY_PATH set to point to the right
directory with libjvm.so. This works around the problem with the musl
dynamic library loader.

(based on commit 13a904ddb5)
2021-09-07 15:02:17 +03:00
1441 changed files with 69096 additions and 51608 deletions

View File

@@ -10,7 +10,7 @@ on:
platforms:
description: "Platform(s) to execute on"
required: true
default: "Linux additional (hotspot only), Linux x64, Linux x86, Windows x64, macOS x64"
default: "Linux additional (hotspot only), Linux x64, Linux x86, Windows aarch64, Windows x64, macOS x64"
jobs:
prerequisites:
@@ -22,6 +22,7 @@ jobs:
platform_linux_additional: ${{ steps.check_platforms.outputs.platform_linux_additional }}
platform_linux_x64: ${{ steps.check_platforms.outputs.platform_linux_x64 }}
platform_linux_x86: ${{ steps.check_platforms.outputs.platform_linux_x86 }}
platform_windows_aarch64: ${{ steps.check_platforms.outputs.platform_windows_aarch64 }}
platform_windows_x64: ${{ steps.check_platforms.outputs.platform_windows_x64 }}
platform_macos_x64: ${{ steps.check_platforms.outputs.platform_macos_x64 }}
platform_macos_aarch64: ${{ steps.check_platforms.outputs.platform_macos_aarch64 }}
@@ -38,6 +39,7 @@ jobs:
echo "::set-output name=platform_linux_additional::${{ contains(github.event.inputs.platforms, 'linux additional (hotspot only)') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'linux additional (hotspot only)'))) }}"
echo "::set-output name=platform_linux_x64::${{ contains(github.event.inputs.platforms, 'linux x64') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'linux x64'))) }}"
echo "::set-output name=platform_linux_x86::${{ contains(github.event.inputs.platforms, 'linux x86') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'linux x86'))) }}"
echo "::set-output name=platform_windows_aarch64::${{ contains(github.event.inputs.platforms, 'windows aarch64') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'windows aarch64'))) }}"
echo "::set-output name=platform_windows_x64::${{ contains(github.event.inputs.platforms, 'windows x64') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'windows x64'))) }}"
echo "::set-output name=platform_macos_x64::${{ contains(github.event.inputs.platforms, 'macos x64') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'macos x64'))) }}"
echo "::set-output name=platform_macos_aarch64::${{ contains(github.event.inputs.platforms, 'macos aarch64') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'macos aarch64'))) }}"
@@ -119,7 +121,7 @@ jobs:
artifact: -debug
env:
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
@@ -248,7 +250,7 @@ jobs:
artifact: -debug
env:
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
@@ -429,7 +431,7 @@ jobs:
gnu-arch: powerpc64le
env:
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
@@ -577,7 +579,7 @@ jobs:
# Reduced 32-bit build uses the same boot JDK as 64-bit build
env:
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
@@ -714,7 +716,7 @@ jobs:
# Reduced 32-bit build uses the same boot JDK as 64-bit build
env:
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
@@ -847,17 +849,16 @@ jobs:
path: ~/linux-x86${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip
continue-on-error: true
windows_x64_build:
name: Windows x64
windows_aarch64_build:
name: Windows aarch64
runs-on: "windows-2019"
needs: prerequisites
if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_windows_x64 != 'false'
if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_windows_aarch64 != 'false'
strategy:
fail-fast: false
matrix:
flavor:
- build release
- build debug
include:
- flavor: build debug
@@ -883,7 +884,96 @@ jobs:
run: |
New-Item -Force -ItemType directory -Path "$HOME\cygwin"
& curl -L "https://www.cygwin.com/setup-x86_64.exe" -o "$HOME/cygwin/setup-x86_64.exe"
Start-Process -FilePath "$HOME\cygwin\setup-x86_64.exe" -ArgumentList "--quiet-mode --packages autoconf,make,zip,unzip --root $HOME\cygwin\cygwin64 --local-package-dir $HOME\cygwin\packages --site http://mirrors.kernel.org/sourceware/cygwin --no-desktop --no-shortcuts --no-startmenu --no-admin" -Wait -NoNewWindow
Start-Process -FilePath "$HOME\cygwin\setup-x86_64.exe" -ArgumentList "--quiet-mode --packages cygwin=3.2.0-1,autoconf,make,zip,unzip --root $HOME\cygwin\cygwin64 --local-package-dir $HOME\cygwin\packages --site http://mirrors.kernel.org/sourceware/cygwin --no-desktop --no-shortcuts --no-startmenu --no-admin" -Wait -NoNewWindow
- name: Checkout the source
uses: actions/checkout@v2
with:
path: jdk
- name: Restore boot JDK from cache
id: bootjdk
uses: actions/cache@v2
with:
path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
- name: Download boot JDK
run: |
mkdir -p "$HOME\bootjdk\$env:BOOT_JDK_VERSION"
& curl -L "$env:BOOT_JDK_URL" -o "$HOME/bootjdk/$env:BOOT_JDK_FILENAME"
$FileHash = Get-FileHash -Algorithm SHA256 "$HOME/bootjdk/$env:BOOT_JDK_FILENAME"
$FileHash.Hash -eq $env:BOOT_JDK_SHA256
& tar -xf "$HOME/bootjdk/$env:BOOT_JDK_FILENAME" -C "$HOME/bootjdk/$env:BOOT_JDK_VERSION"
Get-ChildItem "$HOME\bootjdk\$env:BOOT_JDK_VERSION\*\*" | Move-Item -Destination "$HOME\bootjdk\$env:BOOT_JDK_VERSION"
if: steps.bootjdk.outputs.cache-hit != 'true'
- name: Ensure a specific version of MSVC is installed
run: >
Start-Process -FilePath 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe' -Wait -NoNewWindow -ArgumentList
'modify --installPath "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise" --quiet
--add Microsoft.VisualStudio.Component.VC.14.29.arm64'
- name: Configure
run: >
$env:Path = "$HOME\cygwin\cygwin64\bin;$HOME\cygwin\cygwin64\bin;$env:Path" ;
$env:Path = $env:Path -split ";" -match "C:\\Windows|PowerShell|cygwin" -join ";" ;
$env:BOOT_JDK = cygpath "$HOME/bootjdk/$env:BOOT_JDK_VERSION" ;
& bash configure
--with-conf-name=windows-aarch64
--with-msvc-toolset-version=14.29
--openjdk-target=aarch64-unknown-cygwin
${{ matrix.flags }}
--with-version-opt="$env:GITHUB_ACTOR-$env:GITHUB_SHA"
--with-version-build=0
--with-boot-jdk="$env:BOOT_JDK"
--with-default-make-target="hotspot"
working-directory: jdk
- name: Build
run: |
$env:Path = "$HOME\cygwin\cygwin64\bin;$HOME\cygwin\cygwin64\bin;$env:Path" ;
$env:Path = $env:Path -split ";" -match "C:\\Windows|PowerShell|cygwin" -join ";" ;
& make CONF_NAME=windows-aarch64
working-directory: jdk
windows_x64_build:
name: Windows x64
runs-on: "windows-2019"
needs: prerequisites
if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_windows_x64 != 'false'
strategy:
fail-fast: false
matrix:
flavor:
- build release
- build debug
include:
- flavor: build debug
flags: --enable-debug
artifact: -debug
env:
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_FILENAME }}"
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_URL }}"
BOOT_JDK_SHA256: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_SHA256 }}"
steps:
- name: Restore cygwin packages from cache
id: cygwin
uses: actions/cache@v2
with:
path: ~/cygwin/packages
key: cygwin-packages-${{ runner.os }}-v1
- name: Install cygwin
run: |
New-Item -Force -ItemType directory -Path "$HOME\cygwin"
& curl -L "https://www.cygwin.com/setup-x86_64.exe" -o "$HOME/cygwin/setup-x86_64.exe"
Start-Process -FilePath "$HOME\cygwin\setup-x86_64.exe" -ArgumentList "--quiet-mode --packages cygwin=3.2.0-1,autoconf,make,zip,unzip --root $HOME\cygwin\cygwin64 --local-package-dir $HOME\cygwin\packages --site http://mirrors.kernel.org/sourceware/cygwin --no-desktop --no-shortcuts --no-startmenu --no-admin" -Wait -NoNewWindow
- name: Checkout the source
uses: actions/checkout@v2
@@ -1017,7 +1107,7 @@ jobs:
artifact: -debug
env:
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_FILENAME }}"
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_URL }}"
@@ -1055,7 +1145,7 @@ jobs:
run: |
New-Item -Force -ItemType directory -Path "$HOME\cygwin"
& curl -L "https://www.cygwin.com/setup-x86_64.exe" -o "$HOME/cygwin/setup-x86_64.exe"
Start-Process -FilePath "$HOME\cygwin\setup-x86_64.exe" -ArgumentList "--quiet-mode --packages autoconf,make,zip,unzip --root $HOME\cygwin\cygwin64 --local-package-dir $HOME\cygwin\packages --site http://mirrors.kernel.org/sourceware/cygwin --no-desktop --no-shortcuts --no-startmenu --no-admin" -Wait -NoNewWindow
Start-Process -FilePath "$HOME\cygwin\setup-x86_64.exe" -ArgumentList "--quiet-mode --packages cygwin=3.2.0-1,autoconf,make,zip,unzip --root $HOME\cygwin\cygwin64 --local-package-dir $HOME\cygwin\packages --site http://mirrors.kernel.org/sourceware/cygwin --no-desktop --no-shortcuts --no-startmenu --no-admin" -Wait -NoNewWindow
- name: Restore jtreg artifact
id: jtreg_restore
@@ -1191,7 +1281,7 @@ jobs:
artifact: -debug
env:
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_FILENAME }}"
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_URL }}"
@@ -1293,7 +1383,7 @@ jobs:
artifact: -debug
env:
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_FILENAME }}"
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_URL }}"
@@ -1424,7 +1514,7 @@ jobs:
artifact: -debug
env:
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_INTERIM }}.${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_UPDATE }}"
BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_FILENAME }}"
BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).MACOS_X64_BOOT_JDK_URL }}"
@@ -1571,6 +1661,7 @@ jobs:
needs:
- prerequisites
- linux_additional_build
- windows_aarch64_build
- linux_x64_test
- linux_x86_test
- windows_x64_test

View File

@@ -1,5 +1,5 @@
[general]
project=jdk
project=jdk-updates
jbs=JDK
[checks]

View File

@@ -5,6 +5,15 @@
JetBrains Runtime is a fork of [OpenJDK](https://github.com/openjdk/jdk) available for Windows, Mac OS X, and Linux.
It includes a number enhancements in font rendering, HiDPI support, ligatures, performance improvements, and bugfixes.
## Releases
Download the latest releases of JetBrains Runtime to use with JetBrains IDEs. The full list
can be found on the [releases page](https://github.com/JetBrains/JetBrainsRuntime/releases).
| IDE Version | Latest JBR | Date Released |
| --- | --- | --- |
| 2022.1 | [17_0_2-b315.1](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr17_0_2b315.1) | 09-Feb-2022 |
| 2021.3 | [17_0_1-b164.8](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr17_0_1b164.8) | 15-Nov-2021 |
## Contents
- [Welcome to JetBrains Runtime](#jetbrains-runtime)
- [Products Built on JetBrains Runtime](#products-built-on-jetbrains-runtime)

View File

@@ -96,6 +96,7 @@
<li><a href="#specific-build-issues">Specific Build Issues</a></li>
<li><a href="#getting-help">Getting Help</a></li>
</ul></li>
<li><a href="#reproducible-builds">Reproducible Builds</a></li>
<li><a href="#hints-and-suggestions-for-advanced-users">Hints and Suggestions for Advanced Users</a><ul>
<li><a href="#bash-completion">Bash Completion</a></li>
<li><a href="#using-multiple-configurations">Using Multiple Configurations</a></li>
@@ -884,6 +885,32 @@ spawn failed</code></pre>
<h3 id="getting-help">Getting Help</h3>
<p>If none of the suggestions in this document helps you, or if you find what you believe is a bug in the build system, please contact the Build Group by sending a mail to <a href="mailto:build-dev@openjdk.java.net">build-dev@openjdk.java.net</a>. Please include the relevant parts of the configure and/or build log.</p>
<p>If you need general help or advice about developing for the JDK, you can also contact the Adoption Group. See the section on <a href="#contributing-to-openjdk">Contributing to OpenJDK</a> for more information.</p>
<h2 id="reproducible-builds">Reproducible Builds</h2>
<p>Build reproducibility is the property of getting exactly the same bits out when building, every time, independent on who builds the product, or where. This is for many reasons a harder goal than it initially appears, but it is an important goal, for security reasons and others. Please see <a href="https://reproducible-builds.org">Reproducible Builds</a> for more information about the background and reasons for reproducible builds.</p>
<p>Currently, it is not possible to build OpenJDK fully reproducibly, but getting there is an ongoing effort. There are some things you can do to minimize non-determinism and make a larger part of the build reproducible:</p>
<ul>
<li>Turn on build system support for reproducible builds</li>
</ul>
<p>Add the flag <code>--enable-reproducible-build</code> to your <code>configure</code> command line. This will turn on support for reproducible builds where it could otherwise be lacking.</p>
<ul>
<li>Do not rely on <code>configure</code>'s default adhoc version strings</li>
</ul>
<p>Default adhoc version strings OPT segment include user name, source directory and timestamp. You can either override just the OPT segment using <code>--with-version-opt=&lt;any fixed string&gt;</code>, or you can specify the entire version string using <code>--with-version-string=&lt;your version&gt;</code>.</p>
<ul>
<li>Specify how the build sets <code>SOURCE_DATE_EPOCH</code></li>
</ul>
<p>The JDK build system will set the <code>SOURCE_DATE_EPOCH</code> environment variable during building, depending on the value of the <code>--with-source-date</code> option for <code>configure</code>. The default value is <code>updated</code>, which means that <code>SOURCE_DATE_EPOCH</code> will be set to the current time each time you are running <code>make</code>.</p>
<p>The <a href="https://reproducible-builds.org/docs/source-date-epoch/"><code>SOURCE_DATE_EPOCH</code> environment variable</a> is an industry standard, that many tools, such as gcc, recognize, and use in place of the current time when generating output.</p>
<p>For reproducible builds, you need to set this to a fixed value. You can use the special value <code>version</code> which will use the nominal release date for the current JDK version, or a value describing a date, either an epoch based timestamp as an integer, or a valid ISO-8601 date.</p>
<p><strong>Hint:</strong> If your build environment already sets <code>SOURCE_DATE_EPOCH</code>, you can propagate this using <code>--with-source-date=$SOURCE_DATE_EPOCH</code>.</p>
<ul>
<li>Specify a hotspot build time</li>
</ul>
<p>Set a fixed hotspot build time. This will be included in the hotspot library (<code>libjvm.so</code> or <code>jvm.dll</code>) and defaults to the current time when building hotspot. Use <code>--with-hotspot-build-time=&lt;any fixed string&gt;</code> for reproducible builds. It's a string so you don't need to format it specifically, so e.g. <code>n/a</code> will do. Another solution is to use the <code>SOURCE_DATE_EPOCH</code> variable, e.g. <code>--with-hotspot-build-time=$(date --date=@$SOURCE_DATE_EPOCH)</code>.</p>
<ul>
<li>Copyright year</li>
</ul>
<p>The copyright year in some generated text files are normally set to the current year. This can be overridden by <code>--with-copyright-year=&lt;year&gt;</code>. For fully reproducible builds, this needs to be set to a fixed value.</p>
<h2 id="hints-and-suggestions-for-advanced-users">Hints and Suggestions for Advanced Users</h2>
<h3 id="bash-completion">Bash Completion</h3>
<p>The <code>configure</code> and <code>make</code> commands tries to play nice with bash command-line completion (using <code>&lt;tab&gt;</code> or <code>&lt;tab&gt;&lt;tab&gt;</code>). To use this functionality, make sure you enable completion in your <code>~/.bashrc</code> (see instructions for bash in your operating system).</p>

View File

@@ -1503,6 +1503,68 @@ If you need general help or advice about developing for the JDK, you can also
contact the Adoption Group. See the section on [Contributing to OpenJDK](
#contributing-to-openjdk) for more information.
## Reproducible Builds
Build reproducibility is the property of getting exactly the same bits out when
building, every time, independent on who builds the product, or where. This is
for many reasons a harder goal than it initially appears, but it is an important
goal, for security reasons and others. Please see [Reproducible Builds](
https://reproducible-builds.org) for more information about the background and
reasons for reproducible builds.
Currently, it is not possible to build OpenJDK fully reproducibly, but getting
there is an ongoing effort. There are some things you can do to minimize
non-determinism and make a larger part of the build reproducible:
* Turn on build system support for reproducible builds
Add the flag `--enable-reproducible-build` to your `configure` command line.
This will turn on support for reproducible builds where it could otherwise be
lacking.
* Do not rely on `configure`'s default adhoc version strings
Default adhoc version strings OPT segment include user name, source directory
and timestamp. You can either override just the OPT segment using
`--with-version-opt=<any fixed string>`, or you can specify the entire version
string using `--with-version-string=<your version>`.
* Specify how the build sets `SOURCE_DATE_EPOCH`
The JDK build system will set the `SOURCE_DATE_EPOCH` environment variable
during building, depending on the value of the `--with-source-date` option for
`configure`. The default value is `updated`, which means that
`SOURCE_DATE_EPOCH` will be set to the current time each time you are running
`make`.
The [`SOURCE_DATE_EPOCH` environment variable](
https://reproducible-builds.org/docs/source-date-epoch/) is an industry
standard, that many tools, such as gcc, recognize, and use in place of the
current time when generating output.
For reproducible builds, you need to set this to a fixed value. You can use the
special value `version` which will use the nominal release date for the current
JDK version, or a value describing a date, either an epoch based timestamp as an
integer, or a valid ISO-8601 date.
**Hint:** If your build environment already sets `SOURCE_DATE_EPOCH`, you can
propagate this using `--with-source-date=$SOURCE_DATE_EPOCH`.
* Specify a hotspot build time
Set a fixed hotspot build time. This will be included in the hotspot library
(`libjvm.so` or `jvm.dll`) and defaults to the current time when building
hotspot. Use `--with-hotspot-build-time=<any fixed string>` for reproducible
builds. It's a string so you don't need to format it specifically, so e.g. `n/a`
will do. Another solution is to use the `SOURCE_DATE_EPOCH` variable, e.g.
`--with-hotspot-build-time=$(date --date=@$SOURCE_DATE_EPOCH)`.
* Copyright year
The copyright year in some generated text files are normally set to the current
year. This can be overridden by `--with-copyright-year=<year>`. For fully
reproducible builds, this needs to be set to a fixed value.
## Hints and Suggestions for Advanced Users
### Bash Completion

View File

@@ -27,6 +27,7 @@
<li><a href="#configuration">Configuration</a></li>
</ul></li>
<li><a href="#test-selection">Test selection</a><ul>
<li><a href="#common-test-groups">Common Test Groups</a></li>
<li><a href="#jtreg">JTReg</a></li>
<li><a href="#gtest">Gtest</a></li>
<li><a href="#microbenchmarks">Microbenchmarks</a></li>
@@ -67,6 +68,19 @@ $ make exploded-test TEST=tier2</code></pre>
<p>All functionality is available using the <code>test</code> make target. In this use case, the test or tests to be executed is controlled using the <code>TEST</code> variable. To speed up subsequent test runs with no source code changes, <code>test-only</code> can be used instead, which do not depend on the source and test image build.</p>
<p>For some common top-level tests, direct make targets have been generated. This includes all JTReg test groups, the hotspot gtest, and custom tests (if present). This means that <code>make test-tier1</code> is equivalent to <code>make test TEST=&quot;tier1&quot;</code>, but the latter is more tab-completion friendly. For more complex test runs, the <code>test TEST=&quot;x&quot;</code> solution needs to be used.</p>
<p>The test specifications given in <code>TEST</code> is parsed into fully qualified test descriptors, which clearly and unambigously show which tests will be run. As an example, <code>:tier1</code> will expand to <code>jtreg:$(TOPDIR)/test/hotspot/jtreg:tier1 jtreg:$(TOPDIR)/test/jdk:tier1 jtreg:$(TOPDIR)/test/langtools:tier1 jtreg:$(TOPDIR)/test/nashorn:tier1 jtreg:$(TOPDIR)/test/jaxp:tier1</code>. You can always submit a list of fully qualified test descriptors in the <code>TEST</code> variable if you want to shortcut the parser.</p>
<h3 id="common-test-groups">Common Test Groups</h3>
<p>Ideally, all tests are run for every change but this may not be practical due to the limited testing resources, the scope of the change, etc.</p>
<p>The source tree currently defines a few common test groups in the relevant <code>TEST.groups</code> files. There are test groups that cover a specific component, for example <code>hotspot_gc</code>. It is a good idea to look into <code>TEST.groups</code> files to get a sense what tests are relevant to a particular JDK component.</p>
<p>Component-specific tests may miss some unintended consequences of a change, so other tests should also be run. Again, it might be impractical to run all tests, and therefore <em>tiered</em> test groups exist. Tiered test groups are not component-specific, but rather cover the significant parts of the entire JDK.</p>
<p>Multiple tiers allow balancing test coverage and testing costs. Lower test tiers are supposed to contain the simpler, quicker and more stable tests. Higher tiers are supposed to contain progressively more thorough, slower, and sometimes less stable tests, or the tests that require special configuration.</p>
<p>Contributors are expected to run the tests for the areas that are changed, and the first N tiers they can afford to run, but at least tier1.</p>
<p>A brief description of the tiered test groups:</p>
<ul>
<li><p><code>tier1</code>: This is the lowest test tier. Multiple developers run these tests every day. Because of the widespread use, the tests in <code>tier1</code> are carefully selected and optimized to run fast, and to run in the most stable manner. The test failures in <code>tier1</code> are usually followed up on quickly, either with fixes, or adding relevant tests to problem list. GitHub Actions workflows, if enabled, run <code>tier1</code> tests.</p></li>
<li><p><code>tier2</code>: This test group covers even more ground. These contain, among other things, tests that either run for too long to be at <code>tier1</code>, or may require special configuration, or tests that are less stable, or cover the broader range of non-core JVM and JDK features/components (for example, XML).</p></li>
<li><p><code>tier3</code>: This test group includes more stressful tests, the tests for corner cases not covered by previous tiers, plus the tests that require GUIs. As such, this suite should either be run with low concurrency (<code>TEST_JOBS=1</code>), or without headful tests (<code>JTREG_KEYWORDS=\!headful</code>), or both.</p></li>
<li><p><code>tier4</code>: This test group includes every other test not covered by previous tiers. It includes, for example, <code>vmTestbase</code> suites for Hotspot, which run for many hours even on large machines. It also runs GUI tests, so the same <code>TEST_JOBS</code> and <code>JTREG_KEYWORDS</code> caveats apply.</p></li>
</ul>
<h3 id="jtreg">JTReg</h3>
<p>JTReg tests can be selected either by picking a JTReg test group, or a selection of files or directories containing JTReg tests.</p>
<p>JTReg test groups can be specified either without a test root, e.g. <code>:tier1</code> (or <code>tier1</code>, the initial colon is optional), or with, e.g. <code>hotspot:tier1</code>, <code>test/jdk:jdk_util</code> or <code>$(TOPDIR)/test/hotspot/jtreg:hotspot_all</code>. The test root can be specified either as an absolute path, or a path relative to the JDK top directory, or the <code>test</code> directory. For simplicity, the hotspot JTReg test root, which really is <code>hotspot/jtreg</code> can be abbreviated as just <code>hotspot</code>.</p>

View File

@@ -64,6 +64,52 @@ jtreg:$(TOPDIR)/test/nashorn:tier1 jtreg:$(TOPDIR)/test/jaxp:tier1`. You can
always submit a list of fully qualified test descriptors in the `TEST` variable
if you want to shortcut the parser.
### Common Test Groups
Ideally, all tests are run for every change but this may not be practical due to the limited
testing resources, the scope of the change, etc.
The source tree currently defines a few common test groups in the relevant `TEST.groups`
files. There are test groups that cover a specific component, for example `hotspot_gc`.
It is a good idea to look into `TEST.groups` files to get a sense what tests are relevant
to a particular JDK component.
Component-specific tests may miss some unintended consequences of a change, so other
tests should also be run. Again, it might be impractical to run all tests, and therefore
_tiered_ test groups exist. Tiered test groups are not component-specific, but rather cover
the significant parts of the entire JDK.
Multiple tiers allow balancing test coverage and testing costs. Lower test tiers are supposed to
contain the simpler, quicker and more stable tests. Higher tiers are supposed to contain
progressively more thorough, slower, and sometimes less stable tests, or the tests that require
special configuration.
Contributors are expected to run the tests for the areas that are changed, and the first N tiers
they can afford to run, but at least tier1.
A brief description of the tiered test groups:
- `tier1`: This is the lowest test tier. Multiple developers run these tests every day.
Because of the widespread use, the tests in `tier1` are carefully selected and optimized to run
fast, and to run in the most stable manner. The test failures in `tier1` are usually followed up
on quickly, either with fixes, or adding relevant tests to problem list. GitHub Actions workflows,
if enabled, run `tier1` tests.
- `tier2`: This test group covers even more ground. These contain, among other things,
tests that either run for too long to be at `tier1`, or may require special configuration,
or tests that are less stable, or cover the broader range of non-core JVM and JDK features/components
(for example, XML).
- `tier3`: This test group includes more stressful tests, the tests for corner cases
not covered by previous tiers, plus the tests that require GUIs. As such, this suite
should either be run with low concurrency (`TEST_JOBS=1`), or without headful tests
(`JTREG_KEYWORDS=\!headful`), or both.
- `tier4`: This test group includes every other test not covered by previous tiers. It includes,
for example, `vmTestbase` suites for Hotspot, which run for many hours even on large
machines. It also runs GUI tests, so the same `TEST_JOBS` and `JTREG_KEYWORDS` caveats
apply.
### JTReg
JTReg tests can be selected either by picking a JTReg test group, or a selection

View File

@@ -0,0 +1,48 @@
# NOTE: This Dockerfile is meant to be used from the mkdocker_aarch64.sh script.
# Pull a concrete version of Linux that does NOT recieve updates after it's
# been created. This is so that the image is as stable as possible to make
# image creation reproducible.
# NB: this also means there may be no security-related fixes there, need to
# move the version to the next manually.
FROM arm64v8/ubuntu:focal-20211006
# Install the necessary build tools
RUN export DEBIAN_FRONTEND=noninteractive \
export DEBCONF_NONINTERACTIVE_SEEN=true && \
echo 'tzdata tzdata/Areas select Etc' | debconf-set-selections; \
echo 'tzdata tzdata/Zones/Etc select UTC' | debconf-set-selections; \
apt-get update -qy && \
apt-get install -qy \
autoconf \
build-essential \
bzip2 \
file \
g++-10=10.3.0-1ubuntu1~20.04 \
gcc-10=10.3.0-1ubuntu1~20.04 \
git \
libasound2-dev \
libcups2-dev \
libfontconfig1-dev \
libx11-dev \
libxext-dev \
libxrandr-dev \
libxrender-dev \
libxt-dev \
libxtst-dev \
make \
rsync \
tar \
unzip \
zip && \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 && \
apt-get clean -qy && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Set up boot JDK for building
COPY boot_jdk.tar.gz /jdk17/
RUN cd /jdk17 && tar --strip-components=1 -xzf boot_jdk.tar.gz && rm /jdk17/boot_jdk.tar.gz
ENV BOOT_JDK=/jdk17
RUN git config --global user.email "teamcity@jetbrains.com" && \
git config --global user.name "builduser"

View File

@@ -0,0 +1,22 @@
# NOTE: This Dockerfile is meant to be used from the mkdocker_musl_aarch64.sh script.
# Pull a concrete version of Linux that does NOT recieve updates after it's
# been created. This is so that the image is as stable as possible to make
# image creation reproducible.
# NB: this also means there may be no security-related fixes there, need to
# move the version to the next manually.
FROM arm64v8/alpine:3.12
# Install the necessary build tools
RUN apk --no-cache add --update bash grep tar zip bzip2 rsync fontconfig build-base \
git libx11-dev libxext-dev libxrandr-dev libxrender-dev libxt-dev \
libxtst-dev autoconf freetype-dev cups-dev alsa-lib-dev file \
fontconfig fontconfig-dev linux-headers
# Set up boot JDK for building
COPY boot_jdk_musl_aarch64.tar.gz /jdk17/
RUN cd /jdk17 && tar --strip-components=1 -xzf boot_jdk_musl_aarch64.tar.gz && rm /jdk17/boot_jdk_musl_aarch64.tar.gz
ENV BOOT_JDK=/jdk17
RUN git config --global user.email "teamcity@jetbrains.com" && \
git config --global user.name "builduser"

View File

@@ -0,0 +1,22 @@
# NOTE: This Dockerfile is meant to be used from the mkdocker_musl_x64.sh script.
# Pull a concrete version of Linux that does NOT recieve updates after it's
# been created. This is so that the image is as stable as possible to make
# image creation reproducible.
# NB: this also means there may be no security-related fixes there, need to
# move the version to the next manually.
FROM alpine:3.5
# Install the necessary build tools
RUN apk --no-cache add --update bash grep tar zip bzip2 rsync fontconfig build-base \
git libx11-dev libxext-dev libxrandr-dev libxrender-dev libxt-dev \
libxtst-dev autoconf freetype-dev cups-dev alsa-lib-dev file \
fontconfig fontconfig-dev linux-headers
# Set up boot JDK for building
COPY boot_jdk_musl_amd64.tar.gz /jdk17/
RUN cd /jdk17 && tar --strip-components=1 -xzf boot_jdk_musl_amd64.tar.gz && rm /jdk17/boot_jdk_musl_amd64.tar.gz
ENV BOOT_JDK=/jdk17
RUN git config --global user.email "teamcity@jetbrains.com" && \
git config --global user.name "builduser"

View File

@@ -0,0 +1,26 @@
#!/bin/bash -x
# This script creates a Docker image suitable for building AArch64 variant
# of the JetBrains Runtime version 17.
BOOT_JDK_REMOTE_FILE=zulu17.30.15-ca-jdk17.0.1-linux_aarch64.tar.gz
BOOT_JDK_SHA=4d9c9116eb0cdd2d7fb220d6d27059f4bf1b7e95cc93d5512bd8ce3791af86c7
BOOT_JDK_LOCAL_FILE=boot_jdk.tar.gz
if [ ! -f $BOOT_JDK_LOCAL_FILE ]; then
# Obtain "boot JDK" from outside of the container.
wget -nc https://cdn.azul.com/zulu/bin/${BOOT_JDK_REMOTE_FILE} -O $BOOT_JDK_LOCAL_FILE
else
echo "boot JDK \"$BOOT_JDK_LOCAL_FILE\" present, skipping download"
fi
# Verify that what we've downloaded can be trusted.
sha256sum -c - <<EOF
$BOOT_JDK_SHA *$BOOT_JDK_LOCAL_FILE
EOF
docker build -t jbr17buildenv -f Dockerfile.aarch64 .
# NB: the resulting container can (and should) be used without the network
# connection (--network none) during build in order to reduce the chance
# of build contamination.

View File

@@ -0,0 +1,26 @@
#!/bin/bash -x
# This script creates a Docker image suitable for building musl AArch64 variant
# of the JetBrains Runtime version 17.
BOOT_JDK_REMOTE_FILE=zulu17.32.13-ca-jdk17.0.2-linux_musl_aarch64.tar.gz
BOOT_JDK_SHA=6b920559abafbe9bdef386a20ecf3a2f318bc1f0d8359eb1f95aee26606bbc70
BOOT_JDK_LOCAL_FILE=boot_jdk_musl_aarch64.tar.gz
if [ ! -f $BOOT_JDK_LOCAL_FILE ]; then
# Obtain "boot JDK" from outside of the container.
wget -nc https://cdn.azul.com/zulu/bin/${BOOT_JDK_REMOTE_FILE} -O $BOOT_JDK_LOCAL_FILE
else
echo "boot JDK \"$BOOT_JDK_LOCAL_FILE\" present, skipping download"
fi
# Verify that what we've downloaded can be trusted.
sha256sum -c - <<EOF
$BOOT_JDK_SHA *$BOOT_JDK_LOCAL_FILE
EOF
docker build -t jbr17buildenv -f Dockerfile.musl_aarch64 .
# NB: the resulting container can (and should) be used without the network
# connection (--network none) during build in order to reduce the chance
# of build contamination.

View File

@@ -0,0 +1,26 @@
#!/bin/bash -x
# This script creates a Docker image suitable for building musl-x64 variant
# of the JetBrains Runtime version 17.
BOOT_JDK_REMOTE_FILE=zulu17.32.13-ca-jdk17.0.2-linux_musl_x64.tar.gz
BOOT_JDK_SHA=bcc5342011bd9f3643372aadbdfa68d47463ff0d8621668a0bdf2910614d95c6
BOOT_JDK_LOCAL_FILE=boot_jdk_musl_amd64.tar.gz
if [ ! -f $BOOT_JDK_LOCAL_FILE ]; then
# Obtain "boot JDK" from outside of the container.
wget -nc https://cdn.azul.com/zulu/bin/${BOOT_JDK_REMOTE_FILE} -O $BOOT_JDK_LOCAL_FILE
else
echo "boot JDK \"$BOOT_JDK_LOCAL_FILE\" present, skipping download"
fi
# Verify that what we've downloaded can be trusted.
sha256sum -c - <<EOF
$BOOT_JDK_SHA *$BOOT_JDK_LOCAL_FILE
EOF
docker build -t jbr17buildenv -f Dockerfile.musl_x64 .
# NB: the resulting container can (and should) be used without the network
# connection (--network none) during build in order to reduce the chance
# of build contamination.

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$/src/jetbrains.api">
<sourceFolder url="file://$MODULE_DIR$/src/jetbrains.api/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/jetbrains.api/templates" isTestSource="false" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="inheritedJdk" />
</component>
</module>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/jdk.iml" filepath="$PROJECT_DIR$/.idea/jdk.iml" />
###MODULE_IMLS###
<module fileurl="file://$PROJECT_DIR$/.idea/jetbrains.api.iml" filepath="$PROJECT_DIR$/.idea/jetbrains.api.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/test.iml" filepath="$PROJECT_DIR$/.idea/test.iml" />
</modules>
</component>
</project>

View File

@@ -31,6 +31,7 @@ jdk.httpserver,
jdk.internal.ed,
jdk.internal.le,
jdk.internal.vm.ci,
jdk.javadoc,
jdk.jdi,
jdk.jdwp.agent,
jdk.jfr,
@@ -46,9 +47,8 @@ jdk.sctp,
jdk.security.auth,
jdk.security.jgss,
jdk.unsupported,
jdk.unsupported.desktop,
jdk.xml.dom,
jdk.zipfs,
jdk.hotspot.agent,
jetbrains.api,
jetbrains.api.impl,
jdk.jcmd

View File

@@ -0,0 +1,16 @@
#!/bin/sh
# $1 - Boot JDK
# $2 - JBR part of API version
cd "`dirname "$0"`/../../../../.."
PWD="`pwd`"
CONF="$PWD/build/jbr-api.conf"
./configure --with-debug-level=release --with-boot-jdk=$1 || exit $?
make jbr-api CONF=release MAKEOVERRIDES= "JBR_API_CONF_FILE=$CONF" JBR_API_JBR_VERSION=$2 || exit $?
. $CONF || exit $?
echo "##teamcity[buildNumber '$VERSION']"
cp "$JAR" ./jbr-api-${VERSION}.jar || exit $?
cp "$SOURCES_JAR" ./jbr-api-${VERSION}-sources.jar || exit $?
echo "##teamcity[publishArtifacts '$PWD/jbr-api-${VERSION}.jar']"
echo "##teamcity[publishArtifacts '$PWD/jbr-api-${VERSION}-sources.jar']"

View File

@@ -1,14 +1,103 @@
#!/bin/bash -x
function do_maketest() {
if [ "${bundle_type: -1}" == "t" ]; then
echo ${bundle_type%?}
return 1
else
echo ${bundle_type}
return 0
fi
}
function getVersionProp() {
grep "^${1}" make/conf/version-numbers.conf | cut -d'=' -f2
}
while getopts ":i?" o; do
case "${o}" in
i)
i="incremental build"
INC_BUILD=1
;;
esac
done
shift $((OPTIND-1))
build_number=$1
bundle_type=$2
architecture=$3 # aarch64 or x64
bundle_type=$(do_maketest)
do_maketest=$?
tag_prefix="jbr-"
OPENJDK_TAG=$(git log --simplify-by-decoration --decorate=short --pretty=short | grep "$tag_prefix" | cut -d "(" -f2 | cut -d ")" -f1 | awk '{print $2}' | sort -t "-" -k 2 -g | tail -n 1)
VERSION_FEATURE=$(getVersionProp "DEFAULT_VERSION_FEATURE")
VERSION_INTERIM=$(getVersionProp "DEFAULT_VERSION_INTERIM")
VERSION_UPDATE=$(getVersionProp "DEFAULT_VERSION_UPDATE")
[[ $VERSION_UPDATE = 0 ]] && JBSDK_VERSION="$VERSION_FEATURE" || JBSDK_VERSION="${VERSION_FEATURE}.${VERSION_INTERIM}.${VERSION_UPDATE}"
echo "##teamcity[setParameter name='env.JBSDK_VERSION' value='${JBSDK_VERSION}']"
JDK_BUILD_NUMBER=${JDK_BUILD_NUMBER:=$(echo $OPENJDK_TAG | awk -F "-|[+]" '{print $3}')}
[ -z $JDK_BUILD_NUMBER ] && JDK_BUILD_NUMBER=1
echo "##teamcity[setParameter name='env.JDK_UPDATE_NUMBER' value='${JDK_BUILD_NUMBER}']"
VENDOR_NAME="JetBrains s.r.o."
VENDOR_VERSION_STRING="JBR-${JBSDK_VERSION_WITH_DOTS}.${JDK_BUILD_NUMBER}-${build_number}"
VENDOR_VERSION_STRING="JBR-${JBSDK_VERSION}+${JDK_BUILD_NUMBER}-${build_number}"
[ -z "$bundle_type" ] || VENDOR_VERSION_STRING="${VENDOR_VERSION_STRING}-${bundle_type}"
do_reset_changes=0
do_reset_dcevm=0
HEAD_REVISION=0
OS_NAME=$(uname -s)
# Enable reproducible builds
TZ=UTC
export TZ
SOURCE_DATE_EPOCH="$(git log -1 --pretty=%ct)"
export SOURCE_DATE_EPOCH
USER=builduser
export USER
case "$OS_NAME" in
Linux)
COPYRIGHT_YEAR="$(date --utc --date=@$SOURCE_DATE_EPOCH +%Y)"
BUILD_TIME="$(date --utc --date=@$SOURCE_DATE_EPOCH +%F)"
REPRODUCIBLE_TAR_OPTS="--mtime=@$SOURCE_DATE_EPOCH --owner=0 --group=0 --numeric-owner --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime"
;;
CYGWIN*)
COPYRIGHT_YEAR="$(date --utc --date=@$SOURCE_DATE_EPOCH +%Y)"
BUILD_TIME="$(date --utc --date=@$SOURCE_DATE_EPOCH +%F)"
REPRODUCIBLE_TAR_OPTS="--mtime=@$SOURCE_DATE_EPOCH --owner=0 --group=0 --numeric-owner --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime"
;;
Darwin)
COPYRIGHT_YEAR="$(date -u -r $SOURCE_DATE_EPOCH +%Y)"
BUILD_TIME="$(date -u -r $SOURCE_DATE_EPOCH +%F)"
TOUCH_TIME="$(date -u -r $SOURCE_DATE_EPOCH +%Y%m%d%H%M.%S)"
REPRODUCIBLE_TAR_OPTS="--uid 0 --gid 0 --numeric-owner"
;;
esac
WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS="--with-native-debug-symbols=zipped"
REPRODUCIBLE_BUILD_OPTS="--enable-reproducible-build
--with-source-date=$SOURCE_DATE_EPOCH
--with-hotspot-build-time=$BUILD_TIME
--with-copyright-year=$COPYRIGHT_YEAR
--disable-absolute-paths-in-output"
function zip_native_debug_symbols() {
image_bundle_path=$(echo $1 | cut -d"/" -f-4)
jbr_diz_name=$2
(cd $image_bundle_path && find . -name '*.diz' -exec rsync -R {} ../../../../dizfiles \; )
(cd dizfiles && find . -print0 | COPYFILE_DISABLE=1 \
tar --no-recursion --null -T - -czf ../"$jbr_diz_name".tar.gz) || do_exit $?
}
function do_exit() {
exit_code=$1
[ $do_reset_changes -eq 1 ] && git checkout HEAD modules.list src/java.desktop/share/classes/module-info.java
[ $do_reset_changes -eq 1 ] && git checkout HEAD jb/project/tools/common/modules.list src/java.desktop/share/classes/module-info.java
if [ $do_reset_dcevm -eq 1 ]; then
[ ! -z $HEAD_REVISION ] && git reset --hard $HEAD_REVISION
fi

View File

@@ -1,30 +1,25 @@
#!/bin/bash -x
# The following parameters must be specified:
# JBSDK_VERSION - specifies the current version of OpenJDK e.g. 11_0_6
# JDK_BUILD_NUMBER - specifies the number of OpenJDK build or the value of --with-version-build argument to configure
# build_number - specifies the number of JetBrainsRuntime build
# The following parameter must be specified:
# build_number - specifies the number of JetBrainsRuntime build
#
# jbrsdk-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
# jbr-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
#
# $ ./java --version
# openjdk 11.0.6 2020-01-14
# OpenJDK Runtime Environment (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number})
# OpenJDK 64-Bit Server VM (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number}, mixed mode)
#
JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2
build_number=$3
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
source jb/project/tools/common/scripts/common.sh
function is_musl {
libc=$(ldd /bin/ls | grep 'musl' | head -1 | cut -d ' ' -f1)
if [ -z $libc ]; then
# This is not Musl, return 1 == false
return 1
fi
return 0
}
JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}
[ -z "$bundle_type" ] && (git apply -p0 < jb/project/tools/patches/exclude_jcef_module.patch || exit $?)
LIBC_TYPE_SUFFIX=''
if is_musl; then LIBC_TYPE_SUFFIX='musl-' ; fi
sh configure \
--with-debug-level=release \
@@ -35,11 +30,14 @@ sh configure \
--with-version-build="${JDK_BUILD_NUMBER}" \
--with-version-opt=b${build_number} \
--with-boot-jdk=${BOOT_JDK} \
--enable-cds=yes || exit $?
--enable-cds=yes \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
|| exit $?
make clean CONF=linux-aarch64-server-release || exit $?
make images CONF=linux-aarch64-server-release test-image || exit $?
JBSDK=${JBRSDK_BASE_NAME}-linux-aarch64-b${build_number}
JBSDK=${JBRSDK_BASE_NAME}-linux-${LIBC_TYPE_SUFFIX}aarch64-b${build_number}
BASE_DIR=build/linux-aarch64-server-release/images
JSDK=${BASE_DIR}/jdk
JBRSDK_BUNDLE=jbrsdk
@@ -54,17 +52,21 @@ echo Creating $JBSDK.tar.gz ...
sed 's/JBR/JBRSDK/g' ${BASE_DIR}/${JBRSDK_BUNDLE}/release > release
mv release ${BASE_DIR}/${JBRSDK_BUNDLE}/release
tar -pcf $JBSDK.tar \
zip_native_debug_symbols $JSDK "${JBSDK}_diz"
# NB: --sort=name requires tar1.28
tar $REPRODUCIBLE_TAR_OPTS --sort=name -pcf $JBSDK.tar \
--exclude=*.debuginfo --exclude=demo --exclude=sample --exclude=man \
-C $BASE_DIR ${JBRSDK_BUNDLE} || exit $?
touch -c -d @$SOURCE_DATE_EPOCH $JBRSDK.tar
gzip $JBSDK.tar || exit $?
JBR_BUNDLE=jbr
JBR_BASE_NAME=jbr-$JBSDK_VERSION
rm -rf $BASE_DIR/$JBR_BUNDLE
JBR=$JBR_BASE_NAME-linux-aarch64-b$build_number
grep -v javafx modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > modules.list.aarch64
JBR=$JBR_BASE_NAME-linux-${LIBC_TYPE_SUFFIX}aarch64-b$build_number
grep -v javafx jb/project/tools/common/modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > modules.list.aarch64
echo Running jlink....
${JSDK}/bin/jlink \
--module-path ${JSDK}/jmods --no-man-pages --compress=2 \
@@ -75,10 +77,11 @@ echo Modifying release info ...
grep -v \"^JAVA_VERSION\" ${JSDK}/release | grep -v \"^MODULES\" >> ${BASE_DIR}/${JBR_BUNDLE}/release
echo Creating $JBR.tar.gz ...
tar -pcf $JBR.tar -C $BASE_DIR ${JBR_BUNDLE} || exit $?
tar $REPRODUCIBLE_TAR_OPTS --sort=name -pcf $JBR.tar -C $BASE_DIR ${JBR_BUNDLE} || exit $?
touch -c -d @$SOURCE_DATE_EPOCH $JBR.tar
gzip $JBR.tar || exit $?
JBRSDK_TEST=$JBRSDK_BASE_NAME-linux-test-aarch64-b$build_number
JBRSDK_TEST=$JBRSDK_BASE_NAME-linux-${LIBC_TYPE_SUFFIX}test-aarch64-b$build_number
echo Creating $JBRSDK_TEST.tar.gz ...
tar -pcf $JBRSDK_TEST.tar -C $BASE_DIR --exclude='test/jdk/demos' test || exit $?
gzip $JBRSDK_TEST.tar || exit $?
gzip $JBRSDK_TEST.tar || exit $?

View File

@@ -1,34 +1,50 @@
#!/bin/bash -x
# The following parameters must be specified:
# JBSDK_VERSION - specifies major version of OpenJDK e.g. 11_0_6 (instead of dots '.' underbars "_" are used)
# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument to configure
# build_number - specifies the number of JetBrainsRuntime build
# bundle_type - specifies bundle to be built; possible values:
# <empty> or nomod - the release bundles without any additional modules (jcef)
# jcef - the release bundles with jcef
# fd - the fastdebug bundles which also include the jcef module
# build_number - specifies the number of JetBrainsRuntime build
# bundle_type - specifies bundle to be built;possible values:
# <empty> or nomod - the release bundles without any additional modules (jcef)
# jcef - the release bundles with jcef
# fd - the fastdebug bundles which also include the jcef module
#
# jbrsdk-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
# jbr-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
#
# $ ./java --version
# openjdk 11.0.6 2020-01-14
# OpenJDK Runtime Environment (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number})
# OpenJDK 64-Bit Server VM (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number}, mixed mode)
# This script makes test-image along with JDK images when bundle_type is set to "jcef".
# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images.
#
# Environment variables:
# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument
# to configure
# By default JDK_BUILD_NUMBER is set zero
# JCEF_PATH - specifies the path to the directory with JCEF binaries.
# By default JCEF binaries should be located in ./jcef_linux_x64
JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2
build_number=$3
bundle_type=$4
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
source jb/project/tools/common/scripts/common.sh
JCEF_PATH=${JCEF_PATH:=./jcef_linux_x64}
source jb/project/tools/common/scripts/common.sh
function do_configure {
sh configure \
$WITH_DEBUG_LEVEL \
--with-vendor-name="$VENDOR_NAME" \
--with-vendor-version-string="$VENDOR_VERSION_STRING" \
--with-jvm-features=shenandoahgc \
--with-version-pre= \
--with-version-build="$JDK_BUILD_NUMBER" \
--with-version-opt=b"$build_number" \
--with-boot-jdk="$BOOT_JDK" \
--enable-cds=yes \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
|| do_exit $?
}
function is_musl {
libc=$(ldd /bin/ls | grep 'musl' | head -1 | cut -d ' ' -f1)
if [ -z $libc ]; then
# This is not Musl, return 1 == false
return 1
fi
return 0
}
function create_image_bundle {
__bundle_name=$1
@@ -36,8 +52,12 @@ function create_image_bundle {
__modules_path=$3
__modules=$4
libc_type_suffix=''
if is_musl; then libc_type_suffix='musl-' ; fi
[ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-"
JBR=${__bundle_name}-${JBSDK_VERSION}-linux-x64-${fastdebug_infix}b${build_number}
JBR=${__bundle_name}-${JBSDK_VERSION}-linux-${libc_type_suffix}x64-${fastdebug_infix}b${build_number}
echo Running jlink....
[ -d "$IMAGES_DIR"/"$__arch_name" ] && rm -rf "${IMAGES_DIR:?}"/"$__arch_name"
@@ -50,14 +70,21 @@ function create_image_bundle {
sed 's/JBR/JBRSDK/g' "$IMAGES_DIR"/"$__arch_name"/release > release
mv release "$IMAGES_DIR"/"$__arch_name"/release
copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__arch_name"/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz"
fi
# jmod does not preserve file permissions (JDK-8173610)
[ -f "$IMAGES_DIR"/"$__arch_name"/lib/jcef_helper ] && chmod a+x "$IMAGES_DIR"/"$__arch_name"/lib/jcef_helper
echo Creating "$JBR".tar.gz ...
tar -pcf "$JBR".tar -C "$IMAGES_DIR" "$__arch_name" || do_exit $?
(cd "$IMAGES_DIR" &&
find "$__arch_name" -print0 | LC_ALL=C sort -z | \
tar $REPRODUCIBLE_TAR_OPTS \
--no-recursion --null -T - -cf "$JBR".tar) || do_exit $?
mv "$IMAGES_DIR"/"$JBR".tar ./"$JBR".tar
[ -f "$JBR".tar.gz ] && rm "$JBR.tar.gz"
touch -c -d "@$SOURCE_DATE_EPOCH" "$JBR".tar
gzip "$JBR".tar || do_exit $?
rm -rf "${IMAGES_DIR:?}"/"$__arch_name"
}
@@ -68,12 +95,7 @@ RELEASE_NAME=linux-x86_64-server-release
case "$bundle_type" in
"jcef")
do_reset_changes=1
;;
"dcevm")
HEAD_REVISION=$(git rev-parse HEAD)
git am jb/project/tools/patches/dcevm/*.patch || do_exit $?
do_reset_dcevm=1
do_reset_changes=1
do_maketest=1
;;
"nomod" | "")
bundle_type=""
@@ -85,18 +107,10 @@ case "$bundle_type" in
;;
esac
sh configure \
$WITH_DEBUG_LEVEL \
--with-vendor-name="$VENDOR_NAME" \
--with-vendor-version-string="$VENDOR_VERSION_STRING" \
--with-jvm-features=shenandoahgc \
--with-version-pre= \
--with-version-build="$JDK_BUILD_NUMBER" \
--with-version-opt=b"$build_number" \
--with-boot-jdk="$BOOT_JDK" \
--enable-cds=yes || do_exit $?
make clean CONF=$RELEASE_NAME || exit $?
if [ -z "$INC_BUILD" ]; then
do_configure || do_exit $?
make clean CONF=$RELEASE_NAME || do_exit $?
fi
make images CONF=$RELEASE_NAME || do_exit $?
IMAGES_DIR=build/$RELEASE_NAME/images
@@ -107,7 +121,7 @@ JBRSDK_BUNDLE=jbrsdk
echo Fixing permissions
chmod -R a+r $JSDK
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then
git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $?
update_jsdk_mods $JSDK $JCEF_PATH/jmods $JSDK/jmods $JSDK_MODS_DIR || do_exit $?
cp $JCEF_PATH/jmods/* $JSDK_MODS_DIR # $JSDK/jmods is not changed
@@ -116,23 +130,24 @@ if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_t
fi
# create runtime image bundle
modules=$(xargs < modules.list | sed s/" "//g) || do_exit $?
modules=$(xargs < jb/project/tools/common/modules.list | sed s/" "//g) || do_exit $?
create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $?
# create sdk image bundle
modules=$(cat $JSDK/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\n//g) || do_exit $?
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods)
fi
create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" $JBRSDK_BUNDLE $JSDK_MODS_DIR "$modules" || do_exit $?
if [ -z "$bundle_type" ]; then
JBRSDK_TEST=${JBRSDK_BUNDLE}-${JBSDK_VERSION}-linux-test-x64-b${build_number}
if [ $do_maketest -eq 1 ]; then
JBRSDK_TEST=${JBRSDK_BUNDLE}-${JBSDK_VERSION}-linux-${libc_type_suffix}test-x64-b${build_number}
echo Creating "$JBRSDK_TEST" ...
[ $do_reset_changes -eq 1 ] && git checkout HEAD jb/project/tools/common/modules.list src/java.desktop/share/classes/module-info.java
make test-image CONF=$RELEASE_NAME || do_exit $?
tar -pcf "$JBRSDK_TEST".tar -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $?
[ -f "$JBRSDK_TEST.tar.gz" ] && rm "$JBRSDK_TEST.tar.gz"
gzip "$JBRSDK_TEST".tar || do_exit $?
fi
do_exit 0
do_exit 0

View File

@@ -61,7 +61,7 @@ JBR_BASE_NAME=jbr-$JBSDK_VERSION
rm -rf $BASE_DIR/$JBR_BUNDLE
JBR=$JBR_BASE_NAME-linux-x86-b$build_number
grep -v javafx modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > modules.list.x86
grep -v javafx jb/project/tools/common/modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > modules.list.x86
echo Running jlink....
${JSDK}/bin/jlink \
--module-path ${JSDK}/jmods --no-man-pages --compress=2 \
@@ -77,4 +77,4 @@ gzip $JBR.tar || exit $?
JBRSDK_TEST=$JBRSDK_BASE_NAME-linux-test-x86-b$build_number
echo Creating $JBRSDK_TEST.tar.gz ...
tar -pcf $JBRSDK_TEST.tar -C $BASE_DIR --exclude='test/jdk/demos' --exclude='test/hotspot/gtest' test || exit $?
gzip $JBRSDK_TEST.tar || exit $?
gzip $JBRSDK_TEST.tar || exit $?

View File

@@ -1,45 +1,70 @@
#!/bin/bash -x
# The following parameters must be specified:
# JBSDK_VERSION - specifies major version of OpenJDK e.g. 11_0_6 (instead of dots '.' underbars "_" are used)
# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument to configure
# build_number - specifies the number of JetBrainsRuntime build
# bundle_type - specifies bundle to be built; possible values:
# <empty> or nomod - the release bundles without any additional modules (jcef)
# jcef - the release bundles with jcef
# fd - the fastdebug bundles which also include the jcef module
# build_number - specifies the number of JetBrainsRuntime build
# bundle_type - specifies bundle to be built;possible values:
# <empty> or nomod - the release bundles without any additional modules (jcef)
# jcef - the release bundles with jcef
# fd - the fastdebug bundles which also include the jcef module
#
# jbrsdk-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
# jbr-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
#
# $ ./java --version
# openjdk 11.0.6 2020-01-14
# OpenJDK Runtime Environment (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number})
# OpenJDK 64-Bit Server VM (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number}, mixed mode)
# This script makes test-image along with JDK images when bundle_type is set to "jcef".
# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images.
#
# Environment variables:
# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument
# to configure
# By default JDK_BUILD_NUMBER is set zero
# JCEF_PATH - specifies the path to the directory with JCEF binaries.
# By default JCEF binaries should be located in ./jcef_mac
JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2
build_number=$3
bundle_type=$4
architecture=$5 # aarch64 or x64
enable_aot=$6 # temporary param for building test jre with aot under aarch64
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
WITH_IMPORT_MODULES="--with-import-modules=${MODULAR_SDK_PATH:=./modular-sdk}"
JCEF_PATH=${JCEF_PATH:=./jcef_mac}
architecture=${architecture:=x64}
MAJOR_JBSDK_VERSION=$(echo "$JBSDK_VERSION_WITH_DOTS" | awk -F "." '{print $1}')
BOOT_JDK=${BOOT_JDK:=$(/usr/libexec/java_home -v 16)}
# MACOSX_VERSION_MAX - specifies value for the --with-macosx-version-max parameter. By default it is 10.12.00 for x64
# and 11.00.00 for aarch64
source jb/project/tools/common/scripts/common.sh
function copyJNF {
__contents_dir=$1
mkdir -p ${__contents_dir}/Frameworks
cp -Rp Frameworks/JavaNativeFoundation.framework ${__contents_dir}/Frameworks
JCEF_PATH=${JCEF_PATH:=./jcef_mac}
architecture=${architecture:=x64}
BOOT_JDK=${BOOT_JDK:=$(/usr/libexec/java_home -v 16)}
function do_configure {
if [[ "${architecture}" == *aarch64* ]]; then
sh configure \
$WITH_DEBUG_LEVEL \
--with-vendor-name="${VENDOR_NAME}" \
--with-vendor-version-string="${VENDOR_VERSION_STRING}" \
--with-macosx-bundle-name-base=${VENDOR_VERSION_STRING} \
--with-macosx-bundle-id-base="com.jetbrains.jbr" \
--with-jvm-features=shenandoahgc \
--with-version-pre= \
--with-version-build="${JDK_BUILD_NUMBER}" \
--with-version-opt=b"${build_number}" \
--with-boot-jdk="$BOOT_JDK" \
--with-macosx-version-max="${MACOSX_VERSION_MAX:="11.00.00"}" \
--disable-hotspot-gtest --disable-javac-server --disable-full-docs --disable-manpages \
--enable-cds=no \
--with-extra-cflags="-F$(pwd)/Frameworks" \
--with-extra-cxxflags="-F$(pwd)/Frameworks" \
--with-extra-ldflags="-F$(pwd)/Frameworks" \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
|| do_exit $?
else
sh configure \
$WITH_DEBUG_LEVEL \
--with-vendor-name="$VENDOR_NAME" \
--with-vendor-version-string="$VENDOR_VERSION_STRING" \
--with-macosx-bundle-name-base=${VENDOR_VERSION_STRING} \
--with-macosx-bundle-id-base="com.jetbrains.jbr" \
--with-jvm-features=shenandoahgc \
--with-version-pre= \
--with-version-build="$JDK_BUILD_NUMBER" \
--with-version-opt=b"$build_number" \
--with-boot-jdk="$BOOT_JDK" \
--with-macosx-version-max="${MACOSX_VERSION_MAX:="10.12.00"}" \
--enable-cds=yes \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
|| do_exit $?
fi
}
function create_image_bundle {
@@ -67,21 +92,23 @@ function create_image_bundle {
sed 's/JBR/JBRSDK/g' $JRE_CONTENTS/Home/release > release
mv release $JRE_CONTENTS/Home/release
copy_jmods "$__modules" "$__modules_path" "$JRE_CONTENTS"/Home/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk "${JBR}_diz"
fi
cp -R "$JSDK"/../MacOS "$JRE_CONTENTS"
cp "$JSDK"/../Info.plist "$JRE_CONTENTS"
if [[ "${architecture}" == *aarch64* ]]; then
# we can't notarize this library as usual framework (with headers and tbd-file)
# but single library notarizes correctly
copyJNF $JRE_CONTENTS
fi
[ -n "$bundle_type" ] && (cp -a $JCEF_PATH/Frameworks "$JRE_CONTENTS" || do_exit $?)
echo Creating "$JBR".tar.gz ...
COPYFILE_DISABLE=1 tar -pczf "$JBR".tar.gz --exclude='*.dSYM' --exclude='man' -C "$tmp" "$__arch_name" || do_exit $?
# Normalize timestamp
find "$tmp"/"$__arch_name" -print0 | xargs -0 touch -c -h -t "$TOUCH_TIME"
(cd "$tmp" &&
find "$__arch_name" -print0 | LC_ALL=C sort -z | \
COPYFILE_DISABLE=1 tar $REPRODUCIBLE_TAR_OPTS --no-recursion --null -T - \
-czf "$JBR".tar.gz --exclude='*.dSYM' --exclude='man') || do_exit $?
mv "$tmp"/"$JBR".tar.gz "$JBR".tar.gz
rm -rf "$tmp"
}
@@ -95,12 +122,7 @@ RELEASE_NAME=macosx-${CONF_ARCHITECTURE}-server-release
case "$bundle_type" in
"jcef")
do_reset_changes=1
;;
"dcevm")
HEAD_REVISION=$(git rev-parse HEAD)
git am jb/project/tools/patches/dcevm/*.patch || do_exit $?
do_reset_dcevm=1
do_reset_changes=1
do_maketest=1
;;
"nomod" | "")
bundle_type=""
@@ -113,42 +135,19 @@ case "$bundle_type" in
;;
esac
if [[ "${architecture}" == *aarch64* ]]; then
sh configure \
$WITH_DEBUG_LEVEL \
--with-vendor-name="${VENDOR_NAME}" \
--with-vendor-version-string="${VENDOR_VERSION_STRING}" \
--with-jvm-features=shenandoahgc \
--with-version-pre= \
--with-version-build="${JDK_BUILD_NUMBER}" \
--with-version-opt=b"${build_number}" \
--with-boot-jdk="$BOOT_JDK" \
--disable-hotspot-gtest --disable-javac-server --disable-full-docs --disable-manpages \
--enable-cds=no \
--with-extra-cflags="-F$(pwd)/Frameworks" \
--with-extra-cxxflags="-F$(pwd)/Frameworks" \
--with-extra-ldflags="-F$(pwd)/Frameworks" || do_exit $?
else
sh configure \
$WITH_DEBUG_LEVEL \
--with-vendor-name="$VENDOR_NAME" \
--with-vendor-version-string="$VENDOR_VERSION_STRING" \
--with-jvm-features=shenandoahgc \
--with-version-pre= \
--with-version-build="$JDK_BUILD_NUMBER" \
--with-version-opt=b"$build_number" \
--with-boot-jdk="$BOOT_JDK" \
--enable-cds=yes || do_exit $?
if [ -z "$INC_BUILD" ]; then
do_configure || do_exit $?
make clean CONF=$RELEASE_NAME || do_exit $?
fi
make clean CONF=$RELEASE_NAME || do_exit $?
make images CONF=$RELEASE_NAME || do_exit $?
IMAGES_DIR=build/$RELEASE_NAME/images
JSDK=$IMAGES_DIR/jdk-bundle/jdk-$MAJOR_JBSDK_VERSION.jdk/Contents/Home
JSDK=$IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk/Contents/Home
JSDK_MODS_DIR=$IMAGES_DIR/jmods
JBRSDK_BUNDLE=jbrsdk
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then
git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $?
update_jsdk_mods "$JSDK" "$JCEF_PATH"/jmods "$JSDK"/jmods "$JSDK_MODS_DIR" || do_exit $?
cp $JCEF_PATH/jmods/* $JSDK_MODS_DIR # $JSDK/jmods is not changed
@@ -157,22 +156,23 @@ if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_t
fi
# create runtime image bundle
modules=$(xargs < modules.list | sed s/" "//g) || do_exit $?
modules=$(xargs < jb/project/tools/common/modules.list | sed s/" "//g) || do_exit $?
create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $?
# create sdk image bundle
modules=$(cat "$JSDK"/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\n//g) || do_exit $?
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods)
fi
create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" "$JBRSDK_BUNDLE" "$JSDK_MODS_DIR" "$modules" || do_exit $?
if [ -z "$bundle_type" ]; then
if [ $do_maketest -eq 1 ]; then
JBRSDK_TEST=${JBRSDK_BUNDLE}-${JBSDK_VERSION}-osx-test-${architecture}-b${build_number}
echo Creating "$JBRSDK_TEST" ...
[ $do_reset_changes -eq 1 ] && git checkout HEAD jb/project/tools/common/modules.list src/java.desktop/share/classes/module-info.java
make test-image CONF=$RELEASE_NAME || do_exit $?
[ -f "$JBRSDK_TEST.tar.gz" ] && rm "$JBRSDK_TEST.tar.gz"
COPYFILE_DISABLE=1 tar -pczf "$JBRSDK_TEST".tar.gz -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $?
fi
do_exit 0
do_exit 0

View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/bin/bash -x
APP_DIRECTORY=$1
APPL_USER=$2
@@ -54,17 +54,15 @@ function altool-upload() {
#immediately exit script with an error if a command fails
set -euo pipefail
file="$APP_NAME.zip"
#file="$APP_NAME.zip"
log "Zipping $file..."
rm -rf "$file"
ditto -c -k --sequesterRsrc --keepParent "$APP_DIRECTORY" "$file"
#log "Zipping $file..."
#rm -rf "$file"
#ditto -c -k --sequesterRsrc --keepParent "$APP_DIRECTORY" "$file"
log "Notarizing $file..."
log "Notarizing $APP_NAME..."
rm -rf "altool.init.out" "altool.check.out"
altool-upload "$file"
rm -rf "$file"
altool-upload "$APP_NAME"
notarization_info="$(grep -e "RequestUUID" "altool.init.out" | grep -oE '([0-9a-f-]{36})')"

View File

@@ -1,14 +1,17 @@
#!/bin/bash
#!/bin/bash -x
APP_DIRECTORY=$1
JB_CERT=$2
APPLICATION_PATH=$1
APP_NAME=$2
BUNDLE_ID=$3
JB_DEVELOPER_CERT=$4
JB_INSTALLER_CERT=$5
if [[ -z "$APP_DIRECTORY" ]] || [[ -z "$JB_CERT" ]]; then
if [[ -z "$APPLICATION_PATH" ]] || [[ -z "$JB_DEVELOPER_CERT" ]]; then
echo "Usage: $0 AppDirectory CertificateID"
exit 1
fi
if [[ ! -d "$APP_DIRECTORY" ]]; then
echo "AppDirectory '$APP_DIRECTORY' does not exist or not a directory"
if [[ ! -d "$APPLICATION_PATH" ]]; then
echo "AppDirectory '$APPLICATION_PATH' does not exist or not a directory"
exit 1
fi
@@ -20,43 +23,30 @@ function log() {
set -euo pipefail
# Cleanup files left from previous sign attempt (if any)
find "$APP_DIRECTORY" -name '*.cstemp' -exec rm '{}' \;
find "$APPLICATION_PATH" -name '*.cstemp' -exec rm '{}' \;
log "Signing libraries and executables..."
# -perm +111 searches for executables
for f in \
"Contents/Home/bin" \
"Contents/Home/lib"; do
if [ -d "$APP_DIRECTORY/$f" ]; then
find "$APP_DIRECTORY/$f" \
-type f \( -name "*.jnilib" -o -name "*.dylib" -o -name "*.so" -o -perm +111 \) \
-exec codesign --timestamp --force \
-v -s "$JB_CERT" --options=runtime \
"Contents/Home/lib" "Contents/MacOS" \
"Contents/Home/Frameworks" \
"Contents/Frameworks"; do
if [ -d "$APPLICATION_PATH/$f" ]; then
find "$APPLICATION_PATH/$f" \
-type f \( -name "*.jnilib" -o -name "*.dylib" -o -name "*.so" -o -name "*.tbd" -o -name "*.node" -o -perm +111 \) \
-exec codesign --timestamp \
-v -s "$JB_DEVELOPER_CERT" --options=runtime --force \
--entitlements entitlements.xml {} \;
fi
done
if [ -d "$APP_DIRECTORY/Contents/Frameworks" ]; then
log "Signing frameworks..."
for f in $APP_DIRECTORY/Contents/Frameworks/*; do
find "$f" \
-type f \( -name "*.jnilib" -o -name "*.dylib" -o -name "*.so" \) \
-exec codesign --timestamp --force \
-v -s "$JB_CERT" \
--entitlements entitlements.xml {} \;
codesign --timestamp --force \
-v -s "$JB_CERT" --options=runtime \
--entitlements entitlements.xml "$f"
done
fi
log "Signing libraries in jars in $PWD"
# todo: add set -euo pipefail; into the inner sh -c
# `-e` prevents `grep -q && printf` loginc
# with `-o pipefail` there's no input for 'while' loop
find "$APP_DIRECTORY" -name '*.jar' \
-exec sh -c "set -u; unzip -l \"\$0\" | grep -q -e '\.dylib\$' -e '\.jnilib\$' -e '\.so\$' -e '^jattach\$' && printf \"\$0\0\" " {} \; |
find "$APPLICATION_PATH" -name '*.jar' \
-exec sh -c "set -u; unzip -l \"\$0\" | grep -q -e '\.dylib\$' -e '\.jnilib\$' -e '\.so\$' -e '\.tbd\$' -e '^jattach\$' && printf \"\$0\0\" " {} \; |
while IFS= read -r -d $'\0' file; do
log "Processing libraries in $file"
@@ -67,12 +57,13 @@ find "$APP_DIRECTORY" -name '*.jar' \
cp "$file" jarfolder && (cd jarfolder && jar xf "$filename" && rm "$filename")
find jarfolder \
-type f \( -name "*.jnilib" -o -name "*.dylib" -o -name "*.so" -o -name "jattach" \) \
-exec codesign --timestamp --force \
-v -s "$JB_CERT" --options=runtime \
-type f \( -name "*.jnilib" -o -name "*.dylib" -o -name "*.so" -o -name "*.tbd" -o -name "jattach" \) \
-exec codesign --timestamp \
--force \
-v -s "$JB_DEVELOPER_CERT" --options=runtime \
--entitlements entitlements.xml {} \;
(cd jarfolder; zip -q -r -o ../jar.jar .)
(cd jarfolder; zip -q -r -o -0 ../jar.jar .)
mv jar.jar "$file"
done
@@ -80,28 +71,41 @@ rm -rf jarfolder jar.jar
log "Signing other files..."
for f in \
"Contents/MacOS"; do
if [ -d "$APP_DIRECTORY/$f" ]; then
find "$APP_DIRECTORY/$f" \
-type f \( -name "*.jnilib" -o -name "*.dylib" -o -name "*.so" -o -perm +111 \) \
-exec codesign --timestamp --force \
-v -s "$JB_CERT" --options=runtime \
"Contents/Home/bin"; do
if [ -d "$APPLICATION_PATH/$f" ]; then
find "$APPLICATION_PATH/$f" \
-type f \( -name "*.jnilib" -o -name "*.dylib" -o -name "*.so" -o -name "*.tbd" -o -perm +111 \) \
-exec codesign --timestamp \
-v -s "$JB_DEVELOPER_CERT" --options=runtime --force \
--entitlements entitlements.xml {} \;
fi
done
#log "Signing executable..."
#codesign --timestamp \
# -v -s "$JB_CERT" --options=runtime \
# -v -s "$JB_DEVELOPER_CERT" --options=runtime \
# --force \
# --entitlements entitlements.xml "$APP_DIRECTORY/Contents/MacOS/idea"
# --entitlements entitlements.xml "$APPLICATION_PATH/Contents/MacOS/idea"
log "Signing whole app..."
codesign --timestamp \
-v -s "$JB_CERT" --options=runtime \
-v -s "$JB_DEVELOPER_CERT" --options=runtime \
--force \
--entitlements entitlements.xml "$APP_DIRECTORY"
--entitlements entitlements.xml "$APPLICATION_PATH"
BUILD_NAME=$(echo $APPLICATION_PATH | awk -F"/" '{ print $2 }')
log "Creating $APP_NAME.pkg..."
rm -rf "$APP_NAME.pkg"
pkgbuild --identifier $BUNDLE_ID --sign "$JB_INSTALLER_CERT" --root $APPLICATION_PATH \
--install-location /Library/Java/JavaVirtualMachines/${BUILD_NAME} ${APP_NAME}.pkg
#log "Signing whole app..."
#codesign --timestamp \
# -v -s "$JB_DEVELOPER_CERT" --options=runtime \
# --force \
# --entitlements entitlements.xml $APP_NAME.pkg
log "Verifying java is not broken"
find "$APP_DIRECTORY" \
find "$APPLICATION_PATH" \
-type f -name 'java' -perm +111 -exec {} -version \;

View File

@@ -12,8 +12,9 @@ BACKUP_JMODS=$2.backup
USERNAME=$3
PASSWORD=$4
CODESIGN_STRING=$5
NOTARIZE=$6
BUNDLE_ID=$7
JB_INSTALLER_CERT=$6
NOTARIZE=$7
BUNDLE_ID=$8
cd "$(dirname "$0")"
@@ -33,7 +34,7 @@ mkdir "$BACKUP_JMODS"
log "Unzipping $INPUT_FILE to $EXPLODED ..."
tar -xzvf "$INPUT_FILE" --directory $EXPLODED
BUILD_NAME="$(ls "$EXPLODED")"
sed -i '' s/BNDL/APPL/ $EXPLODED/$BUILD_NAME/Contents/Info.plist
#sed -i '' s/BNDL/APPL/ $EXPLODED/$BUILD_NAME/Contents/Info.plist
rm -f $EXPLODED/$BUILD_NAME/Contents/CodeResources
rm "$INPUT_FILE"
if test -d $EXPLODED/$BUILD_NAME/Contents/Home/jmods; then
@@ -42,7 +43,9 @@ fi
log "$INPUT_FILE extracted and removed"
APPLICATION_PATH="$EXPLODED/$BUILD_NAME"
APP_NAME=$(echo ${INPUT_FILE} | awk -F".tar" '{ print $1 }')
APPLICATION_PATH=$(sed "s/osx-//" <<< "$EXPLODED/$APP_NAME")
mv $EXPLODED/$BUILD_NAME $APPLICATION_PATH
find "$APPLICATION_PATH/Contents/Home/bin" \
-maxdepth 1 -type f -name '*.jnilib' -print0 |
@@ -79,7 +82,7 @@ limit=3
set +e
while [[ $attempt -le $limit ]]; do
log "Signing (attempt $attempt) $APPLICATION_PATH ..."
./sign.sh "$APPLICATION_PATH" "$CODESIGN_STRING"
./sign.sh "$APPLICATION_PATH" "$APP_NAME" "$BUNDLE_ID" "$CODESIGN_STRING" "$JB_INSTALLER_CERT"
ec=$?
if [[ $ec -ne 0 ]]; then
((attempt += 1))
@@ -92,6 +95,7 @@ while [[ $attempt -le $limit ]]; do
log "Signing done"
codesign -v "$APPLICATION_PATH" -vvvvv
log "Check sign done"
spctl -a -v $APPLICATION_PATH
((attempt += limit))
fi
done
@@ -102,13 +106,12 @@ if [ "$NOTARIZE" = "yes" ]; then
log "Notarizing..."
# shellcheck disable=SC1090
source "$HOME/.notarize_token"
APP_NAME=$(echo ${INPUT_FILE} | awk -F"." '{ print $1 }')
# Since notarization tool uses same file for upload token we have to trick it into using different folders, hence fake root
# Also it leaves copy of zip file in TMPDIR, so notarize.sh overrides it and uses FAKE_ROOT as location for temp TMPDIR
FAKE_ROOT="$(pwd)/fake-root"
mkdir -p "$FAKE_ROOT"
echo "Notarization will use fake root: $FAKE_ROOT"
./notarize.sh "$APPLICATION_PATH" "$APPLE_USERNAME" "$APPLE_PASSWORD" "$APP_NAME" "$BUNDLE_ID" "$FAKE_ROOT"
./notarize.sh "$APPLICATION_PATH" "$APPLE_USERNAME" "$APPLE_PASSWORD" "$APP_NAME.pkg" "$BUNDLE_ID" "$FAKE_ROOT"
rm -rf "$FAKE_ROOT"
set +e
@@ -124,10 +127,11 @@ log "Zipping $BUILD_NAME to $INPUT_FILE ..."
#cd "$EXPLODED"
#ditto -c -k --sequesterRsrc --keepParent "$BUILD_NAME" "../$INPUT_FILE"
if test -d $BACKUP_JMODS/jmods; then
mv $BACKUP_JMODS/jmods $EXPLODED/$BUILD_NAME/Contents/Home
mv $BACKUP_JMODS/jmods $APPLICATION_PATH/Contents/Home
fi
mv $APPLICATION_PATH $EXPLODED/$BUILD_NAME
tar -pczvf $INPUT_FILE --exclude='*.dSYM' --exclude='man' -C $EXPLODED $BUILD_NAME
tar -pczvf $INPUT_FILE --exclude='man' -C $EXPLODED $BUILD_NAME
log "Finished zipping"
)
rm -rf "$EXPLODED"

View File

@@ -1,56 +0,0 @@
#!/bin/bash -x
# How to call this script:
# eval $(jb/project/tools/mkjbrapi.sh)
# It is used to build jetbrains.api module
# After properly calling this script, you can use following variables:
# JBR_API_JAR - absolute path to resulting JAR
# JBR_API_SOURCES_JAR - absolute path to JAR with sources
# JBR_API_VERSION - JBR API version in form <major>.<minor>
# JBR_API_VERSION_MAJOR, JBR_API_VERSION_MINOR - JBR API version components
# JBR_BUILD_DIR - absolute path to JBR build directory
# JBR_BOOT_JDK - absolute path to used boot JDK
ROOT=$(pwd)
sh configure --with-debug-level=release --disable-warnings-as-errors 1>&2 || exit $?
# Get boot JDK & build directory using make script
make -f $ROOT/make/JBRApi.gmk -I $ROOT jbr-api MAKEOVERRIDES= CONF=release OUT="$ROOT/build/jbr-api.cfg" 1>&2 || exit $?
source "$ROOT/build/jbr-api.cfg" || exit $?
# Build module
make jetbrains.api 1>&2 || exit $?
# Get JBR API version from compiled class
JSHELL_COMMAND='
System.out.println("\nVERSION_MAJOR=" + com.jetbrains.JBRApi.getMajorVersion());
System.out.println("\nVERSION_MINOR=" + com.jetbrains.JBRApi.getMinorVersion());
/exit'
VERSION_VARIABLES=$("$BOOT_JDK/bin/jshell" -s --module-path "$BUILD_DIR/jdk/modules/jetbrains.api" \
--add-modules jetbrains.api <<< "$JSHELL_COMMAND" | grep "^VERSION\|^|") || exit $?
eval "$VERSION_VARIABLES" || exit $?
# Create JAR
(
cd "$BUILD_DIR/jdk/modules/jetbrains.api"
"$BOOT_JDK/bin/jar" -cf "$BUILD_DIR/jbr-api.jar" * 1>&2
) || exit $?
# Create source JAR
(
cd "src/jetbrains.api/share/classes"
"$BOOT_JDK/bin/jar" -cf "$BUILD_DIR/jbr-api-sources.jar" * 1>&2
) || exit $?
# Print output values
echo "JBR_API_JAR=$BUILD_DIR/jbr-api.jar"
echo "JBR_API_SOURCES_JAR=$BUILD_DIR/jbr-api-sources.jar"
echo "JBR_API_VERSION=$VERSION_MAJOR.$VERSION_MINOR"
echo "JBR_API_VERSION_MAJOR=$VERSION_MAJOR"
echo "JBR_API_VERSION_MINOR=$VERSION_MINOR"
echo "JBR_BUILD_DIR=$BUILD_DIR"
echo "JBR_BOOT_JDK=$BOOT_JDK"
echo "Success!" 1>&2

View File

@@ -1,11 +1,11 @@
diff --git modules.list modules.list
index dcf610a6a56..f8797505c23 100644
--- modules.list
+++ modules.list
@@ -51,4 +51,7 @@ jdk.zipfs,
diff --git jb/project/tools/common/modules.list jb/project/tools/common/modules.list
index 522acb7cb43..c40e689d5de 100644
--- jb/project/tools/common/modules.list
+++ jb/project/tools/common/modules.list
@@ -51,4 +51,7 @@ jdk.unsupported.desktop,
jdk.xml.dom,
jdk.zipfs,
jdk.hotspot.agent,
jetbrains.api,
jetbrains.api.impl,
-jdk.jcmd
+jdk.jcmd,
+jcef,

File diff suppressed because it is too large Load Diff

View File

@@ -1,29 +0,0 @@
From d937dae078891013a644c6a53eb17f8f5deb8ec8 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Wed, 11 Mar 2020 14:19:34 +0100
Subject: [PATCH 03/39] Fix class cast exception on redefinition of class A,
that is superclass of B that has anonymous class C
---
src/hotspot/share/oops/instanceKlass.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp
index 9327652d8fe..c18a5822939 100644
--- a/src/hotspot/share/oops/instanceKlass.cpp
+++ b/src/hotspot/share/oops/instanceKlass.cpp
@@ -908,7 +908,10 @@ bool InstanceKlass::link_class_impl(TRAPS) {
if (!is_linked()) {
if (!is_rewritten()) {
- {
+ // (DCEVM): If class A is being redefined and class B->A (B is extended from A) and B is host class of anonymous class C
+ // then second redefinition fails with cannot cast klass exception. So we currently turn off bytecode verification
+ // on redefinition.
+ if (!AllowEnhancedClassRedefinition || !newest_version()->is_redefining()) {
bool verify_ok = verify_code(THREAD);
if (!verify_ok) {
return false;
--
2.23.0

View File

@@ -1,206 +0,0 @@
From 53d50b53f83aa5135ff5092d0d566424024b8b4b Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 4 Oct 2020 21:12:12 +0200
Subject: [PATCH 04/39] Support for Lambda class redefinition
---
.../share/classfile/classLoaderData.cpp | 9 +++
.../share/classfile/classLoaderData.hpp | 2 +-
.../share/classfile/systemDictionary.cpp | 10 ++-
.../prims/jvmtiEnhancedRedefineClasses.cpp | 65 +++++++++++++++++--
.../prims/jvmtiEnhancedRedefineClasses.hpp | 1 +
.../share/prims/resolvedMethodTable.cpp | 2 +
6 files changed, 80 insertions(+), 9 deletions(-)
diff --git a/src/hotspot/share/classfile/classLoaderData.cpp b/src/hotspot/share/classfile/classLoaderData.cpp
index 340ffadf837..db50b3edee8 100644
--- a/src/hotspot/share/classfile/classLoaderData.cpp
+++ b/src/hotspot/share/classfile/classLoaderData.cpp
@@ -599,6 +599,15 @@ Dictionary* ClassLoaderData::create_dictionary() {
return new Dictionary(this, size, resizable);
}
+void ClassLoaderData::exchange_holders(ClassLoaderData* cld) {
+ oop holder_oop = _holder.peek();
+ _holder.replace(cld->_holder.peek());
+ cld->_holder.replace(holder_oop);
+ WeakHandle<vm_class_loader_data> exchange = _holder;
+ _holder = cld->_holder;
+ cld->_holder = exchange;
+}
+
// Tell the GC to keep this klass alive while iterating ClassLoaderDataGraph
oop ClassLoaderData::holder_phantom() const {
// A klass that was previously considered dead can be looked up in the
diff --git a/src/hotspot/share/classfile/classLoaderData.hpp b/src/hotspot/share/classfile/classLoaderData.hpp
index 5a81ab90ca3..bda39f3e353 100644
--- a/src/hotspot/share/classfile/classLoaderData.hpp
+++ b/src/hotspot/share/classfile/classLoaderData.hpp
@@ -175,7 +175,7 @@ class ClassLoaderData : public CHeapObj<mtClass> {
oop holder_no_keepalive() const;
oop holder_phantom() const;
-
+ void exchange_holders(ClassLoaderData* cld);
private:
void unload();
bool keep_alive() const { return _keep_alive > 0; }
diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp
index 2bfd9cb802f..cea614a574f 100644
--- a/src/hotspot/share/classfile/systemDictionary.cpp
+++ b/src/hotspot/share/classfile/systemDictionary.cpp
@@ -825,10 +825,14 @@ InstanceKlass* SystemDictionary::resolve_hidden_class_from_stream(
Symbol* class_name,
Handle class_loader,
const ClassLoadInfo& cl_info,
+ InstanceKlass* old_klass,
TRAPS) {
EventClassLoad class_load_start_event;
ClassLoaderData* loader_data;
+
+ bool is_redefining = (old_klass != NULL);
+
// - for hidden classes that are not strong: create a new CLD that has a class holder and
// whose loader is the Lookup class's loader.
@@ -845,9 +849,13 @@ InstanceKlass* SystemDictionary::resolve_hidden_class_from_stream(
class_name,
loader_data,
cl_info,
- false, // pick_newest
+ is_redefining, // pick_newest
CHECK_NULL);
assert(k != NULL, "no klass created");
+ if (is_redefining && k != NULL) {
+ k->set_redefining(true);
+ k->set_old_version(old_klass);
+ }
// Hidden classes that are not strong must update ClassLoaderData holder
// so that they can be unloaded when the mirror is no longer referenced.
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 5551d3ca123..bf31819479d 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -492,6 +492,8 @@ void VM_EnhancedRedefineClasses::doit() {
ClassLoaderDataGraph::classes_do(&clear_cpool_cache);
+ // SystemDictionary::methods_do(fix_invoke_method);
+
// JSR-292 support
if (_any_class_has_resolved_methods) {
bool trace_name_printed = false;
@@ -754,12 +756,34 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
// load hook event.
state->set_class_being_redefined(the_class, _class_load_kind);
- InstanceKlass* k = SystemDictionary::resolve_from_stream(the_class_sym,
- the_class_loader,
- protection_domain,
- &st,
- the_class,
- THREAD);
+ InstanceKlass* k;
+
+ if (InstanceKlass::cast(the_class)->is_anonymous()) {
+ const InstanceKlass* host_class = the_class->host_klass();
+
+ // Make sure it's the real host class, not another anonymous class.
+ while (host_class != NULL && host_class->is_anonymous()) {
+ host_class = host_class->host_klass();
+ }
+
+ k = SystemDictionary::parse_stream(the_class_sym,
+ the_class_loader,
+ protection_domain,
+ &st,
+ host_class,
+ the_class,
+ NULL,
+ THREAD);
+ k->class_loader_data()->exchange_holders(the_class->class_loader_data());
+ the_class->class_loader_data()->inc_keep_alive();
+ } else {
+ k = SystemDictionary::resolve_from_stream(the_class_sym,
+ the_class_loader,
+ protection_domain,
+ &st,
+ the_class,
+ THREAD);
+ }
// Clear class_being_redefined just to be sure.
state->clear_class_being_redefined();
@@ -1440,6 +1464,30 @@ void VM_EnhancedRedefineClasses::MethodDataCleaner::do_klass(Klass* k) {
}
}
+void VM_EnhancedRedefineClasses::fix_invoke_method(Method* method) {
+
+ constantPoolHandle other_cp = constantPoolHandle(method->constants());
+
+ for (int i = 0; i < other_cp->length(); i++) {
+ if (other_cp->tag_at(i).is_klass()) {
+ Klass* klass = other_cp->resolved_klass_at(i);
+ if (klass->new_version() != NULL) {
+ // Constant pool entry points to redefined class -- update to the new version
+ other_cp->klass_at_put(i, klass->newest_version());
+ }
+ assert(other_cp->resolved_klass_at(i)->new_version() == NULL, "Must be new klass!");
+ }
+ }
+
+ ConstantPoolCache* cp_cache = other_cp->cache();
+ if (cp_cache != NULL) {
+ cp_cache->clear_entries();
+ }
+
+}
+
+
+
void VM_EnhancedRedefineClasses::update_jmethod_ids() {
for (int j = 0; j < _matching_methods_length; ++j) {
Method* old_method = _matching_old_methods[j];
@@ -1977,7 +2025,10 @@ jvmtiError VM_EnhancedRedefineClasses::find_sorted_affected_classes(TRAPS) {
// Find classes not directly redefined, but affected by a redefinition (because one of its supertypes is redefined)
AffectedKlassClosure closure(_affected_klasses);
// Updated in j10, from original SystemDictionary::classes_do
- ClassLoaderDataGraph::dictionary_classes_do(&closure);
+
+ ClassLoaderDataGraph::classes_do(&closure);
+ //ClassLoaderDataGraph::dictionary_classes_do(&closure);
+
log_trace(redefine, class, load)("%d classes affected", _affected_klasses->length());
// Sort the affected klasses such that a supertype is always on a smaller array index than its subtype.
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
index 60b62c3170a..d8a11b51fe9 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
@@ -116,6 +116,7 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
void rollback();
static void mark_as_scavengable(nmethod* nm);
static void unpatch_bytecode(Method* method);
+ static void fix_invoke_method(Method* method);
// Figure out which new methods match old methods in name and signature,
// which methods have been added, and which are no longer present
diff --git a/src/hotspot/share/prims/resolvedMethodTable.cpp b/src/hotspot/share/prims/resolvedMethodTable.cpp
index 6a8128e844f..8644937dbbb 100644
--- a/src/hotspot/share/prims/resolvedMethodTable.cpp
+++ b/src/hotspot/share/prims/resolvedMethodTable.cpp
@@ -409,6 +409,8 @@ void ResolvedMethodTable::adjust_method_entries_dcevm(bool * trace_name_printed)
InstanceKlass* newer_klass = InstanceKlass::cast(old_method->method_holder()->new_version());
Method* newer_method = newer_klass->method_with_idnum(old_method->orig_method_idnum());
+ log_info(redefine, class, load, exceptions)("Adjusting method: '%s' of new class %s", newer_method->name_and_sig_as_C_string(), newer_klass->name()->as_C_string());
+
assert(newer_klass == newer_method->method_holder(), "call after swapping redefined guts");
assert(newer_method != NULL, "method_with_idnum() should not be NULL");
assert(old_method != newer_method, "sanity check");
--
2.23.0

View File

@@ -1,135 +0,0 @@
From 7bb6ea77608cd43cb7ca8c1ea8d492ae07789a0f Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sat, 23 May 2020 10:02:15 +0200
Subject: [PATCH 05/39] Fix "no original bytecode found" error if method with
bkp is missing
Sometimes IDE can deploy class with erroneous method, such method has
n bytecode, but breakpoint position can still exist.
---
src/hotspot/share/interpreter/bytecodes.cpp | 2 +-
.../share/interpreter/interpreterRuntime.cpp | 2 +-
src/hotspot/share/oops/method.cpp | 8 ++++----
src/hotspot/share/oops/method.hpp | 4 ++--
.../prims/jvmtiEnhancedRedefineClasses.cpp | 18 ++++++++++--------
5 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/src/hotspot/share/interpreter/bytecodes.cpp b/src/hotspot/share/interpreter/bytecodes.cpp
index 6711ba735db..4f0b655265a 100644
--- a/src/hotspot/share/interpreter/bytecodes.cpp
+++ b/src/hotspot/share/interpreter/bytecodes.cpp
@@ -84,7 +84,7 @@ Bytecodes::Code Bytecodes::code_at(Method* method, int bci) {
Bytecodes::Code Bytecodes::non_breakpoint_code_at(const Method* method, address bcp) {
assert(method != NULL, "must have the method for breakpoint conversion");
assert(method->contains(bcp), "must be valid bcp in method");
- return method->orig_bytecode_at(method->bci_from(bcp));
+ return method->orig_bytecode_at(method->bci_from(bcp), false);
}
int Bytecodes::special_length_at(Bytecodes::Code code, address bcp, address end) {
diff --git a/src/hotspot/share/interpreter/interpreterRuntime.cpp b/src/hotspot/share/interpreter/interpreterRuntime.cpp
index d66ed24d862..9bfcd9eb479 100644
--- a/src/hotspot/share/interpreter/interpreterRuntime.cpp
+++ b/src/hotspot/share/interpreter/interpreterRuntime.cpp
@@ -788,7 +788,7 @@ JRT_END
// Invokes
JRT_ENTRY(Bytecodes::Code, InterpreterRuntime::get_original_bytecode_at(JavaThread* current, Method* method, address bcp))
- return method->orig_bytecode_at(method->bci_from(bcp));
+ return method->orig_bytecode_at(method->bci_from(bcp), false);
JRT_END
JRT_ENTRY(void, InterpreterRuntime::set_original_bytecode_at(JavaThread* current, Method* method, address bcp, Bytecodes::Code new_code))
diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp
index 613c10a9d8c..a5a12599997 100644
--- a/src/hotspot/share/oops/method.cpp
+++ b/src/hotspot/share/oops/method.cpp
@@ -1853,14 +1853,14 @@ bool CompressedLineNumberReadStream::read_pair() {
#if INCLUDE_JVMTI
-Bytecodes::Code Method::orig_bytecode_at(int bci) const {
+Bytecodes::Code Method::orig_bytecode_at(int bci, bool no_fatal) const {
BreakpointInfo* bp = method_holder()->breakpoints();
for (; bp != NULL; bp = bp->next()) {
if (bp->match(this, bci)) {
return bp->orig_bytecode();
}
}
- {
+ if (!no_fatal) {
ResourceMark rm;
fatal("no original bytecode found in %s at bci %d", name_and_sig_as_C_string(), bci);
}
@@ -1998,7 +1998,7 @@ BreakpointInfo::BreakpointInfo(Method* m, int bci) {
_signature_index = m->signature_index();
_orig_bytecode = (Bytecodes::Code) *m->bcp_from(_bci);
if (_orig_bytecode == Bytecodes::_breakpoint)
- _orig_bytecode = m->orig_bytecode_at(_bci);
+ _orig_bytecode = m->orig_bytecode_at(_bci, false);
_next = NULL;
}
@@ -2007,7 +2007,7 @@ void BreakpointInfo::set(Method* method) {
{
Bytecodes::Code code = (Bytecodes::Code) *method->bcp_from(_bci);
if (code == Bytecodes::_breakpoint)
- code = method->orig_bytecode_at(_bci);
+ code = method->orig_bytecode_at(_bci, false);
assert(orig_bytecode() == code, "original bytecode must be the same");
}
#endif
diff --git a/src/hotspot/share/oops/method.hpp b/src/hotspot/share/oops/method.hpp
index 030ddd1f675..a8d6507ff6c 100644
--- a/src/hotspot/share/oops/method.hpp
+++ b/src/hotspot/share/oops/method.hpp
@@ -226,7 +226,7 @@ class Method : public Metadata {
// JVMTI breakpoints
#if !INCLUDE_JVMTI
- Bytecodes::Code orig_bytecode_at(int bci) const {
+ Bytecodes::Code orig_bytecode_at(int bci, bool no_fatal) const {
ShouldNotReachHere();
return Bytecodes::_shouldnotreachhere;
}
@@ -235,7 +235,7 @@ class Method : public Metadata {
};
u2 number_of_breakpoints() const {return 0;}
#else // !INCLUDE_JVMTI
- Bytecodes::Code orig_bytecode_at(int bci) const;
+ Bytecodes::Code orig_bytecode_at(int bci, bool no_fatal) const;
void set_orig_bytecode_at(int bci, Bytecodes::Code code);
void set_breakpoint(int bci);
void clear_breakpoint(int bci);
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index bf31819479d..07935bd0ada 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -1360,14 +1360,16 @@ void VM_EnhancedRedefineClasses::unpatch_bytecode(Method* method) {
if (code == Bytecodes::_breakpoint) {
int bci = method->bci_from(bcp);
- code = method->orig_bytecode_at(bci);
- java_code = Bytecodes::java_code(code);
- if (code != java_code &&
- (java_code == Bytecodes::_getfield ||
- java_code == Bytecodes::_putfield ||
- java_code == Bytecodes::_aload_0)) {
- // Let breakpoint table handling unpatch bytecode
- method->set_orig_bytecode_at(bci, java_code);
+ code = method->orig_bytecode_at(bci, true);
+ if (code != Bytecodes::_shouldnotreachhere) {
+ java_code = Bytecodes::java_code(code);
+ if (code != java_code &&
+ (java_code == Bytecodes::_getfield ||
+ java_code == Bytecodes::_putfield ||
+ java_code == Bytecodes::_aload_0)) {
+ // Let breakpoint table handling unpatch bytecode
+ method->set_orig_bytecode_at(bci, java_code);
+ }
}
} else {
java_code = Bytecodes::java_code(code);
--
2.23.0

View File

@@ -1,83 +0,0 @@
From c40cd307310822e6e60c61931c14f97a8501f975 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 24 May 2020 12:07:42 +0200
Subject: [PATCH 06/39] Replace deleted method with
Universe::throw_no_such_method_error
+ Change log level in advanced redefinition
- Change log level for "Comparing different class ver.." to debug
- Fix adjust_method_entries_dcevm logging levels and severity
---
.../prims/jvmtiEnhancedRedefineClasses.cpp | 2 +-
.../share/prims/resolvedMethodTable.cpp | 30 +++++++++----------
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 07935bd0ada..3c86e8c68ac 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -881,7 +881,7 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
// Calculated the difference between new and old class (field change, method change, supertype change, ...).
int VM_EnhancedRedefineClasses::calculate_redefinition_flags(InstanceKlass* new_class) {
int result = Klass::NoRedefinition;
- log_info(redefine, class, load)("Comparing different class versions of class %s",new_class->name()->as_C_string());
+ log_debug(redefine, class, load)("Comparing different class versions of class %s",new_class->name()->as_C_string());
assert(new_class->old_version() != NULL, "must have old version");
InstanceKlass* the_class = InstanceKlass::cast(new_class->old_version());
diff --git a/src/hotspot/share/prims/resolvedMethodTable.cpp b/src/hotspot/share/prims/resolvedMethodTable.cpp
index 8644937dbbb..b8d039adff6 100644
--- a/src/hotspot/share/prims/resolvedMethodTable.cpp
+++ b/src/hotspot/share/prims/resolvedMethodTable.cpp
@@ -399,25 +399,25 @@ void ResolvedMethodTable::adjust_method_entries_dcevm(bool * trace_name_printed)
if (old_method->is_old()) {
+ InstanceKlass* newer_klass = InstanceKlass::cast(old_method->method_holder()->new_version());
+ Method* newer_method;
+
// Method* new_method;
if (old_method->is_deleted()) {
- // FIXME:(DCEVM) - check if exception can be thrown
- // new_method = Universe::throw_no_such_method_error();
- continue;
- }
-
- InstanceKlass* newer_klass = InstanceKlass::cast(old_method->method_holder()->new_version());
- Method* newer_method = newer_klass->method_with_idnum(old_method->orig_method_idnum());
+ newer_method = Universe::throw_no_such_method_error();
+ } else {
+ newer_method = newer_klass->method_with_idnum(old_method->orig_method_idnum());
- log_info(redefine, class, load, exceptions)("Adjusting method: '%s' of new class %s", newer_method->name_and_sig_as_C_string(), newer_klass->name()->as_C_string());
+ log_debug(redefine, class, update)("Adjusting method: '%s' of new class %s", newer_method->name_and_sig_as_C_string(), newer_klass->name()->as_C_string());
- assert(newer_klass == newer_method->method_holder(), "call after swapping redefined guts");
- assert(newer_method != NULL, "method_with_idnum() should not be NULL");
- assert(old_method != newer_method, "sanity check");
+ assert(newer_klass == newer_method->method_holder(), "call after swapping redefined guts");
+ assert(newer_method != NULL, "method_with_idnum() should not be NULL");
+ assert(old_method != newer_method, "sanity check");
- if (_the_table->lookup(newer_method) != NULL) {
- // old method was already adjusted if new method exists in _the_table
- continue;
+ if (_the_table->lookup(newer_method) != NULL) {
+ // old method was already adjusted if new method exists in _the_table
+ continue;
+ }
}
java_lang_invoke_ResolvedMethodName::set_vmtarget(mem_name, newer_method);
@@ -428,7 +428,7 @@ void ResolvedMethodTable::adjust_method_entries_dcevm(bool * trace_name_printed)
ResourceMark rm;
if (!(*trace_name_printed)) {
- log_info(redefine, class, update)("adjust: name=%s", old_method->method_holder()->external_name());
+ log_debug(redefine, class, update)("adjust: name=%s", old_method->method_holder()->external_name());
*trace_name_printed = true;
}
log_debug(redefine, class, update, constantpool)
--
2.23.0

File diff suppressed because it is too large Load Diff

View File

@@ -1,26 +0,0 @@
From e062743b148a099a8593a3110d5f1d9156f4ca23 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Tue, 6 Oct 2020 22:15:31 +0200
Subject: [PATCH 08/39] AllowEnhancedClassRedefinition is false (disabled) by
default
---
src/hotspot/share/runtime/globals.hpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp
index 2fcb02fcf49..7051b634a9b 100644
--- a/src/hotspot/share/runtime/globals.hpp
+++ b/src/hotspot/share/runtime/globals.hpp
@@ -2088,7 +2088,7 @@ const intx ObjectAlignmentInBytes = 8;
develop(bool, TraceOptimizedUpcallStubs, false, \
"Trace optimized upcall stub generation") \
\
- product(bool, AllowEnhancedClassRedefinition, true, \
+ product(bool, AllowEnhancedClassRedefinition, false, \
"Allow enhanced class redefinition beyond swapping method " \
"bodies")
--
2.23.0

View File

@@ -1,74 +0,0 @@
From 703cb7aa230b6a159c7f1f86b749a8e0119ef881 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Mon, 19 Oct 2020 20:00:04 +0200
Subject: [PATCH 09/39] Set HOTSPOT_VM_DISTRO=Dynamic Code Evolution
---
make/autoconf/version-numbers | 55 +++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644 make/autoconf/version-numbers
diff --git a/make/autoconf/version-numbers b/make/autoconf/version-numbers
new file mode 100644
index 00000000000..df8025a2e84
--- /dev/null
+++ b/make/autoconf/version-numbers
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Default version, product, and vendor information to use,
+# unless overridden by configure
+
+DEFAULT_VERSION_FEATURE=15
+DEFAULT_VERSION_INTERIM=0
+DEFAULT_VERSION_UPDATE=0
+DEFAULT_VERSION_PATCH=0
+DEFAULT_VERSION_EXTRA1=0
+DEFAULT_VERSION_EXTRA2=0
+DEFAULT_VERSION_EXTRA3=0
+DEFAULT_VERSION_DATE=2020-09-15
+DEFAULT_VERSION_CLASSFILE_MAJOR=59 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
+DEFAULT_VERSION_CLASSFILE_MINOR=0
+DEFAULT_ACCEPTABLE_BOOT_VERSIONS="14 15"
+DEFAULT_JDK_SOURCE_TARGET_VERSION=15
+DEFAULT_PROMOTED_VERSION_PRE=
+
+LAUNCHER_NAME=openjdk
+PRODUCT_NAME=OpenJDK
+PRODUCT_SUFFIX="Runtime Environment"
+JDK_RC_PLATFORM_NAME=Platform
+COMPANY_NAME=N/A
+HOTSPOT_VM_DISTRO="Dynamic Code Evolution"
+VENDOR_URL=https://openjdk.java.net/
+VENDOR_URL_BUG=https://bugreport.java.com/bugreport/
+VENDOR_URL_VM_BUG=https://bugreport.java.com/bugreport/crash.jsp
+
+# Might need better names for these
+MACOSX_BUNDLE_NAME_BASE="OpenJDK"
+MACOSX_BUNDLE_ID_BASE="net.java.openjdk"
--
2.23.0

View File

@@ -1,206 +0,0 @@
From 3b4788c779cb9ffe2751e996bba3b445b474eba7 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 23 Oct 2020 10:20:26 +0200
Subject: [PATCH 10/39] Clear dcevm code separation
---
src/hotspot/share/classfile/systemDictionary.cpp | 3 +--
src/hotspot/share/gc/serial/genMarkSweep.cpp | 8 +++++---
src/hotspot/share/interpreter/linkResolver.cpp | 14 ++++++++++----
.../instrumentation/jfrEventClassTransformer.cpp | 2 +-
src/hotspot/share/oops/cpCache.hpp | 8 +++++---
src/hotspot/share/oops/instanceKlass.cpp | 6 +++---
src/hotspot/share/oops/method.cpp | 2 +-
src/hotspot/share/prims/jvmtiGetLoadedClasses.cpp | 2 +-
src/hotspot/share/runtime/reflection.cpp | 2 +-
9 files changed, 28 insertions(+), 19 deletions(-)
diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp
index cea614a574f..98e2541c79b 100644
--- a/src/hotspot/share/classfile/systemDictionary.cpp
+++ b/src/hotspot/share/classfile/systemDictionary.cpp
@@ -830,9 +830,8 @@ InstanceKlass* SystemDictionary::resolve_hidden_class_from_stream(
EventClassLoad class_load_start_event;
ClassLoaderData* loader_data;
-
+
bool is_redefining = (old_klass != NULL);
-
// - for hidden classes that are not strong: create a new CLD that has a class holder and
// whose loader is the Lookup class's loader.
diff --git a/src/hotspot/share/gc/serial/genMarkSweep.cpp b/src/hotspot/share/gc/serial/genMarkSweep.cpp
index bbb2c02f2b2..00b8e44078e 100644
--- a/src/hotspot/share/gc/serial/genMarkSweep.cpp
+++ b/src/hotspot/share/gc/serial/genMarkSweep.cpp
@@ -316,7 +316,9 @@ void GenMarkSweep::mark_sweep_phase4() {
GenCompactClosure blk;
gch->generation_iterate(&blk, true);
- DcevmSharedGC::copy_rescued_objects_back(MarkSweep::_rescued_oops, true);
- DcevmSharedGC::clear_rescued_objects_resource(MarkSweep::_rescued_oops);
- MarkSweep::_rescued_oops = NULL;
+ if (AllowEnhancedClassRedefinition) {
+ DcevmSharedGC::copy_rescued_objects_back(MarkSweep::_rescued_oops, true);
+ DcevmSharedGC::clear_rescued_objects_resource(MarkSweep::_rescued_oops);
+ MarkSweep::_rescued_oops = NULL;
+ }
}
diff --git a/src/hotspot/share/interpreter/linkResolver.cpp b/src/hotspot/share/interpreter/linkResolver.cpp
index 8fb336762df..74a6af13ea4 100644
--- a/src/hotspot/share/interpreter/linkResolver.cpp
+++ b/src/hotspot/share/interpreter/linkResolver.cpp
@@ -287,9 +287,14 @@ void LinkResolver::check_klass_accessibility(Klass* ref_klass, Klass* sel_klass,
if (!base_klass->is_instance_klass()) {
return; // no relevant check to do
}
-
+ Klass* refKlassNewest = ref_klass;
+ Klass* baseKlassNewest = base_klass;
+ if (AllowEnhancedClassRedefinition) {
+ refKlassNewest = ref_klass->newest_version();
+ baseKlassNewest = base_klass->newest_version();
+ }
Reflection::VerifyClassAccessResults vca_result =
- Reflection::verify_class_access(ref_klass->newest_version(), InstanceKlass::cast(base_klass->newest_version()), true);
+ Reflection::verify_class_access(refKlassNewest, InstanceKlass::cast(baseKlassNewest), true);
if (vca_result != Reflection::ACCESS_OK) {
ResourceMark rm(THREAD);
char* msg = Reflection::verify_class_access_msg(ref_klass,
@@ -551,7 +556,8 @@ void LinkResolver::check_method_accessability(Klass* ref_klass,
// We'll check for the method name first, as that's most likely
// to be false (so we'll short-circuit out of these tests).
if (sel_method->name() == vmSymbols::clone_name() &&
- sel_klass->newest_version() == vmClasses::Object_klass()->newest_version() &&
+ ( !AllowEnhancedClassRedefinition && sel_klass == vmClasses::Object_klass() ||
+ AllowEnhancedClassRedefinition && sel_klass->newest_version() == vmClasses::Object_klass()->newest_version()) &&
resolved_klass->is_array_klass()) {
// We need to change "protected" to "public".
assert(flags.is_protected(), "clone not protected?");
@@ -997,7 +1003,7 @@ void LinkResolver::resolve_field(fieldDescriptor& fd,
// or by the <init> method (in case of an instance field).
if (is_put && fd.access_flags().is_final()) {
- if (sel_klass != current_klass && sel_klass != current_klass->active_version()) {
+ if (sel_klass != current_klass && (!AllowEnhancedClassRedefinition || sel_klass != current_klass->active_version())) {
ResourceMark rm(THREAD);
stringStream ss;
ss.print("Update to %s final field %s.%s attempted from a different class (%s) than the field's declaring class",
diff --git a/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp b/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp
index 88e520ec475..73832251f3f 100644
--- a/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp
+++ b/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp
@@ -1475,7 +1475,7 @@ static InstanceKlass* create_new_instance_klass(InstanceKlass* ik, ClassFileStre
cld,
&cl_info,
ClassFileParser::INTERNAL, // internal visibility
- false,
+ false,
THREAD);
if (HAS_PENDING_EXCEPTION) {
log_pending_exception(PENDING_EXCEPTION);
diff --git a/src/hotspot/share/oops/cpCache.hpp b/src/hotspot/share/oops/cpCache.hpp
index b934302f422..d7ae5edc7b3 100644
--- a/src/hotspot/share/oops/cpCache.hpp
+++ b/src/hotspot/share/oops/cpCache.hpp
@@ -148,13 +148,13 @@ class ConstantPoolCacheEntry {
void set_bytecode_2(Bytecodes::Code code);
void set_f1(Metadata* f1) {
Metadata* existing_f1 = _f1; // read once
- //assert(existing_f1 == NULL || existing_f1 == f1, "illegal field change");
+ assert(AllowEnhancedClassRedefinition || existing_f1 == NULL || existing_f1 == f1, "illegal field change");
_f1 = f1;
}
void release_set_f1(Metadata* f1);
void set_f2(intx f2) {
intx existing_f2 = _f2; // read once
- //assert(existing_f2 == 0 || existing_f2 == f2, "illegal field change");
+ assert(AllowEnhancedClassRedefinition || existing_f2 == 0 || existing_f2 == f2, "illegal field change");
_f2 = f2;
}
void set_f2_as_vfinal_method(Method* f2) {
@@ -215,7 +215,9 @@ class ConstantPoolCacheEntry {
void initialize_resolved_reference_index(int ref_index) {
assert(_f2 == 0, "set once"); // note: ref_index might be zero also
_f2 = ref_index;
- _flags = 1 << is_resolved_ref_shift;
+ if (AllowEnhancedClassRedefinition) {
+ _flags = 1 << is_resolved_ref_shift;
+ }
}
void set_field( // sets entry to resolved field state
diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp
index c18a5822939..994f6bf266f 100644
--- a/src/hotspot/share/oops/instanceKlass.cpp
+++ b/src/hotspot/share/oops/instanceKlass.cpp
@@ -968,7 +968,7 @@ bool InstanceKlass::link_class_impl(TRAPS) {
set_init_state(linked);
}
// (DCEVM) Must check for old version in order to prevent infinite loops.
- if (JvmtiExport::should_post_class_prepare() && old_version() == NULL /* JVMTI deadlock otherwise */) {
+ if (JvmtiExport::should_post_class_prepare() && (!AllowEnhancedClassRedefinition || old_version() == NULL /* JVMTI deadlock otherwise */) {
JvmtiExport::post_class_prepare(THREAD, this);
}
}
@@ -1046,7 +1046,7 @@ void InstanceKlass::initialize_impl(TRAPS) {
// we might end up throwing IE from link/symbol resolution sites
// that aren't expected to throw. This would wreak havoc. See 6320309.
while ((is_being_initialized() && !is_reentrant_initialization(jt))
- || (old_version() != NULL && InstanceKlass::cast(old_version())->is_being_initialized())) {
+ || (AllowEnhancedClassRedefinition && old_version() != NULL && InstanceKlass::cast(old_version())->is_being_initialized())) {
wait = true;
jt->set_class_to_be_initialized(this);
ol.wait_uninterruptibly(jt);
@@ -3796,7 +3796,7 @@ void InstanceKlass::verify_on(outputStream* st) {
guarantee(sib->is_klass(), "should be klass");
// TODO: (DCEVM) explain
- guarantee(sib->super() == super || super->newest_version() == SystemDictionary::Object_klass(), "siblings should have same superklass");
+ guarantee(sib->super() == super || AllowEnhancedClassRedefinition && super->newest_version() == SystemDictionary::Object_klass(), "siblings should have same superklass");
}
// Verify local interfaces
diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp
index a5a12599997..4426f03fd40 100644
--- a/src/hotspot/share/oops/method.cpp
+++ b/src/hotspot/share/oops/method.cpp
@@ -2199,7 +2199,7 @@ void Method::ensure_jmethod_ids(ClassLoaderData* loader_data, int capacity) {
// Add a method id to the jmethod_ids
jmethodID Method::make_jmethod_id(ClassLoaderData* loader_data, Method* m) {
// FIXME: (DCEVM) ???
- if (m != m->newest_version()) {
+ if (AllowEnhancedClassRedefinition && m != m->newest_version()) {
m = m->newest_version();
}
ClassLoaderData* cld = loader_data;
diff --git a/src/hotspot/share/prims/jvmtiGetLoadedClasses.cpp b/src/hotspot/share/prims/jvmtiGetLoadedClasses.cpp
index 42e72c67879..c860ee24f80 100644
--- a/src/hotspot/share/prims/jvmtiGetLoadedClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiGetLoadedClasses.cpp
@@ -76,7 +76,7 @@ public:
// the new version (SystemDictionary stores only new versions). But the LoadedClassesClosure's functionality was
// changed in java8 where jvmtiLoadedClasses collects all classes from all classloaders, therefore we
// must use new versions only.
- if (k->new_version()==NULL) {
+ if (AllowEnhancedClassRedefinition && k->new_version()==NULL) {
_classStack.push((jclass) _env->jni_reference(Handle(_cur_thread, k->java_mirror())));
if (_dictionary_walk) {
// Collect array classes this way when walking the dictionary (because array classes are
diff --git a/src/hotspot/share/runtime/reflection.cpp b/src/hotspot/share/runtime/reflection.cpp
index cc58f913ed5..21104c18423 100644
--- a/src/hotspot/share/runtime/reflection.cpp
+++ b/src/hotspot/share/runtime/reflection.cpp
@@ -608,7 +608,7 @@ bool Reflection::verify_member_access(const Klass* current_class,
TRAPS) {
// (DCEVM) Decide accessibility based on active version
- if (current_class != NULL) {
+ if (AllowEnhancedClassRedefinition && current_class != NULL) {
current_class = current_class->active_version();
}
--
2.23.0

View File

@@ -1,26 +0,0 @@
From bb8f91da24b2649507f2e200f1ff2bae2d2658bf Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Wed, 11 Nov 2020 18:45:15 +0100
Subject: [PATCH 11/39] Fix LoadedClassesClosure - fixes problems with remote
debugging
---
src/hotspot/share/prims/jvmtiGetLoadedClasses.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/hotspot/share/prims/jvmtiGetLoadedClasses.cpp b/src/hotspot/share/prims/jvmtiGetLoadedClasses.cpp
index c860ee24f80..dfe0bb8d96a 100644
--- a/src/hotspot/share/prims/jvmtiGetLoadedClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiGetLoadedClasses.cpp
@@ -76,7 +76,7 @@ public:
// the new version (SystemDictionary stores only new versions). But the LoadedClassesClosure's functionality was
// changed in java8 where jvmtiLoadedClasses collects all classes from all classloaders, therefore we
// must use new versions only.
- if (AllowEnhancedClassRedefinition && k->new_version()==NULL) {
+ if (!AllowEnhancedClassRedefinition || k->new_version()==NULL) {
_classStack.push((jclass) _env->jni_reference(Handle(_cur_thread, k->java_mirror())));
if (_dictionary_walk) {
// Collect array classes this way when walking the dictionary (because array classes are
--
2.23.0

View File

@@ -1,43 +0,0 @@
From 9815ee603b27484953651bdc6d5705994a4d38aa Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 22 Nov 2020 19:51:46 +0100
Subject: [PATCH 13/39] dcevm15 - add ClassLoaderDataGraph_lock on
ClassLoaderDataGraph::classes_do
ClassLoaderDataGraph::classes_do and need safepoint or lock,
find_sorted_affected_classes is not in safepoint therefore it must be
locked
ClassLoaderDataGraph::rollback_redefinition need safepoint too
---
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index efaf11e1666..9f42d14ce98 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -1380,7 +1380,9 @@ void VM_EnhancedRedefineClasses::calculate_instance_update_information(Klass* ne
// Rollback all changes - clear new classes from the system dictionary, return old classes to directory, free memory.
void VM_EnhancedRedefineClasses::rollback() {
log_info(redefine, class, load)("Rolling back redefinition, result=%d", _res);
+ ClassLoaderDataGraph_lock->lock();
ClassLoaderDataGraph::rollback_redefinition();
+ ClassLoaderDataGraph_lock->unlock();
for (int i = 0; i < _new_classes->length(); i++) {
SystemDictionary::remove_from_hierarchy(_new_classes->at(i));
@@ -2063,7 +2065,10 @@ jvmtiError VM_EnhancedRedefineClasses::find_sorted_affected_classes(TRAPS) {
AffectedKlassClosure closure(_affected_klasses);
// Updated in j10, from original SystemDictionary::classes_do
- ClassLoaderDataGraph::classes_do(&closure);
+ {
+ MutexLocker mcld(ClassLoaderDataGraph_lock);
+ ClassLoaderDataGraph::classes_do(&closure);
+ }
//ClassLoaderDataGraph::dictionary_classes_do(&closure);
log_trace(redefine, class, load)("%d classes affected", _affected_klasses->length());
--
2.23.0

View File

@@ -1,98 +0,0 @@
From d3e5f8acd389021128bb8a899bb538294de353f6 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 22 Nov 2020 12:05:50 +0100
Subject: [PATCH 14/39] dcevm15 - fix Universe::root_oops_do
Removed ClassLoaderDataGraph::cld_do was cause of crashes due multiple
oop patching. ClassLoaderDataGraph::cld_do replaced in dcevm15
previously used and removed SystemDictionary:oops_do
---
src/hotspot/share/memory/universe.cpp | 45 +++++++++++----------------
1 file changed, 19 insertions(+), 26 deletions(-)
diff --git a/src/hotspot/share/memory/universe.cpp b/src/hotspot/share/memory/universe.cpp
index 9fcbb6c41b3..247f2b3e8c0 100644
--- a/src/hotspot/share/memory/universe.cpp
+++ b/src/hotspot/share/memory/universe.cpp
@@ -44,6 +44,8 @@
#include "gc/shared/oopStorageSet.hpp"
#include "gc/shared/stringdedup/stringDedup.hpp"
#include "gc/shared/tlab_globals.hpp"
+#include "gc/shared/weakProcessor.hpp"
+#include "interpreter/interpreter.hpp"
#include "logging/log.hpp"
#include "logging/logStream.hpp"
#include "memory/metadataFactory.hpp"
@@ -71,6 +73,8 @@
#include "runtime/jniHandles.hpp"
#include "runtime/thread.inline.hpp"
#include "runtime/timerTrace.hpp"
+#include "runtime/vmOperations.hpp"
+#include "services/management.hpp"
#include "services/memoryService.hpp"
#include "utilities/align.hpp"
#include "utilities/autoRestore.hpp"
@@ -209,45 +213,34 @@ void Universe::basic_type_classes_do(KlassClosure *closure) {
// FIXME: (DCEVM) This method should iterate all pointers that are not within heap objects.
void Universe::root_oops_do(OopClosure *oopClosure) {
-
- class AlwaysTrueClosure: public BoolObjectClosure {
- public:
- void do_object(oop p) { ShouldNotReachHere(); }
- bool do_object_b(oop p) { return true; }
- };
- AlwaysTrueClosure always_true;
-
Universe::oops_do(oopClosure);
// ReferenceProcessor::oops_do(oopClosure); (tw) check why no longer there
JNIHandles::oops_do(oopClosure); // Global (strong) JNI handles
Threads::oops_do(oopClosure, NULL);
ObjectSynchronizer::oops_do(oopClosure);
- // TODO: review, flat profiler was removed in j10
- // FlatProfiler::oops_do(oopClosure);
- JvmtiExport::oops_do(oopClosure);
+ // (DCEVM) TODO: Check if this is correct?
+ Management::oops_do(oopClosure);
+ OopStorageSet::vm_global()->oops_do(oopClosure);
+ // CLDToOopClosure cld_closure(oopClosure, ClassLoaderData::_claim_none);
+ // ClassLoaderDataGraph::cld_do(&cld_closure);
// Now adjust pointers in remaining weak roots. (All of which should
// have been cleared if they pointed to non-surviving objects.)
// Global (weak) JNI handles
- JNIHandles::weak_oops_do(&always_true, oopClosure);
+ WeakProcessor::oops_do(oopClosure);
+
+ JvmtiExport::oops_do(oopClosure);
CodeBlobToOopClosure blobClosure(oopClosure, CodeBlobToOopClosure::FixRelocations);
CodeCache::blobs_do(&blobClosure);
- StringTable::oops_do(oopClosure);
+
+ AOT_ONLY(AOTLoader::oops_do(oopClosure);)
+
+ // StringTable::oops_do was removed in j15
+ // StringTable::oops_do(oopClosure);
+
+ // OopStorageSet::vm_global()->oops_do(oopClosure);
- // (DCEVM) TODO: Check if this is correct?
- //CodeCache::scavenge_root_nmethods_oops_do(oopClosure);
- //Management::oops_do(oopClosure);
- //ref_processor()->weak_oops_do(&oopClosure);
- //PSScavenge::reference_processor()->weak_oops_do(&oopClosure);
-
-#if INCLUDE_AOT
- if (UseAOT) {
- AOTLoader::oops_do(oopClosure);
- }
-#endif
- // SO_AllClasses
- SystemDictionary::oops_do(oopClosure);
}
void Universe::oops_do(OopClosure* f) {
--
2.23.0

View File

@@ -1,29 +0,0 @@
From 574cddeb00c3d93bddbaf1845a7d9d3ffdced324 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sat, 28 Nov 2020 19:29:42 +0100
Subject: [PATCH 15/39] dcevm15 - check if has_nestmate_access_to has newest
host class
---
src/hotspot/share/oops/instanceKlass.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp
index ef0091fe288..b4d09e92830 100644
--- a/src/hotspot/share/oops/instanceKlass.cpp
+++ b/src/hotspot/share/oops/instanceKlass.cpp
@@ -398,6 +398,11 @@ bool InstanceKlass::has_nestmate_access_to(InstanceKlass* k, TRAPS) {
return false;
}
+ if (AllowEnhancedClassRedefinition) {
+ // TODO: (DCEVM) check if it correct. It fix problems with lambdas (hidden)
+ cur_host = InstanceKlass::cast(cur_host->newest_version());
+ }
+
Klass* k_nest_host = k->nest_host(CHECK_false);
if (k_nest_host == NULL) {
return false;
--
2.23.0

View File

@@ -1,54 +0,0 @@
From 983b4aaed2c56a74287b9400ddae4b7d7f3fd715 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 29 Nov 2020 17:18:16 +0100
Subject: [PATCH 16/39] dcevm15 - mark_as_scavengable only alive methods
---
.../share/prims/jvmtiEnhancedRedefineClasses.cpp | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 9f42d14ce98..db5fb1c472b 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -223,19 +223,21 @@ class FieldCopier : public FieldClosure {
// TODO: review...
void VM_EnhancedRedefineClasses::mark_as_scavengable(nmethod* nm) {
- ScavengableNMethods::register_nmethod(nm);
+ if (nm->is_alive()) {
+ ScavengableNMethods::register_nmethod(nm);
+ }
}
void VM_EnhancedRedefineClasses::unregister_nmethod_g1(nmethod* nm) {
// It should work not only for G1 but also for another GCs, but this way is safer now
- if (!nm->is_zombie() && !nm->is_unloaded()) {
+ if (nm->is_alive()) {
Universe::heap()->unregister_nmethod(nm);
}
}
void VM_EnhancedRedefineClasses::register_nmethod_g1(nmethod* nm) {
// It should work not only for G1 but also for another GCs, but this way is safer now
- if (!nm->is_zombie() && !nm->is_unloaded()) {
+ if (nm->is_alive()) {
Universe::heap()->register_nmethod(nm);
}
}
@@ -511,9 +513,9 @@ void VM_EnhancedRedefineClasses::doit() {
flush_dependent_code(thread);
// }
- // Adjust constantpool caches for all classes that reference methods of the evolved class.
- ClearCpoolCacheAndUnpatch clear_cpool_cache(thread);
- ClassLoaderDataGraph::classes_do(&clear_cpool_cache);
+ // Adjust constantpool caches for all classes that reference methods of the evolved class.
+ ClearCpoolCacheAndUnpatch clear_cpool_cache(thread);
+ ClassLoaderDataGraph::classes_do(&clear_cpool_cache);
// JSR-292 support
if (_any_class_has_resolved_methods) {
--
2.23.0

View File

@@ -1,91 +0,0 @@
From ed546016ead6064d8b95a9c1e4cdc6bc192f8d67 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 29 Nov 2020 20:05:03 +0100
Subject: [PATCH 17/39] dcevm15 - fix hidded classes
---
.../prims/jvmtiEnhancedRedefineClasses.cpp | 41 ++++++++++++++-----
1 file changed, 30 insertions(+), 11 deletions(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index db5fb1c472b..590f7fdfafe 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -722,7 +722,8 @@ bool VM_EnhancedRedefineClasses::is_modifiable_class(oop klass_mirror) {
}
// Cannot redefine or retransform an anonymous class.
- if (InstanceKlass::cast(k)->is_unsafe_anonymous()) {
+ // TODO: check if is correct in j15
+ if (InstanceKlass::cast(k)->is_unsafe_anonymous() || InstanceKlass::cast(k)->is_hidden()) {
return false;
}
return true;
@@ -808,21 +809,27 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
InstanceKlass* k;
- if (InstanceKlass::cast(the_class)->is_unsafe_anonymous()) {
- const InstanceKlass* host_class = the_class->unsafe_anonymous_host();
+ if (the_class->is_unsafe_anonymous() || the_class->is_hidden()) {
+ InstanceKlass* dynamic_host_class = NULL;
+ InstanceKlass* unsafe_anonymous_host = NULL;
- // Make sure it's the real host class, not another anonymous class.
- while (host_class != NULL && host_class->is_unsafe_anonymous()) {
- host_class = host_class->unsafe_anonymous_host();
+ if (the_class->is_hidden()) {
+ log_debug(redefine, class, load)("loading hidden class %s", the_class->name()->as_C_string());
+ dynamic_host_class = the_class->nest_host(THREAD);
+ }
+
+ if (the_class->is_unsafe_anonymous()) {
+ log_debug(redefine, class, load)("loading usafe anonymous %s", the_class->name()->as_C_string());
+ unsafe_anonymous_host = the_class->unsafe_anonymous_host();
}
ClassLoadInfo cl_info(protection_domain,
- host_class,
- NULL, // dynamic_nest_host
+ unsafe_anonymous_host,
NULL, // cp_patches
+ dynamic_host_class, // dynamic_nest_host
Handle(), // classData
- false, // is_hidden
- false, // is_strong_hidden
+ the_class->is_hidden(), // is_hidden
+ !the_class->is_non_strong_hidden(), // is_strong_hidden
true); // FIXME: check if correct. can_access_vm_annotations
k = SystemDictionary::parse_stream(the_class_sym,
@@ -833,7 +840,17 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
THREAD);
k->class_loader_data()->exchange_holders(the_class->class_loader_data());
- the_class->class_loader_data()->inc_keep_alive();
+
+ if (the_class->is_hidden()) {
+ // from jvm_lookup_define_class() (jvm.cpp):
+ // The hidden class loader data has been artificially been kept alive to
+ // this point. The mirror and any instances of this class have to keep
+ // it alive afterwards.
+ the_class->class_loader_data()->dec_keep_alive();
+ } else {
+ the_class->class_loader_data()->inc_keep_alive();
+ }
+
} else {
k = SystemDictionary::resolve_from_stream(the_class_sym,
the_class_loader,
@@ -1475,6 +1492,8 @@ void VM_EnhancedRedefineClasses::ClearCpoolCacheAndUnpatch::do_klass(Klass* k) {
ik->set_unsafe_anonymous_host(InstanceKlass::cast(ik->unsafe_anonymous_host()->newest_version()));
}
+ // FIXME: check new nest_host for hidden
+
// Update implementor if there is only one, in this case implementor() can reference old class
if (ik->is_interface()) {
Klass* implKlass = ik->implementor();
--
2.23.0

View File

@@ -1,27 +0,0 @@
From 9983c44fe6903daba758ed0c43b8c86e738e0741 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 29 Nov 2020 20:08:57 +0100
Subject: [PATCH 18/39] dcevm15 - DON'T clear F2 in CP cache after indy
unevolving
It's not clear why it was cleared in dcevm7-11
---
src/hotspot/share/oops/cpCache.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/hotspot/share/oops/cpCache.cpp b/src/hotspot/share/oops/cpCache.cpp
index 167cb274661..7e72641ec5a 100644
--- a/src/hotspot/share/oops/cpCache.cpp
+++ b/src/hotspot/share/oops/cpCache.cpp
@@ -654,7 +654,7 @@ void ConstantPoolCacheEntry::clear_entry() {
if (clearData) {
if (!is_resolved_reference()) {
- _f2 = 0;
+ // _f2 = 0;
}
// FIXME: (DCEVM) we want to clear flags, but parameter size is actually used
// after we return from the method, before entry is re-initialized. So let's
--
2.23.0

View File

@@ -1,66 +0,0 @@
From 3b09df69c007285ea6c258388532a8e5f9fe3d45 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 22 Nov 2020 12:03:32 +0100
Subject: [PATCH 19/39] Cleanup and review comments
---
src/hotspot/share/classfile/classLoaderDataGraph.hpp | 2 +-
src/hotspot/share/gc/shared/gcConfig.cpp | 2 +-
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp | 1 +
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp | 2 +-
4 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.hpp b/src/hotspot/share/classfile/classLoaderDataGraph.hpp
index 5f8913001b0..c3bcc7271e6 100644
--- a/src/hotspot/share/classfile/classLoaderDataGraph.hpp
+++ b/src/hotspot/share/classfile/classLoaderDataGraph.hpp
@@ -105,7 +105,7 @@ class ClassLoaderDataGraph : public AllStatic {
static void dictionary_classes_do(KlassClosure* klass_closure);
- // Enhanced class redefinition
+ // (DCEVM) Enhanced class redefinition
static void rollback_redefinition();
// VM_CounterDecay iteration support
diff --git a/src/hotspot/share/gc/shared/gcConfig.cpp b/src/hotspot/share/gc/shared/gcConfig.cpp
index 26a2b67b8e9..8e78696bef5 100644
--- a/src/hotspot/share/gc/shared/gcConfig.cpp
+++ b/src/hotspot/share/gc/shared/gcConfig.cpp
@@ -97,7 +97,7 @@ void GCConfig::fail_if_non_included_gc_is_selected() {
void GCConfig::select_gc_ergonomically() {
if (AllowEnhancedClassRedefinition && !UseG1GC) {
- // Enhanced class redefinition only supports serial GC at the moment
+ // (DCEVM) Enhanced class redefinition only supports serial GC at the moment
FLAG_SET_ERGO(UseSerialGC, true);
} else if (os::is_server_class_machine()) {
#if INCLUDE_G1GC
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 590f7fdfafe..2a7dd35bdd1 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -842,6 +842,7 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
k->class_loader_data()->exchange_holders(the_class->class_loader_data());
if (the_class->is_hidden()) {
+ // TODO: (DCEVM) review if is correct
// from jvm_lookup_define_class() (jvm.cpp):
// The hidden class loader data has been artificially been kept alive to
// this point. The mirror and any instances of this class have to keep
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
index bd5e7d153be..5de375fb888 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
@@ -78,7 +78,7 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
// have any entries.
bool _any_class_has_resolved_methods;
- // Enhanced class redefinition, affected klasses contain all classes which should be redefined
+ // (DCEVM) Enhanced class redefinition, affected klasses contain all classes which should be redefined
// either because of redefine, class hierarchy or interface change
GrowableArray<Klass*>* _affected_klasses;
--
2.23.0

View File

@@ -1,31 +0,0 @@
From 5c41ecc9f48d22b81b3ac610e5655f1a74d25614 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 12 Feb 2021 10:11:10 +0100
Subject: [PATCH 20/39] Disable AllowEnhancedClassRedefinition in flight
recorder
---
src/hotspot/share/runtime/arguments.cpp | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp
index 567803b70b7..cbcd8f91c66 100644
--- a/src/hotspot/share/runtime/arguments.cpp
+++ b/src/hotspot/share/runtime/arguments.cpp
@@ -3994,6 +3994,13 @@ jint Arguments::parse(const JavaVMInitArgs* initial_cmd_args) {
// Set object alignment values.
set_object_alignment();
+ if (FlightRecorder) {
+ if (AllowEnhancedClassRedefinition) {
+ warning("EnhancedClassRedefinition was disabled, it is not allowed in FlightRecorder.");
+ AllowEnhancedClassRedefinition = false;
+ }
+ }
+
#if !INCLUDE_CDS
if (DumpSharedSpaces || RequireSharedSpaces) {
jio_fprintf(defaultStream::error_stream(),
--
2.23.0

View File

@@ -1,695 +0,0 @@
From e560b33cdec3ef0e4ce91714663d3befa87ff4e5 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 12 Feb 2021 09:44:28 +0100
Subject: [PATCH 21/39] dcevm17 - fix compilation issues
---
.../share/classfile/classLoaderData.cpp | 2 +-
src/hotspot/share/classfile/javaClasses.cpp | 4 +-
src/hotspot/share/classfile/javaClasses.hpp | 4 +-
.../share/classfile/lambdaFormInvokers.cpp | 152 ++++++++++++++++++
.../share/classfile/systemDictionary.cpp | 5 +-
.../share/classfile/systemDictionary.hpp | 6 +
src/hotspot/share/classfile/vmClassMacros.hpp | 2 +
.../share/gc/g1/g1FullGCCompactTask.cpp | 9 +-
.../share/gc/g1/g1FullGCCompactionPoint.cpp | 12 +-
src/hotspot/share/gc/shared/dcevmSharedGC.cpp | 2 +-
src/hotspot/share/gc/shared/space.inline.hpp | 2 +-
src/hotspot/share/memory/universe.cpp | 71 --------
src/hotspot/share/memory/universe.hpp | 7 -
src/hotspot/share/oops/instanceKlass.cpp | 4 +-
.../prims/jvmtiEnhancedRedefineClasses.cpp | 47 ++++--
.../prims/jvmtiEnhancedRedefineClasses.hpp | 2 +
.../share/prims/resolvedMethodTable.cpp | 5 +-
src/hotspot/share/runtime/arguments.hpp | 2 +
18 files changed, 221 insertions(+), 117 deletions(-)
create mode 100644 src/hotspot/share/classfile/lambdaFormInvokers.cpp
diff --git a/src/hotspot/share/classfile/classLoaderData.cpp b/src/hotspot/share/classfile/classLoaderData.cpp
index 2a826ff50a7..65ce4c4af8c 100644
--- a/src/hotspot/share/classfile/classLoaderData.cpp
+++ b/src/hotspot/share/classfile/classLoaderData.cpp
@@ -603,7 +603,7 @@ void ClassLoaderData::exchange_holders(ClassLoaderData* cld) {
oop holder_oop = _holder.peek();
_holder.replace(cld->_holder.peek());
cld->_holder.replace(holder_oop);
- WeakHandle<vm_weak_data> exchange = _holder;
+ WeakHandle exchange = _holder;
_holder = cld->_holder;
cld->_holder = exchange;
}
diff --git a/src/hotspot/share/classfile/javaClasses.cpp b/src/hotspot/share/classfile/javaClasses.cpp
index dc800debea4..66ff72b2f02 100644
--- a/src/hotspot/share/classfile/javaClasses.cpp
+++ b/src/hotspot/share/classfile/javaClasses.cpp
@@ -3827,7 +3827,7 @@ void java_lang_invoke_DirectMethodHandle_StaticAccessor::set_static_offset(oop d
macro(_static_offset_offset, k, vmSymbols::static_offset_name(), long_signature, false)
void java_lang_invoke_DirectMethodHandle_StaticAccessor::compute_offsets() {
- InstanceKlass* k = SystemDictionary::DirectMethodHandle_StaticAccessor_klass();
+ InstanceKlass* k = vmClasses::DirectMethodHandle_StaticAccessor_klass();
DIRECTMETHODHANDLE_STATIC_ACCESSOR_FIELDS_DO(FIELD_COMPUTE_OFFSET);
}
@@ -3855,7 +3855,7 @@ void java_lang_invoke_DirectMethodHandle_Accessor::set_field_offset(oop dmh, int
macro(_field_offset_offset, k, vmSymbols::field_offset_name(), int_signature, false)
void java_lang_invoke_DirectMethodHandle_Accessor::compute_offsets() {
- InstanceKlass* k = SystemDictionary::DirectMethodHandle_Accessor_klass();
+ InstanceKlass* k = vmClasses::DirectMethodHandle_Accessor_klass();
DIRECTMETHODHANDLE_ACCESSOR_FIELDS_DO(FIELD_COMPUTE_OFFSET);
}
diff --git a/src/hotspot/share/classfile/javaClasses.hpp b/src/hotspot/share/classfile/javaClasses.hpp
index 32348c90ef9..f7dc5ccbd8c 100644
--- a/src/hotspot/share/classfile/javaClasses.hpp
+++ b/src/hotspot/share/classfile/javaClasses.hpp
@@ -1029,7 +1029,7 @@ class java_lang_invoke_DirectMethodHandle_StaticAccessor: AllStatic {
// Testers
static bool is_subclass(Klass* klass) {
- return klass->is_subclass_of(SystemDictionary::DirectMethodHandle_StaticAccessor_klass());
+ return klass->is_subclass_of(vmClasses::DirectMethodHandle_StaticAccessor_klass());
}
static bool is_instance(oop obj);
@@ -1053,7 +1053,7 @@ class java_lang_invoke_DirectMethodHandle_Accessor: AllStatic {
// Testers
static bool is_subclass(Klass* klass) {
- return klass->is_subclass_of(SystemDictionary::DirectMethodHandle_Accessor_klass());
+ return klass->is_subclass_of(vmClasses::DirectMethodHandle_Accessor_klass());
}
static bool is_instance(oop obj);
diff --git a/src/hotspot/share/classfile/lambdaFormInvokers.cpp b/src/hotspot/share/classfile/lambdaFormInvokers.cpp
new file mode 100644
index 00000000000..281de58b482
--- /dev/null
+++ b/src/hotspot/share/classfile/lambdaFormInvokers.cpp
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "classfile/classLoadInfo.hpp"
+#include "classfile/classFileStream.hpp"
+#include "classfile/javaClasses.inline.hpp"
+#include "classfile/klassFactory.hpp"
+#include "classfile/lambdaFormInvokers.hpp"
+#include "classfile/symbolTable.hpp"
+#include "classfile/systemDictionary.hpp"
+#include "classfile/systemDictionaryShared.hpp"
+#include "classfile/vmClasses.hpp"
+#include "classfile/vmSymbols.hpp"
+#include "logging/log.hpp"
+#include "memory/oopFactory.hpp"
+#include "memory/metaspaceShared.hpp"
+#include "memory/resourceArea.hpp"
+#include "oops/instanceKlass.hpp"
+#include "oops/klass.hpp"
+#include "oops/objArrayKlass.hpp"
+#include "oops/objArrayOop.hpp"
+#include "oops/oop.inline.hpp"
+#include "oops/typeArrayOop.inline.hpp"
+#include "runtime/handles.inline.hpp"
+#include "runtime/javaCalls.hpp"
+
+GrowableArray<char*>* LambdaFormInvokers::_lambdaform_lines = NULL;
+
+void LambdaFormInvokers::append(char* line) {
+ if (_lambdaform_lines == NULL) {
+ _lambdaform_lines = new GrowableArray<char*>(100);
+ }
+ _lambdaform_lines->append(line);
+}
+
+void LambdaFormInvokers::regenerate_holder_classes(TRAPS) {
+ assert(_lambdaform_lines != NULL, "Bad List");
+ ResourceMark rm(THREAD);
+
+ Symbol* cds_name = vmSymbols::jdk_internal_misc_CDS();
+ Klass* cds_klass = SystemDictionary::resolve_or_null(cds_name, THREAD);
+ guarantee(cds_klass != NULL, "jdk/internal/misc/CDS must exist!");
+
+ int len = _lambdaform_lines->length();
+ objArrayHandle list_lines = oopFactory::new_objArray_handle(vmClasses::String_klass(), len, CHECK);
+ for (int i = 0; i < len; i++) {
+ Handle h_line = java_lang_String::create_from_str(_lambdaform_lines->at(i), CHECK);
+ list_lines->obj_at_put(i, h_line());
+ }
+
+ //
+ // Object[] CDS.generateLambdaFormHolderClasses(String[] lines)
+ // the returned Object[] layout:
+ // name, byte[], name, byte[] ....
+ Symbol* method = vmSymbols::generateLambdaFormHolderClasses();
+ Symbol* signrs = vmSymbols::generateLambdaFormHolderClasses_signature();
+
+ JavaValue result(T_OBJECT);
+ JavaCalls::call_static(&result, cds_klass, method, signrs, list_lines, THREAD);
+
+ if (HAS_PENDING_EXCEPTION) {
+ log_info(cds)("%s: %s", THREAD->pending_exception()->klass()->external_name(),
+ java_lang_String::as_utf8_string(java_lang_Throwable::message(THREAD->pending_exception())));
+ CLEAR_PENDING_EXCEPTION;
+ return;
+ }
+
+ objArrayHandle h_array(THREAD, (objArrayOop)result.get_oop());
+ int sz = h_array->length();
+ assert(sz % 2 == 0 && sz >= 2, "Must be even size of length");
+ for (int i = 0; i < sz; i+= 2) {
+ Handle h_name(THREAD, h_array->obj_at(i));
+ typeArrayHandle h_bytes(THREAD, (typeArrayOop)h_array->obj_at(i+1));
+ assert(h_name != NULL, "Class name is NULL");
+ assert(h_bytes != NULL, "Class bytes is NULL");
+
+ char *class_name = java_lang_String::as_utf8_string(h_name());
+ int len = h_bytes->length();
+ // make a copy of class bytes so GC will not affect us.
+ char *buf = resource_allocate_bytes(THREAD, len);
+ memcpy(buf, (char*)h_bytes->byte_at_addr(0), len);
+ ClassFileStream st((u1*)buf, len, NULL, ClassFileStream::verify);
+
+ reload_class(class_name, st, THREAD);
+ // free buf
+ resource_free_bytes(buf, len);
+
+ if (HAS_PENDING_EXCEPTION) {
+ log_info(cds)("Exception happened: %s", PENDING_EXCEPTION->klass()->name()->as_C_string());
+ log_info(cds)("Could not create InstanceKlass for class %s", class_name);
+ CLEAR_PENDING_EXCEPTION;
+ return;
+ }
+ }
+}
+
+// class_handle - the class name, bytes_handle - the class bytes
+void LambdaFormInvokers::reload_class(char* name, ClassFileStream& st, TRAPS) {
+ Symbol* class_name = SymbolTable::new_symbol((const char*)name);
+ // the class must exist
+ Klass* klass = SystemDictionary::resolve_or_null(class_name, THREAD);
+ if (klass == NULL) {
+ log_info(cds)("Class %s not present, skip", name);
+ return;
+ }
+ assert(klass->is_instance_klass(), "Should be");
+
+ ClassLoaderData* cld = ClassLoaderData::the_null_class_loader_data();
+ Handle protection_domain;
+ ClassLoadInfo cl_info(protection_domain);
+
+ InstanceKlass* result = KlassFactory::create_from_stream(&st,
+ class_name,
+ cld,
+ cl_info,
+ false,
+ CHECK);
+
+ {
+ MutexLocker mu_r(THREAD, Compile_lock); // add_to_hierarchy asserts this.
+ SystemDictionary::add_to_hierarchy(result);
+ }
+ // new class not linked yet.
+ MetaspaceShared::try_link_class(THREAD, result);
+ assert(!HAS_PENDING_EXCEPTION, "Invariant");
+
+ // exclude the existing class from dump
+ SystemDictionaryShared::set_excluded(InstanceKlass::cast(klass));
+ log_info(cds, lambda)("Replaced class %s, old: %p new: %p", name, klass, result);
+}
diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp
index 98e2541c79b..63de2e2f099 100644
--- a/src/hotspot/share/classfile/systemDictionary.cpp
+++ b/src/hotspot/share/classfile/systemDictionary.cpp
@@ -963,11 +963,12 @@ InstanceKlass* SystemDictionary::resolve_from_stream(ClassFileStream* st,
Symbol* class_name,
Handle class_loader,
const ClassLoadInfo& cl_info,
+ InstanceKlass* old_klass,
TRAPS) {
if (cl_info.is_hidden()) {
- return resolve_hidden_class_from_stream(st, class_name, class_loader, cl_info, CHECK_NULL);
+ return resolve_hidden_class_from_stream(st, class_name, class_loader, cl_info, old_klass, CHECK_NULL);
} else {
- return resolve_class_from_stream(st, class_name, class_loader, cl_info, CHECK_NULL);
+ return resolve_class_from_stream(st, class_name, class_loader, cl_info, old_klass, CHECK_NULL);
}
}
diff --git a/src/hotspot/share/classfile/systemDictionary.hpp b/src/hotspot/share/classfile/systemDictionary.hpp
index 0c774dfeb51..65185a29b10 100644
--- a/src/hotspot/share/classfile/systemDictionary.hpp
+++ b/src/hotspot/share/classfile/systemDictionary.hpp
@@ -124,6 +124,7 @@ class SystemDictionary : AllStatic {
Symbol* class_name,
Handle class_loader,
const ClassLoadInfo& cl_info,
+ InstanceKlass* old_klass,
TRAPS);
// Resolve a class from stream (called by jni_DefineClass and JVM_DefineClass)
@@ -132,6 +133,7 @@ class SystemDictionary : AllStatic {
Symbol* class_name,
Handle class_loader,
const ClassLoadInfo& cl_info,
+ InstanceKlass* old_klass,
TRAPS);
public:
@@ -203,6 +205,10 @@ class SystemDictionary : AllStatic {
// Initialization
static void initialize(TRAPS);
+ // (DCEVM) Enhanced class redefinition
+ static void remove_from_hierarchy(InstanceKlass* k);
+ static void update_constraints_after_redefinition();
+
protected:
// Returns the class loader data to be used when looking up/updating the
// system dictionary.
diff --git a/src/hotspot/share/classfile/vmClassMacros.hpp b/src/hotspot/share/classfile/vmClassMacros.hpp
index a4f55641b51..fb205721a39 100644
--- a/src/hotspot/share/classfile/vmClassMacros.hpp
+++ b/src/hotspot/share/classfile/vmClassMacros.hpp
@@ -109,6 +109,8 @@
\
/* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \
do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle ) \
+ do_klass(DirectMethodHandle_StaticAccessor_klass, java_lang_invoke_DirectMethodHandle_StaticAccessor ) \
+ do_klass(DirectMethodHandle_Accessor_klass, java_lang_invoke_DirectMethodHandle_Accessor ) \
do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle ) \
do_klass(VarHandle_klass, java_lang_invoke_VarHandle ) \
do_klass(MemberName_klass, java_lang_invoke_MemberName ) \
diff --git a/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp b/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
index 54edc9dffb5..058dea90828 100644
--- a/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
+++ b/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
@@ -141,7 +141,10 @@ void G1FullGCCompactTask::compact_region_dcevm(HeapRegion* hr, GrowableArray<Hea
// Once all objects have been moved the liveness information
// needs be cleared.
collector()->mark_bitmap()->clear_region(hr);
- hr->complete_compaction();
+ if (G1VerifyBitmaps) {
+ collector()->mark_bitmap()->clear_region(hr);
+ }
+ hr->reset_compacted_after_full_gc();
}
void G1FullGCCompactTask::serial_compaction_dcevm() {
@@ -184,13 +187,13 @@ size_t G1FullGCCompactTask::G1CompactRegionClosureDcevm::apply(oop obj) {
} else {
DcevmSharedGC::update_fields(obj, oop(destination));
}
- oop(destination)->init_mark_raw();
+ oop(destination)->init_mark();
assert(oop(destination)->klass() != NULL, "should have a class");
return size;
}
Copy::aligned_conjoint_words(obj_addr, destination, size);
- oop(destination)->init_mark_raw();
+ oop(destination)->init_mark();
assert(oop(destination)->klass() != NULL, "should have a class");
return size;
diff --git a/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp b/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp
index 71a46b88f9e..87b1977128a 100644
--- a/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp
+++ b/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp
@@ -36,8 +36,8 @@ G1FullGCCompactionPoint::G1FullGCCompactionPoint() :
{
_compaction_regions = new (ResourceObj::C_HEAP, mtGC) GrowableArray<HeapRegion*>(32, mtGC);
_compaction_region_iterator = _compaction_regions->begin();
- _rescued_oops = new (ResourceObj::C_HEAP, mtGC) GrowableArray<HeapWord*>(128, true, mtGC);
- _rescued_oops_values = new (ResourceObj::C_HEAP, mtGC) GrowableArray<HeapWord*>(128, true, mtGC);
+ _rescued_oops = new (ResourceObj::C_HEAP, mtGC) GrowableArray<HeapWord*>(128, mtGC);
+ _rescued_oops_values = new (ResourceObj::C_HEAP, mtGC) GrowableArray<HeapWord*>(128, mtGC);
}
G1FullGCCompactionPoint::~G1FullGCCompactionPoint() {
@@ -180,15 +180,15 @@ void G1FullGCCompactionPoint::forward_dcevm(oop object, size_t size, bool force_
// with BiasedLocking, in this case forwardee() will return NULL
// even if the mark-word is used. This is no problem since
// forwardee() will return NULL in the compaction phase as well.
- object->init_mark_raw();
+ object->init_mark();
} else {
// Make sure object has the correct mark-word set or that it will be
// fixed when restoring the preserved marks.
- assert(object->mark_raw() == markWord::prototype_for_klass(object->klass()) || // Correct mark
+ assert(object->mark() == markWord::prototype_for_klass(object->klass()) || // Correct mark
object->mark_must_be_preserved() || // Will be restored by PreservedMarksSet
- (UseBiasedLocking && object->has_bias_pattern_raw()), // Will be restored by BiasedLocking
+ (UseBiasedLocking && object->has_bias_pattern()), // Will be restored by BiasedLocking
"should have correct prototype obj: " PTR_FORMAT " mark: " PTR_FORMAT " prototype: " PTR_FORMAT,
- p2i(object), object->mark_raw().value(), markWord::prototype_for_klass(object->klass()).value());
+ p2i(object), object->mark().value(), markWord::prototype_for_klass(object->klass()).value());
}
assert(object->forwardee() == NULL, "should be forwarded to NULL");
}
diff --git a/src/hotspot/share/gc/shared/dcevmSharedGC.cpp b/src/hotspot/share/gc/shared/dcevmSharedGC.cpp
index 3dee097f1d3..edc19a3077d 100644
--- a/src/hotspot/share/gc/shared/dcevmSharedGC.cpp
+++ b/src/hotspot/share/gc/shared/dcevmSharedGC.cpp
@@ -64,7 +64,7 @@ void DcevmSharedGC::copy_rescued_objects_back(GrowableArray<HeapWord*>* rescued_
Copy::aligned_disjoint_words(cast_from_oop<HeapWord*>(rescued_obj), cast_from_oop<HeapWord*>(new_obj), size);
}
- new_obj->init_mark_raw();
+ new_obj->init_mark();
assert(oopDesc::is_oop(new_obj), "must be a valid oop");
}
}
diff --git a/src/hotspot/share/gc/shared/space.inline.hpp b/src/hotspot/share/gc/shared/space.inline.hpp
index e3a37280268..cafa2503ef4 100644
--- a/src/hotspot/share/gc/shared/space.inline.hpp
+++ b/src/hotspot/share/gc/shared/space.inline.hpp
@@ -371,7 +371,7 @@ inline void CompactibleSpace::scan_and_compact(SpaceType* space, bool redefiniti
} else {
DcevmSharedGC::update_fields(oop(cur_obj), oop(compaction_top));
}
- oop(compaction_top)->init_mark_raw();
+ oop(compaction_top)->init_mark();
assert(oop(compaction_top)->klass() != NULL, "should have a class");
debug_only(prev_obj = cur_obj);
diff --git a/src/hotspot/share/memory/universe.cpp b/src/hotspot/share/memory/universe.cpp
index 247f2b3e8c0..4ae3b382b67 100644
--- a/src/hotspot/share/memory/universe.cpp
+++ b/src/hotspot/share/memory/universe.cpp
@@ -44,8 +44,6 @@
#include "gc/shared/oopStorageSet.hpp"
#include "gc/shared/stringdedup/stringDedup.hpp"
#include "gc/shared/tlab_globals.hpp"
-#include "gc/shared/weakProcessor.hpp"
-#include "interpreter/interpreter.hpp"
#include "logging/log.hpp"
#include "logging/logStream.hpp"
#include "memory/metadataFactory.hpp"
@@ -73,8 +71,6 @@
#include "runtime/jniHandles.hpp"
#include "runtime/thread.inline.hpp"
#include "runtime/timerTrace.hpp"
-#include "runtime/vmOperations.hpp"
-#include "services/management.hpp"
#include "services/memoryService.hpp"
#include "utilities/align.hpp"
#include "utilities/autoRestore.hpp"
@@ -208,73 +204,6 @@ void Universe::basic_type_classes_do(KlassClosure *closure) {
}
}
-#define DO_PRIMITIVE_MIRROR(m) \
- f->do_oop((oop*) &m);
-
-// FIXME: (DCEVM) This method should iterate all pointers that are not within heap objects.
-void Universe::root_oops_do(OopClosure *oopClosure) {
- Universe::oops_do(oopClosure);
-// ReferenceProcessor::oops_do(oopClosure); (tw) check why no longer there
- JNIHandles::oops_do(oopClosure); // Global (strong) JNI handles
- Threads::oops_do(oopClosure, NULL);
- ObjectSynchronizer::oops_do(oopClosure);
- // (DCEVM) TODO: Check if this is correct?
- Management::oops_do(oopClosure);
- OopStorageSet::vm_global()->oops_do(oopClosure);
- // CLDToOopClosure cld_closure(oopClosure, ClassLoaderData::_claim_none);
- // ClassLoaderDataGraph::cld_do(&cld_closure);
-
- // Now adjust pointers in remaining weak roots. (All of which should
- // have been cleared if they pointed to non-surviving objects.)
- // Global (weak) JNI handles
- WeakProcessor::oops_do(oopClosure);
-
- JvmtiExport::oops_do(oopClosure);
-
- CodeBlobToOopClosure blobClosure(oopClosure, CodeBlobToOopClosure::FixRelocations);
- CodeCache::blobs_do(&blobClosure);
-
- AOT_ONLY(AOTLoader::oops_do(oopClosure);)
-
- // StringTable::oops_do was removed in j15
- // StringTable::oops_do(oopClosure);
-
- // OopStorageSet::vm_global()->oops_do(oopClosure);
-
-}
-
-void Universe::oops_do(OopClosure* f) {
- PRIMITIVE_MIRRORS_DO(DO_PRIMITIVE_MIRROR);
-
- for (int i = T_BOOLEAN; i < T_VOID+1; i++) {
- f->do_oop((oop*) &_mirrors[i]);
- }
- assert(_mirrors[0] == NULL && _mirrors[T_BOOLEAN - 1] == NULL, "checking");
-
- f->do_oop((oop*)&_the_empty_class_array);
- f->do_oop((oop*)&_the_null_sentinel);
- f->do_oop((oop*)&_the_null_string);
- f->do_oop((oop*)&_the_min_jint_string);
- f->do_oop((oop*)&out_of_memory_errors()->obj_at(_oom_java_heap));
- f->do_oop((oop*)&out_of_memory_errors()->obj_at(_oom_c_heap));
- f->do_oop((oop*)&out_of_memory_errors()->obj_at(_oom_metaspace));
- f->do_oop((oop*)&out_of_memory_errors()->obj_at(_oom_class_metaspace));
- f->do_oop((oop*)&out_of_memory_errors()->obj_at(_oom_array_size));
- f->do_oop((oop*)&out_of_memory_errors()->obj_at(_oom_gc_overhead_limit));
- f->do_oop((oop*)&out_of_memory_errors()->obj_at(_oom_realloc_objects));
- f->do_oop((oop*)&out_of_memory_errors()->obj_at(_oom_retry));
- f->do_oop((oop*)&_delayed_stack_overflow_error_message);
- f->do_oop((oop*)&_preallocated_out_of_memory_error_array);
- f->do_oop((oop*)&_null_ptr_exception_instance);
- f->do_oop((oop*)&_arithmetic_exception_instance);
- f->do_oop((oop*)&_virtual_machine_error_instance);
- f->do_oop((oop*)&_main_thread_group);
- f->do_oop((oop*)&_system_thread_group);
- f->do_oop((oop*)&_reference_pending_list);
- debug_only(f->do_oop((oop*)&_fullgc_alot_dummy_array);)
- ThreadsSMRSupport::exiting_threads_oops_do(f);
-}
-
void LatestMethodCache::metaspace_pointers_do(MetaspaceClosure* it) {
it->push(&_klass);
}
diff --git a/src/hotspot/share/memory/universe.hpp b/src/hotspot/share/memory/universe.hpp
index cb320076a55..4b2211c415e 100644
--- a/src/hotspot/share/memory/universe.hpp
+++ b/src/hotspot/share/memory/universe.hpp
@@ -326,13 +326,6 @@ class Universe: AllStatic {
static bool should_fill_in_stack_trace(Handle throwable);
static void check_alignment(uintx size, uintx alignment, const char* name);
- // Iteration
-
- static void root_oops_do(OopClosure *oopClosure); // FIXME: kill...
- // Apply "f" to the addresses of all the direct heap pointers maintained
- // as static fields of "Universe".
- static void oops_do(OopClosure* f);
-
// CDS support
static void serialize(SerializeClosure* f);
diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp
index b4d09e92830..c2de2bec7d4 100644
--- a/src/hotspot/share/oops/instanceKlass.cpp
+++ b/src/hotspot/share/oops/instanceKlass.cpp
@@ -1286,7 +1286,7 @@ void InstanceKlass::init_implementor() {
// (DCEVM) - init_implementor() for dcevm
void InstanceKlass::init_implementor_from_redefine() {
assert(is_interface(), "not interface");
- Klass* volatile* addr = adr_implementor();
+ InstanceKlass* volatile* addr = adr_implementor();
assert(addr != NULL, "null addr");
if (addr != NULL) {
*addr = NULL;
@@ -3816,7 +3816,7 @@ void InstanceKlass::verify_on(outputStream* st) {
guarantee(sib->is_klass(), "should be klass");
// TODO: (DCEVM) explain
- guarantee(sib->super() == super || AllowEnhancedClassRedefinition && super->newest_version() == SystemDictionary::Object_klass(), "siblings should have same superklass");
+ guarantee(sib->super() == super || AllowEnhancedClassRedefinition && super->newest_version() == vmClasses::Object_klass(), "siblings should have same superklass");
}
// Verify local interfaces
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 2a7dd35bdd1..071dbc6d6ad 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -26,8 +26,10 @@
#include "aot/aotLoader.hpp"
#include "classfile/classFileParser.hpp"
#include "classfile/classFileStream.hpp"
+#include "classfile/classLoadInfo.hpp"
#include "classfile/metadataOnStackMark.hpp"
#include "classfile/systemDictionary.hpp"
+#include "classfile/symbolTable.hpp"
#include "classfile/verifier.hpp"
#include "classfile/dictionary.hpp"
#include "classfile/classLoaderDataGraph.hpp"
@@ -198,8 +200,8 @@ class FieldCopier : public FieldClosure {
if (found && result.is_static()) {
log_trace(redefine, class, obsolete, metadata)("Copying static field value for field %s old_offset=%d new_offset=%d",
fd->name()->as_C_string(), result.offset(), fd->offset());
- memcpy(cur_oop->obj_field_addr_raw<HeapWord>(fd->offset()),
- old_oop->obj_field_addr_raw<HeapWord>(result.offset()),
+ memcpy(cur_oop->obj_field_addr<HeapWord>(fd->offset()),
+ old_oop->obj_field_addr<HeapWord>(result.offset()),
type2aelembytes(fd->field_type()));
// Static fields may have references to java.lang.Class
@@ -242,6 +244,17 @@ void VM_EnhancedRedefineClasses::register_nmethod_g1(nmethod* nm) {
}
}
+void VM_EnhancedRedefineClasses::root_oops_do(OopClosure *oopClosure) {
+ Universe::vm_global()->oops_do(oopClosure);
+
+ Threads::oops_do(oopClosure, NULL);
+ AOT_ONLY(AOTLoader::oops_do(oopClosure);)
+ OopStorageSet::strong_oops_do(oopClosure);
+
+ CodeBlobToOopClosure blobClosure(oopClosure, CodeBlobToOopClosure::FixRelocations);
+ CodeCache::blobs_do(&blobClosure);
+}
+
// TODO comment
struct StoreBarrier {
// TODO: j10 review change ::oop_store -> HeapAccess<>::oop_store
@@ -558,7 +571,7 @@ void VM_EnhancedRedefineClasses::doit() {
_timer_heap_iterate.stop();
}
- Universe::root_oops_do(&oopClosureNoBarrier);
+ root_oops_do(&oopClosureNoBarrier);
if (UseG1GC) {
// this should work also for other GCs
@@ -737,8 +750,8 @@ bool VM_EnhancedRedefineClasses::is_modifiable_class(oop klass_mirror) {
// - link new classes
jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
- _affected_klasses = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<Klass*>(_class_count, true);
- _new_classes = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<InstanceKlass*>(_class_count, true);
+ _affected_klasses = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<Klass*>(_class_count);
+ _new_classes = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<InstanceKlass*>(_class_count);
ResourceMark rm(THREAD);
@@ -832,12 +845,12 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
!the_class->is_non_strong_hidden(), // is_strong_hidden
true); // FIXME: check if correct. can_access_vm_annotations
- k = SystemDictionary::parse_stream(the_class_sym,
- the_class_loader,
- &st,
- cl_info,
- the_class,
- THREAD);
+ k = SystemDictionary::resolve_from_stream(&st,
+ the_class_sym,
+ the_class_loader,
+ cl_info,
+ the_class,
+ THREAD);
k->class_loader_data()->exchange_holders(the_class->class_loader_data());
@@ -853,12 +866,12 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
}
} else {
- k = SystemDictionary::resolve_from_stream(the_class_sym,
- the_class_loader,
- protection_domain,
- &st,
- the_class,
- THREAD);
+ k = SystemDictionary::resolve_from_stream(&st,
+ the_class_sym,
+ the_class_loader,
+ protection_domain,
+ the_class,
+ THREAD);
}
// Clear class_being_redefined just to be sure.
state->clear_class_being_redefined();
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
index 5de375fb888..9be70039e32 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
@@ -124,6 +124,8 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
static void register_nmethod_g1(nmethod* nm);
static void unpatch_bytecode(Method* method, TRAPS);
+ void root_oops_do(OopClosure *oopClosure);
+
// Figure out which new methods match old methods in name and signature,
// which methods have been added, and which are no longer present
void compute_added_deleted_matching_methods();
diff --git a/src/hotspot/share/prims/resolvedMethodTable.cpp b/src/hotspot/share/prims/resolvedMethodTable.cpp
index 3c29eda4da0..a1eadc2958a 100644
--- a/src/hotspot/share/prims/resolvedMethodTable.cpp
+++ b/src/hotspot/share/prims/resolvedMethodTable.cpp
@@ -34,6 +34,7 @@
#include "oops/access.inline.hpp"
#include "oops/method.hpp"
#include "oops/oop.inline.hpp"
+#include "oops/klass.inline.hpp"
#include "oops/weakHandle.inline.hpp"
#include "prims/resolvedMethodTable.hpp"
#include "runtime/atomic.hpp"
@@ -375,7 +376,7 @@ class AdjustMethodEntriesDcevm : public StackObj {
GrowableArray<oop>* _oops_to_add;
public:
AdjustMethodEntriesDcevm(GrowableArray<oop>* oops_to_add, bool* trace_name_printed) : _trace_name_printed(trace_name_printed), _oops_to_add(oops_to_add) {};
- bool operator()(WeakHandle<vm_resolved_method_table_data>* entry) {
+ bool operator()(WeakHandle* entry) {
oop mem_name = entry->peek();
if (mem_name == NULL) {
// Removed
@@ -460,7 +461,7 @@ void ResolvedMethodTable::adjust_method_entries_dcevm(bool * trace_name_printed)
if (_local_table->get(thread, lookup, rmg)) {
break;
}
- WeakHandle<vm_resolved_method_table_data> wh = WeakHandle<vm_resolved_method_table_data>::create(Handle(thread, mem_name));
+ WeakHandle wh(_oop_storage, mem_name);
// The hash table takes ownership of the WeakHandle, even if it's not inserted.
if (_local_table->insert(thread, lookup, wh)) {
log_insert(method);
diff --git a/src/hotspot/share/runtime/arguments.hpp b/src/hotspot/share/runtime/arguments.hpp
index 1b7f8fe9f47..6a8ceb7fa8a 100644
--- a/src/hotspot/share/runtime/arguments.hpp
+++ b/src/hotspot/share/runtime/arguments.hpp
@@ -482,6 +482,8 @@ class Arguments : AllStatic {
// Adjusts the arguments after the OS have adjusted the arguments
static jint adjust_after_os();
+ // Check for consistency in the selection of the garbage collector.
+ static bool check_gc_consistency(); // Check user-selected gc
// Check consistency or otherwise of VM argument settings
static bool check_vm_args_consistency();
// Used by os_solaris
--
2.23.0

View File

@@ -1,27 +0,0 @@
From 6e18ad67981ab5a1bbdac46e1e0c7cc80beb4a5b Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 12 Feb 2021 11:38:48 +0100
Subject: [PATCH 22/39] Fix crash on GrowableArray allocation in C_HEAP
---
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 071dbc6d6ad..a5264077bfe 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -750,8 +750,8 @@ bool VM_EnhancedRedefineClasses::is_modifiable_class(oop klass_mirror) {
// - link new classes
jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
- _affected_klasses = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<Klass*>(_class_count);
- _new_classes = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<InstanceKlass*>(_class_count);
+ _affected_klasses = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<Klass*>(_class_count, mtInternal);
+ _new_classes = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<InstanceKlass*>(_class_count, mtInternal);
ResourceMark rm(THREAD);
--
2.23.0

View File

@@ -1,49 +0,0 @@
From 96680710816d9cd6e9cd8d5ce6dcbe054a7e53bd Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 12 Feb 2021 11:39:05 +0100
Subject: [PATCH 23/39] Rename confusing method name old_if_redefined to
old_if_redefining
---
src/hotspot/share/classfile/dictionary.cpp | 4 ++--
src/hotspot/share/classfile/dictionary.hpp | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/hotspot/share/classfile/dictionary.cpp b/src/hotspot/share/classfile/dictionary.cpp
index 223b9e1e7a9..2b236a7724e 100644
--- a/src/hotspot/share/classfile/dictionary.cpp
+++ b/src/hotspot/share/classfile/dictionary.cpp
@@ -359,7 +359,7 @@ InstanceKlass* Dictionary::find(unsigned int hash, Symbol* name,
int index = hash_to_index(hash);
DictionaryEntry* entry = get_entry(index, hash, name);
if (entry != NULL && entry->is_valid_protection_domain(protection_domain)) {
- return old_if_redefined(entry->instance_klass());
+ return old_if_redefining(entry->instance_klass());
} else {
return NULL;
}
@@ -373,7 +373,7 @@ InstanceKlass* Dictionary::find_class(unsigned int hash,
assert (index == index_for(name), "incorrect index?");
DictionaryEntry* entry = get_entry(index, hash, name);
- return old_if_redefined((entry != NULL) ? entry->instance_klass() : NULL);
+ return old_if_redefining((entry != NULL) ? entry->instance_klass() : NULL);
}
void Dictionary::add_protection_domain(int index, unsigned int hash,
diff --git a/src/hotspot/share/classfile/dictionary.hpp b/src/hotspot/share/classfile/dictionary.hpp
index bdfef5c8663..e997cfdcabd 100644
--- a/src/hotspot/share/classfile/dictionary.hpp
+++ b/src/hotspot/share/classfile/dictionary.hpp
@@ -109,7 +109,7 @@ public:
Handle protection_domain);
// (DCEVM) return old class if redefining in AllowEnhancedClassRedefinition, otherwise return "k"
- static InstanceKlass* old_if_redefined(InstanceKlass* k) {
+ static InstanceKlass* old_if_redefining(InstanceKlass* k) {
return (k != NULL && k->is_redefining()) ? ((InstanceKlass* )k->old_version()) : k;
}
};
--
2.23.0

View File

@@ -1,43 +0,0 @@
From 5d10d789150dfa6f8366dceb7fce3251d725ab8a Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 12 Feb 2021 12:33:47 +0100
Subject: [PATCH 24/39] Check InstanceKlass::has_nestmate_access_to with active
classes
Dcevm can leave old host in nested class if nested class is not
redefined together with host class
---
src/hotspot/share/oops/instanceKlass.cpp | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp
index c2de2bec7d4..3cc96f98f41 100644
--- a/src/hotspot/share/oops/instanceKlass.cpp
+++ b/src/hotspot/share/oops/instanceKlass.cpp
@@ -398,9 +398,9 @@ bool InstanceKlass::has_nestmate_access_to(InstanceKlass* k, TRAPS) {
return false;
}
+ // (DCEVM) cur_host can be old, decide accessibility based on active version
if (AllowEnhancedClassRedefinition) {
- // TODO: (DCEVM) check if it correct. It fix problems with lambdas (hidden)
- cur_host = InstanceKlass::cast(cur_host->newest_version());
+ cur_host = InstanceKlass::cast(cur_host->active_version());
}
Klass* k_nest_host = k->nest_host(CHECK_false);
@@ -408,6 +408,11 @@ bool InstanceKlass::has_nestmate_access_to(InstanceKlass* k, TRAPS) {
return false;
}
+ // (DCEVM) k_nest_host can be old, decide accessibility based on active version
+ if (AllowEnhancedClassRedefinition) {
+ k_nest_host = InstanceKlass::cast(k_nest_host->active_version());
+ }
+
bool access = (cur_host == k_nest_host);
ResourceMark rm(THREAD);
--
2.23.0

View File

@@ -1,95 +0,0 @@
From dac9d7a7d87de680a50be7c2857646323c4c8ffa Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sat, 13 Feb 2021 20:47:52 +0100
Subject: [PATCH 25/39] JBR-3111 Update class in all dictionaries where it was
already defined
This patch keeps compatibility with std redefinition, that does not
create a new Klass, but modifies it, then it is modified in all
dictionaries containing this class.
---
src/hotspot/share/classfile/classLoaderDataGraph.cpp | 9 +++++++++
src/hotspot/share/classfile/classLoaderDataGraph.hpp | 3 +++
src/hotspot/share/classfile/dictionary.cpp | 2 +-
src/hotspot/share/classfile/dictionary.hpp | 2 +-
src/hotspot/share/classfile/systemDictionary.cpp | 4 +++-
5 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.cpp b/src/hotspot/share/classfile/classLoaderDataGraph.cpp
index fda5d2eb1ba..67ade5709f6 100644
--- a/src/hotspot/share/classfile/classLoaderDataGraph.cpp
+++ b/src/hotspot/share/classfile/classLoaderDataGraph.cpp
@@ -455,6 +455,15 @@ void ClassLoaderDataGraph::rollback_redefinition() {
}
}
+// (DCEVM) - iterate over all classes in all dictionaries
+bool ClassLoaderDataGraph::dictionary_classes_do_update_klass(Symbol* name, InstanceKlass* k, InstanceKlass* old_klass) {
+ bool ok = false;
+ FOR_ALL_DICTIONARY(cld) {
+ ok = cld->dictionary()->update_klass(name, k, old_klass) || ok;
+ }
+ return ok;
+}
+
void ClassLoaderDataGraph::verify_dictionary() {
FOR_ALL_DICTIONARY(cld) {
cld->dictionary()->verify();
diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.hpp b/src/hotspot/share/classfile/classLoaderDataGraph.hpp
index c3bcc7271e6..ebdb0bc2c8c 100644
--- a/src/hotspot/share/classfile/classLoaderDataGraph.hpp
+++ b/src/hotspot/share/classfile/classLoaderDataGraph.hpp
@@ -108,6 +108,9 @@ class ClassLoaderDataGraph : public AllStatic {
// (DCEVM) Enhanced class redefinition
static void rollback_redefinition();
+ // Enhanced class redefinition
+ static bool dictionary_classes_do_update_klass(Symbol* name, InstanceKlass* k, InstanceKlass* old_klass);
+
// VM_CounterDecay iteration support
static InstanceKlass* try_get_next_class();
static void adjust_saved_class(ClassLoaderData* cld);
diff --git a/src/hotspot/share/classfile/dictionary.cpp b/src/hotspot/share/classfile/dictionary.cpp
index 2b236a7724e..bb1d09fa7a2 100644
--- a/src/hotspot/share/classfile/dictionary.cpp
+++ b/src/hotspot/share/classfile/dictionary.cpp
@@ -322,7 +322,7 @@ DictionaryEntry* Dictionary::get_entry(int index, unsigned int hash,
}
// (DCEVM) replace old_class by new class in dictionary
-bool Dictionary::update_klass(unsigned int hash, Symbol* name, ClassLoaderData* loader_data, InstanceKlass* k, InstanceKlass* old_klass) {
+bool Dictionary::update_klass(Symbol* name, InstanceKlass* k, InstanceKlass* old_klass) {
// There are several entries for the same class in the dictionary: One extra entry for each parent classloader of the classloader of the class.
bool found = false;
for (int index = 0; index < table_size(); index++) {
diff --git a/src/hotspot/share/classfile/dictionary.hpp b/src/hotspot/share/classfile/dictionary.hpp
index e997cfdcabd..7f8d8e35fc3 100644
--- a/src/hotspot/share/classfile/dictionary.hpp
+++ b/src/hotspot/share/classfile/dictionary.hpp
@@ -83,7 +83,7 @@ public:
void verify();
// (DCEVM) Enhanced class redefinition
- bool update_klass(unsigned int hash, Symbol* name, ClassLoaderData* loader_data, InstanceKlass* k, InstanceKlass* old_klass);
+ bool update_klass(Symbol* name, InstanceKlass* k, InstanceKlass* old_klass);
void rollback_redefinition();
diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp
index 63de2e2f099..35e2f376870 100644
--- a/src/hotspot/share/classfile/systemDictionary.cpp
+++ b/src/hotspot/share/classfile/systemDictionary.cpp
@@ -1441,7 +1441,9 @@ void SystemDictionary::define_instance_class(InstanceKlass* k, InstanceKlass* ol
unsigned int name_hash = dictionary->compute_hash(name_h);
if (is_redefining) {
- bool ok = dictionary->update_klass(name_hash, name_h, loader_data, k, old_klass);
+ // Update all dictionaries containing old_class to new_class
+ // outcome must be same as result of standard redefinition, that does not create a new Klass
+ bool ok = ClassLoaderDataGraph::dictionary_classes_do_update_klass(name_h, k, old_klass);
assert (ok, "must have found old class and updated!");
}
check_constraints(name_hash, k, class_loader, !is_redefining, CHECK);
--
2.23.0

View File

@@ -1,29 +0,0 @@
From f42115a3d488c93a2d163aebd030530f060dcef8 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sat, 20 Feb 2021 15:47:47 +0100
Subject: [PATCH 26/39] Add ClassLoaderDataGraph_lock to define new class in
enhanced redefiniton
ClassLoaderDataGraph locking for introduced in redefinition in
java.version>11
---
src/hotspot/share/classfile/systemDictionary.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp
index 35e2f376870..c628cb9da83 100644
--- a/src/hotspot/share/classfile/systemDictionary.cpp
+++ b/src/hotspot/share/classfile/systemDictionary.cpp
@@ -1443,7 +1443,9 @@ void SystemDictionary::define_instance_class(InstanceKlass* k, InstanceKlass* ol
if (is_redefining) {
// Update all dictionaries containing old_class to new_class
// outcome must be same as result of standard redefinition, that does not create a new Klass
+ ClassLoaderDataGraph_lock->lock();
bool ok = ClassLoaderDataGraph::dictionary_classes_do_update_klass(name_h, k, old_klass);
+ ClassLoaderDataGraph_lock->unlock();
assert (ok, "must have found old class and updated!");
}
check_constraints(name_hash, k, class_loader, !is_redefining, CHECK);
--
2.23.0

View File

@@ -1,180 +0,0 @@
From 30308e893e43425da166175f5f18f84abf2c6110 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Thu, 18 Jun 2020 18:40:11 +0200
Subject: [PATCH 27/39] JBR-3140 - support for modularized HotswapAgent
Add -XX:HotswapAgent=[disabled,fatjar.core]
---
src/hotspot/share/runtime/arguments.cpp | 77 +++++++++++++++++++
src/hotspot/share/runtime/arguments.hpp | 4 +
.../flags/jvmFlagConstraintsRuntime.cpp | 9 +++
.../flags/jvmFlagConstraintsRuntime.hpp | 3 +-
src/hotspot/share/runtime/globals.hpp | 11 ++-
5 files changed, 102 insertions(+), 2 deletions(-)
diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp
index cbcd8f91c66..4f9cfde9323 100644
--- a/src/hotspot/share/runtime/arguments.cpp
+++ b/src/hotspot/share/runtime/arguments.cpp
@@ -4001,6 +4001,8 @@ jint Arguments::parse(const JavaVMInitArgs* initial_cmd_args) {
}
}
+ setup_hotswap_agent();
+
#if !INCLUDE_CDS
if (DumpSharedSpaces || RequireSharedSpaces) {
jio_fprintf(defaultStream::error_stream(),
@@ -4357,3 +4359,78 @@ bool Arguments::copy_expand_pid(const char* src, size_t srclen,
*b = '\0';
return (p == src_end); // return false if not all of the source was copied
}
+
+void Arguments::setup_hotswap_agent() {
+
+ if (DumpSharedSpaces)
+ return;
+
+ if (HotswapAgent == NULL || strcmp(HotswapAgent, "disabled") == 0)
+ return;
+
+ // Force AllowEnhancedClassRedefinition if HA is enabled
+ AllowEnhancedClassRedefinition = true;
+
+ bool ha_fatjar = strcmp(HotswapAgent, "fatjar") == 0;
+ bool ha_core = strcmp(HotswapAgent, "core") == 0;
+
+ // Set HotswapAgent
+ if (ha_fatjar || ha_core) {
+
+ char ext_path_str[JVM_MAXPATHLEN];
+
+ os::jvm_path(ext_path_str, sizeof(ext_path_str));
+ for (int i = 0; i < 3; i++) {
+ char *end = strrchr(ext_path_str, *os::file_separator());
+ if (end != NULL) *end = '\0';
+ }
+ size_t ext_path_length = strlen(ext_path_str);
+ if (ext_path_length >= 3) {
+ if (strcmp(ext_path_str + ext_path_length - 3, "lib") != 0) {
+ if (ext_path_length < JVM_MAXPATHLEN - 4) {
+ jio_snprintf(ext_path_str + ext_path_length, sizeof(ext_path_str) - ext_path_length, "%slib", os::file_separator());
+ ext_path_length += 4;
+ }
+ }
+ }
+ if (ext_path_length < JVM_MAXPATHLEN - 10) {
+ if (ha_fatjar) {
+ jio_snprintf(ext_path_str + ext_path_length, sizeof(ext_path_str) - ext_path_length,
+ "%shotswap%shotswap-agent.jar", os::file_separator(), os::file_separator());
+ } else {
+ jio_snprintf(ext_path_str + ext_path_length, sizeof(ext_path_str) - ext_path_length,
+ "%shotswap%shotswap-agent-core.jar", os::file_separator(), os::file_separator());
+ }
+ int fd = ::open(ext_path_str, O_RDONLY);
+ if (fd >= 0) {
+ os::close(fd);
+ size_t length = strlen(ext_path_str) + 1;
+ char *options = NEW_C_HEAP_ARRAY(char, length, mtArguments);
+ jio_snprintf(options, length, "%s", ext_path_str);
+ add_init_agent("instrument", ext_path_str, false);
+ jio_fprintf(defaultStream::output_stream(), "Starting HotswapAgent '%s'\n", ext_path_str);
+ }
+ else
+ {
+ jio_fprintf(defaultStream::error_stream(), "HotswapAgent not found on path:'%s'!\n", ext_path_str);
+ }
+ }
+ }
+
+ // TODO: open it only for org.hotswap.agent module
+ // Use to access java.lang.reflect.Proxy/proxyCache
+ create_numbered_module_property("jdk.module.addopens", "java.base/java.lang=ALL-UNNAMED", addopens_count++);
+ // Class of field java.lang.reflect.Proxy/proxyCache
+ create_numbered_module_property("jdk.module.addopens", "java.base/jdk.internal.loader=ALL-UNNAMED", addopens_count++);
+ // Use to access java.io.Reader, java.io.InputStream, java.io.FileInputStream
+ create_numbered_module_property("jdk.module.addopens", "java.base/java.io=ALL-UNNAMED", addopens_count++);
+ // java.beans.Introspector access
+ create_numbered_module_property("jdk.module.addopens", "java.desktop/java.beans=ALL-UNNAMED", addopens_count++);
+ // java.beans.Introspector access
+ create_numbered_module_property("jdk.module.addopens", "java.desktop/com.sun.beans=ALL-UNNAMED", addopens_count++);
+ // com.sun.beans.introspect.ClassInfo access
+ create_numbered_module_property("jdk.module.addopens", "java.desktop/com.sun.beans.introspect=ALL-UNNAMED", addopens_count++);
+ // com.sun.beans.introspect.util.Cache access
+ create_numbered_module_property("jdk.module.addopens", "java.desktop/com.sun.beans.util=ALL-UNNAMED", addopens_count++);
+
+}
diff --git a/src/hotspot/share/runtime/arguments.hpp b/src/hotspot/share/runtime/arguments.hpp
index 6a8ceb7fa8a..7669a283375 100644
--- a/src/hotspot/share/runtime/arguments.hpp
+++ b/src/hotspot/share/runtime/arguments.hpp
@@ -491,6 +491,10 @@ class Arguments : AllStatic {
static size_t conservative_max_heap_alignment() { return _conservative_max_heap_alignment; }
+
+ // Initialize HotswapAgent
+ static void setup_hotswap_agent();
+
// Return the maximum size a heap with compressed oops can take
static size_t max_heap_for_compressed_oops();
diff --git a/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.cpp b/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.cpp
index 5b09758e089..e55b68e63a6 100644
--- a/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.cpp
+++ b/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.cpp
@@ -158,6 +158,15 @@ JVMFlag::Error NUMAInterleaveGranularityConstraintFunc(size_t value, bool verbos
" ... " UINTX_FORMAT " ]\n", value, min, max);
return JVMFlag::VIOLATES_CONSTRAINT;
}
+ return JVMFlag::SUCCESS;
+}
+JVMFlag::Error HotswapAgentConstraintFunc(ccstr value, bool verbose) {
+ if (value != NULL) {
+ if (strcmp("disabled", value) != 0 && strcmp("fatjar", value) != 0 && strcmp("core", value) != 0 && strcmp("external", value) != 0) {
+ JVMFlag::printError(verbose, "HotswapAgent(%s) must be one of disabled,fatjar,core or external.\n", value);
+ return JVMFlag::VIOLATES_CONSTRAINT;
+ }
+ }
return JVMFlag::SUCCESS;
}
diff --git a/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.hpp b/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.hpp
index 8bc3a9a1548..c5f58fd16ee 100644
--- a/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.hpp
+++ b/src/hotspot/share/runtime/flags/jvmFlagConstraintsRuntime.hpp
@@ -42,7 +42,8 @@
f(intx, BiasedLockingDecayTimeFunc) \
f(intx, PerfDataSamplingIntervalFunc) \
f(uintx, VMPageSizeConstraintFunc) \
- f(size_t, NUMAInterleaveGranularityConstraintFunc)
+ f(size_t, NUMAInterleaveGranularityConstraintFunc) \
+ f(ccstr, HotswapAgentConstraintFunc)
RUNTIME_CONSTRAINTS(DECLARE_CONSTRAINT)
diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp
index 7051b634a9b..d23e43407e1 100644
--- a/src/hotspot/share/runtime/globals.hpp
+++ b/src/hotspot/share/runtime/globals.hpp
@@ -2090,7 +2090,16 @@ const intx ObjectAlignmentInBytes = 8;
\
product(bool, AllowEnhancedClassRedefinition, false, \
"Allow enhanced class redefinition beyond swapping method " \
- "bodies")
+ "bodies") \
+ \
+ product(ccstr, HotswapAgent, "disabled", \
+ "Specify HotswapAgent image to be used." \
+ "disabled: hotswap agent is disabled (default)" \
+ "fatjar: full HA. Use integrated hotswap-agent.jar" \
+ "core: core HA. Use integrated hotswap-agent-core.jar" \
+ "external: external HA. use external HA, open required JDK " \
+ "modules.") \
+ constraint(HotswapAgentConstraintFunc, AfterErgo)
// end of RUNTIME_FLAGS
--
2.23.0

View File

@@ -1,347 +0,0 @@
From 51f0036ff15d39330b787512af9e38d15c748e4b Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 7 Mar 2021 20:22:54 +0100
Subject: [PATCH 28/39] Support for redefinition of Well Known classses
(java.*,jdk.*, sun.*)
---
src/hotspot/share/ci/ciKlass.hpp | 1 +
src/hotspot/share/ci/ciObjectFactory.cpp | 34 ++++++++++
src/hotspot/share/ci/ciObjectFactory.hpp | 6 ++
src/hotspot/share/classfile/vmClasses.cpp | 10 +++
src/hotspot/share/classfile/vmClasses.hpp | 4 ++
src/hotspot/share/classfile/vmSymbols.hpp | 2 +
src/hotspot/share/compiler/compileBroker.cpp | 11 ++++
src/hotspot/share/memory/universe.cpp | 8 +++
src/hotspot/share/memory/universe.hpp | 2 +
.../prims/jvmtiEnhancedRedefineClasses.cpp | 63 ++++++++++++++++++-
.../prims/jvmtiEnhancedRedefineClasses.hpp | 2 +
11 files changed, 142 insertions(+), 1 deletion(-)
diff --git a/src/hotspot/share/ci/ciKlass.hpp b/src/hotspot/share/ci/ciKlass.hpp
index 467284b7cde..644993a7513 100644
--- a/src/hotspot/share/ci/ciKlass.hpp
+++ b/src/hotspot/share/ci/ciKlass.hpp
@@ -129,6 +129,7 @@ public:
void print_name_on(outputStream* st);
const char* external_name() const;
+ Klass* new_version() { return get_Klass()->new_version(); }
};
#endif // SHARE_CI_CIKLASS_HPP
diff --git a/src/hotspot/share/ci/ciObjectFactory.cpp b/src/hotspot/share/ci/ciObjectFactory.cpp
index 664062a0f74..e9cb49be3ff 100644
--- a/src/hotspot/share/ci/ciObjectFactory.cpp
+++ b/src/hotspot/share/ci/ciObjectFactory.cpp
@@ -74,7 +74,10 @@ GrowableArray<ciMetadata*>* ciObjectFactory::_shared_ci_metadata = NULL;
ciSymbol* ciObjectFactory::_shared_ci_symbols[vmSymbols::number_of_symbols()];
int ciObjectFactory::_shared_ident_limit = 0;
volatile bool ciObjectFactory::_initialized = false;
+volatile bool ciObjectFactory::_reinitialize_vm_klasses = false;
+// TODO: review...
+Arena* ciObjectFactory::_initial_arena = NULL;
// ------------------------------------------------------------------
// ciObjectFactory::ciObjectFactory
@@ -110,6 +113,7 @@ void ciObjectFactory::initialize() {
// compiler thread that initializes the initial ciObjectFactory which
// creates the shared ciObjects that all later ciObjectFactories use.
Arena* arena = new (mtCompiler) Arena(mtCompiler);
+ ciObjectFactory::_initial_arena = arena;
ciEnv initial(arena);
ciEnv* env = ciEnv::current();
env->_factory->init_shared_objects();
@@ -118,6 +122,36 @@ void ciObjectFactory::initialize() {
}
+// (DCEVM) vm classes could be modified
+void ciObjectFactory::reinitialize_vm_classes() {
+ ASSERT_IN_VM;
+ JavaThread* thread = JavaThread::current();
+ HandleMark handle_mark(thread);
+
+ // This Arena is long lived and exists in the resource mark of the
+ // compiler thread that initializes the initial ciObjectFactory which
+ // creates the shared ciObjects that all later ciObjectFactories use.
+ // Arena* arena = new (mtCompiler) Arena(mtCompiler);
+ ciEnv initial(ciObjectFactory::_initial_arena);
+ ciEnv* env = ciEnv::current();
+ env->_factory->do_reinitialize_vm_classes();
+ _reinitialize_vm_klasses = false;
+}
+
+// (DCEVM) vm classes could be modified
+void ciObjectFactory::do_reinitialize_vm_classes() {
+#define VM_CLASS_DEFN(name, ignore_s) \
+ if (ciEnv::_##name != NULL && ciEnv::_##name->new_version() != NULL) { \
+ int old_ident = ciEnv::_##name->ident(); \
+ ciEnv::_##name = get_metadata(vmClasses::name())->as_instance_klass(); \
+ ciEnv::_##name->compute_nonstatic_fields(); \
+ ciEnv::_##name->set_ident(old_ident); \
+ }
+
+ VM_CLASSES_DO(VM_CLASS_DEFN)
+#undef VM_CLASS_DEFN
+}
+
void ciObjectFactory::init_shared_objects() {
_next_ident = 1; // start numbering CI objects at 1
diff --git a/src/hotspot/share/ci/ciObjectFactory.hpp b/src/hotspot/share/ci/ciObjectFactory.hpp
index fdefc8e3b92..1ed8732cb40 100644
--- a/src/hotspot/share/ci/ciObjectFactory.hpp
+++ b/src/hotspot/share/ci/ciObjectFactory.hpp
@@ -42,9 +42,11 @@ class ciObjectFactory : public ResourceObj {
private:
static volatile bool _initialized;
+ static volatile bool _reinitialize_vm_klasses;
static GrowableArray<ciMetadata*>* _shared_ci_metadata;
static ciSymbol* _shared_ci_symbols[];
static int _shared_ident_limit;
+ static Arena* _initial_arena;
Arena* _arena;
GrowableArray<ciMetadata*> _ci_metadata;
@@ -90,10 +92,14 @@ private:
ciInstance* get_unloaded_instance(ciInstanceKlass* klass);
static int compare_cimetadata(ciMetadata** a, ciMetadata** b);
+ void do_reinitialize_vm_classes();
public:
static bool is_initialized() { return _initialized; }
+ static bool is_reinitialize_vm_klasses() { return _reinitialize_vm_klasses; }
+ static void set_reinitialize_vm_klasses() { _reinitialize_vm_klasses = true; }
static void initialize();
+ static void reinitialize_vm_classes();
void init_shared_objects();
void remove_symbols();
diff --git a/src/hotspot/share/classfile/vmClasses.cpp b/src/hotspot/share/classfile/vmClasses.cpp
index 2bd1ca65cc0..3ec13d952d8 100644
--- a/src/hotspot/share/classfile/vmClasses.cpp
+++ b/src/hotspot/share/classfile/vmClasses.cpp
@@ -259,3 +259,13 @@ BasicType vmClasses::box_klass_type(Klass* k) {
}
return T_OBJECT;
}
+
+bool vmClasses::update_vm_klass(InstanceKlass* old_klass, InstanceKlass* new_klass) {
+ for (int id = static_cast<int>(vmClassID::FIRST); id < static_cast<int>(vmClassID::LIMIT); id++) {
+ if (_klasses[id] == old_klass) {
+ _klasses[id] = new_klass;
+ return true;
+ }
+ }
+ return false;
+}
diff --git a/src/hotspot/share/classfile/vmClasses.hpp b/src/hotspot/share/classfile/vmClasses.hpp
index 364014a2514..b637ff0ae3d 100644
--- a/src/hotspot/share/classfile/vmClasses.hpp
+++ b/src/hotspot/share/classfile/vmClasses.hpp
@@ -110,6 +110,10 @@ public:
static bool Cloneable_klass_loaded() { return is_loaded(VM_CLASS_AT(Cloneable_klass)); }
static bool Parameter_klass_loaded() { return is_loaded(VM_CLASS_AT(reflect_Parameter_klass)); }
static bool ClassLoader_klass_loaded() { return is_loaded(VM_CLASS_AT(ClassLoader_klass)); }
+
+ // (DCEVM) vmClasses could be modified
+ static bool update_vm_klass(InstanceKlass* new_klass, InstanceKlass* old_klass);
+
};
#endif // SHARE_CLASSFILE_VMCLASSES_HPP
diff --git a/src/hotspot/share/classfile/vmSymbols.hpp b/src/hotspot/share/classfile/vmSymbols.hpp
index dad94005f5c..82fd593224a 100644
--- a/src/hotspot/share/classfile/vmSymbols.hpp
+++ b/src/hotspot/share/classfile/vmSymbols.hpp
@@ -380,6 +380,8 @@
template(exit_method_name, "exit") \
template(add_method_name, "add") \
template(remove_method_name, "remove") \
+ template(registerNatives_method_name, "registerNatives") \
+ template(initIDs_method_name, "initIDs") \
template(parent_name, "parent") \
template(threads_name, "threads") \
template(groups_name, "groups") \
diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp
index cc1dff089e8..aaf8e4b1f1e 100644
--- a/src/hotspot/share/compiler/compileBroker.cpp
+++ b/src/hotspot/share/compiler/compileBroker.cpp
@@ -1982,6 +1982,17 @@ void CompileBroker::compiler_thread_loop() {
if (method()->number_of_breakpoints() == 0) {
// Compile the method.
if ((UseCompiler || AlwaysCompileLoopMethods) && CompileBroker::should_compile_new_jobs()) {
+
+ // TODO: review usage of CompileThread_lock (DCEVM)
+ if (ciObjectFactory::is_reinitialize_vm_klasses())
+ {
+ ASSERT_IN_VM;
+ MutexLocker only_one(CompileThread_lock);
+ if (ciObjectFactory::is_reinitialize_vm_klasses()) {
+ ciObjectFactory::reinitialize_vm_classes();
+ }
+ }
+
invoke_compiler_on_method(task);
thread->start_idle_timer();
} else {
diff --git a/src/hotspot/share/memory/universe.cpp b/src/hotspot/share/memory/universe.cpp
index 4ae3b382b67..92da9bbe5f9 100644
--- a/src/hotspot/share/memory/universe.cpp
+++ b/src/hotspot/share/memory/universe.cpp
@@ -924,6 +924,14 @@ void Universe::initialize_known_methods(TRAPS) {
vmSymbols::doStackWalk_signature(), false, CHECK);
}
+void Universe::reinitialize_loader_addClass_method(TRAPS) {
+ // Set up method for registering loaded classes in class loader vector
+ initialize_known_method(_loader_addClass_cache,
+ vmClasses::ClassLoader_klass(),
+ "addClass",
+ vmSymbols::class_void_signature(), false, CHECK);
+}
+
void universe2_init() {
EXCEPTION_MARK;
Universe::genesis(CATCH);
diff --git a/src/hotspot/share/memory/universe.hpp b/src/hotspot/share/memory/universe.hpp
index 4b2211c415e..4d4c444220e 100644
--- a/src/hotspot/share/memory/universe.hpp
+++ b/src/hotspot/share/memory/universe.hpp
@@ -268,6 +268,8 @@ class Universe: AllStatic {
// Function to initialize these
static void initialize_known_methods(TRAPS);
+ static void reinitialize_loader_addClass_method(TRAPS);
+
static void create_preallocated_out_of_memory_errors(TRAPS);
// Reference pending list manipulation. Access is protected by
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index a5264077bfe..e00f0e19e20 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -55,6 +55,7 @@
#include "prims/resolvedMethodTable.hpp"
#include "prims/methodHandles.hpp"
#include "runtime/deoptimization.hpp"
+#include "runtime/javaCalls.hpp"
#include "runtime/jniHandles.inline.hpp"
#include "runtime/relocator.hpp"
#include "runtime/fieldDescriptor.hpp"
@@ -66,6 +67,7 @@
#include "gc/g1/g1CollectedHeap.hpp"
#include "gc/shared/dcevmSharedGC.hpp"
#include "gc/shared/scavengableNMethods.hpp"
+#include "gc/shared/oopStorageSet.inline.hpp"
#include "ci/ciObjectFactory.hpp"
Array<Method*>* VM_EnhancedRedefineClasses::_old_methods = NULL;
@@ -521,6 +523,16 @@ void VM_EnhancedRedefineClasses::doit() {
redefine_single_class(_new_classes->at(i), thread);
}
+ // Update possible redefinition of vm classes (like ClassLoader)
+ for (int i = 0; i < _new_classes->length(); i++) {
+ InstanceKlass* cur = _new_classes->at(i);
+ if (cur->old_version() != NULL && vmClasses::update_vm_klass(InstanceKlass::cast(cur->old_version()), cur))
+ {
+ log_trace(redefine, class, obsolete, metadata)("Well known class updated %s", cur->external_name());
+ ciObjectFactory::set_reinitialize_vm_klasses();
+ }
+ }
+
// Deoptimize all compiled code that depends on this class (do only once, because it clears whole cache)
// if (_max_redefinition_flags > Klass::ModifyClass) {
flush_dependent_code(thread);
@@ -688,12 +700,56 @@ void VM_EnhancedRedefineClasses::doit() {
_timer_vm_op_doit.stop();
}
+void VM_EnhancedRedefineClasses::reinitializeJDKClasses() {
+ if (!_new_classes->is_empty()) {
+ ResourceMark rm(Thread::current());
+
+ for (int i = 0; i < _new_classes->length(); i++) {
+ InstanceKlass* cur = _new_classes->at(i);
+
+ if (cur->name()->starts_with("java/") || cur->name()->starts_with("jdk/") || cur->name()->starts_with("sun/")) {
+
+ if (cur == vmClasses::ClassLoader_klass()) {
+ // ClassLoader.addClass method is cached in Universe, we must redefine
+ Universe::reinitialize_loader_addClass_method(Thread::current());
+ log_trace(redefine, class, obsolete, metadata)("Reinitialize ClassLoade addClass method cache.");
+ }
+
+ // naive assumptions that only JDK classes has native static "registerNative" and "initIDs" methods
+ int end;
+ Symbol* signature = vmSymbols::registerNatives_method_name();
+ int midx = cur->find_method_by_name(signature, &end);
+ if (midx == -1) {
+ signature = vmSymbols::initIDs_method_name();
+ midx = cur->find_method_by_name(signature, &end);
+ }
+ Method* m = NULL;
+ if (midx != -1) {
+ m = cur->methods()->at(midx);
+ }
+ if (m != NULL && m->is_static() && m->is_native()) {
+ // call static registerNative if present
+ JavaValue result(T_VOID);
+ JavaCalls::call_static(&result,
+ cur,
+ signature,
+ vmSymbols::void_method_signature(),
+ Thread::current());
+ log_trace(redefine, class, obsolete, metadata)("Reregister natives of JDK class %s", cur->external_name());
+ }
+ }
+ }
+ }
+}
+
// Cleanup - runs in JVM thread
// - free used memory
// - end GC
void VM_EnhancedRedefineClasses::doit_epilogue() {
VM_GC_Operation::doit_epilogue();
+ reinitializeJDKClasses();
+
if (_new_classes != NULL) {
delete _new_classes;
}
@@ -1623,7 +1679,12 @@ void VM_EnhancedRedefineClasses::check_methods_and_mark_as_obsolete() {
// obsolete methods need a unique idnum so they become new entries in
// the jmethodID cache in InstanceKlass
- assert(old_method->method_idnum() == new_method->method_idnum(), "must match");
+ if (old_method->method_idnum() != new_method->method_idnum()) {
+ log_error(redefine, class, normalize)
+ ("Method not matched: %d != %d old: %s = new: %s", old_method->method_idnum(), new_method->method_idnum(),
+ old_method->name_and_sig_as_C_string(), new_method->name_and_sig_as_C_string());
+ // assert(old_method->method_idnum() == new_method->method_idnum(), "must match");
+ }
// u2 num = InstanceKlass::cast(_the_class_oop)->next_method_idnum();
// if (num != ConstMethod::UNSET_IDNUM) {
// old_method->set_method_idnum(num);
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
index 9be70039e32..673688dff84 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
@@ -150,6 +150,8 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
u8 next_id();
+ void reinitializeJDKClasses();
+
static void check_class(InstanceKlass* k_oop, TRAPS);
static void dump_methods();
--
2.23.0

View File

@@ -1,260 +0,0 @@
From 6cde71e353f823f2df2d0875cd03b656fe060d5c Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sat, 15 May 2021 10:31:28 +0200
Subject: [PATCH 29/39] Fix fastdebug compilation issues - cast_to_oop
---
.../share/gc/g1/g1FullGCCompactTask.cpp | 12 +++++-----
.../share/gc/g1/g1FullGCCompactionPoint.cpp | 10 ++++-----
.../share/gc/g1/g1FullGCPrepareTask.cpp | 4 ++--
src/hotspot/share/gc/shared/dcevmSharedGC.cpp | 6 ++---
src/hotspot/share/gc/shared/space.cpp | 22 +++++++++----------
src/hotspot/share/gc/shared/space.inline.hpp | 14 ++++++------
.../prims/jvmtiEnhancedRedefineClasses.cpp | 2 +-
7 files changed, 35 insertions(+), 35 deletions(-)
diff --git a/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp b/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
index 058dea90828..765630a9826 100644
--- a/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
+++ b/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
@@ -183,18 +183,18 @@ size_t G1FullGCCompactTask::G1CompactRegionClosureDcevm::apply(oop obj) {
Klass* new_version = obj->klass()->new_version();
if (new_version->update_information() == NULL) {
Copy::aligned_conjoint_words(obj_addr, destination, size);
- oop(destination)->set_klass(new_version);
+ cast_to_oop(destination)->set_klass(new_version);
} else {
- DcevmSharedGC::update_fields(obj, oop(destination));
+ DcevmSharedGC::update_fields(obj, cast_to_oop(destination));
}
- oop(destination)->init_mark();
- assert(oop(destination)->klass() != NULL, "should have a class");
+ cast_to_oop(destination)->init_mark();
+ assert(cast_to_oop(destination)->klass() != NULL, "should have a class");
return size;
}
Copy::aligned_conjoint_words(obj_addr, destination, size);
- oop(destination)->init_mark();
- assert(oop(destination)->klass() != NULL, "should have a class");
+ cast_to_oop(destination)->init_mark();
+ assert(cast_to_oop(destination)->klass() != NULL, "should have a class");
return size;
}
diff --git a/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp b/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp
index 87b1977128a..028c182e68f 100644
--- a/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp
+++ b/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp
@@ -171,7 +171,7 @@ void G1FullGCCompactionPoint::forward_dcevm(oop object, size_t size, bool force_
// Store a forwarding pointer if the object should be moved.
if (cast_from_oop<HeapWord*>(object) != _compaction_top || force_forward) {
- object->forward_to(oop(_compaction_top));
+ object->forward_to(cast_to_oop(_compaction_top));
} else {
if (object->forwardee() != NULL) {
// Object should not move but mark-word is used so it looks like the
@@ -208,17 +208,17 @@ void G1FullGCCompactionPoint::forward_rescued() {
for (;i<rescued_oops()->length(); i++) {
HeapWord* q = rescued_oops()->at(i);
- size_t size = oop(q)->size();
+ size_t size = cast_to_oop(q)->size();
// (DCEVM) There is a new version of the class of q => different size
- if (oop(q)->klass()->new_version() != NULL) {
+ if (cast_to_oop(q)->klass()->new_version() != NULL) {
// assert(size != new_size, "instances without changed size have to be updated prior to GC run");
- size = oop(q)->size_given_klass(oop(q)->klass()->new_version());
+ size = cast_to_oop(q)->size_given_klass(cast_to_oop(q)->klass()->new_version());
}
if (forward_compact_top(size) == NULL) {
break;
}
- forward_dcevm(oop(q), size, true);
+ forward_dcevm(cast_to_oop(q), size, true);
}
_last_rescued_oop = i;
}
diff --git a/src/hotspot/share/gc/g1/g1FullGCPrepareTask.cpp b/src/hotspot/share/gc/g1/g1FullGCPrepareTask.cpp
index 05f0444cc7a..93c066383a1 100644
--- a/src/hotspot/share/gc/g1/g1FullGCPrepareTask.cpp
+++ b/src/hotspot/share/gc/g1/g1FullGCPrepareTask.cpp
@@ -297,7 +297,7 @@ size_t G1FullGCPrepareTask::G1PrepareCompactLiveClosureDcevm::apply(oop object)
HeapWord* compact_top = _cp->forward_compact_top(forward_size);
- if (compact_top == NULL || must_rescue(object, oop(compact_top))) {
+ if (compact_top == NULL || must_rescue(object, cast_to_oop(compact_top))) {
_cp->rescued_oops()->append(cast_from_oop<HeapWord*>(object));
} else {
_cp->forward_dcevm(object, forward_size, (size != forward_size));
@@ -308,7 +308,7 @@ size_t G1FullGCPrepareTask::G1PrepareCompactLiveClosureDcevm::apply(oop object)
bool G1FullGCPrepareTask::G1PrepareCompactLiveClosureDcevm::must_rescue(oop old_obj, oop new_obj) {
// Only redefined objects can have the need to be rescued.
- if (oop(old_obj)->klass()->new_version() == NULL) {
+ if (old_obj->klass()->new_version() == NULL) {
return false;
}
diff --git a/src/hotspot/share/gc/shared/dcevmSharedGC.cpp b/src/hotspot/share/gc/shared/dcevmSharedGC.cpp
index edc19a3077d..de3d518b696 100644
--- a/src/hotspot/share/gc/shared/dcevmSharedGC.cpp
+++ b/src/hotspot/share/gc/shared/dcevmSharedGC.cpp
@@ -46,7 +46,7 @@ void DcevmSharedGC::copy_rescued_objects_back(GrowableArray<HeapWord*>* rescued_
if (rescued_oops != NULL) {
for (int i=from; i < to; i++) {
HeapWord* rescued_ptr = rescued_oops->at(i);
- oop rescued_obj = (oop) rescued_ptr;
+ oop rescued_obj = cast_to_oop(rescued_ptr);
int size = rescued_obj->size();
oop new_obj = rescued_obj->forwardee();
@@ -75,7 +75,7 @@ void DcevmSharedGC::clear_rescued_objects_resource(GrowableArray<HeapWord*>* res
if (rescued_oops != NULL) {
for (int i=0; i < rescued_oops->length(); i++) {
HeapWord* rescued_ptr = rescued_oops->at(i);
- int size = ((oop) rescued_ptr)->size();
+ int size = cast_to_oop(rescued_ptr)->size();
FREE_RESOURCE_ARRAY(HeapWord, rescued_ptr, size);
}
rescued_oops->clear();
@@ -114,7 +114,7 @@ void DcevmSharedGC::update_fields(oop q, oop new_location) {
if ((cast_from_oop<HeapWord*>(q) >= cast_from_oop<HeapWord*>(new_location) && cast_from_oop<HeapWord*>(q) < cast_from_oop<HeapWord*>(new_location) + new_size) ||
(cast_from_oop<HeapWord*>(new_location) >= cast_from_oop<HeapWord*>(q) && cast_from_oop<HeapWord*>(new_location) < cast_from_oop<HeapWord*>(q) + size)) {
tmp = NEW_RESOURCE_ARRAY(HeapWord, size);
- q = (oop) tmp;
+ q = cast_to_oop(tmp);
Copy::aligned_disjoint_words(cast_from_oop<HeapWord*>(tmp_obj), cast_from_oop<HeapWord*>(q), size);
}
}
diff --git a/src/hotspot/share/gc/shared/space.cpp b/src/hotspot/share/gc/shared/space.cpp
index 29a81348d2d..000760744f7 100644
--- a/src/hotspot/share/gc/shared/space.cpp
+++ b/src/hotspot/share/gc/shared/space.cpp
@@ -475,7 +475,7 @@ bool CompactibleSpace::must_rescue(oop old_obj, oop new_obj) {
int new_size = old_obj->size_given_klass(oop(old_obj)->klass()->new_version());
int original_size = old_obj->size();
-
+
Generation* tenured_gen = GenCollectedHeap::heap()->old_gen();
bool old_in_tenured = tenured_gen->is_in_reserved(old_obj);
bool new_in_tenured = tenured_gen->is_in_reserved(new_obj);
@@ -513,9 +513,9 @@ bool CompactibleSpace::must_rescue(oop old_obj, oop new_obj) {
}
HeapWord* CompactibleSpace::rescue(HeapWord* old_obj) {
- assert(must_rescue(oop(old_obj), oop(old_obj)->forwardee()), "do not call otherwise");
+ assert(must_rescue(cast_to_oop(old_obj), cast_to_oop(old_obj)->forwardee()), "do not call otherwise");
- int size = oop(old_obj)->size();
+ int size = cast_to_oop(old_obj)->size();
HeapWord* rescued_obj = NEW_RESOURCE_ARRAY(HeapWord, size);
Copy::aligned_disjoint_words(old_obj, rescued_obj, size);
@@ -803,16 +803,16 @@ HeapWord* CompactibleSpace::forward_with_rescue(HeapWord* q, size_t size,
size_t forward_size = size;
// (DCEVM) There is a new version of the class of q => different size
- if (oop(q)->klass()->new_version() != NULL) {
+ if (cast_to_oop(q)->klass()->new_version() != NULL) {
- size_t new_size = oop(q)->size_given_klass(oop(q)->klass()->new_version());
+ size_t new_size = cast_to_oop(q)->size_given_klass(cast_to_oop(q)->klass()->new_version());
// assert(size != new_size, "instances without changed size have to be updated prior to GC run");
forward_size = new_size;
}
compact_top = forward_compact_top(forward_size, cp, compact_top);
- if (must_rescue(oop(q), oop(compact_top))) {
+ if (must_rescue(cast_to_oop(q), cast_to_oop(compact_top))) {
if (MarkSweep::_rescued_oops == NULL) {
MarkSweep::_rescued_oops = new GrowableArray<HeapWord*>(128);
}
@@ -820,7 +820,7 @@ HeapWord* CompactibleSpace::forward_with_rescue(HeapWord* q, size_t size,
return compact_top;
}
- return forward(oop(q), forward_size, cp, compact_top, force_forward);
+ return forward(cast_to_oop(q), forward_size, cp, compact_top, force_forward);
}
// Compute the forwarding addresses for the objects that need to be rescued.
@@ -830,17 +830,17 @@ HeapWord* CompactibleSpace::forward_rescued(CompactPoint* cp, HeapWord* compact_
for (int i=0; i<MarkSweep::_rescued_oops->length(); i++) {
HeapWord* q = MarkSweep::_rescued_oops->at(i);
- /* size_t size = oop(q)->size(); changing this for cms for perm gen */
+ /* size_t size = cast_to_oop(q)->size(); changing this for cms for perm gen */
size_t size = block_size(q);
// (DCEVM) There is a new version of the class of q => different size
- if (oop(q)->klass()->new_version() != NULL) {
- size_t new_size = oop(q)->size_given_klass(oop(q)->klass()->new_version());
+ if (cast_to_oop(q)->klass()->new_version() != NULL) {
+ size_t new_size = cast_to_oop(q)->size_given_klass(cast_to_oop(q)->klass()->new_version());
// assert(size != new_size, "instances without changed size have to be updated prior to GC run");
size = new_size;
}
- compact_top = cp->space->forward(oop(q), size, cp, compact_top, true);
+ compact_top = cp->space->forward(cast_to_oop(q), size, cp, compact_top, true);
assert(compact_top <= end(), "must not write over end of space!");
}
MarkSweep::_rescued_oops->clear();
diff --git a/src/hotspot/share/gc/shared/space.inline.hpp b/src/hotspot/share/gc/shared/space.inline.hpp
index cafa2503ef4..076ce6b0cce 100644
--- a/src/hotspot/share/gc/shared/space.inline.hpp
+++ b/src/hotspot/share/gc/shared/space.inline.hpp
@@ -351,7 +351,7 @@ inline void CompactibleSpace::scan_and_compact(SpaceType* space, bool redefiniti
size_t size = space->obj_size(cur_obj);
HeapWord* compaction_top = cast_from_oop<HeapWord*>(cast_to_oop(cur_obj)->forwardee());
- if (redefinition_run && space->must_rescue(oop(cur_obj), oop(cur_obj)->forwardee())) {
+ if (redefinition_run && space->must_rescue(cast_to_oop(cur_obj), cast_to_oop(cur_obj)->forwardee())) {
space->rescue(cur_obj);
debug_only(Copy::fill_to_words(cur_obj, size, 0));
cur_obj += size;
@@ -363,16 +363,16 @@ inline void CompactibleSpace::scan_and_compact(SpaceType* space, bool redefiniti
// copy object and reinit its mark
assert(redefinition_run || cur_obj != compaction_top, "everything in this pass should be moving");
- if (redefinition_run && oop(cur_obj)->klass()->new_version() != NULL) {
- Klass* new_version = oop(cur_obj)->klass()->new_version();
+ if (redefinition_run && cast_to_oop(cur_obj)->klass()->new_version() != NULL) {
+ Klass* new_version = cast_to_oop(cur_obj)->klass()->new_version();
if (new_version->update_information() == NULL) {
Copy::aligned_conjoint_words(cur_obj, compaction_top, size);
- oop(compaction_top)->set_klass(new_version);
+ cast_to_oop(compaction_top)->set_klass(new_version);
} else {
- DcevmSharedGC::update_fields(oop(cur_obj), oop(compaction_top));
+ DcevmSharedGC::update_fields(cast_to_oop(cur_obj), cast_to_oop(compaction_top));
}
- oop(compaction_top)->init_mark();
- assert(oop(compaction_top)->klass() != NULL, "should have a class");
+ cast_to_oop(compaction_top)->init_mark();
+ assert(cast_to_oop(compaction_top)->klass() != NULL, "should have a class");
debug_only(prev_obj = cur_obj);
cur_obj += size;
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index e00f0e19e20..62477b5ce10 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -439,7 +439,7 @@ public:
int size = o->size();
if (_tmp_obj_size < size) {
_tmp_obj_size = size;
- _tmp_obj = (oop)resource_allocate_bytes(size * HeapWordSize);
+ _tmp_obj = cast_to_oop(resource_allocate_bytes(size * HeapWordSize));
}
Copy::aligned_disjoint_words(cast_from_oop<HeapWord*>(o), cast_from_oop<HeapWord*>(_tmp_obj), size);
}
--
2.23.0

View File

@@ -1,27 +0,0 @@
From 585e2f11d293081db5dc919fa8c13fb5bc7cbc53 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Fri, 19 Mar 2021 19:13:38 +0100
Subject: [PATCH 30/39] JBR-3458: Skip dynamic proxy classes based on
com.sun.proxy
---
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 62477b5ce10..7bdbc861c1f 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -707,7 +707,8 @@ void VM_EnhancedRedefineClasses::reinitializeJDKClasses() {
for (int i = 0; i < _new_classes->length(); i++) {
InstanceKlass* cur = _new_classes->at(i);
- if (cur->name()->starts_with("java/") || cur->name()->starts_with("jdk/") || cur->name()->starts_with("sun/")) {
+ if ((cur->name()->starts_with("java/") || cur->name()->starts_with("jdk/") || cur->name()->starts_with("sun/"))
+ && cur->name()->index_of_at(0, "$$") == -1) { // skip dynamic proxies
if (cur == vmClasses::ClassLoader_klass()) {
// ClassLoader.addClass method is cached in Universe, we must redefine
--
2.23.0

View File

@@ -1,81 +0,0 @@
From d4d56b7ad6cd8f73f7485cdc608655c014c55f3c Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Sat, 20 Mar 2021 20:51:08 +0100
Subject: [PATCH 31/39] JBR-3459: Fix race condition in
ClassLoaderDataGraph::classes_do
InstanceKlass in ClassLoaderData can be uninitialized when
ClassLoaderDataGraph::classes_do is called. Using
ClassLoaderDataGraph::dictionary_classes_do is safe but problem is still
persisting with anonymous classes.
---
.../share/classfile/classLoaderDataGraph.cpp | 10 ++++++++++
.../share/classfile/classLoaderDataGraph.hpp | 4 ++++
.../share/prims/jvmtiEnhancedRedefineClasses.cpp | 14 ++++++++++++--
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.cpp b/src/hotspot/share/classfile/classLoaderDataGraph.cpp
index 67ade5709f6..aa2a6bcec6b 100644
--- a/src/hotspot/share/classfile/classLoaderDataGraph.cpp
+++ b/src/hotspot/share/classfile/classLoaderDataGraph.cpp
@@ -361,6 +361,16 @@ void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) {
}
}
+void ClassLoaderDataGraph::anonymous_or_hidden_classes_do(KlassClosure* klass_closure) {
+ Thread* thread = Thread::current();
+ for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
+ if (cld->has_class_mirror_holder()) {
+ Handle holder(thread, cld->holder_phantom());
+ cld->classes_do(klass_closure);
+ }
+ }
+}
+
void ClassLoaderDataGraph::classes_do(void f(Klass* const)) {
ClassLoaderDataGraphIterator iter;
while (ClassLoaderData* cld = iter.get_next()) {
diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.hpp b/src/hotspot/share/classfile/classLoaderDataGraph.hpp
index ebdb0bc2c8c..da712eaf55f 100644
--- a/src/hotspot/share/classfile/classLoaderDataGraph.hpp
+++ b/src/hotspot/share/classfile/classLoaderDataGraph.hpp
@@ -78,6 +78,10 @@ class ClassLoaderDataGraph : public AllStatic {
// for redefinition. These classes are removed during the next class unloading.
// Walking the ClassLoaderDataGraph also includes hidden classes.
static void classes_do(KlassClosure* klass_closure);
+
+ // Enhanced class redefinition
+ static void anonymous_or_hidden_classes_do(KlassClosure* klass_closure);
+
static void classes_do(void f(Klass* const));
static void methods_do(void f(Method*));
static void modules_do(void f(ModuleEntry*));
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 7bdbc861c1f..4e8e7141e61 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -2164,9 +2164,19 @@ jvmtiError VM_EnhancedRedefineClasses::find_sorted_affected_classes(TRAPS) {
{
MutexLocker mcld(ClassLoaderDataGraph_lock);
- ClassLoaderDataGraph::classes_do(&closure);
+
+ // 0. we can't use ClassLoaderDataGraph::classes_do since classes can be uninitialized in cld,
+ // fully initialized class is in system dictionary
+ // ClassLoaderDataGraph::classes_do(&closure);
+
+ // 1. Scan over dictionaries
+ ClassLoaderDataGraph::dictionary_classes_do(&closure);
+
+ // 2. Anonymous or hidden class is not in dictionary, we have to iterate anonymous cld directly, but there is race cond...
+ // TODO: review ... anonymous class is added to cld before InstanceKlass initialization,
+ // find out how to check if the InstanceKlass is initialized
+ ClassLoaderDataGraph::anonymous_or_hidden_classes_do(&closure);
}
- //ClassLoaderDataGraph::dictionary_classes_do(&closure);
log_trace(redefine, class, load)("%d classes affected", _affected_klasses->length());
--
2.23.0

View File

@@ -1,39 +0,0 @@
From 5356c4dbbcc2564e401fc92b7680b870ee7070ec Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sat, 15 May 2021 13:01:25 +0200
Subject: [PATCH 32/39] Fix compilation problems
---
src/hotspot/share/oops/instanceKlass.cpp | 2 +-
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp
index 3cc96f98f41..c54b6b1bf46 100644
--- a/src/hotspot/share/oops/instanceKlass.cpp
+++ b/src/hotspot/share/oops/instanceKlass.cpp
@@ -978,7 +978,7 @@ bool InstanceKlass::link_class_impl(TRAPS) {
set_init_state(linked);
}
// (DCEVM) Must check for old version in order to prevent infinite loops.
- if (JvmtiExport::should_post_class_prepare() && (!AllowEnhancedClassRedefinition || old_version() == NULL /* JVMTI deadlock otherwise */) {
+ if (JvmtiExport::should_post_class_prepare() && (!AllowEnhancedClassRedefinition || old_version() == NULL /* JVMTI deadlock otherwise */)) {
JvmtiExport::post_class_prepare(THREAD, this);
}
}
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 4e8e7141e61..f6bef8262d3 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -708,7 +708,7 @@ void VM_EnhancedRedefineClasses::reinitializeJDKClasses() {
InstanceKlass* cur = _new_classes->at(i);
if ((cur->name()->starts_with("java/") || cur->name()->starts_with("jdk/") || cur->name()->starts_with("sun/"))
- && cur->name()->index_of_at(0, "$$") == -1) { // skip dynamic proxies
+ && cur->name()->index_of_at(0, "$$", (int) strlen("$$")) == -1) { // skip dynamic proxies
if (cur == vmClasses::ClassLoader_klass()) {
// ClassLoader.addClass method is cached in Universe, we must redefine
--
2.23.0

View File

@@ -1,350 +0,0 @@
From 3eb64e8ed65ae214091b55e497d24dff0eb1e353 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 20 Jun 2021 19:11:16 +0200
Subject: [PATCH 33/39] Fix dcevm issues related to refactorization of Thread
to JavaThread
---
src/hotspot/share/cds/lambdaFormInvokers.cpp | 1 +
.../prims/jvmtiEnhancedRedefineClasses.cpp | 72 +++++++++----------
.../prims/jvmtiEnhancedRedefineClasses.hpp | 12 ++--
3 files changed, 39 insertions(+), 46 deletions(-)
diff --git a/src/hotspot/share/cds/lambdaFormInvokers.cpp b/src/hotspot/share/cds/lambdaFormInvokers.cpp
index 5c058dc43ac..9de28f740ac 100644
--- a/src/hotspot/share/cds/lambdaFormInvokers.cpp
+++ b/src/hotspot/share/cds/lambdaFormInvokers.cpp
@@ -178,6 +178,7 @@ void LambdaFormInvokers::reload_class(char* name, ClassFileStream& st, TRAPS) {
class_name,
cld,
cl_info,
+ false, // pick_newest
CHECK);
{
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index f6bef8262d3..b662976afcb 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -23,7 +23,6 @@
*/
#include "precompiled.hpp"
-#include "aot/aotLoader.hpp"
#include "classfile/classFileParser.hpp"
#include "classfile/classFileStream.hpp"
#include "classfile/classLoadInfo.hpp"
@@ -38,7 +37,7 @@
#include "interpreter/rewriter.hpp"
#include "logging/logStream.hpp"
#include "memory/metadataFactory.hpp"
-#include "memory/metaspaceShared.hpp"
+#include "cds/metaspaceShared.hpp"
#include "memory/resourceArea.hpp"
#include "memory/iterator.inline.hpp"
#include "oops/fieldStreams.hpp"
@@ -156,7 +155,7 @@ bool VM_EnhancedRedefineClasses::doit_prologue() {
// We first load new class versions in the prologue, because somewhere down the
// call chain it is required that the current thread is a Java thread.
- _res = load_new_class_versions(Thread::current());
+ _res = load_new_class_versions(JavaThread::current());
// prepare GC, lock heap
if (_res == JVMTI_ERROR_NONE && !VM_GC_Operation::doit_prologue()) {
@@ -250,7 +249,6 @@ void VM_EnhancedRedefineClasses::root_oops_do(OopClosure *oopClosure) {
Universe::vm_global()->oops_do(oopClosure);
Threads::oops_do(oopClosure, NULL);
- AOT_ONLY(AOTLoader::oops_do(oopClosure);)
OopStorageSet::strong_oops_do(oopClosure);
CodeBlobToOopClosure blobClosure(oopClosure, CodeBlobToOopClosure::FixRelocations);
@@ -520,7 +518,7 @@ void VM_EnhancedRedefineClasses::doit() {
// before the stack walk again.
for (int i = 0; i < _new_classes->length(); i++) {
- redefine_single_class(_new_classes->at(i), thread);
+ redefine_single_class(thread, _new_classes->at(i));
}
// Update possible redefinition of vm classes (like ClassLoader)
@@ -535,7 +533,7 @@ void VM_EnhancedRedefineClasses::doit() {
// Deoptimize all compiled code that depends on this class (do only once, because it clears whole cache)
// if (_max_redefinition_flags > Klass::ModifyClass) {
- flush_dependent_code(thread);
+ flush_dependent_code();
// }
// Adjust constantpool caches for all classes that reference methods of the evolved class.
@@ -692,7 +690,7 @@ void VM_EnhancedRedefineClasses::doit() {
assert(new_version->super() == NULL || new_version->super()->new_version() == NULL, "Super class must be newest version");
}
log_trace(redefine, class, obsolete, metadata)("calling check_class");
- ClassLoaderData::the_null_class_loader_data()->dictionary()->classes_do(check_class, thread);
+ ClassLoaderData::the_null_class_loader_data()->dictionary()->classes_do(check_class);
#ifdef PRODUCT
}
#endif
@@ -702,7 +700,7 @@ void VM_EnhancedRedefineClasses::doit() {
void VM_EnhancedRedefineClasses::reinitializeJDKClasses() {
if (!_new_classes->is_empty()) {
- ResourceMark rm(Thread::current());
+ ResourceMark rm(JavaThread::current());
for (int i = 0; i < _new_classes->length(); i++) {
InstanceKlass* cur = _new_classes->at(i);
@@ -712,7 +710,7 @@ void VM_EnhancedRedefineClasses::reinitializeJDKClasses() {
if (cur == vmClasses::ClassLoader_klass()) {
// ClassLoader.addClass method is cached in Universe, we must redefine
- Universe::reinitialize_loader_addClass_method(Thread::current());
+ Universe::reinitialize_loader_addClass_method(JavaThread::current());
log_trace(redefine, class, obsolete, metadata)("Reinitialize ClassLoade addClass method cache.");
}
@@ -735,7 +733,7 @@ void VM_EnhancedRedefineClasses::reinitializeJDKClasses() {
cur,
signature,
vmSymbols::void_method_signature(),
- Thread::current());
+ JavaThread::current());
log_trace(redefine, class, obsolete, metadata)("Reregister natives of JDK class %s", cur->external_name());
}
}
@@ -793,7 +791,7 @@ bool VM_EnhancedRedefineClasses::is_modifiable_class(oop klass_mirror) {
// Cannot redefine or retransform an anonymous class.
// TODO: check if is correct in j15
- if (InstanceKlass::cast(k)->is_unsafe_anonymous() || InstanceKlass::cast(k)->is_hidden()) {
+ if (InstanceKlass::cast(k)->is_hidden()) {
return false;
}
return true;
@@ -879,23 +877,15 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
InstanceKlass* k;
- if (the_class->is_unsafe_anonymous() || the_class->is_hidden()) {
+ if (the_class->is_hidden()) {
InstanceKlass* dynamic_host_class = NULL;
- InstanceKlass* unsafe_anonymous_host = NULL;
if (the_class->is_hidden()) {
log_debug(redefine, class, load)("loading hidden class %s", the_class->name()->as_C_string());
dynamic_host_class = the_class->nest_host(THREAD);
}
- if (the_class->is_unsafe_anonymous()) {
- log_debug(redefine, class, load)("loading usafe anonymous %s", the_class->name()->as_C_string());
- unsafe_anonymous_host = the_class->unsafe_anonymous_host();
- }
-
ClassLoadInfo cl_info(protection_domain,
- unsafe_anonymous_host,
- NULL, // cp_patches
dynamic_host_class, // dynamic_nest_host
Handle(), // classData
the_class->is_hidden(), // is_hidden
@@ -1143,7 +1133,7 @@ int VM_EnhancedRedefineClasses::calculate_redefinition_flags(InstanceKlass* new_
Array<Method*>* k_new_methods(new_class->methods());
int n_old_methods = k_old_methods->length();
int n_new_methods = k_new_methods->length();
- Thread* thread = Thread::current();
+ JavaThread* thread = JavaThread::current();
int ni = 0;
int oi = 0;
@@ -1491,8 +1481,8 @@ void VM_EnhancedRedefineClasses::rollback() {
// Rewrite faster byte-codes back to their slower equivalent. Undoes rewriting happening in templateTable_xxx.cpp
// The reason is that once we zero cpool caches, we need to re-resolve all entries again. Faster bytecodes do not
// do that, they assume that cache entry is resolved already.
-void VM_EnhancedRedefineClasses::unpatch_bytecode(Method* method, TRAPS) {
- RawBytecodeStream bcs(methodHandle(THREAD, method));
+void VM_EnhancedRedefineClasses::unpatch_bytecode(Method* method) {
+ RawBytecodeStream bcs(methodHandle(Thread::current(), method));
Bytecodes::Code code;
Bytecodes::Code java_code;
while (!bcs.is_last_bytecode()) {
@@ -1535,10 +1525,10 @@ void VM_EnhancedRedefineClasses::unpatch_bytecode(Method* method, TRAPS) {
assert(code2 == Bytecodes::_fast_igetfield ||
code2 == Bytecodes::_fast_agetfield ||
code2 == Bytecodes::_fast_fgetfield, "");
- *(bcp + 1) = Bytecodes::java_code(code2);
- }
+ *(bcp + 1) = Bytecodes::java_code(code2);
}
}
+}
// Unevolving classes may point to old methods directly
// from their constant pool caches, itables, and/or vtables. We
@@ -1559,9 +1549,11 @@ void VM_EnhancedRedefineClasses::ClearCpoolCacheAndUnpatch::do_klass(Klass* k) {
constantPoolHandle other_cp = constantPoolHandle(_thread, ik->constants());
// Update host klass of anonymous classes (for example, produced by lambdas) to newest version.
+ /*
if (ik->is_unsafe_anonymous() && ik->unsafe_anonymous_host()->new_version() != NULL) {
ik->set_unsafe_anonymous_host(InstanceKlass::cast(ik->unsafe_anonymous_host()->newest_version()));
}
+ */
// FIXME: check new nest_host for hidden
@@ -1596,7 +1588,7 @@ void VM_EnhancedRedefineClasses::ClearCpoolCacheAndUnpatch::do_klass(Klass* k) {
// If bytecode rewriting is enabled, we also need to unpatch bytecode to force resolution of zeroed entries
if (RewriteBytecodes) {
- ik->methods_do(unpatch_bytecode, _thread);
+ ik->methods_do(unpatch_bytecode);
}
}
@@ -1628,7 +1620,7 @@ void VM_EnhancedRedefineClasses::MethodDataCleaner::do_klass(Klass* k) {
}
-void VM_EnhancedRedefineClasses::update_jmethod_ids(TRAPS) {
+void VM_EnhancedRedefineClasses::update_jmethod_ids(Thread* current) {
for (int j = 0; j < _matching_methods_length; ++j) {
Method* old_method = _matching_old_methods[j];
jmethodID jmid = old_method->find_jmethod_id_or_null();
@@ -1639,10 +1631,10 @@ void VM_EnhancedRedefineClasses::update_jmethod_ids(TRAPS) {
if (jmid != NULL) {
// There is a jmethodID, change it to point to the new method
- methodHandle new_method_h(THREAD, _matching_new_methods[j]);
+ methodHandle new_method_h(current, _matching_new_methods[j]);
if (old_method->new_version() == NULL) {
- methodHandle old_method_h(THREAD, _matching_old_methods[j]);
+ methodHandle old_method_h(current, _matching_old_methods[j]);
jmethodID new_jmethod_id = Method::make_jmethod_id(old_method_h->method_holder()->class_loader_data(), old_method_h());
bool result = InstanceKlass::cast(old_method_h->method_holder())->update_jmethod_id(old_method_h(), new_jmethod_id);
} else {
@@ -1864,7 +1856,7 @@ void VM_EnhancedRedefineClasses::mark_dependent_code(InstanceKlass* ik) {
// subsequent calls to RedefineClasses need only throw away code
// that depends on the class.
//
-void VM_EnhancedRedefineClasses::flush_dependent_code(TRAPS) {
+void VM_EnhancedRedefineClasses::flush_dependent_code() {
assert_locked_or_safepoint(Compile_lock);
// All dependencies have been recorded from startup or this is a second or
@@ -1959,9 +1951,9 @@ void VM_EnhancedRedefineClasses::compute_added_deleted_matching_methods() {
// a helper method to be specified. The interesting parameters
// that we would like to pass to the helper method are saved in
// static global fields in the VM operation.
-void VM_EnhancedRedefineClasses::redefine_single_class(InstanceKlass* new_class_oop, TRAPS) {
+void VM_EnhancedRedefineClasses::redefine_single_class(Thread* current, InstanceKlass* new_class_oop) {
- HandleMark hm(THREAD); // make sure handles from this call are freed
+ HandleMark hm(current); // make sure handles from this call are freed
InstanceKlass* new_class = new_class_oop;
InstanceKlass* the_class = InstanceKlass::cast(new_class_oop->old_version());
@@ -1980,7 +1972,7 @@ void VM_EnhancedRedefineClasses::redefine_single_class(InstanceKlass* new_class_
// track number of methods that are EMCP for add_previous_version() call below
check_methods_and_mark_as_obsolete();
- update_jmethod_ids(THREAD);
+ update_jmethod_ids(current);
_any_class_has_resolved_methods = the_class->has_resolved_methods() || _any_class_has_resolved_methods;
@@ -2002,14 +1994,14 @@ void VM_EnhancedRedefineClasses::redefine_single_class(InstanceKlass* new_class_
*/
{
- ResourceMark rm(THREAD);
+ ResourceMark rm(current);
// increment the classRedefinedCount field in the_class and in any
// direct and indirect subclasses of the_class
- increment_class_counter(new_class, THREAD);
+ increment_class_counter(current, new_class);
log_info(redefine, class, load)
("redefined name=%s, count=%d (avail_mem=" UINT64_FORMAT "K)",
new_class->external_name(), java_lang_Class::classRedefinedCount(new_class->java_mirror()), os::available_memory() >> 10);
- Events::log_redefinition(THREAD, "redefined class name=%s, count=%d",
+ Events::log_redefinition(current, "redefined class name=%s, count=%d",
new_class->external_name(),
java_lang_Class::classRedefinedCount(new_class->java_mirror()));
}
@@ -2018,21 +2010,21 @@ void VM_EnhancedRedefineClasses::redefine_single_class(InstanceKlass* new_class_
// Increment the classRedefinedCount field in the specific InstanceKlass
// and in all direct and indirect subclasses.
-void VM_EnhancedRedefineClasses::increment_class_counter(InstanceKlass *ik, TRAPS) {
+void VM_EnhancedRedefineClasses::increment_class_counter(Thread* current, InstanceKlass *ik) {
oop class_mirror = ik->old_version()->java_mirror();
Klass* class_oop = java_lang_Class::as_Klass(class_mirror);
int new_count = java_lang_Class::classRedefinedCount(class_mirror) + 1;
java_lang_Class::set_classRedefinedCount(ik->java_mirror(), new_count);
}
-void VM_EnhancedRedefineClasses::check_class(InstanceKlass* ik, TRAPS) {
+void VM_EnhancedRedefineClasses::check_class(InstanceKlass* ik) {
if (ik->is_instance_klass() && ik->old_version() != NULL) {
- HandleMark hm(THREAD);
+ HandleMark hm(Thread::current());
assert(ik->new_version() == NULL, "must be latest version in system dictionary");
if (ik->vtable_length() > 0) {
- ResourceMark rm(THREAD);
+ ResourceMark rm(Thread::current());
assert(ik->vtable().check_no_old_or_obsolete_entries(), "old method found");
ik->vtable().verify(tty, true);
}
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
index 673688dff84..378e6f78582 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
@@ -122,7 +122,7 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
static void mark_as_scavengable(nmethod* nm);
static void unregister_nmethod_g1(nmethod* nm);
static void register_nmethod_g1(nmethod* nm);
- static void unpatch_bytecode(Method* method, TRAPS);
+ static void unpatch_bytecode(Method* method);
void root_oops_do(OopClosure *oopClosure);
@@ -131,28 +131,28 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
void compute_added_deleted_matching_methods();
// Change jmethodIDs to point to the new methods
- void update_jmethod_ids(TRAPS);
+ void update_jmethod_ids(Thread* current);
// marking methods as old and/or obsolete
void check_methods_and_mark_as_obsolete();
void transfer_old_native_function_registrations(InstanceKlass* the_class);
// Install the redefinition of a class
- void redefine_single_class(InstanceKlass* new_class_oop, TRAPS);
+ void redefine_single_class(Thread* current, InstanceKlass* new_class_oop);
// Increment the classRedefinedCount field in the specific InstanceKlass
// and in all direct and indirect subclasses.
- void increment_class_counter(InstanceKlass *ik, TRAPS);
+ void increment_class_counter(Thread* current, InstanceKlass *ik);
void mark_dependent_code(InstanceKlass* ik);
- void flush_dependent_code(TRAPS);
+ void flush_dependent_code();
u8 next_id();
void reinitializeJDKClasses();
- static void check_class(InstanceKlass* k_oop, TRAPS);
+ static void check_class(InstanceKlass* k_oop);
static void dump_methods();
--
2.23.0

View File

@@ -1,142 +0,0 @@
From db2d7cd0cd956f297c58baa7500c1440092648bf Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 20 Jun 2021 19:42:51 +0200
Subject: [PATCH 34/39] Fix init_method_MemberName after Thread to JavaThread
refactorization
---
src/hotspot/share/interpreter/linkResolver.cpp | 14 ++++++++++----
src/hotspot/share/interpreter/linkResolver.hpp | 3 ++-
src/hotspot/share/oops/instanceKlass.cpp | 15 ---------------
src/hotspot/share/oops/instanceKlass.hpp | 1 -
.../share/prims/jvmtiEnhancedRedefineClasses.cpp | 11 +++++++++--
5 files changed, 21 insertions(+), 23 deletions(-)
diff --git a/src/hotspot/share/interpreter/linkResolver.cpp b/src/hotspot/share/interpreter/linkResolver.cpp
index 74a6af13ea4..78c9624a18b 100644
--- a/src/hotspot/share/interpreter/linkResolver.cpp
+++ b/src/hotspot/share/interpreter/linkResolver.cpp
@@ -131,14 +131,14 @@ void CallInfo::set_common(Klass* resolved_klass,
}
// utility query for unreflecting a method
-CallInfo::CallInfo(Method* resolved_method, Klass* resolved_klass, TRAPS) {
+CallInfo::CallInfo(Method* resolved_method, Klass* resolved_klass, Thread* thread) {
Klass* resolved_method_holder = resolved_method->method_holder();
if (resolved_klass == NULL) { // 2nd argument defaults to holder of 1st
resolved_klass = resolved_method_holder;
}
_resolved_klass = resolved_klass;
- _resolved_method = methodHandle(THREAD, resolved_method);
- _selected_method = methodHandle(THREAD, resolved_method);
+ _resolved_method = methodHandle(thread, resolved_method);
+ _selected_method = methodHandle(thread, resolved_method);
// classify:
CallKind kind = CallInfo::unknown_kind;
int index = resolved_method->vtable_index();
@@ -179,7 +179,9 @@ CallInfo::CallInfo(Method* resolved_method, Klass* resolved_klass, TRAPS) {
_call_index = index;
_resolved_appendix = Handle();
// Find or create a ResolvedMethod instance for this Method*
- set_resolved_method_name(CHECK);
+ if (thread->is_Java_thread()) { // exclude DCEVM VM thread
+ set_resolved_method_name(thread->as_Java_thread());
+ }
DEBUG_ONLY(verify());
}
@@ -190,6 +192,10 @@ void CallInfo::set_resolved_method_name(TRAPS) {
_resolved_method_name = Handle(THREAD, rmethod_name);
}
+void CallInfo::set_resolved_method_name_dcevm(oop rmethod_name, Thread* thread) {
+ _resolved_method_name = Handle(thread, rmethod_name);
+}
+
#ifdef ASSERT
void CallInfo::verify() {
switch (call_kind()) { // the meaning and allowed value of index depends on kind
diff --git a/src/hotspot/share/interpreter/linkResolver.hpp b/src/hotspot/share/interpreter/linkResolver.hpp
index 9eeb10cc6fd..871eaab7464 100644
--- a/src/hotspot/share/interpreter/linkResolver.hpp
+++ b/src/hotspot/share/interpreter/linkResolver.hpp
@@ -91,7 +91,7 @@ class CallInfo : public StackObj {
// utility to extract an effective CallInfo from a method and an optional receiver limit
// does not queue the method for compilation. This also creates a ResolvedMethodName
// object for the resolved_method.
- CallInfo(Method* resolved_method, Klass* resolved_klass, TRAPS);
+ CallInfo(Method* resolved_method, Klass* resolved_klass, Thread* thread);
Klass* resolved_klass() const { return _resolved_klass; }
Method* resolved_method() const { return _resolved_method(); }
@@ -100,6 +100,7 @@ class CallInfo : public StackObj {
Handle resolved_method_name() const { return _resolved_method_name; }
// Materialize a java.lang.invoke.ResolvedMethodName for this resolved_method
void set_resolved_method_name(TRAPS);
+ void set_resolved_method_name_dcevm(oop rmethod_name, Thread* thread);
BasicType result_type() const { return selected_method()->result_type(); }
CallKind call_kind() const { return _call_kind; }
diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp
index c54b6b1bf46..8d259451032 100644
--- a/src/hotspot/share/oops/instanceKlass.cpp
+++ b/src/hotspot/share/oops/instanceKlass.cpp
@@ -1643,21 +1643,6 @@ void InstanceKlass::methods_do(void f(Method* method)) {
}
}
-void InstanceKlass::methods_do(void f(Method* method, TRAPS), TRAPS) {
- // Methods aren't stable until they are loaded. This can be read outside
- // a lock through the ClassLoaderData for profiling
- if (!is_loaded()) {
- return;
- }
-
- int len = methods()->length();
- for (int index = 0; index < len; index++) {
- Method* m = methods()->at(index);
- assert(m->is_method(), "must be method");
- f(m, CHECK);
- }
-}
-
// (DCEVM) Update information contains mapping of fields from old class to the new class.
// Info is stored on HEAP, you need to call clear_update_information to free the space.
void InstanceKlass::store_update_information(GrowableArray<int> &values) {
diff --git a/src/hotspot/share/oops/instanceKlass.hpp b/src/hotspot/share/oops/instanceKlass.hpp
index 317a006a4ec..36587031fec 100644
--- a/src/hotspot/share/oops/instanceKlass.hpp
+++ b/src/hotspot/share/oops/instanceKlass.hpp
@@ -1017,7 +1017,6 @@ public:
void clear_update_information();
void methods_do(void f(Method* method));
- void methods_do(void f(Method* method, TRAPS), TRAPS);
void array_klasses_do(void f(Klass* k));
void array_klasses_do(void f(Klass* k, TRAPS), TRAPS);
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index b662976afcb..ff012383872 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -292,8 +292,15 @@ class ChangePointersOopClosure : public BasicOopIterateClosure {
// Note: we might set NULL at this point, which should force AbstractMethodError at runtime
Thread *thread = Thread::current();
CallInfo info(new_method, newest, thread);
- Handle objHandle(thread, obj);
- MethodHandles::init_method_MemberName(objHandle, info);
+ oop resolved_method = ResolvedMethodTable::find_method(info.resolved_method());
+ if (resolved_method != NULL) {
+ info.set_resolved_method_name_dcevm(resolved_method, thread);
+ Handle objHandle(thread, obj);
+ MethodHandles::init_method_MemberName(objHandle, info);
+ } else {
+ assert(0, "Must be resolved");
+ java_lang_invoke_MemberName::set_method(obj, NULL);
+ }
} else {
java_lang_invoke_MemberName::set_method(obj, NULL);
}
--
2.23.0

View File

@@ -1,25 +0,0 @@
From bfbbae66340a223328542722b299f67c21166c52 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Mon, 21 Jun 2021 20:44:17 +0200
Subject: [PATCH 35/39] Fix "implicit conversion of NULL constant to 'bool'"
---
src/hotspot/share/prims/jvmtiRedefineClasses.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/hotspot/share/prims/jvmtiRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiRedefineClasses.cpp
index 87b3b5f47ce..6915a09cf85 100644
--- a/src/hotspot/share/prims/jvmtiRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiRedefineClasses.cpp
@@ -1390,7 +1390,7 @@ jvmtiError VM_RedefineClasses::load_new_class_versions() {
the_class->name(),
the_class->class_loader_data(),
cl_info,
- NULL,
+ false,
THREAD);
// Clear class_being_redefined just to be sure.
--
2.23.0

View File

@@ -1,35 +0,0 @@
From 5bb6ef0fc266a748232c7c51191deab47d4f3857 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Wed, 30 Jun 2021 18:30:00 +0200
Subject: [PATCH 36/39] Fix, pass SystemDictionary::resolve_from_stream cl_info
param
---
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index ff012383872..cbcb484a290 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -920,10 +920,16 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
}
} else {
+ ClassLoadInfo cl_info(protection_domain,
+ NULL, // dynamic_nest_host
+ Handle(), // classData
+ false, // is_hidden
+ !the_class->is_non_strong_hidden(), // is_strong_hidden
+ true); // FIXME: check if correct. can_access_vm_annotations
k = SystemDictionary::resolve_from_stream(&st,
the_class_sym,
the_class_loader,
- protection_domain,
+ cl_info,
the_class,
THREAD);
}
--
2.23.0

View File

@@ -1,113 +0,0 @@
From 563e06d1c56cfc3f4e93e3975cd6c2dab8183c98 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Wed, 30 Jun 2021 18:50:38 +0200
Subject: [PATCH 37/39] Search for affected classes in all initialized classes
in cld
Fix also case when lambda interface is redefined. Lambda class is
missing in cld dictionary since it is hidden since j17
---
src/hotspot/share/classfile/classLoaderData.cpp | 10 ++++++++++
src/hotspot/share/classfile/classLoaderData.hpp | 1 +
.../share/classfile/classLoaderDataGraph.cpp | 11 ++++-------
.../share/classfile/classLoaderDataGraph.hpp | 2 +-
.../share/prims/jvmtiEnhancedRedefineClasses.cpp | 13 ++++---------
5 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/src/hotspot/share/classfile/classLoaderData.cpp b/src/hotspot/share/classfile/classLoaderData.cpp
index 65ce4c4af8c..1c51e83e86e 100644
--- a/src/hotspot/share/classfile/classLoaderData.cpp
+++ b/src/hotspot/share/classfile/classLoaderData.cpp
@@ -337,6 +337,16 @@ void ClassLoaderData::classes_do(KlassClosure* klass_closure) {
}
}
+void ClassLoaderData::initialized_classes_do(KlassClosure* klass_closure) {
+ // Lock-free access requires load_acquire
+ for (Klass* k = Atomic::load_acquire(&_klasses); k != NULL; k = k->next_link()) {
+ if (k->is_instance_klass() && InstanceKlass::cast(k)->is_initialized()) {
+ klass_closure->do_klass(k);
+ }
+ assert(k != k->next_link(), "no loops!");
+ }
+}
+
void ClassLoaderData::classes_do(void f(Klass * const)) {
// Lock-free access requires load_acquire
for (Klass* k = Atomic::load_acquire(&_klasses); k != NULL; k = k->next_link()) {
diff --git a/src/hotspot/share/classfile/classLoaderData.hpp b/src/hotspot/share/classfile/classLoaderData.hpp
index bda39f3e353..28fc9060e03 100644
--- a/src/hotspot/share/classfile/classLoaderData.hpp
+++ b/src/hotspot/share/classfile/classLoaderData.hpp
@@ -272,6 +272,7 @@ class ClassLoaderData : public CHeapObj<mtClass> {
void oops_do(OopClosure* f, int claim_value, bool clear_modified_oops = false);
void classes_do(KlassClosure* klass_closure);
+ void initialized_classes_do(KlassClosure* klass_closure);
Klass* klasses() { return _klasses; }
JNIMethodBlock* jmethod_ids() const { return _jmethod_ids; }
diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.cpp b/src/hotspot/share/classfile/classLoaderDataGraph.cpp
index aa2a6bcec6b..f2394f72dbd 100644
--- a/src/hotspot/share/classfile/classLoaderDataGraph.cpp
+++ b/src/hotspot/share/classfile/classLoaderDataGraph.cpp
@@ -361,13 +361,10 @@ void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) {
}
}
-void ClassLoaderDataGraph::anonymous_or_hidden_classes_do(KlassClosure* klass_closure) {
- Thread* thread = Thread::current();
- for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
- if (cld->has_class_mirror_holder()) {
- Handle holder(thread, cld->holder_phantom());
- cld->classes_do(klass_closure);
- }
+void ClassLoaderDataGraph::initialized_classes_do(KlassClosure* klass_closure) {
+ ClassLoaderDataGraphIterator iter;
+ while (ClassLoaderData* cld = iter.get_next()) {
+ cld->initialized_classes_do(klass_closure);
}
}
diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.hpp b/src/hotspot/share/classfile/classLoaderDataGraph.hpp
index da712eaf55f..ff391ec74fc 100644
--- a/src/hotspot/share/classfile/classLoaderDataGraph.hpp
+++ b/src/hotspot/share/classfile/classLoaderDataGraph.hpp
@@ -80,7 +80,7 @@ class ClassLoaderDataGraph : public AllStatic {
static void classes_do(KlassClosure* klass_closure);
// Enhanced class redefinition
- static void anonymous_or_hidden_classes_do(KlassClosure* klass_closure);
+ static void initialized_classes_do(KlassClosure* klass_closure);
static void classes_do(void f(Klass* const));
static void methods_do(void f(Method*));
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index cbcb484a290..43899ea3d48 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -2170,17 +2170,12 @@ jvmtiError VM_EnhancedRedefineClasses::find_sorted_affected_classes(TRAPS) {
{
MutexLocker mcld(ClassLoaderDataGraph_lock);
- // 0. we can't use ClassLoaderDataGraph::classes_do since classes can be uninitialized in cld,
- // fully initialized class is in system dictionary
+ // We can't use ClassLoaderDataGraph::classes_do since classes can be uninitialized in cld,
+ // fully initialized class is in system dictionary, but hidden classes are excluded. Therefore
+ // we use special method iterating over initialized classes only
// ClassLoaderDataGraph::classes_do(&closure);
- // 1. Scan over dictionaries
- ClassLoaderDataGraph::dictionary_classes_do(&closure);
-
- // 2. Anonymous or hidden class is not in dictionary, we have to iterate anonymous cld directly, but there is race cond...
- // TODO: review ... anonymous class is added to cld before InstanceKlass initialization,
- // find out how to check if the InstanceKlass is initialized
- ClassLoaderDataGraph::anonymous_or_hidden_classes_do(&closure);
+ ClassLoaderDataGraph::initialized_classes_do(&closure);
}
log_trace(redefine, class, load)("%d classes affected", _affected_klasses->length());
--
2.23.0

View File

@@ -1,27 +0,0 @@
From acad06204bc4f7e7a89e9a44ded6b9d27082327b Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Wed, 30 Jun 2021 18:58:47 +0200
Subject: [PATCH 38/39] Fix compilation issue
---
src/hotspot/share/interpreter/linkResolver.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/hotspot/share/interpreter/linkResolver.cpp b/src/hotspot/share/interpreter/linkResolver.cpp
index 78c9624a18b..28dccd0face 100644
--- a/src/hotspot/share/interpreter/linkResolver.cpp
+++ b/src/hotspot/share/interpreter/linkResolver.cpp
@@ -562,8 +562,8 @@ void LinkResolver::check_method_accessability(Klass* ref_klass,
// We'll check for the method name first, as that's most likely
// to be false (so we'll short-circuit out of these tests).
if (sel_method->name() == vmSymbols::clone_name() &&
- ( !AllowEnhancedClassRedefinition && sel_klass == vmClasses::Object_klass() ||
- AllowEnhancedClassRedefinition && sel_klass->newest_version() == vmClasses::Object_klass()->newest_version()) &&
+ ( (!AllowEnhancedClassRedefinition && sel_klass == vmClasses::Object_klass()) ||
+ (AllowEnhancedClassRedefinition && sel_klass->newest_version() == vmClasses::Object_klass()->newest_version()) ) &&
resolved_klass->is_array_klass()) {
// We need to change "protected" to "public".
assert(flags.is_protected(), "clone not protected?");
--
2.23.0

View File

@@ -1,171 +0,0 @@
From 563465b112da14e8b81ef32eefc06c79015a809b Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Tue, 27 Jul 2021 21:32:51 +0200
Subject: [PATCH 39/39] Remove duplicated lambdaFormInvokers.cpp
---
.../share/classfile/lambdaFormInvokers.cpp | 152 ------------------
1 file changed, 152 deletions(-)
delete mode 100644 src/hotspot/share/classfile/lambdaFormInvokers.cpp
diff --git a/src/hotspot/share/classfile/lambdaFormInvokers.cpp b/src/hotspot/share/classfile/lambdaFormInvokers.cpp
deleted file mode 100644
index 281de58b482..00000000000
--- a/src/hotspot/share/classfile/lambdaFormInvokers.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-#include "precompiled.hpp"
-#include "classfile/classLoadInfo.hpp"
-#include "classfile/classFileStream.hpp"
-#include "classfile/javaClasses.inline.hpp"
-#include "classfile/klassFactory.hpp"
-#include "classfile/lambdaFormInvokers.hpp"
-#include "classfile/symbolTable.hpp"
-#include "classfile/systemDictionary.hpp"
-#include "classfile/systemDictionaryShared.hpp"
-#include "classfile/vmClasses.hpp"
-#include "classfile/vmSymbols.hpp"
-#include "logging/log.hpp"
-#include "memory/oopFactory.hpp"
-#include "memory/metaspaceShared.hpp"
-#include "memory/resourceArea.hpp"
-#include "oops/instanceKlass.hpp"
-#include "oops/klass.hpp"
-#include "oops/objArrayKlass.hpp"
-#include "oops/objArrayOop.hpp"
-#include "oops/oop.inline.hpp"
-#include "oops/typeArrayOop.inline.hpp"
-#include "runtime/handles.inline.hpp"
-#include "runtime/javaCalls.hpp"
-
-GrowableArray<char*>* LambdaFormInvokers::_lambdaform_lines = NULL;
-
-void LambdaFormInvokers::append(char* line) {
- if (_lambdaform_lines == NULL) {
- _lambdaform_lines = new GrowableArray<char*>(100);
- }
- _lambdaform_lines->append(line);
-}
-
-void LambdaFormInvokers::regenerate_holder_classes(TRAPS) {
- assert(_lambdaform_lines != NULL, "Bad List");
- ResourceMark rm(THREAD);
-
- Symbol* cds_name = vmSymbols::jdk_internal_misc_CDS();
- Klass* cds_klass = SystemDictionary::resolve_or_null(cds_name, THREAD);
- guarantee(cds_klass != NULL, "jdk/internal/misc/CDS must exist!");
-
- int len = _lambdaform_lines->length();
- objArrayHandle list_lines = oopFactory::new_objArray_handle(vmClasses::String_klass(), len, CHECK);
- for (int i = 0; i < len; i++) {
- Handle h_line = java_lang_String::create_from_str(_lambdaform_lines->at(i), CHECK);
- list_lines->obj_at_put(i, h_line());
- }
-
- //
- // Object[] CDS.generateLambdaFormHolderClasses(String[] lines)
- // the returned Object[] layout:
- // name, byte[], name, byte[] ....
- Symbol* method = vmSymbols::generateLambdaFormHolderClasses();
- Symbol* signrs = vmSymbols::generateLambdaFormHolderClasses_signature();
-
- JavaValue result(T_OBJECT);
- JavaCalls::call_static(&result, cds_klass, method, signrs, list_lines, THREAD);
-
- if (HAS_PENDING_EXCEPTION) {
- log_info(cds)("%s: %s", THREAD->pending_exception()->klass()->external_name(),
- java_lang_String::as_utf8_string(java_lang_Throwable::message(THREAD->pending_exception())));
- CLEAR_PENDING_EXCEPTION;
- return;
- }
-
- objArrayHandle h_array(THREAD, (objArrayOop)result.get_oop());
- int sz = h_array->length();
- assert(sz % 2 == 0 && sz >= 2, "Must be even size of length");
- for (int i = 0; i < sz; i+= 2) {
- Handle h_name(THREAD, h_array->obj_at(i));
- typeArrayHandle h_bytes(THREAD, (typeArrayOop)h_array->obj_at(i+1));
- assert(h_name != NULL, "Class name is NULL");
- assert(h_bytes != NULL, "Class bytes is NULL");
-
- char *class_name = java_lang_String::as_utf8_string(h_name());
- int len = h_bytes->length();
- // make a copy of class bytes so GC will not affect us.
- char *buf = resource_allocate_bytes(THREAD, len);
- memcpy(buf, (char*)h_bytes->byte_at_addr(0), len);
- ClassFileStream st((u1*)buf, len, NULL, ClassFileStream::verify);
-
- reload_class(class_name, st, THREAD);
- // free buf
- resource_free_bytes(buf, len);
-
- if (HAS_PENDING_EXCEPTION) {
- log_info(cds)("Exception happened: %s", PENDING_EXCEPTION->klass()->name()->as_C_string());
- log_info(cds)("Could not create InstanceKlass for class %s", class_name);
- CLEAR_PENDING_EXCEPTION;
- return;
- }
- }
-}
-
-// class_handle - the class name, bytes_handle - the class bytes
-void LambdaFormInvokers::reload_class(char* name, ClassFileStream& st, TRAPS) {
- Symbol* class_name = SymbolTable::new_symbol((const char*)name);
- // the class must exist
- Klass* klass = SystemDictionary::resolve_or_null(class_name, THREAD);
- if (klass == NULL) {
- log_info(cds)("Class %s not present, skip", name);
- return;
- }
- assert(klass->is_instance_klass(), "Should be");
-
- ClassLoaderData* cld = ClassLoaderData::the_null_class_loader_data();
- Handle protection_domain;
- ClassLoadInfo cl_info(protection_domain);
-
- InstanceKlass* result = KlassFactory::create_from_stream(&st,
- class_name,
- cld,
- cl_info,
- false,
- CHECK);
-
- {
- MutexLocker mu_r(THREAD, Compile_lock); // add_to_hierarchy asserts this.
- SystemDictionary::add_to_hierarchy(result);
- }
- // new class not linked yet.
- MetaspaceShared::try_link_class(THREAD, result);
- assert(!HAS_PENDING_EXCEPTION, "Invariant");
-
- // exclude the existing class from dump
- SystemDictionaryShared::set_excluded(InstanceKlass::cast(klass));
- log_info(cds, lambda)("Replaced class %s, old: %p new: %p", name, klass, result);
-}
--
2.23.0

View File

@@ -0,0 +1,72 @@
#!/bin/bash
NEWFILEPATH=$1
CONFIGID=$2
BUILDID=$3
TOKEN=$4
#
# Get the size of new artifact
#
unameOut="$(uname -s)"
case "${unameOut}" in
Linux*)
NEWFILESIZE=$(stat -c%s "$NEWFILEPATH")
;;
Darwin*)
NEWFILESIZE=$(stat -f%z "$NEWFILEPATH")
;;
CYGWIN*)
NEWFILESIZE=$(stat -c%s "$NEWFILEPATH")
;;
MINGW*)
NEWFILESIZE=$(stat -c%s "$NEWFILEPATH")
;;
*)
echo "Unknown machine: ${unameOut}"
exit 1
esac
echo "New size of $NEWFILEPATH = $NEWFILESIZE bytes."
# example: IntellijCustomJdk_Jdk17_Master_LinuxX64jcef
CURL_RESPONSE=$(curl --header "Authorization: Bearer $TOKEN" "https://buildserver.labs.intellij.net/app/rest/builds/?locator=buildType:(id:$CONFIGID),status:success,count:1,finishDate:(build:$BUILDID,condition:before)")
re='id=\"([0-9]+)\".+number=\"([0-9]+)\"'
ID=0
if [[ $CURL_RESPONSE =~ $re ]]; then
ID=${BASH_REMATCH[1]}
echo "BUILD Number: ${BASH_REMATCH[2]}"
else
echo "ERROR: can't find previous build"
echo $CURL_RESPONSE
exit 1
fi
CURL_RESPONSE=$(curl --header "Authorization: Bearer $TOKEN" "https://buildserver.labs.intellij.net/app/rest/builds/$ID?fields=id,number,artifacts(file(name,size))")
echo "Atrifacts of last pinned build of $CONFIGID :\n"
echo $CURL_RESPONSE
# Find size (in response) with reg exp
re='name=\"(jbrsdk_jcef[^\"]+\.tar\.gz)\" size=\"([0-9]+)\"'
if [[ $CURL_RESPONSE =~ $re ]]; then
OLDFILENAME=${BASH_REMATCH[1]}
echo "Prev artifact name: $OLDFILENAME"
OLDFILESIZE=${BASH_REMATCH[2]}
echo "Prev artifact size = $OLDFILESIZE"
let allowedSize=OLDFILESIZE+OLDFILESIZE/20 # use 5% threshold
echo "Allowed size = $allowedSize"
if [[ "$NEWFILESIZE" -gt "$allowedSize" ]]; then
echo "ERROR: new size is significally greater than prev size (need to investigate)"
exit 1
fi
else
echo "ERROR: can't find string with size in xml response:"
echo $CURL_RESPONSE
exit 1
fi

View File

@@ -0,0 +1,83 @@
#!/bin/bash -x
usage ()
{
echo "Usage: perfcmp.sh [options] <test_results_cur> <test_results_ref> <results> <test_prefix> <noHeaders>"
echo "Options:"
echo -e " -h, --help\tdisplay this help"
echo -e " -tc\tprint teacmity statistic"
echo -e "test_results_cur - the file with metrics values for the current measuring"
echo -e "test_results_ref - the file with metrics values for the reference measuring"
echo -e "results - results of comaprison"
echo -e "test_prefix - specifys measuring type, makes sense for enabled -tc, by default no prefixes"
echo -e "noHeaders - by default 1-st line contains headers"
echo -e ""
echo -e "test_results_* files content should be in csv format with header and tab separator:"
echo -e "The 1-st column is the test name"
echo -e "The 2-st column is the test value"
echo -e ""
echo -e "Example:"
echo -e "Test Value"
echo -e "Testname 51.54"
}
while [ -n "$1" ]
do
case "$1" in
-h | --help) usage
exit 1 ;;
-tc) tc=1
shift
break ;;
*) break;;
esac
done
if [[ "$#" < "3" ]]; then
echo "Error: Invalid arguments"
usage
exit 1
fi
curFile=$1
refFile=$2
resFile=$3
testNamePrefix=$4
noHeaders=$5
echo $curFile
echo $refFile
echo $resFile
curValues=`cat "$curFile" | cut -f 2 | tr -d '\t'`
if [ -z $noHeaders ]; then
curValuesHeader=`echo "$curValues" | head -n +1`_cur
header=`cat "$refFile" | head -n +1 | awk -F'\t' -v x=$curValuesHeader '{print " "$1"\t"$2"_ref\t"x"\tratio"}'`
testContent=`paste -d '\t' $refFile <(echo "$curValues") | tail -n +2`
else
testContent=`paste -d '\t' $refFile <(echo "$curValues") | tail -n +1`
fi
testContent=`echo "$testContent" | awk -F'\t' '{ if ($3>$2+$2*0.1) {print "* "$1"\t"$2"\t"$3"\t"(($2==0)?"-":$3/$2)} else {print " "$1"\t"$2"\t"$3"\t"(($2==0)?"-":$3/$2)} }'`
if [ -z $noHeaders ]; then
echo "$header" > $resFile
fi
echo "$testContent" >> $resFile
cat "$resFile" | tr '\t' ';' | column -t -s ';' | tee $resFile
if [ -z $tc ]; then
exit 0
fi
echo "$testContent" 2>&1 | (
while read -r s; do
testname=`echo "$s" | cut -f 1 | tr -d "[:space:]" | tr -d "*"`
duration=`echo "$s" | cut -f 3`
failed=`echo "$s" | cut -c1 | grep -c "*"`
echo \#\#teamcity[testStarted name=\'$testNamePrefix$testname\']
echo "===>$s"
echo \#\#teamcity[buildStatisticValue key=\'$testNamePrefix$testname\' value=\'$duration\']
[ $failed -eq 1 ] && echo \#\#teamcity[testFailed name=\'$testNamePrefix$testname\' message=\'$s\']
echo \#\#teamcity[testFinished name=\'$testNamePrefix$testname\' duration=\'$duration\']
failed=0
done
)

View File

@@ -1,35 +1,43 @@
#!/bin/bash -x
# The following parameters must be specified:
# JBSDK_VERSION - specifies major version of OpenJDK e.g. 11_0_6 (instead of dots '.' underbars "_" are used)
# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument to configure
# build_number - specifies the number of JetBrainsRuntime build
# bundle_type - specifies bundle to be built; possible values:
# <empty> or nomod - the release bundles without any additional modules (jcef)
# jcef - the release bundles with jcef
# fd - the fastdebug bundles which also include the jcef module
# build_number - specifies the number of JetBrainsRuntime build
# bundle_type - specifies bundle to be built;possible values:
# <empty> or nomod - the release bundles without any additional modules (jcef)
# jcef - the release bundles with jcef
# fd - the fastdebug bundles which also include the jcef module
#
# jbrsdk-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
# jbr-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
#
# $ ./java --version
# openjdk 11.0.6 2020-01-14
# OpenJDK Runtime Environment (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number})
# OpenJDK 64-Bit Server VM (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number}, mixed mode)
# This script makes test-image along with JDK images when bundle_type is set to "jcef".
# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images.
#
# Environment variables:
# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument
# to configure
# By default JDK_BUILD_NUMBER is set zero
# JCEF_PATH - specifies the path to the directory with JCEF binaries.
# By default JCEF binaries should be located in ./jcef_win_x64
JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2
build_number=$3
bundle_type=$4
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
source jb/project/tools/common/scripts/common.sh
WORK_DIR=$(pwd)
JCEF_PATH=${JCEF_PATH:=$WORK_DIR/jcef_win_x64}
source jb/project/tools/common/scripts/common.sh
function do_configure {
sh ./configure \
$WITH_DEBUG_LEVEL \
--with-vendor-name="$VENDOR_NAME" \
--with-vendor-version-string="$VENDOR_VERSION_STRING" \
--with-jvm-features=shenandoahgc \
--with-version-pre= \
--with-version-build=$JDK_BUILD_NUMBER \
--with-version-opt=b${build_number} \
--with-toolchain-version=$TOOLCHAIN_VERSION \
--with-boot-jdk=$BOOT_JDK \
--disable-ccache \
--enable-cds=yes \
$REPRODUCIBLE_BUILD_OPTS \
|| do_exit $?
}
function create_image_bundle {
__bundle_name=$1
@@ -58,12 +66,7 @@ RELEASE_NAME=windows-x86_64-server-release
case "$bundle_type" in
"jcef")
do_reset_changes=0
;;
"dcevm")
HEAD_REVISION=$(git rev-parse HEAD)
git am jb/project/tools/patches/dcevm/*.patch || do_exit $?
do_reset_dcevm=0
do_reset_changes=0
do_maketest=1
;;
"nomod" | "")
bundle_type=""
@@ -75,23 +78,19 @@ case "$bundle_type" in
;;
esac
sh ./configure \
$WITH_DEBUG_LEVEL \
--with-vendor-name="$VENDOR_NAME" \
--with-vendor-version-string="$VENDOR_VERSION_STRING" \
--with-jvm-features=shenandoahgc \
--with-version-pre= \
--with-version-build=$JDK_BUILD_NUMBER \
--with-version-opt=b${build_number} \
--with-toolchain-version=$TOOLCHAIN_VERSION \
--with-boot-jdk=$BOOT_JDK \
--disable-ccache \
--enable-cds=yes || do_exit $?
if [ -z "$bundle_type" ]; then
make LOG=info CONF=$RELEASE_NAME clean images test-image || do_exit $?
if [ -z "$INC_BUILD" ]; then
do_configure || do_exit $?
if [ $do_maketest -eq 1 ]; then
make LOG=info CONF=$RELEASE_NAME clean images test-image || do_exit $?
else
make LOG=info CONF=$RELEASE_NAME clean images || do_exit $?
fi
else
make LOG=info CONF=$RELEASE_NAME clean images || do_exit $?
if [ $do_maketest -eq 1 ]; then
make LOG=info CONF=$RELEASE_NAME images test-image || do_exit $?
else
make LOG=info CONF=$RELEASE_NAME images || do_exit $?
fi
fi
IMAGES_DIR=build/$RELEASE_NAME/images
@@ -99,7 +98,7 @@ JSDK=$IMAGES_DIR/jdk
JSDK_MODS_DIR=$IMAGES_DIR/jmods
JBRSDK_BUNDLE=jbrsdk
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then
git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $?
update_jsdk_mods "$JSDK" "$JCEF_PATH"/jmods "$JSDK"/jmods "$JSDK_MODS_DIR" || do_exit $?
cp $JCEF_PATH/jmods/* ${JSDK_MODS_DIR} # $JSDK/jmods is not unchanged
@@ -107,15 +106,16 @@ if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_t
jbr_name_postfix="_${bundle_type}"
fi
# create runtime image bundle
modules=$(xargs < modules.list | sed s/" "//g) || do_exit $?
# create runtime image bundlef
modules=$(xargs < jb/project/tools/common/modules.list | sed s/" "//g) || do_exit $?
modules+=",jdk.crypto.mscapi"
create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $?
# create sdk image bundle
modules=$(cat ${JSDK}/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\r//g | sed s/\\n//g)
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods)
fi
create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" "$JBRSDK_BUNDLE" "$JSDK_MODS_DIR" "$modules" || do_exit $?
do_exit 0
do_exit 0

View File

@@ -53,7 +53,8 @@ mv release ${JBRSDK_BUNDLE}/release
JBR_BUNDLE=jbr
rm -rf ${JBR_BUNDLE}
grep -v javafx modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > modules.list.x86
grep -v javafx jb/project/tools/common/modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > modules.list.x86
echo ",jdk.crypto.mscapi" >> modules.list.x86
${JSDK}/bin/jlink \
--module-path ${JSDK}/jmods --no-man-pages --compress=2 \
--add-modules $(xargs < modules.list.x86 | sed s/" "//g) --output ${JBR_BUNDLE} || exit $?

View File

@@ -1,29 +1,19 @@
#!/bin/bash -x
# The following parameters must be specified:
# JBSDK_VERSION - specifies major version of OpenJDK e.g. 11_0_6 (instead of dots '.' underbars "_" are used)
# JDK_BUILD_NUMBER - specifies udate release of OpenJDK build or the value of --with-version-build argument to configure
# build_number - specifies the number of JetBrainsRuntime build
# bundle_type - specifies bundle to be built; possible values:
# <empty> or nomod - the bundles without any additional modules (jcef)
# jcef - the bundles with jcef
# fd - the fastdebug bundles which also include the jcef module
# build_number - specifies the number of JetBrainsRuntime build
# bundle_type - specifies bundle to be built;possible values:
# <empty> or nomod - the release bundles without any additional modules (jcef)
# jcef - the release bundles with jcef
# fd - the fastdebug bundles which also include the jcef module
#
# jbrsdk-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
# jbr-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
#
# $ ./java --version
# openjdk 11.0.6 2020-01-14
# OpenJDK Runtime Environment (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number})
# OpenJDK 64-Bit Server VM (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number}, mixed mode)
# This script packs test-image along with JDK images when bundle_type is set to "jcef".
# If the character 't' is added at the end of bundle_type then it also makes test-image along with JDK images.
#
source jb/project/tools/common/scripts/common.sh
JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2
build_number=$3
bundle_type=$4
[ "$bundle_type" == "jcef" ] && do_maketest=1
function pack_jbr {
__bundle_name=$1
@@ -42,7 +32,6 @@ function pack_jbr {
JBRSDK_BUNDLE=jbrsdk
RELEASE_NAME=windows-x86_64-server-release
IMAGES_DIR=build/$RELEASE_NAME/images
JBSDK=$JBRSDK_BASE_NAME-windows-x64-b$build_number
BASE_DIR=.
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ]; then
@@ -52,8 +41,8 @@ fi
pack_jbr jbr${jbr_name_postfix} jbr
pack_jbr jbrsdk${jbr_name_postfix} jbrsdk
if [ -z "$bundle_type" ]; then
JBRSDK_TEST=$JBRSDK_BASE_NAME-windows-test-x64-b$build_number
if [ $do_maketest -eq 1 ]; then
JBRSDK_TEST=$JBRSDK_BUNDLE-$JBSDK_VERSION-windows-test-x64-b$build_number
echo Creating $JBRSDK_TEST.tar.gz ...
/usr/bin/tar -czf $JBRSDK_TEST.tar.gz -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $?
fi

View File

@@ -221,6 +221,26 @@ else
JMOD_FLAGS += --exclude '**{_the.*,_*.marker*,*.diz,*.debuginfo,*.dSYM/**,*.dSYM}'
endif
# For reproducible builds specify the jmod --date using SOURCE_DATE in ISO-8601
ifeq ($(ENABLE_REPRODUCIBLE_BUILD), true)
JMOD_SOURCE_DATE := --date $(SOURCE_DATE_ISO_8601)
else
JMOD_SOURCE_DATE :=
endif
ifeq ($(ENABLE_REPRODUCIBLE_BUILD), true)
ifeq ($(MODULE), java.base)
JAR_FILE_TO_FIX := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/jrt-fs.jar
$(eval $(call SetupExecute, fixup_jrtfs_jar, \
WARN := Fixing timestamps in modules_libs/java.base/jrt-fs.jar, \
DEPS := $(JAR_FILE_TO_FIX) $(JDK_OUTPUTDIR)/bin/jar, \
OUTPUT_DIR := $(JMODS_SUPPORT_DIR), \
COMMAND := $(FIXPATH) $(JDK_OUTPUTDIR)/bin/jar --date $(SOURCE_DATE_ISO_8601) --update --file $(JAR_FILE_TO_FIX) @$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/_the.jrt-fs.jar_contents, \
))
DEPS += $(fixup_jrtfs_jar_TARGET)
endif
endif
# Create jmods in the support dir and then move them into place to keep the
# module path in $(IMAGES_OUTPUTDIR)/jmods valid at all times.
$(eval $(call SetupExecute, create_$(JMOD_FILE), \
@@ -232,6 +252,7 @@ $(eval $(call SetupExecute, create_$(JMOD_FILE), \
COMMAND := $(JMOD) create --module-version $(VERSION_SHORT) \
--target-platform '$(OPENJDK_MODULE_TARGET_PLATFORM)' \
--module-path $(JMODS_DIR) $(JMOD_FLAGS) \
$(JMOD_SOURCE_DATE) \
$(JMODS_SUPPORT_DIR)/$(JMOD_FILE), \
POST_COMMAND := $(MV) $(JMODS_SUPPORT_DIR)/$(JMOD_FILE) $(JMODS_DIR)/$(JMOD_FILE), \
))

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -88,7 +88,10 @@ $(CLASSLIST_FILE): $(INTERIM_IMAGE_DIR)/bin/java$(EXECUTABLE_SUFFIX) $(CLASSLIST
$(CAT) $(LINK_OPT_DIR)/stderr $(JLI_TRACE_FILE) ; \
exit $$exitcode \
)
$(GREP) -v HelloClasslist $@.raw.2 > $@
$(GREP) -v HelloClasslist $@.raw.2 > $@.raw.3
$(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java \
-cp $(SUPPORT_OUTPUTDIR)/classlist.jar \
build.tools.classlist.SortClasslist $@.raw.3 > $@
# The jli trace is created by the same recipe as classlist. By declaring these
# dependencies, make will correctly rebuild both jli trace and classlist

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -313,6 +313,15 @@ else # $(HAS_SPEC)=true
SOURCE_DATE := $$(shell $$(DATE) +"%s")
endif
export SOURCE_DATE_EPOCH := $$(SOURCE_DATE)
ifeq ($$(IS_GNU_DATE), yes)
export SOURCE_DATE_ISO_8601 := $$(shell $$(DATE) --utc \
--date="@$$(SOURCE_DATE_EPOCH)" \
+"%Y-%m-%dT%H:%M:%SZ" 2> /dev/null)
else
export SOURCE_DATE_ISO_8601 := $$(shell $$(DATE) -u \
-j -f "%s" "$$(SOURCE_DATE_EPOCH)" \
+"%Y-%m-%dT%H:%M:%SZ" 2> /dev/null)
endif
endef
# Parse COMPARE_BUILD into COMPARE_BUILD_*

View File

@@ -1,20 +1,84 @@
include Makefile
include make/MainSupport.gmk
#
# Copyright 2000-2021 JetBrains s.r.o.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
.PHONY: jbr-api
include $(SPEC)
include MakeBase.gmk
include JavaCompilation.gmk
ifeq ($(SPEC),)
ifneq ($(words $(SPECS)),1)
@echo "Error: Multiple build specification files found. Please select one explicitly."
@exit 2
endif
jbr-api:
@cd $(topdir)
@$(MAKE) $(MFLAGS) $(MAKE_LOG_FLAGS) -r -R -j 1 -f $(topdir)/make/JBRApi.gmk SPEC=$(SPECS) HAS_SPEC=true ACTUAL_TOPDIR=$(topdir) MODULES="$(MODULES)" jbr-api
else #with SPEC
JBR_API_ROOT_DIR := $(TOPDIR)/src/jetbrains.api
JBR_API_TOOLS_DIR := $(JBR_API_ROOT_DIR)/tools
JBR_API_SRC_DIR := $(JBR_API_ROOT_DIR)/src
JBR_API_OUTPUT_DIR := $(OUTPUTDIR)/jbr-api
JBR_API_GENSRC_DIR := $(JBR_API_OUTPUT_DIR)/gensrc
JBR_API_BIN_DIR := $(JBR_API_OUTPUT_DIR)/bin
JBR_API_VERSION_PROPERTIES := $(JBR_API_ROOT_DIR)/version.properties
JBR_API_VERSION_GENSRC := $(JBR_API_OUTPUT_DIR)/jbr-api.version
JBR_API_GENSRC_BATCH := $(JBR_API_VERSION_GENSRC)
jbr-api:
$(ECHO) "BUILD_DIR=$(OUTPUTDIR)" > $(OUT)
$(ECHO) "BOOT_JDK=\"$(BOOT_JDK)\"" >> $(OUT)
JBR_API_SRC_FILES := $(call FindFiles, $(JBR_API_SRC_DIR))
JBR_API_GENSRC_FILES := $(foreach f, $(call FindFiles, $(JBR_API_SRC_DIR)), \
$(JBR_API_GENSRC_DIR)/$(call RelativePath, $f, $(JBR_API_SRC_DIR)))
ifeq ($(JBR_API_JBR_VERSION),)
JBR_API_JBR_VERSION := <DEVELOPMENT>
JBR_API_FAIL_ON_HASH_MISMATCH := false
else
.PHONY: $(JBR_API_VERSION_PROPERTIES)
JBR_API_FAIL_ON_HASH_MISMATCH := true
endif
ARCHIVE_BUILD_JBR_API_BIN := $(JBR_API_BIN_DIR)
$(eval $(call SetupJavaCompilation, BUILD_JBR_API, \
SMALL_JAVA := true, \
COMPILER := bootjdk, \
SRC := $(JBR_API_GENSRC_DIR), \
EXTRA_FILES := $(JBR_API_GENSRC_FILES), \
BIN := $(JBR_API_BIN_DIR), \
JAR := $(JBR_API_OUTPUT_DIR)/jbr-api.jar, \
))
$(eval $(call SetupJarArchive, BUILD_JBR_API_SOURCES_JAR, \
DEPENDENCIES := $(JBR_API_GENSRC_FILES), \
SRCS := $(JBR_API_GENSRC_DIR), \
JAR := $(JBR_API_OUTPUT_DIR)/jbr-api-sources.jar, \
SUFFIXES := .java, \
BIN := $(JBR_API_BIN_DIR), \
))
# Grouped targets may not be supported, so hack dependencies: sources -> version file -> generated sources
$(JBR_API_VERSION_GENSRC): $(JBR_API_SRC_FILES) $(JBR_API_VERSION_PROPERTIES) $(JBR_API_TOOLS_DIR)/Gensrc.java
$(ECHO) Generating sources for JBR API
$(JAVA_CMD) $(JAVA_FLAGS_SMALL) "$(JBR_API_TOOLS_DIR)/Gensrc.java" \
"$(TOPDIR)/src" "$(JBR_API_OUTPUT_DIR)" "$(JBR_API_JBR_VERSION)"
$(JBR_API_GENSRC_FILES): $(JBR_API_VERSION_GENSRC)
$(TOUCH) $@
jbr-api-check-version: $(JBR_API_GENSRC_FILES) $(JBR_API_VERSION_PROPERTIES)
$(JAVA_CMD) $(JAVA_FLAGS_SMALL) "$(JBR_API_TOOLS_DIR)/CheckVersion.java" \
"$(JBR_API_ROOT_DIR)" "$(JBR_API_GENSRC_DIR)" "$(JBR_API_FAIL_ON_HASH_MISMATCH)"
jbr-api: $(BUILD_JBR_API) $(BUILD_JBR_API_SOURCES_JAR) jbr-api-check-version
.PHONY: jbr-api jbr-api-check-version
ifneq ($(JBR_API_CONF_FILE),)
$(JBR_API_CONF_FILE): $(JBR_API_GENSRC_FILES)
$(ECHO) "VERSION=`$(CAT) $(JBR_API_VERSION_GENSRC)`" > $(JBR_API_CONF_FILE)
$(ECHO) "JAR=$(JBR_API_OUTPUT_DIR)/jbr-api.jar" >> $(JBR_API_CONF_FILE)
$(ECHO) "SOURCES_JAR=$(JBR_API_OUTPUT_DIR)/jbr-api-sources.jar" >> $(JBR_API_CONF_FILE)
jbr-api: $(JBR_API_CONF_FILE)
.PHONY: $(JBR_API_CONF_FILE)
endif

View File

@@ -324,7 +324,7 @@ $(eval $(call SetupTarget, vscode-project-ccls, \
# aren't built until after libjava and libjvm are available to link to.
$(eval $(call SetupTarget, demos-jdk, \
MAKEFILE := CompileDemos, \
DEPS := java.base-libs exploded-image, \
DEPS := java.base-libs exploded-image buildtools-jdk, \
))
$(eval $(call SetupTarget, test-image-demos-jdk, \
@@ -383,12 +383,12 @@ bootcycle-images:
$(eval $(call SetupTarget, zip-security, \
MAKEFILE := ZipSecurity, \
DEPS := java.base-java java.security.jgss-java java.security.jgss-libs, \
DEPS := buildtools-jdk java.base-java java.security.jgss-java java.security.jgss-libs, \
))
$(eval $(call SetupTarget, zip-source, \
MAKEFILE := ZipSource, \
DEPS := gensrc, \
DEPS := buildtools-jdk gensrc, \
))
$(eval $(call SetupTarget, jrtfs-jar, \
@@ -508,13 +508,13 @@ $(eval $(call SetupTarget, docs-jdk-index, \
$(eval $(call SetupTarget, docs-zip, \
MAKEFILE := Docs, \
TARGET := docs-zip, \
DEPS := docs-jdk, \
DEPS := docs-jdk buildtools-jdk, \
))
$(eval $(call SetupTarget, docs-specs-zip, \
MAKEFILE := Docs, \
TARGET := docs-specs-zip, \
DEPS := docs-jdk-specs, \
DEPS := docs-jdk-specs buildtools-jdk, \
))
$(eval $(call SetupTarget, update-build-docs, \
@@ -1325,6 +1325,14 @@ create-main-targets-include:
@$(ECHO) ALL_MAIN_TARGETS := $(sort $(ALL_TARGETS)) > \
$(MAKESUPPORT_OUTPUTDIR)/main-targets.gmk
################################################################################
# JBR API
$(eval $(call SetupTarget, jbr-api, \
MAKEFILE := JBRApi, \
TARGET := jbr-api \
))
################################################################################
# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, Main-post.gmk))

View File

@@ -80,6 +80,8 @@ TOOL_GENERATECACERTS = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_class
TOOL_GENERATEEMOJIDATA = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
build.tools.generateemojidata.GenerateEmojiData
TOOL_MAKEZIPREPRODUCIBLE = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
build.tools.makezipreproducible.MakeZipReproducible
# TODO: There are references to the jdwpgen.jar in jdk/make/netbeans/jdwpgen/build.xml
# and nbproject/project.properties in the same dir. Needs to be looked at.

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -94,11 +94,6 @@ AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
# Locate the directory of this script.
AUTOCONF_DIR=$TOPDIR/make/autoconf
# Setup username (for use in adhoc version strings etc)
# Outer [ ] to quote m4.
[ USERNAME=`$ECHO "$USER" | $TR -d -c '[a-z][A-Z][0-9]'` ]
AC_SUBST(USERNAME)
])
###############################################################################

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -356,6 +356,18 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
fi
AC_SUBST(IS_GNU_TIME)
# Check if it's a GNU date compatible version
AC_MSG_CHECKING([if date is a GNU compatible version])
check_date=`$DATE --version 2>&1 | $GREP "GNU\|BusyBox"`
if test "x$check_date" != x; then
AC_MSG_RESULT([yes])
IS_GNU_DATE=yes
else
AC_MSG_RESULT([no])
IS_GNU_DATE=no
fi
AC_SUBST(IS_GNU_DATE)
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
UTIL_REQUIRE_PROGS(DSYMUTIL, dsymutil)
UTIL_REQUIRE_PROGS(MIG, mig)

View File

@@ -357,6 +357,16 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
# Finally, set some other options...
# Determine if the boot jdk jar supports the --date option
if $JAR --help 2>&1 | $GREP -q "\-\-date=TIMESTAMP"; then
BOOT_JDK_JAR_SUPPORTS_DATE=true
else
BOOT_JDK_JAR_SUPPORTS_DATE=false
fi
AC_MSG_CHECKING([if Boot JDK jar supports --date=TIMESTAMP])
AC_MSG_RESULT([$BOOT_JDK_JAR_SUPPORTS_DATE])
AC_SUBST(BOOT_JDK_JAR_SUPPORTS_DATE)
# When compiling code to be executed by the Boot JDK, force compatibility with the
# oldest supported bootjdk.
OLDEST_BOOT_JDK=`$ECHO $DEFAULT_ACCEPTABLE_BOOT_VERSIONS \

View File

@@ -102,6 +102,15 @@ if [ "x$OUT" = x ]; then
fi
fi
# Test and fix LoongArch64.
if [ "x$OUT" = x ]; then
if [ `uname -s` = Linux ]; then
if [ `uname -m` = loongarch64 ]; then
OUT=loongarch64-unknown-linux-gnu
fi
fi
fi
# Test and fix cpu on macos-aarch64, uname -p reports arm, buildsys expects aarch64
echo $OUT | grep arm-apple-darwin > /dev/null 2> /dev/null
if test $? != 0; then

View File

@@ -778,14 +778,14 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
FILE_MACRO_CFLAGS=
]
)
# -fdebug-prefix-map is supported by all modern versions of gcc/clang
DEBUG_PREFIX_CFLAGS=" -fdebug-prefix-map=${workspace_root_trailing_slash}="
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft &&
test "x$ENABLE_REPRODUCIBLE_BUILD" = xtrue; then
# There is a known issue with the pathmap if the mapping is made to the
# empty string. Add a minimal string "s" as prefix to work around this.
workspace_root_win=`$FIXPATH_BASE print "${WORKSPACE_ROOT%/}"`
# PATHMAP_FLAGS is also added to LDFLAGS in flags-ldflags.m4.
PATHMAP_FLAGS="-pathmap:${workspace_root_win//\//\\\\}=s \
-pathmap:${workspace_root_win}=s"
PATHMAP_FLAGS="-pathmap:${WORKSPACE_ROOT}=s"
FILE_MACRO_CFLAGS="$PATHMAP_FLAGS"
FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${FILE_MACRO_CFLAGS}],
PREFIX: $3,
@@ -810,12 +810,12 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
$TOOLCHAIN_CFLAGS_JVM ${$1_TOOLCHAIN_CFLAGS_JVM} \
$OS_CFLAGS $OS_CFLAGS_JVM $CFLAGS_OS_DEF_JVM $DEBUG_CFLAGS_JVM \
$WARNING_CFLAGS $WARNING_CFLAGS_JVM $JVM_PICFLAG $FILE_MACRO_CFLAGS \
$REPRODUCIBLE_CFLAGS"
$REPRODUCIBLE_CFLAGS $DEBUG_PREFIX_CFLAGS"
CFLAGS_JDK_COMMON="$ALWAYS_CFLAGS_JDK $ALWAYS_DEFINES_JDK $TOOLCHAIN_CFLAGS_JDK \
$OS_CFLAGS $CFLAGS_OS_DEF_JDK $DEBUG_CFLAGS_JDK $DEBUG_OPTIONS_FLAGS_JDK \
$WARNING_CFLAGS $WARNING_CFLAGS_JDK $DEBUG_SYMBOLS_CFLAGS_JDK \
$FILE_MACRO_CFLAGS $REPRODUCIBLE_CFLAGS"
$FILE_MACRO_CFLAGS $REPRODUCIBLE_CFLAGS $DEBUG_PREFIX_CFLAGS"
# Use ${$2EXTRA_CFLAGS} to block EXTRA_CFLAGS to be added to build flags.
# (Currently we don't have any OPENJDK_BUILD_EXTRA_CFLAGS, but that might

View File

@@ -82,6 +82,14 @@ AC_DEFUN([FLAGS_SETUP_ASFLAGS],
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
BASIC_ASFLAGS="-nologo -c"
fi
if test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = "xfalse"; then
if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then
workspace_root_trailing_slash="${WORKSPACE_ROOT%/}/"
BASIC_ASFLAGS+=" -fdebug-prefix-map=${workspace_root_trailing_slash}="
fi
fi
AC_SUBST(BASIC_ASFLAGS)
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
@@ -89,11 +97,11 @@ AC_DEFUN([FLAGS_SETUP_ASFLAGS],
# Fix linker warning.
# Code taken from make/autoconf/flags-cflags.m4 and adapted.
JVM_BASIC_ASFLAGS+="-DMAC_OS_X_VERSION_MIN_REQUIRED=$MACOSX_VERSION_MIN_NODOTS \
JVM_BASIC_ASFLAGS+=" -DMAC_OS_X_VERSION_MIN_REQUIRED=$MACOSX_VERSION_MIN_NODOTS \
-mmacosx-version-min=$MACOSX_VERSION_MIN"
if test -n "$MACOSX_VERSION_MAX"; then
JVM_BASIC_ASFLAGS+="$OS_CFLAGS \
JVM_BASIC_ASFLAGS+=" $OS_CFLAGS \
-DMAC_OS_X_VERSION_MAX_ALLOWED=$MACOSX_VERSION_MAX_NODOTS"
fi
fi

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -42,21 +42,21 @@ AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY],
PKGHANDLER_COMMAND=
case $PKGHANDLER in
apt-get)
*apt-get)
apt_help $MISSING_DEPENDENCY ;;
yum)
*yum)
yum_help $MISSING_DEPENDENCY ;;
brew)
*brew)
brew_help $MISSING_DEPENDENCY ;;
port)
*port)
port_help $MISSING_DEPENDENCY ;;
pkgutil)
*pkgutil)
pkgutil_help $MISSING_DEPENDENCY ;;
pkgadd)
*pkgadd)
pkgadd_help $MISSING_DEPENDENCY ;;
zypper)
*zypper)
zypper_help $MISSING_DEPENDENCY ;;
pacman)
*pacman)
pacman_help $MISSING_DEPENDENCY ;;
esac

View File

@@ -199,6 +199,12 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
AC_MSG_ERROR([Copyright year must have a value])
elif test "x$with_copyright_year" != x; then
COPYRIGHT_YEAR="$with_copyright_year"
elif test "x$SOURCE_DATE_EPOCH" != x; then
if test "x$IS_GNU_DATE" = xyes; then
COPYRIGHT_YEAR=`date --date=@$SOURCE_DATE_EPOCH +%Y`
else
COPYRIGHT_YEAR=`date -j -f %s $SOURCE_DATE_EPOCH +%Y`
fi
else
COPYRIGHT_YEAR=`$DATE +'%Y'`
fi
@@ -735,7 +741,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_REPRODUCIBLE_BUILD],
if test "x$OPENJDK_BUILD_OS" = xwindows && \
test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = xfalse && \
test "x$ENABLE_REPRODUCIBLE_BUILD" = xfalse; then
AC_MSG_NOTICE([On Windows it is not possible to combine --disable-reproducible-builds])
AC_MSG_NOTICE([On Windows it is not possible to combine --disable-reproducible-build])
AC_MSG_NOTICE([with --disable-absolute-paths-in-output.])
AC_MSG_ERROR([Cannot continue])
fi

View File

@@ -69,6 +69,17 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
AC_SUBST(JDK_RC_PLATFORM_NAME)
AC_SUBST(HOTSPOT_VM_DISTRO)
# Setup username (for use in adhoc version strings etc)
AC_ARG_WITH([build-user], [AS_HELP_STRING([--with-build-user],
[build username to use in version strings])])
if test "x$with_build_user" != x; then
USERNAME="$with_build_user"
else
# Outer [ ] to quote m4.
[ USERNAME=`$ECHO "$USER" | $TR -d -c '[a-z][A-Z][0-9]'` ]
fi
AC_SUBST(USERNAME)
# Set the JDK RC name
AC_ARG_WITH(jdk-rc-name, [AS_HELP_STRING([--with-jdk-rc-name],
[Set JDK RC name. This is used for FileDescription and ProductName properties

View File

@@ -307,7 +307,8 @@ AC_DEFUN_ONCE([JVM_FEATURES_CHECK_SHENANDOAHGC],
JVM_FEATURES_CHECK_AVAILABILITY(shenandoahgc, [
AC_MSG_CHECKING([if platform is supported by Shenandoah])
if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86" || \
test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
test "x$OPENJDK_TARGET_CPU" = "xaarch64" || \
test "x$OPENJDK_TARGET_CPU" = "xppc64le"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
@@ -357,6 +358,13 @@ AC_DEFUN_ONCE([JVM_FEATURES_CHECK_ZGC],
AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
AVAILABLE=false
fi
elif test "x$OPENJDK_TARGET_CPU" = "xppc64le"; then
if test "x$OPENJDK_TARGET_OS" = "xlinux"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
AVAILABLE=false
fi
else
AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
AVAILABLE=false

View File

@@ -72,6 +72,12 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU],
VAR_CPU_BITS=64
VAR_CPU_ENDIAN=little
;;
loongarch64)
VAR_CPU=loongarch64
VAR_CPU_ARCH=loongarch
VAR_CPU_BITS=64
VAR_CPU_ENDIAN=little
;;
m68k)
VAR_CPU=m68k
VAR_CPU_ARCH=m68k

View File

@@ -364,6 +364,9 @@ BUILD_JDK:=@BUILD_JDK@
CREATE_BUILDJDK:=@CREATE_BUILDJDK@
EXTERNAL_BUILDJDK:=@EXTERNAL_BUILDJDK@
# Whether the boot jdk jar supports --date=TIMESTAMP
BOOT_JDK_JAR_SUPPORTS_DATE:=@BOOT_JDK_JAR_SUPPORTS_DATE@
# When compiling Java source to be run by the boot jdk
# use these extra flags, eg -source 6 -target 6
BOOT_JDK_SOURCETARGET:=@BOOT_JDK_SOURCETARGET@
@@ -707,6 +710,7 @@ CODESIGN:=@CODESIGN@
CP:=@CP@
CUT:=@CUT@
DATE:=@DATE@
IS_GNU_DATE:=@IS_GNU_DATE@
DIFF:=@DIFF@
DIRNAME:=@DIRNAME@
DSYMUTIL:=@DSYMUTIL@

View File

@@ -221,6 +221,12 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETERMINE_TOOLCHAIN_TYPE],
AC_ARG_WITH(toolchain-type, [AS_HELP_STRING([--with-toolchain-type],
[the toolchain type (or family) to use, use '--help' to show possible values @<:@platform dependent@:>@])])
# Linux x86_64 needs higher binutils after 8265783
# (this really is a dependency on as version, but we take ld as a check for a general binutils version)
if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
TOOLCHAIN_MINIMUM_LD_VERSION_gcc="2.25"
fi
# Use indirect variable referencing
toolchain_var_name=VALID_TOOLCHAINS_$OPENJDK_BUILD_OS
VALID_TOOLCHAINS=${!toolchain_var_name}
@@ -677,9 +683,10 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
TOOLCHAIN_PREPARE_FOR_LD_VERSION_COMPARISONS
if test "x$TOOLCHAIN_MINIMUM_LD_VERSION" != x; then
AC_MSG_NOTICE([comparing linker version to minimum version $TOOLCHAIN_MINIMUM_LD_VERSION])
TOOLCHAIN_CHECK_LINKER_VERSION(VERSION: $TOOLCHAIN_MINIMUM_LD_VERSION,
IF_OLDER_THAN: [
AC_MSG_WARN([You are using a linker older than $TOOLCHAIN_MINIMUM_LD_VERSION. This is not a supported configuration.])
AC_MSG_ERROR([You are using a linker older than $TOOLCHAIN_MINIMUM_LD_VERSION. This is not a supported configuration.])
]
)
fi

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -236,13 +236,15 @@ AC_DEFUN([UTIL_GET_MATCHING_VALUES],
# $2: input date/time string
AC_DEFUN([UTIL_GET_EPOCH_TIMESTAMP],
[
timestamp=$($DATE --utc --date=$2 +"%s" 2> /dev/null)
if test "x$timestamp" = x; then
# GNU date format did not work, try BSD date options
timestamp=$($DATE -j -f "%F %T" "$2" "+%s" 2> /dev/null)
if test "x$IS_GNU_DATE" = xyes; then
# GNU date
timestamp=$($DATE --utc --date=$2 +"%s" 2> /dev/null)
else
# BSD date
timestamp=$($DATE -u -j -f "%F %T" "$2" "+%s" 2> /dev/null)
if test "x$timestamp" = x; then
# Perhaps the time was missing
timestamp=$($DATE -j -f "%F %T" "$2 00:00:00" "+%s" 2> /dev/null)
timestamp=$($DATE -u -j -f "%F %T" "$2 00:00:00" "+%s" 2> /dev/null)
# If this did not work, we give up and return the empty string
fi
fi

View File

@@ -0,0 +1,55 @@
#
# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# Default version, product, and vendor information to use,
# unless overridden by configure
DEFAULT_VERSION_FEATURE=15
DEFAULT_VERSION_INTERIM=0
DEFAULT_VERSION_UPDATE=0
DEFAULT_VERSION_PATCH=0
DEFAULT_VERSION_EXTRA1=0
DEFAULT_VERSION_EXTRA2=0
DEFAULT_VERSION_EXTRA3=0
DEFAULT_VERSION_DATE=2020-09-15
DEFAULT_VERSION_CLASSFILE_MAJOR=59 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
DEFAULT_VERSION_CLASSFILE_MINOR=0
DEFAULT_ACCEPTABLE_BOOT_VERSIONS="14 15"
DEFAULT_JDK_SOURCE_TARGET_VERSION=15
DEFAULT_PROMOTED_VERSION_PRE=
LAUNCHER_NAME=openjdk
PRODUCT_NAME=OpenJDK
PRODUCT_SUFFIX="Runtime Environment"
JDK_RC_PLATFORM_NAME=Platform
COMPANY_NAME=N/A
HOTSPOT_VM_DISTRO="Dynamic Code Evolution"
VENDOR_URL=https://openjdk.java.net/
VENDOR_URL_BUG=https://bugreport.java.com/bugreport/
VENDOR_URL_VM_BUG=https://bugreport.java.com/bugreport/crash.jsp
# Might need better names for these
MACOSX_BUNDLE_NAME_BASE="OpenJDK"
MACOSX_BUNDLE_ID_BASE="net.java.openjdk"

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -193,7 +193,7 @@ define SetupJarArchiveBody
$1_UPDATE_CONTENTS=\
if [ "`$(WC) -l $$($1_BIN)/_the.$$($1_JARNAME)_contents | $(AWK) '{ print $$$$1 }'`" -gt "0" ]; then \
$(ECHO) " updating" `$(WC) -l $$($1_BIN)/_the.$$($1_JARNAME)_contents | $(AWK) '{ print $$$$1 }'` files && \
$$($1_JAR_CMD) $$($1_JAR_UPDATE_OPTIONS) $$@ @$$($1_BIN)/_the.$$($1_JARNAME)_contents; \
$$($1_JAR_CMD) --update $$($1_JAR_OPTIONS) --file $$@ @$$($1_BIN)/_the.$$($1_JARNAME)_contents; \
fi $$(NEWLINE)
# The s-variants of the above macros are used when the jar is created from scratch.
# NOTICE: please leave the parentheses space separated otherwise the AIX build will break!
@@ -212,25 +212,27 @@ define SetupJarArchiveBody
| $(SED) 's|$$(src)/|-C $$(src) |g' >> \
$$($1_BIN)/_the.$$($1_JARNAME)_contents) $$(NEWLINE) )
endif
$1_SUPDATE_CONTENTS=$$($1_JAR_CMD) $$($1_JAR_UPDATE_OPTIONS) $$@ @$$($1_BIN)/_the.$$($1_JARNAME)_contents $$(NEWLINE)
$1_SUPDATE_CONTENTS=$$($1_JAR_CMD) --update $$($1_JAR_OPTIONS) --file $$@ @$$($1_BIN)/_the.$$($1_JARNAME)_contents $$(NEWLINE)
# Use a slightly shorter name for logging, but with enough path to identify this jar.
$1_NAME:=$$(subst $$(OUTPUTDIR)/,,$$($1_JAR))
ifneq (,$$($1_CHECK_COMPRESS_JAR))
$1_JAR_CREATE_OPTIONS := c0fm
$1_JAR_UPDATE_OPTIONS := u0f
ifeq ($(COMPRESS_JARS), true)
$1_JAR_CREATE_OPTIONS := cfm
$1_JAR_UPDATE_OPTIONS := uf
# If reproducible build and the boot jdk jar supports --date option
# then specify the --date using SOURCE_DATE in ISO-8601
$1_JAR_OPTIONS :=
ifeq ($$(ENABLE_REPRODUCIBLE_BUILD), true)
ifeq ($$(BOOT_JDK_JAR_SUPPORTS_DATE), true)
$1_JAR_OPTIONS += --date $(SOURCE_DATE_ISO_8601)
endif
endif
ifneq (,$$($1_CHECK_COMPRESS_JAR))
ifneq ($(COMPRESS_JARS), true)
$1_JAR_OPTIONS += --no-compress
endif
else
$1_JAR_CREATE_OPTIONS := cfm
$1_JAR_UPDATE_OPTIONS := uf
endif
# Include all variables of significance in the vardeps file
$1_VARDEPS := $$($1_JAR_CMD) $$($1_JAR_CREATE_OPTIONS) $$($1_MANIFEST) \
$1_VARDEPS := $$($1_JAR_CMD) $$($1_JAR_OPTIONS) $$($1_MANIFEST) \
$$($1_JARMAIN) $$($1_EXTRA_MANIFEST_ATTR) $$($1_ORIG_DEPS) $$($1_SRCS) \
$$($1_INCLUDES) $$($1_EXCLUDES) $$($1_EXCLUDE_FILES) $$($1_EXTRA_FILES)
$1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, $$($1_BIN)/_the.$$($1_JARNAME).vardeps)
@@ -255,7 +257,7 @@ define SetupJarArchiveBody
$$(if $$($1_EXTRA_MANIFEST_ATTR), \
$(PRINTF) "$$($1_EXTRA_MANIFEST_ATTR)\n" >> $$($1_MANIFEST_FILE) $$(NEWLINE)) \
$(ECHO) Creating $$($1_NAME) $$(NEWLINE) \
$$($1_JAR_CMD) $$($1_JAR_CREATE_OPTIONS) $$@ $$($1_MANIFEST_FILE) $$(NEWLINE) \
$$($1_JAR_CMD) --create $$($1_JAR_OPTIONS) --file $$@ --manifest $$($1_MANIFEST_FILE) $$(NEWLINE) \
$$($1_SCAPTURE_CONTENTS) \
$$($1_SCAPTURE_METAINF) \
$$($1_SUPDATE_CONTENTS) \

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,9 @@
ifndef _ZIP_ARCHIVE_GMK
_ZIP_ARCHIVE_GMK := 1
# Depends on build tools for MakeZipReproducible
include ../ToolsJdk.gmk
ifeq (,$(_MAKEBASE_GMK))
$(error You must include MakeBase.gmk prior to including ZipArchive.gmk)
endif
@@ -51,6 +54,8 @@ endif
# FOLLOW_SYMLINKS - Set to explicitly follow symlinks. Affects performance of
# finding files.
# ZIP_OPTIONS extra options to pass to zip
# REPRODUCIBLE override ENABLE_REPRODUCIBLE_BUILD (to make zip reproducible or not)
SetupZipArchive = $(NamedParamsMacroTemplate)
define SetupZipArchiveBody
@@ -124,6 +129,10 @@ define SetupZipArchiveBody
) \
)
ifeq ($$($1_REPRODUCIBLE), )
$1_REPRODUCIBLE := $$(ENABLE_REPRODUCIBLE_BUILD)
endif
# Use a slightly shorter name for logging, but with enough path to identify this zip.
$1_NAME:=$$(subst $$(OUTPUTDIR)/,,$$($1_ZIP))
@@ -134,6 +143,8 @@ define SetupZipArchiveBody
# dir is very small.
# If zip has nothing to do, it returns 12 and would fail the build. Check for 12
# and only fail if it's not.
# For reproducible builds set the zip access & modify times to SOURCE_DATE_EPOCH
# by using a ziptmp folder to generate final zip from using MakeZipReproducible.
$$($1_ZIP) : $$($1_ALL_SRCS) $$($1_EXTRA_DEPS)
$$(call LogWarn, Updating $$($1_NAME))
$$(call MakeTargetDir)
@@ -163,7 +174,18 @@ define SetupZipArchiveBody
$$($1_ZIP_EXCLUDES_$$s) \
|| test "$$$$?" = "12" \
))$$(NEWLINE) \
) true \
) true
ifeq ($$($1_REPRODUCIBLE), true)
$$(call ExecuteWithLog, \
$$(SUPPORT_OUTPUTDIR)/makezipreproducible/$$(patsubst $$(OUTPUTDIR)/%,%, $$@), \
($(RM) $$(SUPPORT_OUTPUTDIR)/ziptmp/$1/tmp.zip && \
$(MKDIR) -p $$(SUPPORT_OUTPUTDIR)/ziptmp/$1 && \
$(TOOL_MAKEZIPREPRODUCIBLE) -f $$(SUPPORT_OUTPUTDIR)/ziptmp/$1/tmp.zip \
-t $(SOURCE_DATE_EPOCH) $$@ && \
$(RM) $$@ && \
$(MV) $$(SUPPORT_OUTPUTDIR)/ziptmp/$1/tmp.zip $$@ \
))
endif
$(TOUCH) $$@
# Add zip to target list

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,9 @@
#
# URLs
JAVADOC_BASE_URL=https://docs.oracle.com/pls/topic/lookup?ctx=javase$(VERSION_NUMBER)&amp;id=homepage
JAVADOC_BASE_URL=https://docs.oracle.com/pls/topic/lookup?ctx=javase$(VERSION_FEATURE)&amp;id=homepage
BUG_SUBMIT_URL=https://bugreport.java.com/bugreport/
COPYRIGHT_URL=legal/copyright.html
LICENSE_URL=https://www.oracle.com/java/javase/terms/license/java$(VERSION_NUMBER)speclicense.html
LICENSE_URL=https://www.oracle.com/java/javase/terms/license/java$(VERSION_FEATURE)speclicense.html
REDISTRIBUTION_URL=https://www.oracle.com/technetwork/java/redist-137594.html
OTHER_JDK_VERSIONS_URL=https://docs.oracle.com/en/java/javase/index.html

View File

@@ -249,7 +249,7 @@ var getJibProfilesCommon = function (input, data) {
dependencies: ["boot_jdk", "gnumake", "jtreg", "jib", "autoconf", "jmh", "jcov"],
default_make_targets: ["product-bundles", "test-bundles", "static-libs-bundles"],
configure_args: concat("--enable-jtreg-failure-handler",
"--with-exclude-translations=de,es,fr,it,ko,pt_BR,sv,ca,tr,cs,sk,ja_JP_A,ja_JP_HA,ja_JP_HI,ja_JP_I,zh_TW,zh_HK",
"--with-exclude-translations=es,fr,it,ko,pt_BR,sv,ca,tr,cs,sk,ja_JP_A,ja_JP_HA,ja_JP_HI,ja_JP_I,zh_TW,zh_HK",
"--disable-manpages",
"--disable-jvm-feature-shenandoahgc",
versionArgs(input, common))

View File

@@ -55,8 +55,6 @@ BOOT_MODULES= \
jdk.sctp \
jdk.unsupported \
jdk.naming.rmi \
jetbrains.api \
jetbrains.api.impl \
#
# Modules that directly or indirectly requiring upgradeable modules

View File

@@ -30,14 +30,14 @@ JTREG_VERSION=6
JTREG_BUILD=1
GTEST_VERSION=1.8.1
LINUX_X64_BOOT_JDK_FILENAME=openjdk-16_linux-x64_bin.tar.gz
LINUX_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk16/7863447f0ab643c585b9bdebf67c69db/36/GPL/openjdk-16_linux-x64_bin.tar.gz
LINUX_X64_BOOT_JDK_SHA256=e952958f16797ad7dc7cd8b724edd69ec7e0e0434537d80d6b5165193e33b931
LINUX_X64_BOOT_JDK_FILENAME=openjdk-17.0.1_linux-x64_bin.tar.gz
LINUX_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk17.0.1/2a2082e5a09d4267845be086888add4f/12/GPL/openjdk-17.0.1_linux-x64_bin.tar.gz
LINUX_X64_BOOT_JDK_SHA256=1c0a73cbb863aad579b967316bf17673b8f98a9bb938602a140ba2e5c38f880a
WINDOWS_X64_BOOT_JDK_FILENAME=openjdk-16_windows-x64_bin.zip
WINDOWS_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk16/7863447f0ab643c585b9bdebf67c69db/36/GPL/openjdk-16_windows-x64_bin.zip
WINDOWS_X64_BOOT_JDK_SHA256=a78bdeaad186297601edac6772d931224d7af6f682a43372e693c37020bd37d6
WINDOWS_X64_BOOT_JDK_FILENAME=openjdk-17.0.1_windows-x64_bin.zip
WINDOWS_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk17.0.1/2a2082e5a09d4267845be086888add4f/12/GPL/openjdk-17.0.1_windows-x64_bin.zip
WINDOWS_X64_BOOT_JDK_SHA256=329900a6673b237b502bdcf77bc334da34bc91355c5fd2d457fc00f53fd71ef1
MACOS_X64_BOOT_JDK_FILENAME=openjdk-16_osx-x64_bin.tar.gz
MACOS_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk16/7863447f0ab643c585b9bdebf67c69db/36/GPL/openjdk-16_osx-x64_bin.tar.gz
MACOS_X64_BOOT_JDK_SHA256=16f3e39a31e86f3f51b0b4035a37494a47ed3c4ead760eafc6afd7afdf2ad9f2
MACOS_X64_BOOT_JDK_FILENAME=openjdk-17.0.1_macos-x64_bin.tar.gz
MACOS_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk17.0.1/2a2082e5a09d4267845be086888add4f/12/GPL/openjdk-17.0.1_macos-x64_bin.tar.gz
MACOS_X64_BOOT_JDK_SHA256=6ccb35800e723cabe15af60e67099d1a07c111d2d3208aa75523614dde68bee1

View File

@@ -28,12 +28,12 @@
DEFAULT_VERSION_FEATURE=17
DEFAULT_VERSION_INTERIM=0
DEFAULT_VERSION_UPDATE=0
DEFAULT_VERSION_UPDATE=2
DEFAULT_VERSION_PATCH=0
DEFAULT_VERSION_EXTRA1=0
DEFAULT_VERSION_EXTRA2=0
DEFAULT_VERSION_EXTRA3=0
DEFAULT_VERSION_DATE=2021-09-14
DEFAULT_VERSION_DATE=2022-01-18
DEFAULT_VERSION_CLASSFILE_MAJOR=61 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
DEFAULT_VERSION_CLASSFILE_MINOR=0
DEFAULT_VERSION_DOCS_API_SINCE=11

View File

@@ -1,29 +0,0 @@
Owner: CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R2
Issuer: CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R2
Serial number: 400000000010f8626e60d
Valid from: Fri Dec 15 08:00:00 GMT 2006 until: Wed Dec 15 08:00:00 GMT 2021
Signature algorithm name: SHA1withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
-----BEGIN CERTIFICATE-----
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
-----END CERTIFICATE-----

Some files were not shown because too many files have changed in this diff Show More