Compare commits

..

779 Commits

Author SHA1 Message Date
Alexey Ushakov
0971605df8 JBR-4591 macOS: SIGILL at [libsystem_kernel] __kill in -[__NSMallocBlock__ removeFromSuperview]: unrecognized selector sent to instance
Verified if windowDragView is present
2022-06-23 16:33:55 +02:00
Maxim Kartashev
4e8864552d JBR-4562 Generate hs_err file on SIGABRT
Changed the option from a -XX one to -Djbr.catch.SIGABRT=true to make it
more compatible with other JDKs.
2022-06-22 09:36:47 +03:00
Maxim Kartashev
57cd74977e fixup! JBR-4485 Windows: EXCEPTION_ACCESS_VIOLATION at sun.nio.fs.WindowsDirectoryStream$WindowsDirectoryIterator.readNextEntry 2022-06-21 09:03:33 +03:00
Vitaly Provodin
845d9cd2a7 exclude javax/swing/JToolBar/4529206/bug4529206.java due to 8288707 on linux 2022-06-19 07:12:07 +07:00
Vitaly Provodin
abd349c4c9 fixup! JBR-4567 fix checking test status 2022-06-18 06:36:16 +07:00
Vitaly Provodin
3c7af3d9ac fixup! JBR-4567 replace comma with point in RenderPerf scores 2022-06-18 06:36:16 +07:00
Maxim Kartashev
62f8abdea8 JBR-4562 Generate hs_err file on SIGABRT
The generation can be switched off with the env var JVM_NO_SIGABRT.
2022-06-16 13:19:48 +03:00
Maxim Kartashev
2fc6a7d38b JBR-3101 Exception in NSApplicationAWT: java.lang.NullPointerException at java.desktop/sun.lwawt.macosx.CPlatformComponent.setBounds
CWarningWindow doesn't have a peer, so accomodated for that in
CPlatformComponent.setBounds().
2022-06-16 12:25:09 +03:00
Vitaly Provodin
004cba3473 JBR-4570 improve synchronization and increase waiting time 2022-06-16 15:42:45 +07:00
Nikita Provotorov
a89da55450 JBR-2074 Windows AArch64 support: add build and pack scripts. 2022-06-16 03:41:30 +07:00
Maxim Kartashev
04544a5f96 JBR-4485 Windows: EXCEPTION_ACCESS_VIOLATION at sun.nio.fs.WindowsDirectoryStream$WindowsDirectoryIterator.readNextEntry
As a precaution, range-check the offset returned by WinAPI before
using it to read raw memory with Unsafe.
2022-06-15 10:48:34 +03:00
Maxim Kartashev
8dda13944a JBR-4481 Avoid workaround for reproducible jrt-fs.jar if boot jar supports reproducibility
BUILD_JAR is used instead of hand-crafted path and timestamp fixup is not
even applied if BOOT_JDK_JAR_SUPPORTS_DATE.
2022-06-15 09:58:01 +03:00
Vitaly Provodin
21865fd478 Update README.md 2022-06-15 06:13:24 +07:00
Vitaly Provodin
a4b4baeafb JBR-4567 replace comma with point in RenderPerf scores 2022-06-13 14:35:26 +07:00
Vitaly Provodin
2f68e2a4b6 JBR-4566 release file does not contain IMPLEMENTOR and other properties 2022-06-13 14:35:23 +07:00
Vitaly Provodin
55a8176c6d JBR-3770 exclude java/awt/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java from regular runs on macosx-all 2022-06-10 13:56:24 +07:00
Vitaly Provodin
7f66caa16e JBR-4451 fix the case when asterik cannot be found in string with perf score
After adding the set -e option, which instructs bash to immediately exit if any command has a non-zero exit status, perfcmp.sh unexpectedly exited because grep could not find an asterik. But it is expected case which means that the score is applicable
2022-06-10 06:30:22 +07:00
Rajan Halade
08aeb1b30f 8287109: Distrust.java failed with CertificateExpiredException
Reviewed-by: mullan

(cherry picked from commit 5b7d066ca5)
2022-06-10 06:30:22 +07:00
Vitaly Provodin
b4a19f1154 exclude sun/java2d/DirectX/RenderingToCachedGraphicsTest/RenderingToCachedGraphicsTest.java due to 8252812 on linux-all 2022-06-10 06:30:22 +07:00
Vitaly Provodin
2b2b48c6af exclude java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_4.java due to 8204200 2022-06-10 06:30:22 +07:00
Vitaly Provodin
38cc9f2592 Update README.md 2022-06-10 05:35:57 +07:00
Dmitry Batrak
94d95ad55c JBR-4535 Popup windows disappear on mouse hover when 'Focus strictly under mouse' policy is used in KDE
use override-redirect flag for popup menus on KDE - popup menus aren't affected by JBR-4535,
as they use an active mouse pointer grab, and marking them as override-redirect will allow to display
them over the system task bar, as https://bugs.openjdk.org/browse/JDK-6580930 requires
2022-06-09 20:23:21 +03:00
Alexey Ushakov
5b49bd750a 8287600: AA Ovals not rendered under metal
Commit command buffer after MTL_OP_MASK_OP operation
2022-06-09 13:49:52 +02:00
Dmitry Batrak
6dc194e089 JBR-4552 Windows revert back after initial move/resize in Cygwin/X 2022-06-08 15:01:51 +03:00
Dmitry Batrak
1f9120c283 JBR-4546 Focus is not returned back to IDE after closing "Open" dialog 2022-06-07 19:14:41 +03:00
Manuel Unterhofer
0301983b6a FL-11598 Fix accidental reset of window configuration for custom decoration on macOS
This also aligns the handling of the style mask with how the other settings are applied: It uses a client property now. This property is now also applied directly on peer initialization so that there is no need to re-apply, and the window directly appears in the correct configuration.
2022-06-07 15:17:09 +02:00
Dmitry Batrak
73d3da2f28 JBR-4543 NPE: IdeEventQueue.lambda$getNextEvent$0 2022-06-06 16:49:08 +03:00
Nikita Provotorov
321a4a3f83 fixup! JBR-4394, IDEA-246833: refactoring and blocking the fix of JBR-1573 to recreate IMs and ICs during preediting. 2022-06-06 21:38:10 +10:00
Nikita Provotorov
8490a25a0f JBR-4394, IDEA-246833: refactoring and blocking the fix of JBR-1573 to recreate IMs and ICs during preediting.
(cherry picked from commit 7a36587db8d3d5a63c5691243cd5bf56733c06e6)
2022-06-05 06:55:50 +10:00
Nikita Provotorov
9fbb44cae7 JBR-4394, IDEA-246833: fixup of JBR-2444.
(cherry picked from commit ef262dc8bb)
2022-06-03 19:50:39 +07:00
Dmitry Batrak
d10e161b72 JBR-4537 Popup windows shown for a background window cause app icon to blink in taskbar on KDE 2022-06-03 16:41:01 +03:00
Dmitry Batrak
c9670beb62 JBR-4535 Popup windows disappear on mouse hover when 'Focus strictly under mouse' policy is used in KDE 2022-06-03 16:41:01 +03:00
Vladimir Kempik
a0f8c27bdf 8280476: [macOS] : hotspot arm64 bug exposed by latest clang
Backport-of: f5d6fddc6d
2022-06-03 15:44:26 +03:00
Vitaly Provodin
c39e4a4fcd JBR-4272 fix misprint in linux-aarch64 2022-06-03 04:06:06 +07:00
Nikita Gubarkov
51993ea193 JBR API v0.0.6
JBR-4525 Add DRAGGABLE_AREA hitspot type for custom window decoration
2022-06-01 22:42:28 +03:00
Nikita Gubarkov
30885a997e JBR-4031 add null-check for tagsArray returned from CTFontCopyAvailableTables 2022-06-01 00:41:02 +03:00
Vitaly Provodin
929d5352c4 JBR-4520 set file permissions after signing 2022-05-31 18:48:17 +07:00
Alexey Ushakov
5332227582 JBR-4442 ClipFlatOval test hangs on M1 mac
Improved RenderPerfTest:
  - corrected and simplified test logic
  - added timeout on low performant rendering
  - used several markers to recover from missing frames
  - protected measurements from multiple paint invocations
2022-05-27 16:03:05 +02:00
Jaikiran Pai
4fb8ed7e15 8285515: (dc) DatagramChannel.disconnect fails with "Invalid argument" on macOS 12.4 beta2
Reviewed-by: dfuchs, alanb
(cherry picked from commit 269eae6189)
2022-05-27 20:06:11 +07:00
Vitaly Provodin
b477e4bb20 JBR-4512 windows: include pdb-files into jbrsdk 2022-05-27 19:13:39 +07:00
Vitaly Provodin
91d6a17b71 JBR-4087 add version info into the name of root directory in JBR tar.gz-distributions 2022-05-27 19:11:59 +07:00
Alexey Ushakov
99653a7246 JBR-3828 restore details for Java exceptions in crash dumps handled by ObjC
Added exception.toString() to jbr_err_* log

(cherry picked from commit 478bd6cdd7)

Added java stack of the exception to jbr_err_* log

(cherry picked from commit e97f728e93)

Also return the static string "OutOfMemoryError" in case of that
exception has been thrown in order to avoid crashing while reporting an
exception in an out-of-memory situation.
2022-05-25 12:32:25 +03:00
Vitaly Provodin
2d4764e6a5 Update README.md
update the link to JBR for IDEA 2022.2
2022-05-24 11:04:08 +07:00
Vitaly Provodin
1a5d095ffc exclude jb/java/awt/Window/ZOrderOnModalDialogActivation.java from S2 runs on Windows and Linux 2022-05-24 04:58:43 +07:00
Vitaly Provodin
6e54137bec exclude several tests from runs on machines with enabled VoiceOver 2022-05-24 04:58:42 +07:00
Vitaly Provodin
9ae2d19d82 exclude javax/swing/plaf/nimbus/TestNimbusOverride.java on windows due to 8253184 2022-05-24 04:58:42 +07:00
Vitaly Provodin
5ed37e2ade exclude java/awt/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java on linux-aarch64 only due to 8266283 2022-05-24 04:58:42 +07:00
Vitaly Provodin
7f2f3dd782 JBR-4487 enable Linux 32 builds (fix misprint) 2022-05-24 04:55:38 +07:00
Vladimir Kempik
c0f008e54d JBR-4496: Revert-JBR-4291-JBR-4423-and-JBR-4309 2022-05-23 18:33:46 +03:00
Harshitha Onkar
83521a04b4 8255439: System Tray icons get corrupted when windows scaling changes
Co-authored-by: Alexey Ivanov <aivanov@openjdk.org>
Reviewed-by: kcr, prr, aivanov
2022-05-23 14:23:05 +03:00
Naoto Sato
a1c716f556 8272352: Java launcher can not parse Chinese character when system locale is set to UTF-8
Reviewed-by: rriggs
2022-05-23 13:02:05 +03:00
Vladislav Rassokhin
e5085c2252 JBR-4451 Make bash scripts safer 2022-05-21 06:20:13 +07:00
Vitaly Provodin
bf7b0d3d01 JBR-4487 enable Linux 32 builds 2022-05-20 17:52:53 +07:00
Vitaly Provodin
6dc33960aa JBR-4458 enable JBR17 windows 32 bit builds 2022-05-20 17:52:53 +07:00
VladimirKempik
afe1cbc136 JBR-4452: Update crash report message with JBR youtrack link instead of bugreport.java.com (#151) 2022-05-20 11:18:10 +03:00
Maxim Kartashev
17e5d307b3 JBR-4457 getOperatingSystemMXBean throws an NPE
Instead of picking the memory cgroup specifically for "anyController",
pick any controller that appeared to be the first in the map.
2022-05-20 11:06:23 +03:00
Sergey Bylokhov
a3f12a2a6f 8274939: Incorrect size of the pixel storage is used by the robot on macOS
Reviewed-by: aivanov, prr
2022-05-18 21:19:51 +02:00
Dmitry Batrak
f42feb1eab JBR-1740 Menu remains open when application loses focus
(cherry picked from commit f987d22cd2)
2022-05-17 17:28:58 +03:00
Maxim Kartashev
4f4f3c9e41 JBR-4471 Linux: popup appears on wrong screen after desktop scale change
When screen scale changes, the cached screen bounds must be explicitly
updated. Call resetBoundsCache() whenever X11GraphicsDevice.scale has
changed.
2022-05-17 01:55:52 -07:00
Vitaly Provodin
d37946eef4 add _diz tarballs for linux-aarch64 to the expected set of artifacts 2022-05-17 10:39:37 +07:00
Vitaly Provodin
e3c584a7e3 exclude Frame/RestoreToOppositeScreen/RestoreToOppositeScreen.java from S2 runs due to 8286840 2022-05-17 05:17:48 +07:00
Zhengyu Gu
cd2dbaa88e JBR-4378 8284680: sun.font.FontConfigManager.getFontConfig() leaks charset
Reviewed-by: prr, andrew
2022-05-16 07:28:38 -07:00
Zhengyu Gu
a076696bc6 JBR-4378 8284956: Potential leak awtImageData/color_data when initializes X11GraphicsEnvironment
Reviewed-by: prr, shade
2022-05-16 07:28:38 -07:00
Artem Bochkarev
8b2a1daac3 JBR-4473: fixed native part of SystemHotkeyReader 2022-05-16 17:16:05 +07:00
Nikita Gubarkov
56420d17c1 JBR-4364 Fixup macOS native file dialog 2022-05-16 12:33:54 +03:00
Nikita Gubarkov
4f69815a42 JBR-4364 Port macOS native file dialog patches
JBR-1752 Floating windows overlap modal dialogs
JBR-2005: don't set appearance of file chooser if OSX version < 10.14
2022-05-16 00:01:24 +03:00
Vitaly Provodin
9de73a31e8 JBR-4437 add sources to JBRSDK distributions for Windows and Linux 2022-05-14 05:04:41 +07:00
Andrey Turbanov
5509467613 8280896: java/nio/file/Files/probeContentType/Basic.java fails on Windows 11
Reviewed-by: jpai, bpb
(cherry picked from commit f9137cb7b7)
2022-05-14 05:04:41 +07:00
Artem Semenov
6321222001 JBR-4432 Context menu not opening for JTextComponent on mac 2022-05-13 12:02:17 +03:00
Nikita Gubarkov
a74ccad7f8 JBR-4364 Port macOS native file dialog patches
IDEA-146669 Enable Mac native file dialogs
IDEA-159507 Mac native dialogs: multiple open dialogs are possible
JBR-1784 File dialogs aren't themed on macOS
2022-05-12 20:43:34 +03:00
Nikita Gubarkov
6eb83f426c JBR-4460 Allow changing custom window decorations on Windows on the fly 2022-05-12 17:55:16 +03:00
Nikita Gubarkov
58f4edd277 Use reflection instead of method handle lookup to find JBR API implementation classes
This is useful for internal services and allows to keep implementation in classes normally not accessible from the point where service is created
2022-05-12 17:52:48 +03:00
Nikita Gubarkov
9bbb5185f4 fixup! Handle cases when unsupported window type is passed to CustomWindowDecoration client-side fallback
Bump JBR API patch version
2022-05-12 13:25:15 +03:00
Nikita Gubarkov
b4cc3ca9b9 Handle cases when unsupported window type is passed to CustomWindowDecoration client-side fallback 2022-05-12 13:16:48 +03:00
Alexander Lobas
fb428d58b1 JBR-4462 BigSur: project tab does not gain focus when click it after focusing another app 2022-05-12 11:03:53 +02:00
Alexander Lobas
5e3573d422 JBR-4462 BigSur: project tab does not gain focus when click it after focusing another app 2022-05-12 11:03:53 +02:00
Alexander Lobas
39969abfad JBR-4462 BigSur: project tab does not gain focus when click it after focusing another app 2022-05-12 11:03:53 +02:00
Dmitry Batrak
39c4654438 JBR-4463 Activating app-modal dialog brings all app windows to front
(cherry picked from commit 2b05925276)
2022-05-11 22:09:30 +03:00
Nikita Gubarkov
10479dccd9 JBR-4460 Fix window drag with custom decorations on macOS 2022-05-11 19:25:39 +03:00
Maxim Kartashev
9a81ca792e JBR-3498 Windows: exception when trying to delete a directory with a trailing space
Allow Windows Path to have a trailing space despite Windows naming conventions
discouraging it. Many programs - including Explorer - successfully work
with such files or directories.
2022-05-11 17:04:14 +03:00
Nikita Provotorov
626ab933a9 JBR-4458: JBR17 Windows x86_32 build is broken.
Build-fix of the JBR-1430 fix.
2022-05-11 03:43:29 +07:00
Nikita Provotorov
6fb9661f26 JBR-4458: JBR17 Windows x86_32 build is broken.
Build-fix of the JBR-3997 fix.
2022-05-11 03:43:28 +07:00
Manuel Unterhofer
8b735d389b Merge fullscreen handlers for transparent title bar into existing ones 2022-05-09 14:39:14 +02:00
Manuel Unterhofer
e4c34ade82 FL-11420 Fix view hierarchy restoration for full-screen mode on macOS 2022-05-09 14:39:14 +02:00
Dmitry Batrak
11db651a21 JBR-1518 JBR 11 does not support chain of popups on Linux
(cherry picked from commit 849356ee01)
2022-05-04 17:10:46 +03:00
Maxim Kartashev
03f0ec3a28 JBR-3862 Implement native WatchService on MacOS
The watch service is based on FSEvents API that notifies about file
system changes at a directory level. It is possible to go back to
using the old polling watch service with -Dwatch.service.polling=true.

Features include:
- support for FILE_TREE option (recursive directory watching),
- minimum necessary I/O (no filesystem access more than once
  unless needed),
- one thread ("run loop") per WatchService instance,
- changes are detected by comparing file modification times with
  millisecond precision,
- a directory tree snapshot is taken at the time of WatchKey creation
  and can take a long time (proportional to the number of files).
2022-05-04 15:11:03 +03:00
Vitaly Provodin
59005e679f JBR-4437 add sources to JBRSDK distributions 2022-05-03 08:45:33 +07:00
Ryan Osial
efd61f2f97 Cache results of font-config pattern search for reuse
(cherry picked from commit 432f637904)
(cherry picked from commit 17bc232f6f)
2022-04-29 19:37:01 +02:00
Maxim Kartashev
3bf2a3f32d JBR-3948 Linux: SIGSEGV at [libawt_xawt] Java_sun_awt_X11_XInputMethod_createXICNative
The crashes begin with the call to getDefaultConfig() in
createStatusWindow() returning garbage. With 8280468 fixed, there aren't
many reasons left for it to do so; it must be that the argument to the
call (the screen number) is out of range.

This change eliminates the possibilities to get an absolutely incorrect
screen number by checking the return values of several Xlib functions,
which, when fail, will leave their outgoing arguments uninitialized.
This, in turn, can lead to reading some random memory resulting in
equally random screen number that is later being fed to
getDefaultConfig().

Although on modern systems with Xinerama there should really be no
screen other than zero, as the last resort, this number is also
range-checked in getDefaultConfig() itself.
2022-04-29 06:36:53 -07:00
Atrem Bochkarev
b193bdbf37 JBR-4093: fixed test hangs at finishing 2022-04-29 13:45:05 +03:00
Anton Kozlov
b9ae79bd62 8284920: Incorrect Token type causes XPath expression to return empty result
Reviewed-by: andrew
2022-04-29 05:43:46 +07:00
Christoph Langer
57c4e5009e 8284548: Invalid XPath expression causes StringIndexOutOfBoundsException
Reviewed-by: andrew
2022-04-29 05:43:45 +07:00
Alexey Bakhtin
078c85a001 8278449: Improve keychain support
Reviewed-by: andrew
Backport-of: 2376bb88eff3ae6922c4cae276e1d703a520853d
2022-04-29 05:43:45 +07:00
Yuri Nesterenko
97dcc801c9 8270504: Better Xpath expression handling
Reviewed-by: andrew
Backport-of: b61a2ca626b1da5e555c50e548b643a2daa396c6
2022-04-29 05:43:44 +07:00
Yuri Nesterenko
e8f43ec415 8282300: Throws NamingException instead of InvalidNameException after JDK-8278972
Backport-of: e6afb6ff81c9004aadaa6f694e643de9703dd32d
2022-04-29 05:43:44 +07:00
Yuri Nesterenko
1a0517f672 8278972: Improve URL supports
Backport-of: 94f1fbfd6d23f18ade3cc1b36f6dd368963c9d02
2022-04-29 05:43:43 +07:00
Martin Balao
57e955258d 8281388: Change wrapping of EncryptedPrivateKeyInfo
Reviewed-by: mbaesken
Backport-of: 405381ce9b44c8b122a06e590e4d8240fd9ba996
2022-04-29 05:43:43 +07:00
Andrew Brygin
1ec310320b 8278805: Enhance BMP image loading
Backport-of: 6319119be51e595be82f253b9f5e9495e72d4ad9
2022-04-29 05:43:42 +07:00
Martin Balao
db07db3824 8278798: Improve supported intrinsic
Reviewed-by: roland, mbaesken
Backport-of: 7ed3d37203da74f3f2cc92d06250f74aa5ceccd1
2022-04-29 05:43:36 +07:00
David Alvarez
dd0ad60a02 8274221: More definite BER encodings
Backport-of: ee39b0fc22a55a051b8a4d5754c34105fe4b734e
2022-04-29 05:43:36 +07:00
Sergey Bylokhov
24ee64a3c3 8272255: Completely handle MIDI files
Reviewed-by: mbaesken
Backport-of: 6efdd1870e7ddb77a04d8c8183ced385039d0913
2022-04-29 05:43:36 +07:00
Martin Balao
4f01131d8b 8282397: createTempFile method of java.io.File is failing when called with suffix of spaces character
Reviewed-by: mbaesken
Backport-of: d48181536fa9b99f01fc80f8adb73777ec6ffa58
2022-04-29 05:43:36 +07:00
Martin Balao
eca38c63b7 8278356: Improve file creation
Backport-of: 3c75bf069973c1d05b94cb42edf6eb62820b1ef5
2022-04-29 05:43:35 +07:00
Aleksei Voitylov
a3cab9ff52 8277672: Better invocation handler handling
Reviewed-by: mbaesken
Backport-of: 0691804665559f1935b7361d5f1207ac46f823f0
2022-04-29 05:43:35 +07:00
Aleksei Voitylov
eb6c770ce8 8277233: Improve ECDSA signature support
Reviewed-by: mbaesken
Backport-of: 34714d63f1be267c2bc2ae7a55f936deab8ea6d2
2022-04-29 05:43:35 +07:00
Aleksei Voitylov
6c509ba751 8277227: Better identification of OIDs
Reviewed-by: mbaesken
Backport-of: 3ac5f0175356fad40b59f879322fa7d89dfbcaab
2022-04-29 05:43:34 +07:00
Aleksei Voitylov
8cd33ef9e3 8275151: Improved Object Identification
Reviewed-by: mbaesken
Backport-of: 4cffe1cc913f895f54281de8e91ca39f4bde4b5f
2022-04-29 05:43:34 +07:00
Martin Balao
d2f5d0d55b 8272594: Better record of recordings
Reviewed-by: evergizova
Backport-of: 44d9bf6d4afac7b17273b0de1189f3487c1a22f7
2022-04-29 05:43:34 +07:00
Martin Balao
811607b4df 8272588: Enhanced recording parsing
Reviewed-by: mbaesken
Backport-of: 036e1b836ee6854f9996be2e8f04773227e60901
2022-04-29 05:43:33 +07:00
Oli Gillespie
48789ca2cd 8272261: Improve JFR recording file processing
Reviewed-by: mbaesken
Backport-of: 71dc970b928a6b3ccc4973f56765a4ff7c43860d
2022-04-29 05:43:33 +07:00
Martin Balao
6e62b56d09 8269938: Enhance XML processing passes redux
Reviewed-by: mbaesken
Backport-of: ff4e11b1a83d6910e39f1d46bea154f0876f39da
2022-04-29 05:43:33 +07:00
Goetz Lindenmaier
cf54d8c618 8282761: XPathFactoryImpl remove setProperty and getProperty methods
Reviewed-by: clanger, yan
2022-04-29 05:43:32 +07:00
Goetz Lindenmaier
e1f7c4214f 8277795: ldap connection timeout not honoured under contention
Backport-of: 3d926dd66e
2022-04-29 05:43:32 +07:00
Goetz Lindenmaier
b5054ca0ca 8276141: XPathFactory set/getProperty method
Reviewed-by: mbaesken, phh
Backport-of: b226ab99c8
2022-04-29 05:43:26 +07:00
Alexey Pavlyutkin
53463b2c26 8274471: Add support for RSASSA-PSS in OCSP Response
Reviewed-by: mdoerr, goetz
Backport-of: f63c4a832a
2022-04-29 05:43:26 +07:00
Ichiroh Takiguchi
47e1841109 8282219: jdk/java/lang/ProcessBuilder/Basic.java fails on AIX
Backport-of: c5c6058fd5
2022-04-29 05:43:25 +07:00
Zdenek Zambersky
c8654d24ba 8279669: test/jdk/com/sun/jdi/TestScaffold.java uses wrong condition
Backport-of: 4c52eb3943
2022-04-29 05:43:25 +07:00
Matthias Baesken
766f8a634b 8276841: Add support for Visual Studio 2022
Backport-of: f65db88b74
2022-04-29 05:43:24 +07:00
Goetz Lindenmaier
535f0320ef 8272866: java.util.random package summary contains incorrect mixing function in table
Backport-of: e66c8afb59
2022-04-29 05:43:24 +07:00
Mat Carter
1356468ccd 8272996: JNDI DNS provider fails to resolve SRV entries when IPV6 stack is enabled
Backport-of: 4c169495a2
2022-04-29 05:43:23 +07:00
Toshio Nakamura
6b023bd72b 8278185: Custom JRE cannot find non-ASCII named module inside
Backport-of: fcd67a5242
2022-04-29 05:43:16 +07:00
Thomas Stuefe
a0ed8eb08c 8281460: Let ObjectMonitor have its own NMT category
Backport-of: a037b3c358
2022-04-29 05:43:16 +07:00
Andrew Leonard
d5b5130b62 8278163: --with-cacerts-src variable resolved after GenerateCacerts recipe setup
Reviewed-by: sgehwolf
Backport-of: 45da3aea22
2022-04-29 05:43:16 +07:00
Thomas Stuefe
2523e70ff6 8277383: VM.metaspace optionally show chunk freelist details
Backport-of: 35361270cb
2022-04-29 05:43:15 +07:00
Thomas Stuefe
53d6420947 8271721: Split gc/g1/TestMixedGCLiveThreshold into separate tests
Backport-of: 66c653c561
2022-04-29 05:43:15 +07:00
Matthias Baesken
c268107085 8277488: Add expiry exception for Digicert (geotrustglobalca) expiring in May 2022
Backport-of: d3749de478
2022-04-29 05:43:14 +07:00
Jonathan Dowland
a8f138e96d 8270117: Broken jtreg link in "Building the JDK" page
Backport-of: 41a5eb4372
2022-04-29 05:43:14 +07:00
Jonathan Dowland
68dc172fb6 8279695: [TESTBUG] modify compiler/loopopts/TestSkeletonPredicateNegation.java to run on C1 also
Reviewed-by: mdoerr
Backport-of: 86d0abb66b
2022-04-29 05:43:07 +07:00
Andrew Leonard
a22d6706fa 8278080: Add --with-cacerts-src='user cacerts folder' to enable deterministic cacerts generation
Backport-of: dc2abc9f05
2022-04-29 05:43:07 +07:00
Alexey Bakhtin
486152a73d 8274524: SSLSocket.close() hangs if it is called during the ssl handshake
Backport-of: 58dae60da0
2022-04-29 05:43:06 +07:00
Matthias Baesken
0e640760fa 8278346: java/nio/file/Files/probeContentType/Basic.java fails on Linux SLES15 machine
Backport-of: fd8cb2dae8
2022-04-29 05:43:06 +07:00
Matthias Baesken
014ea3f95a 8274171: java/nio/file/Files/probeContentType/Basic.java failed on "Content type" mismatches
Backport-of: bb74ae87ab
2022-04-29 05:43:05 +07:00
Goetz Lindenmaier
e613fa1334 8274562: (fs) UserDefinedFileAttributeView doesn't correctly determine if supported when using OverlayFS
Backport-of: 3d7671b65e
2022-04-29 05:43:05 +07:00
Matthias Baesken
de2384fdb9 8273655: content-types.properties files are missing some common types
Backport-of: 65ed0a742e
2022-04-29 05:43:05 +07:00
Matthias Baesken
bc88d6fa82 8279385: [test] Adjust sun/security/pkcs12/KeytoolOpensslInteropTest.java after 8278344
Backport-of: 01f93ddf18
2022-04-29 05:43:04 +07:00
Matthias Baesken
51472cf71a 8280373: Update Xalan serializer / SystemIDResolver to align with JDK-8270492
Backport-of: c180070cb5
2022-04-29 05:43:04 +07:00
Andrew John Hughes
8de2f8cd71 8272541: Incorrect overflow test in Toom-Cook branch of BigInteger multiplication
Backport-of: d1aeca117c
2022-04-29 05:43:04 +07:00
Goetz Lindenmaier
308e18cbbb 8278951: containers/cgroup/PlainRead.java fails on Ubuntu 21.10
Backport-of: 35172cdaf3
2022-04-29 05:42:58 +07:00
Goetz Lindenmaier
086e158c78 8272600: (test) Use native "sleep" in Basic.java
Backport-of: 0a361638c5
2022-04-29 05:42:57 +07:00
Alexey Bakhtin
c0fcd34c81 8271199: Mutual TLS handshake fails signing client certificate with custom sensitive PKCS11 key
Backport-of: f6232982b9
2022-04-29 05:42:57 +07:00
Ana Marsh
52c72750b3 8277299: STACK_OVERFLOW in Java_sun_awt_shell_Win32ShellFolder2_getIconBits
Backport-of: 94127f43a4
2022-04-29 05:42:56 +07:00
Martin Doerr
9753c60d48 8281061: [s390] JFR runs into assertions while validating interpreter frames
Backport-of: 7f19c70070
2022-04-29 05:42:56 +07:00
Goetz Lindenmaier
36b8e66074 8190748: java/text/Format/DateFormat/DateFormatTest.java and NonGregorianFormatTest fail intermittently
Backport-of: f1c20e91d8
2022-04-29 05:42:56 +07:00
Goetz Lindenmaier
df46e70a3a 8274750: java/io/File/GetXSpace.java failed: '/dev': 191488 != 190976
Backport-of: 13265f9901
2022-04-29 05:42:55 +07:00
Matthias Baesken
302f1a32a5 8273387: remove some unreferenced gtk-related functions
Backport-of: 6eba443428
2022-04-29 05:42:55 +07:00
Bernhard Urban-Forster
2f2df3dce8 8279702: [macosx] ignore xcodebuild warnings on M1
Backport-of: 4b520f0001
2022-04-29 05:42:55 +07:00
Dmitry Chuyko
df9e6e5bcc 8277180: Intrinsify recursive ObjectMonitor locking for C2 x64 and A64
Backport-of: d93b238f97
2022-04-29 05:42:54 +07:00
Goetz Lindenmaier
afb43747b4 8277449: compiler/vectorapi/TestLongVectorNeg.java fails with release VMs
Backport-of: b15e6f076a
2022-04-29 05:42:53 +07:00
Goetz Lindenmaier
001ec50992 8275643: C2's unaryOp vector intrinsic does not properly handle LongVector.neg
Backport-of: 47564caeb0
2022-04-29 05:42:43 +07:00
Goetz Lindenmaier
25c02411ed 8271056: C2: "assert(no_dead_loop) failed: dead loop detected" due to cmoving identity
Backport-of: 54481394a3
2022-04-29 05:42:36 +07:00
Goetz Lindenmaier
c916005092 8275847: Scheduling fails with "too many D-U pinch points" on small method
Backport-of: 3934fe54b4
2022-04-29 05:42:36 +07:00
Goetz Lindenmaier
228e8c5d3d 8274944: AppCDS dump causes SEGV in VM thread while adjusting lambda proxy class info
Reviewed-by: stuefe
Backport-of: e5cd2692da
2022-04-29 05:42:35 +07:00
Goetz Lindenmaier
989c96f284 8275874: [JVMCI] only support aligned reads in c2v_readFieldValue
Backport-of: 2448b3f5f9
2022-04-29 05:42:35 +07:00
Goetz Lindenmaier
0c879b3d93 8271506: Add ResourceHashtable support for deleting selected entries
Reviewed-by: stuefe
Backport-of: f15d6cbcaf
2022-04-29 05:42:34 +07:00
Paul Hohensee
ad66624c0b 8278381: [GCC 11] Address::make_raw() does not initialize rspec
Backport-of: 4f594e6a28
2022-04-29 05:42:34 +07:00
Xin Liu
cdac6f2bcb 8279124: VM does not handle SIGQUIT during initialization
Backport-of: 9bf6ffa19f
2022-04-29 05:42:34 +07:00
Artem Semenov
c87d359b32 8277497: Last column cell in the JTable row is read as empty cell
Reviewed-by: ant, kizune
Backport-of: 70bad89b01
2022-04-29 05:42:33 +07:00
Artem Semenov
a05696e047 8278604: SwingSet2 table demo does not have accessible description set for images
8278526: [macos] Screen reader reads SwingSet2 JTable row selection as null, dimmed row for last column

Reviewed-by: ant, kizune
Backport-of: 8fbe1724e0
2022-04-29 05:42:33 +07:00
Goetz Lindenmaier
0d5c48f570 8275645: [JVMCI] avoid unaligned volatile reads on AArch64
Backport-of: 4dec8fc4cc
2022-04-29 05:42:33 +07:00
Matthias Baesken
eddefa3c18 8280414: Memory leak in DefaultProxySelector
Backport-of: fe77250fa4
2022-04-29 05:42:32 +07:00
Goetz Lindenmaier
05cf38eb5a 8273381: Assert in PtrQueueBufferAllocatorTest.stress_free_list_allocator_vm
Backport-of: c80a612709
2022-04-29 05:42:26 +07:00
Goetz Lindenmaier
d788f72b30 8269616: serviceability/dcmd/framework/VMVersionTest.java fails with Address already in use error
Backport-of: 8785737ba5
2022-04-29 05:42:26 +07:00
Martin Doerr
7137933ae2 8280155: [PPC64, s390] frame size checks are not yet correct
Backport-of: f37bfeadcf
2022-04-29 05:42:26 +07:00
Martin Doerr
30d10347c8 8279924: [PPC64, s390] implement frame::is_interpreted_frame_valid checks
Backport-of: c809d34f9e
2022-04-29 05:42:25 +07:00
Aleksey Shipilev
31dd91ce87 8280526: x86_32 Math.sqrt performance regression with -XX:UseSSE={0,1}
Backport-of: a24f44d17d
2022-04-29 05:42:25 +07:00
Aleksey Shipilev
b44a3f99a4 8279076: C2: Bad AD file when matching SqrtF with UseSSE=0
Backport-of: 9d5ae2e380
2022-04-29 05:42:24 +07:00
Aleksey Shipilev
258ee0952a 8279445: Update JMH devkit to 1.34
Backport-of: 0f98efbf2f
2022-04-29 05:42:24 +07:00
Thomas Stuefe
c98d88d182 8274753: ZGC: SEGV in MetaspaceShared::link_shared_classes
8274935: dumptime_table has stale entry

Reviewed-by: goetz, phh
Backport-of: 110e38ded8
2022-04-29 05:42:24 +07:00
Dmitry Chuyko
834d9b833e 8251216: Implement MD5 intrinsics on AArch64
Reviewed-by: phh, luhenry
Backport-of: 088b244ec6
2022-04-29 05:42:23 +07:00
Evgeny Astigeevich
8ebfbb7820 8278241: Implement JVM SpinPause on linux-aarch64
Backport-of: bcb79fd012
2022-04-29 05:42:23 +07:00
Thomas Stuefe
707d793a6c 8275608: runtime/Metaspace/elastic/TestMetaspaceAllocationMT2 too slow
Backport-of: d6d82f52d4
2022-04-29 05:42:22 +07:00
Aleksey Shipilev
ac1b1bc923 8276057: Update JMH devkit to 1.33
Backport-of: a2f2d8fcf5
2022-04-29 05:42:22 +07:00
Matthias Baesken
80735e7ebd 8275082: Update XML Security for Java to 2.3.0
Backport-of: 2c31a1735d
2022-04-29 05:42:16 +07:00
Goetz Lindenmaier
56514c6b5a 8177814: jdk/editpad is not in jdk TEST.groups
Backport-of: cfe7471f17
2022-04-29 05:42:16 +07:00
Goetz Lindenmaier
4de21bcbd0 8253197: vmTestbase/nsk/jvmti/StopThread/stopthrd007/TestDescription.java fails with "ERROR: DebuggeeSleepingThread: ThreadDeath lost"
Backport-of: 9573022978
2022-04-29 05:42:16 +07:00
Goetz Lindenmaier
f011ce4ef4 8236505: Mark jdk/editpad/EditPadTest.java as @headful
Backport-of: 7acec3f161
2022-04-29 05:42:15 +07:00
Goetz Lindenmaier
f87cf6e410 8272553: several hotspot runtime/CommandLine tests don't check exit code
Backport-of: 709b5910c3
2022-04-29 05:42:15 +07:00
Aleksey Shipilev
2ab6f9613e 8275687: runtime/CommandLine/PrintTouchedMethods test shouldn't catch RuntimeException
Backport-of: f0136ec945
2022-04-29 05:42:15 +07:00
Matthias Baesken
07a6d64186 8278344: sun/security/pkcs12/KeytoolOpensslInteropTest.java test fails because of different openssl output
Backport-of: 8b5ff4bdff
2022-04-29 05:42:14 +07:00
Sergey Bylokhov
bb2c382cdc 8273972: Multi-core choke point in CMM engine (LCMSTransform.doTransform)
Backport-of: e49e5b5a7e
2022-04-29 05:42:14 +07:00
Aleksey Shipilev
bd83a74dea 8273438: Enable parallelism in vmTestbase/metaspace/stressHierarchy tests
Backport-of: a143372818
2022-04-29 05:42:14 +07:00
Aleksey Shipilev
4a88de7f21 8278389: SuspendibleThreadSet::_suspend_all should be volatile/atomic
Backport-of: aec1b039b3
2022-04-29 05:42:13 +07:00
Aleksey Shipilev
2c82c24a0a 8273433: Enable parallelism in vmTestbase_nsk_sysdict tests
Backport-of: 5ca26cbddb
2022-04-29 05:42:13 +07:00
Evgeny Astigeevich
8924a0f904 8277503: compiler/onSpinWait/TestOnSpinWaitAArch64DefaultFlags.java failed with "OnSpinWaitInst with the expected value 'isb' not found."
Reviewed-by: phh
Backport-of: 7b2d823e84
2022-04-29 05:42:12 +07:00
Evgeny Astigeevich
34c70e32d6 8277137: Set OnSpinWaitInst/OnSpinWaitInstCount defaults to "isb"/1 for Arm Neoverse N1
Backport-of: 38345bd28d
2022-04-29 05:42:11 +07:00
Goetz Lindenmaier
4795538fb9 8273341: Update Siphash to version 1.0
Backport-of: 6cf4cd1aa4
2022-04-29 05:42:02 +07:00
Goetz Lindenmaier
776ec05e5e 8269032: Stringdedup tests are failing if the ergonomically select GC does not support it
Backport-of: 3fc761d97d
2022-04-29 05:41:55 +07:00
Evgeny Astigeevich
c148505468 8186670: Implement _onSpinWait() intrinsic for AArch64
Backport-of: 6954b98f8f
2022-04-29 05:41:55 +07:00
Aleksey Shipilev
5502ec8e97 8279998: PPC64 debug builds fail with "untested: RangeCheckStub: predicate_failed_trap_id"
Backport-of: 4d9b3f4cee
2022-04-29 05:41:54 +07:00
Thomas Stuefe
282cb0aed3 8280002: jmap -histo may leak stream
Backport-of: c359c358c8
2022-04-29 05:41:54 +07:00
Goetz Lindenmaier
f094c9d55d 8279833: Loop optimization issue in String.encodeUTF8_UTF16
Backport-of: c3d0a94040
2022-04-29 05:41:54 +07:00
Goetz Lindenmaier
259fa9e71b 8273277: C2: Move conditional negation into rc_predicate
Backport-of: 710f496456
2022-04-29 05:41:53 +07:00
Goetz Lindenmaier
19d2bb1980 8279412: [JVMCI] failed speculations list must outlive any nmethod that refers to it
Backport-of: 1ffdc52cf0
2022-04-29 05:41:53 +07:00
Goetz Lindenmaier
0730ec9972 8271202: C1: assert(false) failed: live_in set of first block must be empty
Backport-of: 54b800d56d
2022-04-29 05:41:52 +07:00
Goetz Lindenmaier
6cd7098d2a 8263567: gtests don't terminate the VM safely
Backport-of: 843943c204
2022-04-29 05:41:52 +07:00
Goetz Lindenmaier
3cd2abf9c6 8269206: A small typo in comment in test/lib/sun/hotspot/WhiteBox.java
Backport-of: 2c29d790ca
2022-04-29 05:41:51 +07:00
Thomas Stuefe
360de18e79 8278309: [windows] use of uninitialized OSThread::_state
Backport-of: 54993b1307
2022-04-29 05:41:47 +07:00
Matthias Baesken
5465df52b6 8274506: TestPids.java and TestPidsLimit.java fail with podman run as root
Backport-of: 94e31e5ca5
2022-04-29 05:41:40 +07:00
Johannes Bechberger
71869e54d6 8273967: gtest os.dll_address_to_function_and_library_name_vm fails on macOS12
Reviewed-by: goetz
Backport-of: 92d2176362
2022-04-29 05:41:30 +07:00
Johannes Bechberger
bfca0b1a22 8273366: [testbug] javax/swing/UIDefaults/6302464/bug6302464.java fails on macOS12
Backport-of: febcc72a54
2022-04-29 05:41:29 +07:00
Martin Doerr
b5ba120da4 8277846: Implement fast-path for ASCII-compatible CharsetEncoders on ppc64
Backport-of: a5f2a58ba4
2022-04-29 05:41:29 +07:00
Matthias Baesken
b02f0c9df3 8273526: Extend the OSContainer API pids controller with pids.current
Backport-of: d4546b6b36
2022-04-29 05:41:28 +07:00
Goetz Lindenmaier
c17cfd417e 8269849: vmTestbase/gc/gctests/PhantomReference/phantom002/TestDescription.java failed with "OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects"
Backport-of: b7245c6164
2022-04-29 05:41:28 +07:00
Goetz Lindenmaier
dbf12435bf 8269087: CheckSegmentedCodeCache test fails in an emulated-client VM
Backport-of: 595446bff4
2022-04-29 05:41:28 +07:00
Goetz Lindenmaier
52a56ace28 8278871: [JVMCI] assert((uint)reason < 2* _trap_hist_limit) failed: oob
Backport-of: 6f0e8da6d3
2022-04-29 05:41:27 +07:00
Aleksey Shipilev
f1efa59e9e 8279505: Update documentation for RETRY_COUNT and REPEAT_COUNT
Backport-of: bc12381105
2022-04-29 05:41:26 +07:00
Liam Miller-Cushon
d91d113e44 8225559: assertion error at TransTypes.visitApply
Backport-of: de61328d30
2022-04-29 05:41:24 +07:00
Sergey Nazarkin
fa7bbcef4f 8279300: [arm32] SIGILL when running GetObjectSizeIntrinsicsTest
Backport-of: 6613ce64d7
2022-04-29 05:41:14 +07:00
Zhengyu Gu
f65f5ae101 8273682: Upgrade Jline to 3.20.0
Backport-of: b8cb76ad21
2022-04-29 05:41:13 +07:00
Goetz Lindenmaier
fb4a51d3cf 8278758: runtime/BootstrapMethod/BSMCalledTwice.java fails with release VMs after JDK-8262134
Backport-of: f48a3e86d0
2022-04-29 05:41:13 +07:00
Goetz Lindenmaier
39baf821da 8262134: compiler/uncommontrap/TestDeoptOOM.java failed with "guarantee(false) failed: wrong number of expression stack elements during deopt"
Backport-of: 32139c1a8a
2022-04-29 05:41:12 +07:00
Goetz Lindenmaier
0e480cea7c 8269037: jsig/Testjsig.java doesn't have to be restricted to linux only
Backport-of: 34ba70a71b
2022-04-29 05:41:12 +07:00
Goetz Lindenmaier
400ad87f54 8269523: runtime/Safepoint/TestAbortOnVMOperationTimeout.java failed when expecting 'VM operation took too long'
Backport-of: 4f42eb6601
2022-04-29 05:41:11 +07:00
Aleksey Shipilev
b163257c80 8244602: Add JTREG_REPEAT_COUNT to repeat execution of a test
Reviewed-by: clanger
Backport-of: b2638e5efd
2022-04-29 05:41:11 +07:00
Matthias Baesken
f07c536579 8272398: Update DockerTestUtils.buildJdkDockerImage()
Backport-of: ec63957f9d
2022-04-29 05:41:11 +07:00
Zhengyu Gu
553cb9b215 8278384: Bytecodes::result_type() for arraylength returns T_VOID instead of T_INT
Backport-of: 769f14db84
2022-04-29 05:41:09 +07:00
Aleksey Shipilev
1445c219f0 8278020: ~13% variation in Renaissance-Scrabble
Backport-of: 4ba980ba43
2022-04-29 05:41:09 +07:00
Aleksey Shipilev
53db7729d3 8279225: [arm32] C1 longs comparison operation destroys argument registers
Backport-of: 299022dfac
2022-04-29 05:41:08 +07:00
Matthias Baesken
55cb19a3ba 8266490: Extend the OSContainer API to support the pids controller of cgroups
Backport-of: 089e83bf1b
2022-04-29 05:41:08 +07:00
Aleksey Shipilev
d7d86ca1f2 8279379: GHA: Print tests that are in error
Backport-of: 06f3713271
2022-04-29 05:41:07 +07:00
Jaroslav Bachorik
d011ed5755 8278987: RunThese24H.java failed with EXCEPTION_ACCESS_VIOLATION in __write_sample_info__
Backport-of: 713fbeb050
2022-04-29 05:41:07 +07:00
Zhengyu Gu
66e2207548 8278627: Shenandoah: TestHeapDump test failed
Reviewed-by: shade
Backport-of: 1128674d7f
2022-04-29 05:41:07 +07:00
William Kemper
53622682d6 8278824: Uneven work distribution when scanning heap roots in G1
Reviewed-by: phh
Backport-of: b4b0328d62
2022-04-29 05:41:06 +07:00
Goetz Lindenmaier
df5e1000f6 8278239: vmTestbase/nsk/jvmti/RedefineClasses/StressRedefine failed with EXCEPTION_ACCESS_VIOLATION at 0x000000000000000d
Backport-of: 2be3e7ef1c
2022-04-29 05:41:06 +07:00
Jaroslav Bachorik
b45abc7e82 8277919: OldObjectSample event causing bloat in the class constant pool in JFR recording
Backport-of: 475ec8e6c5
2022-04-29 05:41:06 +07:00
Zhengyu Gu
1b2238e50d 8277342: vmTestbase/nsk/stress/strace/strace004.java fails with SIGSEGV in InstanceKlass::jni_id_for
Backport-of: 09e8c8c64a
2022-04-29 05:41:05 +07:00
Guoxiong Li
1ecff37be4 8278104: C1 should support the compiler directive 'BreakAtExecute'
Backport-of: 3c10b5db38
2022-04-29 05:41:00 +07:00
Goetz Lindenmaier
0e4879c8d0 8274465: Fix javax/swing/text/ParagraphView/6364882/bug6364882.java failures
Backport-of: bb4500d0d2
2022-04-29 05:41:00 +07:00
Goetz Lindenmaier
c9970aca0a 8273933: [TESTBUG] Test must run without preallocated exceptions
Backport-of: 4d95a5d6dc
2022-04-29 05:40:59 +07:00
Goetz Lindenmaier
fc3aaf015e 8278172: java/nio/channels/FileChannel/BlockDeviceSize.java should only run on Linux
Backport-of: 0d938cedca
2022-04-29 05:40:59 +07:00
Goetz Lindenmaier
e51e21080e 8275800: Redefinition leaks MethodData::_extra_data_lock
Backport-of: 40606021ee
2022-04-29 05:40:59 +07:00
Goetz Lindenmaier
50cb9ebe93 8273634: [TEST_BUG] Improve javax/swing/text/ParagraphView/6364882/bug6364882.java
Backport-of: 67e52a3078
2022-04-29 05:40:58 +07:00
Goetz Lindenmaier
6089b1ede8 8239502: [TEST_BUG] Test javax/swing/text/FlowView/6318524/bug6318524.java never fails
Backport-of: b7425b63f6
2022-04-29 05:40:58 +07:00
Goetz Lindenmaier
e7df97037c 8275326: C2: assert(no_dead_loop) failed: dead loop detected
Backport-of: 70d5dffb4e
2022-04-29 05:40:57 +07:00
Aleksey Shipilev
2f67420af3 8274130: C2: MulNode::Ideal chained transformations may act on wrong nodes
Reviewed-by: kvn
Backport-of: 756d22c356
2022-04-29 05:40:57 +07:00
Aleksey Shipilev
8515081977 8279011: JFR: JfrChunkWriter incorrectly handles int64_t chunk size as size_t
Backport-of: 467f654916
2022-04-29 05:40:57 +07:00
Aleksey Shipilev
d1778fa02b 8276662: Scalability bottleneck in SymbolTable::lookup_common()
Backport-of: 1d7cef33c5
2022-04-29 05:40:56 +07:00
Goetz Lindenmaier
1d4ed37016 8275536: Add test to check that File::lastModified returns same time stamp as Files.getLastModifiedTime
Backport-of: 97d3280eb4
2022-04-29 05:40:56 +07:00
Goetz Lindenmaier
66abf9fbbc 8273895: compiler/ciReplay/TestVMNoCompLevel.java fails due to wrong data size with TieredStopAtLevel=2,3
Backport-of: a561eac912
2022-04-29 05:40:56 +07:00
Sergey Bylokhov
41d675ae86 8272167: AbsPathsInImage.java should skip *.dSYM directories
Backport-of: dd93c6e27b
2022-04-29 05:40:55 +07:00
Sergey Bylokhov
5fb74f4969 8270874: JFrame paint artifacts when dragged from standard monitor to HiDPI monitor
Backport-of: 03473b4c27
2022-04-29 05:39:30 +07:00
Goetz Lindenmaier
a8c3a64c7d 8275610: C2: Object field load floats above its null check resulting in a segfault
Backport-of: 7c6f57fcb1
2022-04-29 05:39:29 +07:00
Goetz Lindenmaier
69630a187f 8278099: two sun/security/pkcs11/Signature tests failed with AssertionError
Backport-of: 669c90e23b
2022-04-29 05:39:28 +07:00
Goetz Lindenmaier
7c7f86c1e5 8276623: JDK-8275650 accidentally pushed "out" file
Backport-of: c62b3476ce
2022-04-29 05:39:24 +07:00
Matthias Baesken
6dc11924e5 8277328: jdk/jshell/CommandCompletionTest.java failures on Windows
Backport-of: 3955b037da
2022-04-29 05:39:23 +07:00
Goetz Lindenmaier
52b99a8043 8277441: CompileQueue::add fails with assert(_last->next() == __null) failed: not last
Backport-of: 90f96fb4db
2022-04-29 05:39:23 +07:00
Goetz Lindenmaier
b79d4a689e 8274714: Incorrect verifier protected access error message
Backport-of: e39bdc9ddb
2022-04-29 05:39:22 +07:00
Goetz Lindenmaier
1861711838 8274658: ISO 4217 Amendment 170 Update
Backport-of: f2404d60de
2022-04-29 05:39:22 +07:00
Bernhard Urban-Forster
4a71ec04a7 8274795: AArch64: avoid spilling and restoring r18 in macro assembler
Reviewed-by: aph
Backport-of: ede3f4e94c
2022-04-29 05:39:22 +07:00
Jie Fu
565b969238 8277777: [Vector API] assert(r->is_XMMRegister()) failed: must be in x86_32.ad
Backport-of: 349328c929
2022-04-29 05:39:21 +07:00
Vladimir Kozlov
57fb014ec6 8276314: [JVMCI] check alignment of call displacement during code installation
Backport-of: 2f4b5405f0
2022-04-29 05:39:21 +07:00
Zhengyu Gu
7f5240ae26 8265150: AsyncGetCallTrace crashes on ResourceMark
Backport-of: 267c024eb5
2022-04-29 05:39:21 +07:00
Zhengyu Gu
814fc632c3 8276177: nsk/jvmti/RedefineClasses/StressRedefineWithoutBytecodeCorruption failed with "assert(def_ik->is_being_redefined()) failed: should be being redefined to get here"
Reviewed-by: goetz
Backport-of: a907b2b144
2022-04-29 05:39:20 +07:00
Goetz Lindenmaier
abf8fc0352 8275650: Problemlist java/io/File/createTempFile/SpecialTempFile.java for Windows 11
Backport-of: 32895ac609
2022-04-29 05:39:20 +07:00
Goetz Lindenmaier
6a6ba4290d 8273704: DrawStringWithInfiniteXform.java failed : drawString with InfiniteXform transform takes long time
Backport-of: acceffcbf7
2022-04-29 05:39:20 +07:00
Aleksey Shipilev
73c208a706 8273162: AbstractSplittableWithBrineGenerator does not create a random salt
Backport-of: 5e1df2c7d7
2022-04-29 05:39:19 +07:00
Aleksey Shipilev
ecee063ff5 8273351: bad tag in jdk.random module-info.java
Backport-of: d4177a98c1
2022-04-29 05:39:19 +07:00
Aleksey Shipilev
9632d98d90 8247980: Exclusive execution of java/util/stream tests slows down tier1
Backport-of: 544193a3bb
2022-04-29 05:39:19 +07:00
Aleksey Shipilev
699a74e849 8272327: Shenandoah: Avoid enqueuing duplicate string candidates
Backport-of: ee8bf10d32
2022-04-29 05:39:18 +07:00
Aleksey Shipilev
7bdb37587e 8278115: gc/stress/gclocker/TestGCLockerWithSerial.java has duplicate -Xmx
Backport-of: 0fbd2713f1
2022-04-29 05:39:18 +07:00
Aleksey Shipilev
1d33e5cb56 8278116: runtime/modules/LoadUnloadModuleStress.java has duplicate -Xmx
Backport-of: bef5c7a286
2022-04-29 05:39:18 +07:00
Aleksey Shipilev
0673b647b0 8277992: Add fast jdk_svc subtests to jdk:tier3
Backport-of: 30f0c64753
2022-04-29 05:39:17 +07:00
Aleksey Shipilev
082345b52f 8278016: Add compiler tests to tier{2,3}
Backport-of: f180a4591f
2022-04-29 05:39:17 +07:00
Aleksey Shipilev
b63207415f 8277385: Zero: Enable CompactStrings support
Backport-of: 3f847fe89a
2022-04-29 05:39:17 +07:00
Aleksey Shipilev
a6afe30ec7 8275586: Zero: Simplify interpreter initialization
Backport-of: 3613ce7c7d
2022-04-29 05:39:16 +07:00
Vladimir Kempik
281b7e0377 8269175: [macosx-aarch64] wrong CPU speed in hs_err file
Backport-of: bcbe3845d9
2022-04-29 05:39:16 +07:00
Goetz Lindenmaier
2476c5b3bf 8278822: Bump update version for OpenJDK: jdk-17.0.3
Reviewed-by: clanger
2022-04-29 05:39:16 +07:00
Vitaly Provodin
e9fa8fde16 JBR-4370 create a test checking all JBR artifacts exist - add exit code 2022-04-27 14:59:49 +07:00
Vladimir Kempik
627b9cfb0c JBR-4423: Remove excessive warnings after JBR-4291 2022-04-26 19:42:24 +03:00
Vitaly Provodin
fd4bc7dfcd JBR-4370 create a test checking all JBR artifacts exist 2022-04-26 11:31:02 +07:00
Anton Tarasov
dc88d4e63f JBR-3906 JBR for Linux aarch64 with JCEF is missing, is there any support plan? 2022-04-23 17:08:26 +07:00
Atrem Bochkarev
67d6fd157a JBR-4094: fixed MouseEventAfterHideAndShowBrowserTest 2022-04-23 04:35:03 +03:00
Vitaly Provodin
56d463d29a Revert "JBR-4325 Implement creating an event to call NSAccessibilityShowMenuAction"
This reverts commit f6cf71ce68.
2022-04-22 18:28:22 +07:00
Phil Race
aa625213b5 8223543: [TESTBUG] Regression test java/awt/Graphics2D/DrawString/LCDTextSrcEa.java has issues
Reviewed-by: serb, azvegint, aivanov
2022-04-22 00:07:32 +02:00
Alexey Ushakov
1538f1e6ad Revert "JBR-1380: [TESTBUG] Regression test java/awt/Graphics2D/DrawString/LCDTextSrcEa.java works incorrectly"
This reverts commit b7449a593a.
2022-04-22 00:02:31 +02:00
Alexey Ushakov
47017e1e14 Revert "JBR-1388 [TESTBUG] Regression test java/awt/Graphics2D/DrawString/LCDTextSrcEa.java fails on macOS Mojave"
This reverts commit 603f214e2c.
2022-04-22 00:02:00 +02:00
Roger Riggs
decffd42a5 JBR-3483 8282008: Incorrect handling of quoted arguments in ProcessBuilder
Reviewed-by: bchristi
2022-04-21 16:24:43 +03:00
Anton Tarasov
f189c552a6 JBR-4355 javax/swing/GraphicsConfigNotifier/StalePreferredSize.java: # C [libobjc.A.dylib+0x90ff] objc_release+0x1f
(cherry picked from commit c0b2b59d4a)
2022-04-21 13:42:12 +03:00
Anton Tarasov
c20bd5a658 JBR-4389 [update_1] IDEA UI font becomes too large after disconnecting the external monitor / sleep 2022-04-21 11:53:22 +03:00
Anton Tarasov
e900d17295 JBR-4389 IDEA UI font becomes too large after disconnecting the external monitor / sleep 2022-04-21 11:32:24 +03:00
Dmitry Batrak
35f18de090 remove duplicate bundled JetBrains Mono bold italic font
following JBR-4402

(cherry picked from commit b7e5d3cfcf)
2022-04-20 21:50:44 +03:00
Dmitry Batrak
47d473b1a1 JBR-4402 The wrong text is rendered in editor 2022-04-20 21:07:42 +03:00
Maxim Kartashev
70dde74a8f JBR-4062 Undo parts of JBR-4145 that have become obsolete by upstream changes. 2022-04-20 16:23:43 +03:00
Andrew Leonard
5745455f66 JBR-4062 8284661: Reproducible assembly builds without relative linking
Reviewed-by: ihse
2022-04-20 15:04:01 +03:00
Zhengyu Gu
a9ce9c763b JBR-4378 8284093: Memory leak: X11SD_DisposeXImage should also free obdata
Reviewed-by: prr, andrew
2022-04-20 01:58:38 -07:00
Andrew Leonard
c5507f0d9a JBR-4062 8284539: Configure --with-source-date=version fails on MacOS
Reviewed-by: erikj, ihse
2022-04-20 11:25:49 +03:00
Magnus Ihse Bursie
8670e275a1 JBR-4062 8282769: BSD date cannot handle all ISO 8601 formats
Reviewed-by: erikj
2022-04-20 11:25:22 +03:00
Martin Doerr
2fc34e9f04 8281811: assert(_base == Tuple) failed: Not a Tuple after JDK-8280799
Backport-of: fcce24c5b3

(cherry picked from commit cdf144edba)
2022-04-20 00:35:15 +03:00
Dmitry Batrak
fae9ac43a5 JBR-4398 Gear emoji displayed monochrome in Editor since 2022.1
this reverts JBR-4072 and associated fixes (JBR-4194, JBR-4314)
2022-04-19 22:10:45 +03:00
Konstantin Bulenkov
68db465ae1 Added support for otf into the build scripts. Updated prebuild maps. 2022-04-19 15:54:03 +02:00
Vitaly Provodin
0aa9b4f7de JBR-4297 add a regression test
(cherry picked from commit 8e94fff6aa)
2022-04-18 07:25:55 +07:00
Vitaly Provodin
d40250ddf5 Merge pull request #132
JBR-4392 - use only loaded classes when collecting affected classes
2022-04-17 03:42:41 +07:00
Vladimir Dvorak
63b1c11712 JBR-4386 - disable AllowEnhancedClassRedefinition in jfr 2022-04-17 03:39:37 +07:00
Vladimir Dvorak
1eab1527d5 JBR-4392 - use only loaded classes when collecting affected classes 2022-04-16 12:30:27 +02:00
Vitaly Provodin
9b5ebaaa5a exclude java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java due to 8280392 2022-04-16 05:55:55 +07:00
Konstantin Bulenkov
a37db66560 Update JetBrains Mono font to 2.225 2022-04-15 22:32:25 +02:00
Dmitry Batrak
39dd2f608c JBR-4382 [i3] All dialogs are tiled
(cherry picked from commit 800220af16)
2022-04-15 22:27:51 +03:00
Konstantin Bulenkov
890efa0ea8 bundle Inter font 2022-04-14 19:04:47 +02:00
Anton Tarasov
7efb0075bc JBR-4362 [mac] system menu opens with duplicated items
(cherry picked from commit e32defe49d)
2022-04-12 15:50:50 +03:00
Alexey Ushakov
413ff95d63 Removed comma from tag parsing result 2022-04-11 19:41:28 +02:00
Alexey Ushakov
bfa7a36237 JBR-4363 Changes in fonts rendering between JBR11 and JBR17
Resolved merge artifact after applying IDEA-57233 fix
2022-04-11 19:34:30 +02:00
Andrew Leonard
138596467d JBR-4062 8284437: Building from different users/workspace is not always deterministic
Reviewed-by: erikj
(cherry picked from commit 4451257b14)
2022-04-08 10:41:39 +03:00
Dmitry Batrak
f7a0716ccd JBR-4346 [Xfce] Windows are moved unexpectedly between workspaces when modal dialog is shown
(cherry picked from commit ad299f1e74)
2022-04-06 22:41:56 +03:00
Zhengyu Gu
bdb9d3f12f JBR-4360 284023: java.sun.awt.X11GraphicsDevice.getDoubleBufferVisuals() leaks XdbeScreenVisualInfo
Reviewed-by: prr, serb
2022-04-06 16:07:42 +03:00
Maxim Kartashev
1e8d2c0873 JBR-4357 8284033: Leak XVisualInfo in getAllConfigs in awt_GraphicsEnv.c
Reviewed-by: serb, prr
2022-04-04 23:03:35 -07:00
Vladimir Dvorak
360f8f332c Remove version-numbers left over from the merge of dcevm17 2022-04-05 04:38:32 +07:00
Vladimir Dvorak
13512decff JBR-4352 - fix AARCH64 compilation issues
- use correct INCLUDE_JFR condition for jfr code
- exclude jvmtiEnhancedRedefineClasses.cpp if INCLUDE_JVMTI=0
2022-04-02 16:33:54 +01:00
Vitaly Provodin
28ebc0c2e0 excludejava/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java on windows
and java/io/File/createTempFile/SpecialTempFile.java on windows11
2022-04-02 06:29:47 +07:00
Anton Tarasov
9a35ca0b25 JBR-4349 jb/java/awt/Toolkit/LWCToolkitInvokeAndWaitTest.java: Test FAILED! (not found in the log: “lost”) 2022-04-01 21:34:03 +03:00
Anton Tarasov
e424a5bf19 JBR-4347 jb/java/awt/Toolkit/AWTThreadingCMenuTest.java fails by ClassNotFoundException 2022-04-01 21:32:14 +03:00
Alexey Ushakov
ca4d838caf 8273355: Flickering on tooltip appearance IntelliJ IDEA 2021.2.1
Reviewed-by: serb, aghaisas
2022-03-30 20:42:06 +02:00
Alexey Ushakov
6ed5106466 Revert "JBR-3727 JBR17-Metal: Flickering on tooltip appearance"
This reverts commit eaa9c1618e.
2022-03-30 20:27:45 +02:00
Dmitry Batrak
098a50d91a JBR-4334 java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersUnitTest_Extra.java fails
re-fix JBR-4306 in a different way

(cherry picked from commit 3b5ded0d02)
2022-03-30 12:16:24 +03:00
Dmitry Batrak
050990303b JBR-4334 java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersUnitTest_Extra.java fails
revert original fix for JBR-4306

(cherry picked from commit 0f33031484)
2022-03-30 12:16:24 +03:00
Anton Tarasov
9f9416a12e JBR-4328 remove LWCToolkit.unsafeNonblockingExecute
(cherry picked from commit 9a3f31a6c4)
2022-03-28 22:00:59 +03:00
Anton Tarasov
b6cb489fee JBR-4134 PyCharm is slow and unusable on MacBook Pro with M1
(cherry picked from commit 36190505f5)
2022-03-28 22:00:52 +03:00
Anton Tarasov
446535b706 JBR-4284 Sub items of main menu options are not displayed
A regression of JBR-4208 LWCToolkit.invokeAndWait should not stuck on invocation loss

(cherry picked from commit c464e4748e)
2022-03-28 21:59:41 +03:00
Anton Tarasov
c18934bb98 JBR-4119 UI freezes at sun.lwawt.macosx.CAccessibility.getChildrenAndRoles
(cherry picked from commit 6ba79774d8)
2022-03-28 21:59:36 +03:00
Anton Tarasov
e8a6e8bd6e JBR-4106 PyCharm hangs with 100% CPU usage on one core 2022-03-28 21:59:28 +03:00
Mikhail Grishchenko
4a7241931f JBR-3975 print Teamcity messages 2022-03-26 05:32:40 +07:00
Mikhail Grishchenko
b45b8c9913 JBR-3975 add processing of "." java version separator 2022-03-24 08:55:51 +07:00
Artem Semenov
f6cf71ce68 JBR-4325 Implement creating an event to call NSAccessibilityShowMenuAction 2022-03-23 21:29:36 +03:00
Dmitry Batrak
803039d6db JBR-4306 Robot doesn't work as expected in some cases on macOS
(cherry picked from commit 7d69734465)
2022-03-23 12:53:42 +03:00
Vladimir Dvorak
436223316f JBR-4312 - fix crash call ResolvedMethodTable from ServiceThread
adjust_metod_entries_dcevm incorrectly changed the hashes of resolved
method oops stored in ResolvedMethodTable. Now all oops of old methods
are first removed, then updated and then added to table again
2022-03-23 11:08:36 +07:00
Dmitry Batrak
9a0ab296fe better handle multi-monitor configurations in tests related to macOS spaces
Detect the presence of an additional space by looking at number of spaces for the first monitor, not at the total number of spaces.
The latter is larger than one in a multi-monitor configuration, as each monitor corresponds to a separate space.
This approach should be better than the original one, but it relies on the primary (default) monitor to be mentioned first
in the plist file, which isn't known to be always true.

(cherry picked from commit 9040fd56cd)
2022-03-21 21:30:12 +03:00
Artem Semenov
bf4a191246 JBR-4318 On MacOS, some context menu items are not voiced 2022-03-21 15:40:18 +03:00
Andrew Leonard
cdfff8f6ac JBR-4062 8283315: jrt-fs.jar not always deterministically built
Reviewed-by: ihse
2022-03-21 14:03:00 +03:00
Alexey Ushakov
6d6de1034a JBR-3827 SIGILL at [libsystem_kernel] __kill in Java Exception at -[CDragSource convertData:]
Added check for drag source
2022-03-18 18:36:10 +01:00
Vitaly Provodin
2333999906 JBR-4303 add a regression test
(cherry picked from commit bc7cb5711b)
2022-03-18 09:50:29 +07:00
Alexey Ushakov
6ffcd2bf91 JBR-3366 SIGILL at [libsystem_kernel] __kill in NSWindowStyleMaskFullScreen cleared on a window outside of a full screen transition
Wrapped the native exception and added logging
2022-03-17 18:09:49 +01:00
Artem Semenov
822b4a8c49 JBR-4235 Context menu not readable after opening on Mac OS 2022-03-17 16:34:39 +03:00
Dmitry Batrak
debc6336c0 JBR-4314 2022.1 EAP version's JBR use incorrect fallback font to render Chinese characters in macOS
(cherry picked from commit 82048d1d73)
2022-03-17 15:15:34 +03:00
Mikhail Grishchenko
1f93154f62 JBR-3975 add PASSED message in check_jbr_size.sh 2022-03-17 03:35:05 +07:00
Mikhail Grishchenko
9f069ca59e JBR-3975 Fix regexp in check_jbr_size.sh
(cherry picked from commit 23131fc435)
2022-03-17 01:45:51 +07:00
Vladimir Kempik
53f1a647fd JBR-4309: jdk/tools/launcher/modules/illegalaccess/IllegalAccessTest.java fails after JBR-4291 2022-03-14 11:27:16 +03:00
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
1577 changed files with 67324 additions and 52135 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 }}"
@@ -339,6 +341,7 @@ jobs:
run: >
if ! grep --include=test-summary.txt -lqr build/*/test-results -e "TEST SUCCESS" ; then
cat build/*/test-results/*/text/newfailures.txt ;
cat build/*/test-results/*/text/other_errors.txt ;
exit 1 ;
fi
@@ -429,7 +432,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 +580,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 +717,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 }}"
@@ -805,6 +808,7 @@ jobs:
run: >
if ! grep --include=test-summary.txt -lqr build/*/test-results -e "TEST SUCCESS" ; then
cat build/*/test-results/*/text/newfailures.txt ;
cat build/*/test-results/*/text/other_errors.txt ;
exit 1 ;
fi
@@ -847,17 +851,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 +886,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 +1109,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 +1147,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
@@ -1128,6 +1220,7 @@ jobs:
run: >
if ((Get-ChildItem -Path build\*\test-results\test-summary.txt -Recurse | Select-String -Pattern "TEST SUCCESS" ).Count -eq 0) {
Get-Content -Path build\*\test-results\*\*\newfailures.txt ;
Get-Content -Path build\*\test-results\*\*\other_errors.txt ;
exit 1
}
@@ -1191,7 +1284,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 +1386,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 +1517,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 }}"
@@ -1521,6 +1614,7 @@ jobs:
run: >
if ! grep --include=test-summary.txt -lqr build/*/test-results -e "TEST SUCCESS" ; then
cat build/*/test-results/*/text/newfailures.txt ;
cat build/*/test-results/*/text/other_errors.txt ;
exit 1 ;
fi
@@ -1571,6 +1665,7 @@ jobs:
needs:
- prerequisites
- linux_additional_build
- windows_aarch64_build
- linux_x64_test
- linux_x86_test
- windows_x64_test

View File

@@ -1,6 +1,7 @@
[general]
project=jdk
project=jdk-updates
jbs=JDK
version=17.0.3
[checks]
error=author,committer,reviewers,merge,issues,executable,symlink,message,hg-tag,whitespace,problemlists

View File

@@ -11,7 +11,7 @@ can be found on the [releases page](https://github.com/JetBrains/JetBrainsRuntim
| IDE Version | Latest JBR | Date Released |
| --- | --- | --- |
| 2021.3 | [17_0_1-b164.8](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr17_0_1b164.8) | 15-Nov-2021 |
| 2022.2 | [17.0.3-b469.12](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr17.0.3b469.12) | 14-Jun-2022 |
## Contents
- [Welcome to JetBrains Runtime](#jetbrains-runtime)

View File

@@ -507,7 +507,7 @@
</ul>
<h2 id="running-tests">Running Tests</h2>
<p>Most of the JDK tests are using the <a href="http://openjdk.java.net/jtreg">JTReg</a> test framework. Make sure that your configuration knows where to find your installation of JTReg. If this is not picked up automatically, use the <code>--with-jtreg=&lt;path to jtreg home&gt;</code> option to point to the JTReg framework. Note that this option should point to the JTReg home, i.e. the top directory, containing <code>lib/jtreg.jar</code> etc.</p>
<p>The <a href="https://wiki.openjdk.java.net/display/Adoption">Adoption Group</a> provides recent builds of jtreg <a href="https://ci.adoptopenjdk.net/view/Dependencies/job/jtreg/lastSuccessfulBuild/artifact">here</a>. Download the latest <code>.tar.gz</code> file, unpack it, and point <code>--with-jtreg</code> to the <code>jtreg</code> directory that you just unpacked.</p>
<p>The <a href="https://wiki.openjdk.java.net/display/Adoption">Adoption Group</a> provides recent builds of jtreg <a href="https://ci.adoptopenjdk.net/view/Dependencies/job/dependency_pipeline/lastSuccessfulBuild/artifact/jtreg/">here</a>. Download the latest <code>.tar.gz</code> file, unpack it, and point <code>--with-jtreg</code> to the <code>jtreg</code> directory that you just unpacked.</p>
<p>Building of Hotspot Gtest suite requires the source code of Google Test framework. The top directory, which contains both <code>googletest</code> and <code>googlemock</code> directories, should be specified via <code>--with-gtest</code>. The supported version of Google Test is 1.8.1, whose source code can be obtained:</p>
<ul>
<li>by downloading and unpacking the source bundle from <a href="https://github.com/google/googletest/releases/tag/release-1.8.1">here</a></li>

View File

@@ -848,7 +848,7 @@ containing `lib/jtreg.jar` etc.
The [Adoption Group](https://wiki.openjdk.java.net/display/Adoption) provides
recent builds of jtreg [here](
https://ci.adoptopenjdk.net/view/Dependencies/job/jtreg/lastSuccessfulBuild/artifact).
https://ci.adoptopenjdk.net/view/Dependencies/job/dependency_pipeline/lastSuccessfulBuild/artifact/jtreg/).
Download the latest `.tar.gz` file, unpack it, and point `--with-jtreg` to the
`jtreg` directory that you just unpacked.

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>
@@ -179,7 +193,9 @@ TEST FAILURE</code></pre>
<h4 id="aot_modules-1">AOT_MODULES</h4>
<p>Generate AOT modules before testing for the specified module, or set of modules. If multiple modules are specified, they should be separated by space (or, to help avoid quoting issues, the special value <code>%20</code>).</p>
<h4 id="retry_count">RETRY_COUNT</h4>
<p>Retry failed tests up to a set number of times. Defaults to 0.</p>
<p>Retry failed tests up to a set number of times, until they pass. This allows to pass the tests with intermittent failures. Defaults to 0.</p>
<h4 id="repeat_count">REPEAT_COUNT</h4>
<p>Repeat the tests up to a set number of times, stopping at first failure. This helps to reproduce intermittent test failures. Defaults to 0.</p>
<h3 id="gtest-keywords">Gtest keywords</h3>
<h4 id="repeat">REPEAT</h4>
<p>The number of times to repeat the tests (<code>--gtest_repeat</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
@@ -373,7 +419,15 @@ modules. If multiple modules are specified, they should be separated by space
#### RETRY_COUNT
Retry failed tests up to a set number of times. Defaults to 0.
Retry failed tests up to a set number of times, until they pass.
This allows to pass the tests with intermittent failures.
Defaults to 0.
#### REPEAT_COUNT
Repeat the tests up to a set number of times, stopping at first failure.
This helps to reproduce intermittent test failures.
Defaults to 0.
### Gtest keywords

View File

@@ -31,6 +31,7 @@ RUN export DEBIAN_FRONTEND=noninteractive \
libxt-dev \
libxtst-dev \
make \
rsync \
tar \
unzip \
zip && \

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

@@ -1,7 +1,55 @@
FROM i386/ubuntu:xenial
# NOTE: This Dockerfile is meant to be used from the mkdocker_x86.sh script.
RUN linux32 apt-get update && apt-get install -y --no-install-recommends apt-utils
COPY jbrsdk-11.0.5-b1 /jbrsdk-11.0.5-b1
RUN linux32 apt-get -y install file build-essential zip unzip curl libx11-dev libxext-dev \
libxrender-dev libxrandr-dev libxtst-dev libxt-dev libcups2-dev libasound2-data \
libpng12-0 libasound2 libfreetype6 libfontconfig1-dev libasound2-dev autoconf
# Pull a concrete version of Linux that does NOT receive 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 i386/ubuntu:xenial
#FROM i386/ubuntu:bionic
FROM i386/ubuntu:focal
RUN linux32 \
apt-get update && apt-get install -y --no-install-recommends apt-utils
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; \
linux32 \
apt-get -y install \
autoconf \
build-essential \
curl \
file \
git \
libx11-dev \
libxext-dev \
libxrender-dev \
libxrandr-dev \
libxtst-dev \
libxt-dev \
libcups2-dev \
libasound2-data \
# libpng12-0 \
libasound2 \
libfreetype6 \
libfontconfig1-dev \
libasound2-dev \
rsync \
unzip \
zip
RUN linux32 \
apt-get -y install \
g++-10 \
gcc-10 && \
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_x86.tar.gz /jdk17/
RUN cd /jdk17 && tar --strip-components=1 -xzf boot_jdk_x86.tar.gz && rm /jdk17/boot_jdk_x86.tar.gz
ENV BOOT_JDK=/jdk17
RUN git config --global user.email "teamcity@jetbrains.com" && \
git config --global user.name "builduser"

View File

@@ -1,4 +1,7 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -x
# This script creates a Docker image suitable for building AArch64 variant
# of the JetBrains Runtime version 17.

View File

@@ -0,0 +1,29 @@
#!/bin/bash
set -euo pipefail
set -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,29 @@
#!/bin/bash
set -euo pipefail
set -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,26 @@
#!/bin/bash -x
# This script creates a Docker image suitable for building x86 variant
# of the JetBrains Runtime version 17.
BOOT_JDK_REMOTE_FILE=zulu17.34.19-ca-jdk17.0.3-linux_i686.tar.gz
BOOT_JDK_SHA=1c35c374ba0001e675d6e80819d5be900c4e141636d5e484992a8c550be14481
BOOT_JDK_LOCAL_FILE=boot_jdk_x86.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 jetbrains/runtime:jbr17env_x86 -f Dockerfile.x86 .
# 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

@@ -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,6 +47,7 @@ jdk.sctp,
jdk.security.auth,
jdk.security.jgss,
jdk.unsupported,
jdk.unsupported.desktop,
jdk.xml.dom,
jdk.zipfs,
jdk.hotspot.agent,

View File

@@ -1,4 +1,6 @@
#!/bin/sh
#!/bin/bash
set -euo pipefail
# $1 - Boot JDK
# $2 - JBR part of API version

View File

@@ -1,11 +1,65 @@
#!/bin/bash
set -euo pipefail
set -x
function check_bundle_type_maketest() {
# check whether last char is 't', if so remove it
if [ "${bundle_type: -1}" == "t" ]; then
bundle_type="${bundle_type%?}"
do_maketest=1
else
do_maketest=0
fi
}
function getVersionProp() {
grep "^${1}" make/conf/version-numbers.conf | cut -d'=' -f2
}
while getopts ":i?" o; do
case "${o}" in
i) INC_BUILD=1 ;;
esac
done
shift $((OPTIND-1))
if [[ $# -lt 2 ]]; then
echo "Required at least two arguments: build_number bundle_type"
exit 1
fi
build_number=$1
bundle_type=$2
# shellcheck disable=SC2034
architecture=${3:-x64} # aarch64 or x64
check_bundle_type_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 | tr -d ",")
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
STATIC_CONF_ARGS=""
common_conf_props_file="jb/project/tools/common/static_conf_args.txt"
if [[ -f "$common_conf_props_file" ]]; then
STATIC_CONF_ARGS=$(<$common_conf_props_file)
fi
OS_NAME=$(uname -s)
# Enable reproducible builds
TZ=UTC
@@ -21,26 +75,40 @@ case "$OS_NAME" in
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"
;;
*)
# TODO: Windows
;;
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
--with-native-debug-symbols=none"
--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
@@ -69,7 +137,7 @@ function update_jsdk_mods() {
# re-create java.base.jmod with updated hashes
tmp=.java.base.$$.tmp
mkdir "$tmp" || exit $?
hash_modules=$("$JSDK"/bin/jmod describe "$__orig_jsdk_mods"/java.base.jmod | grep hashes | awk '{print $2}' | tr '\n' '|' | sed s/\|$//) || exit $?
hash_modules=$("$__jsdk"/bin/jmod describe "$__orig_jsdk_mods"/java.base.jmod | grep hashes | awk '{print $2}' | tr '\n' '|' | sed s/\|$//) || exit $?
"$__jsdk"/bin/jmod extract --dir "$tmp" "$__orig_jsdk_mods"/java.base.jmod || exit $?
rm "$__updated_jsdk_mods"/java.base.jmod || exit $? # temp exclude from path
"$__jsdk"/bin/jmod \

View File

@@ -0,0 +1 @@
--with-vendor-vm-bug-url=https://youtrack.jetbrains.com/issues/JBR

View File

@@ -1,87 +1,163 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -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
# 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
# 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.
#
# $ ./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')
# 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_aarch64
source jb/project/tools/common/scripts/common.sh
JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}
JCEF_PATH=${JCEF_PATH:=./jcef_linux_aarch64}
sh configure \
--with-debug-level=release \
--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 \
|| exit $?
make clean CONF=linux-aarch64-server-release || exit $?
make images CONF=linux-aarch64-server-release test-image || exit $?
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 \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
|| do_exit $?
}
JBSDK=${JBRSDK_BASE_NAME}-linux-aarch64-b${build_number}
BASE_DIR=build/linux-aarch64-server-release/images
JSDK=${BASE_DIR}/jdk
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
__arch_name=$2
__modules_path=$3
__modules=$4
libc_type_suffix=''
fastdebug_infix=''
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-${libc_type_suffix}aarch64-${fastdebug_infix}b${build_number}
__root_dir=${__bundle_name}-${JBSDK_VERSION}-${libc_type_suffix}aarch64-${fastdebug_infix:-}b${build_number%%.*}
echo Running jlink....
[ -d "$IMAGES_DIR"/"$__root_dir" ] && rm -rf "${IMAGES_DIR:?}"/"$__root_dir"
$JSDK/bin/jlink \
--module-path "$__modules_path" --no-man-pages --compress=2 \
--add-modules "$__modules" --output "$IMAGES_DIR"/"$__root_dir"
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> "$IMAGES_DIR"/"$__root_dir"/release
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
sed 's/JBR/JBRSDK/g' "$IMAGES_DIR"/"$__root_dir"/release > release
mv release "$IMAGES_DIR"/"$__root_dir"/release
cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib
copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz"
fi
# jmod does not preserve file permissions (JDK-8173610)
[ -f "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper ] && chmod a+x "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper
echo Creating "$JBR".tar.gz ...
(cd "$IMAGES_DIR" &&
find "$__root_dir" -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:?}"/"$__root_dir"
}
WITH_DEBUG_LEVEL="--with-debug-level=release"
RELEASE_NAME=linux-aarch64-server-release
case "$bundle_type" in
"jcef")
do_reset_changes=1
do_maketest=1
;;
"nomod" | "")
bundle_type=""
;;
"fd")
do_reset_changes=1
WITH_DEBUG_LEVEL="--with-debug-level=fastdebug"
RELEASE_NAME=linux-aarch64-server-fastdebug
;;
esac
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
JSDK=$IMAGES_DIR/jdk
JSDK_MODS_DIR=$IMAGES_DIR/jmods
JBRSDK_BUNDLE=jbrsdk
echo Fixing permissions
chmod -R a+r $JSDK
rm -rf $BASE_DIR/$JBRSDK_BUNDLE
cp -r $JSDK $BASE_DIR/$JBRSDK_BUNDLE || exit $?
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then
git apply -p0 < jb/project/tools/patches/add_jcef_module_aarch64.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
echo Creating $JBSDK.tar.gz ...
sed 's/JBR/JBRSDK/g' ${BASE_DIR}/${JBRSDK_BUNDLE}/release > release
mv release ${BASE_DIR}/${JBRSDK_BUNDLE}/release
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""
fi
# 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 $?
# create runtime image bundle
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 $?
JBR_BUNDLE=jbr
JBR_BASE_NAME=jbr-$JBSDK_VERSION
rm -rf $BASE_DIR/$JBR_BUNDLE
# 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" == "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 $?
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
echo Running jlink....
${JSDK}/bin/jlink \
--module-path ${JSDK}/jmods --no-man-pages --compress=2 \
--add-modules $(xargs < modules.list.aarch64 | sed s/" "//g | sed s/',$'//g) \
--output ${BASE_DIR}/${JBR_BUNDLE} || exit $?
if [ $do_maketest -eq 1 ]; then
JBRSDK_TEST=${JBRSDK_BUNDLE}-${JBSDK_VERSION}-linux-${libc_type_suffix}test-aarch64-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
echo Modifying release info ...
grep -v \"^JAVA_VERSION\" ${JSDK}/release | grep -v \"^MODULES\" >> ${BASE_DIR}/${JBR_BUNDLE}/release
echo Creating $JBR.tar.gz ...
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
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 $?
do_exit 0

View File

@@ -1,45 +1,29 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -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
while getopts ":i?" o; do
case "${o}" in
i)
i="incremental build"
INC_BUILD=1
;;
esac
done
shift $((OPTIND-1))
JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2
build_number=$3
bundle_type=$4
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
JCEF_PATH=${JCEF_PATH:=./jcef_linux_x64}
source jb/project/tools/common/scripts/common.sh
JCEF_PATH=${JCEF_PATH:=./jcef_linux_x64}
function do_configure {
sh configure \
$WITH_DEBUG_LEVEL \
@@ -51,46 +35,65 @@ function do_configure {
--with-version-opt=b"$build_number" \
--with-boot-jdk="$BOOT_JDK" \
--enable-cds=yes \
$STATIC_CONF_ARGS \
$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
__arch_name=$2
__modules_path=$3
__modules=$4
libc_type_suffix=''
fastdebug_infix=''
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}
__root_dir=${__bundle_name}-${JBSDK_VERSION}-${libc_type_suffix}x64-${fastdebug_infix:-}b${build_number%%.*}
echo Running jlink....
[ -d "$IMAGES_DIR"/"$__arch_name" ] && rm -rf "${IMAGES_DIR:?}"/"$__arch_name"
[ -d "$IMAGES_DIR"/"$__root_dir" ] && rm -rf "${IMAGES_DIR:?}"/"$__root_dir"
$JSDK/bin/jlink \
--module-path "$__modules_path" --no-man-pages --compress=2 \
--add-modules "$__modules" --output "$IMAGES_DIR"/"$__arch_name"
--add-modules "$__modules" --output "$IMAGES_DIR"/"$__root_dir"
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> "$IMAGES_DIR"/"$__arch_name"/release
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> "$IMAGES_DIR"/"$__root_dir"/release
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
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
sed 's/JBR/JBRSDK/g' "$IMAGES_DIR"/"$__root_dir"/release > release
mv release "$IMAGES_DIR"/"$__root_dir"/release
cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib
copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/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
[ -f "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper ] && chmod a+x "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper
echo Creating "$JBR".tar.gz ...
(cd "$IMAGES_DIR" &&
find "$__arch_name" -print0 | LC_ALL=C sort -z | \
find "$__root_dir" -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"
rm -rf "${IMAGES_DIR:?}"/"$__root_dir"
}
WITH_DEBUG_LEVEL="--with-debug-level=release"
@@ -99,12 +102,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=""
@@ -116,7 +114,7 @@ case "$bundle_type" in
;;
esac
if [ -z "$INC_BUILD" ]; then
if [ -z "${INC_BUILD:-}" ]; then
do_configure || do_exit $?
make clean CONF=$RELEASE_NAME || do_exit $?
fi
@@ -130,28 +128,31 @@ 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
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""
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"

View File

@@ -1,80 +1,143 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -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
# 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)
#
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
JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}
function do_configure {
linux32 bash 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" \
$STATIC_CONF_ARGS \
--enable-cds=yes \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
|| do_exit $?
}
[ -z "$bundle_type" ] && (git apply -p0 < jb/project/tools/patches/exclude_jcef_module.patch || 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
}
linux32 bash configure \
--with-debug-level=release \
--with-vendor-name="${VENDOR_NAME}" \
--with-vendor-version-string="${VENDOR_VERSION_STRING}" \
--with-version-pre= \
--with-version-build=$JDK_BUILD_NUMBER \
--with-version-opt=b${build_number} \
--with-boot-jdk=${BOOT_JDK} \
--enable-cds=yes || exit $?
make clean CONF=linux-x86-server-release || exit $?
make images CONF=linux-x86-server-release test-image || exit $?
function create_image_bundle {
__bundle_name=$1
__arch_name=$2
__modules_path=$3
__modules=$4
JBSDK=${JBRSDK_BASE_NAME}-linux-x86-b${build_number}
BASE_DIR=build/linux-x86-server-release/images
JSDK=${BASE_DIR}/jdk
libc_type_suffix=''
fastdebug_infix=''
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-${libc_type_suffix}x86-${fastdebug_infix}b${build_number}
__root_dir=${__bundle_name}-${JBSDK_VERSION}-${libc_type_suffix}x86-${fastdebug_infix:-}b${build_number%%.*}
echo Running jlink....
[ -d "$IMAGES_DIR"/"$__root_dir" ] && rm -rf "${IMAGES_DIR:?}"/"$__root_dir"
$JSDK/bin/jlink \
--module-path "$__modules_path" --no-man-pages --compress=2 \
--add-modules "$__modules" --output "$IMAGES_DIR"/"$__root_dir"
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> "$IMAGES_DIR"/"$__root_dir"/release
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
sed 's/JBR/JBRSDK/g' "$IMAGES_DIR"/"$__root_dir"/release > release
mv release "$IMAGES_DIR"/"$__root_dir"/release
cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib
copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz"
fi
# jmod does not preserve file permissions (JDK-8173610)
[ -f "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper ] && chmod a+x "$IMAGES_DIR"/"$__root_dir"/lib/jcef_helper
echo Creating "$JBR".tar.gz ...
(cd "$IMAGES_DIR" &&
find "$__root_dir" -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:?}"/"$__root_dir"
}
WITH_DEBUG_LEVEL="--with-debug-level=release"
RELEASE_NAME=linux-x86-server-release
case "$bundle_type" in
"jcef")
echo "not implemented" && do_exit 1
;;
"nomod" | "")
bundle_type=""
;;
"fd")
do_reset_changes=1
WITH_DEBUG_LEVEL="--with-debug-level=fastdebug"
RELEASE_NAME=linux-x86-server-fastdebug
;;
esac
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
JSDK=$IMAGES_DIR/jdk
JSDK_MODS_DIR=$IMAGES_DIR/jmods
JBRSDK_BUNDLE=jbrsdk
echo Fixing permissions
chmod -R a+r $JSDK
rm -rf $BASE_DIR/$JBRSDK_BUNDLE
cp -r $JSDK $BASE_DIR/$JBRSDK_BUNDLE || exit $?
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""
fi
echo Creating $JBSDK.tar.gz ...
sed 's/JBR/JBRSDK/g' ${BASE_DIR}/${JBRSDK_BUNDLE}/release > release
mv release ${BASE_DIR}/${JBRSDK_BUNDLE}/release
# create runtime image bundle
modules=$(grep -v "jdk.internal.vm" jb/project/tools/common/modules.list | xargs | sed s/" "//g) || do_exit $?
create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" || do_exit $?
tar -pcf $JBSDK.tar --exclude=*.debuginfo --exclude=demo --exclude=sample --exclude=man -C $BASE_DIR ${JBRSDK_BUNDLE} || exit $?
gzip $JBSDK.tar || 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 $?
create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" $JBRSDK_BUNDLE $JSDK_MODS_DIR "$modules" || do_exit $?
JBR_BUNDLE=jbr
JBR_BASE_NAME=jbr-$JBSDK_VERSION
rm -rf $BASE_DIR/$JBR_BUNDLE
if [ $do_maketest -eq 1 ]; then
JBRSDK_TEST=${JBRSDK_BUNDLE}-${JBSDK_VERSION}-linux-${libc_type_suffix}test-x86-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
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
echo Running jlink....
${JSDK}/bin/jlink \
--module-path ${JSDK}/jmods --no-man-pages --compress=2 \
--add-modules $(xargs < modules.list.x86 | sed s/" "//g | sed s/,$//g) --output ${BASE_DIR}/${JBR_BUNDLE} || exit $?
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 $?
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 $?
do_exit 0

View File

@@ -1,52 +1,32 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -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
# 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
while getopts ":i?" o; do
case "${o}" in
i)
i="incremental build"
INC_BUILD=1
;;
esac
done
shift $((OPTIND-1))
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}
BOOT_JDK=${BOOT_JDK:=$(/usr/libexec/java_home -v 16)}
source jb/project/tools/common/scripts/common.sh
JCEF_PATH=${JCEF_PATH:=./jcef_mac}
BOOT_JDK=${BOOT_JDK:=$(/usr/libexec/java_home -v 16)}
function do_configure {
if [[ "${architecture}" == *aarch64* ]]; then
sh configure \
@@ -66,7 +46,9 @@ function do_configure {
--with-extra-cflags="-F$(pwd)/Frameworks" \
--with-extra-cxxflags="-F$(pwd)/Frameworks" \
--with-extra-ldflags="-F$(pwd)/Frameworks" \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
|| do_exit $?
else
sh configure \
@@ -82,7 +64,9 @@ function do_configure {
--with-boot-jdk="$BOOT_JDK" \
--with-macosx-version-max="${MACOSX_VERSION_MAX:="10.12.00"}" \
--enable-cds=yes \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
|| do_exit $?
fi
}
@@ -93,13 +77,16 @@ function create_image_bundle {
__modules_path=$3
__modules=$4
fastdebug_infix=''
tmp=.bundle.$$.tmp
mkdir "$tmp" || do_exit $?
[ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-"
JBR=${__bundle_name}-${JBSDK_VERSION}-osx-${architecture}-${fastdebug_infix}b${build_number}
JBR=${__bundle_name}-${JBSDK_VERSION}-osx-${architecture}-${fastdebug_infix:-}b${build_number}
__root_dir=${__bundle_name}-${JBSDK_VERSION}-${architecture}-${fastdebug_infix:-}b${build_number%%.*}
JRE_CONTENTS=$tmp/$__arch_name/Contents
JRE_CONTENTS=$tmp/$__root_dir/Contents
mkdir -p "$JRE_CONTENTS" || do_exit $?
echo Running jlink...
@@ -111,7 +98,9 @@ function create_image_bundle {
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
sed 's/JBR/JBRSDK/g' $JRE_CONTENTS/Home/release > release
mv release $JRE_CONTENTS/Home/release
cp $IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk/Contents/Home/lib/src.zip $JRE_CONTENTS/Home/lib
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"
@@ -121,10 +110,10 @@ function create_image_bundle {
echo Creating "$JBR".tar.gz ...
# Normalize timestamp
find "$tmp"/"$__arch_name" -print0 | xargs -0 touch -c -h -t "$TOUCH_TIME"
find "$tmp"/"$__root_dir" -print0 | xargs -0 touch -c -h -t "$TOUCH_TIME"
(cd "$tmp" &&
find "$__arch_name" -print0 | LC_ALL=C sort -z | \
find "$__root_dir" -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
@@ -141,12 +130,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=""
@@ -159,7 +143,7 @@ case "$bundle_type" in
;;
esac
if [ -z "$INC_BUILD" ]; then
if [ -z "${INC_BUILD:-}" ]; then
do_configure || do_exit $?
make clean CONF=$RELEASE_NAME || do_exit $?
fi
@@ -167,35 +151,35 @@ make images CONF=$RELEASE_NAME || do_exit $?
IMAGES_DIR=build/$RELEASE_NAME/images
major_version=$(echo "$JBSDK_VERSION_WITH_DOTS" | awk -F "." '{print $1}')
minor_version=$(echo "$JBSDK_VERSION_WITH_DOTS" | awk -F "." '{print $3}')
[ -z "$minor_version" -o "$minor_version" = "0" ] && version_dir=$major_version || version_dir=$JBSDK_VERSION_WITH_DOTS
JSDK=$IMAGES_DIR/jdk-bundle/jdk-$version_dir.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
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""
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 $?

View File

@@ -1,4 +1,7 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -x
APP_DIRECTORY=$1
APPL_USER=$2

View File

@@ -1,4 +1,7 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -x
APPLICATION_PATH=$1
APP_NAME=$2
@@ -97,8 +100,11 @@ 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
mkdir -p unsigned
pkgbuild --identifier $BUNDLE_ID --root $APPLICATION_PATH \
--install-location /Library/Java/JavaVirtualMachines/${BUILD_NAME} unsigned/${APP_NAME}.pkg
productsign --timestamp --sign "$JB_INSTALLER_CERT" unsigned/${APP_NAME}.pkg ${APP_NAME}.pkg
#log "Signing whole app..."
#codesign --timestamp \

View File

@@ -1,7 +1,8 @@
#!/bin/bash -x
#!/bin/bash
#immediately exit script with an error if a command fails
set -euo pipefail
set -x
export COPY_EXTENDED_ATTRIBUTES_DISABLE=true
export COPYFILE_DISABLE=true
@@ -44,8 +45,7 @@ fi
log "$INPUT_FILE extracted and removed"
APP_NAME=$(echo ${INPUT_FILE} | awk -F".tar" '{ print $1 }')
APPLICATION_PATH=$(sed "s/osx-//" <<< "$EXPLODED/$APP_NAME")
mv $EXPLODED/$BUILD_NAME $APPLICATION_PATH
APPLICATION_PATH=$EXPLODED/$(ls $EXPLODED)
find "$APPLICATION_PATH/Contents/Home/bin" \
-maxdepth 1 -type f -name '*.jnilib' -print0 |

View File

@@ -1,8 +1,8 @@
diff --git modules.list modules.list
index 054f21d1ee0..d9a121f0273 100644
--- modules.list
+++ modules.list
@@ -49,4 +49,7 @@ jdk.unsupported,
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,

View File

@@ -0,0 +1,30 @@
diff --git jb/project/tools/common/modules.list jb/project/tools/common/modules.list
index 522acb7..c40e689 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,
-jdk.jcmd
+jdk.jcmd,
+jcef,
+gluegen.rt,
+jogl.all
diff --git src/java.desktop/share/classes/module-info.java src/java.desktop/share/classes/module-info.java
index 897647e..781d180 100644
--- src/java.desktop/share/classes/module-info.java
+++ src/java.desktop/share/classes/module-info.java
@@ -116,7 +116,11 @@ module java.desktop {
// see make/GensrcModuleInfo.gmk
exports sun.awt to
jdk.accessibility,
- jdk.unsupported.desktop;
+ jdk.unsupported.desktop,
+ jcef,
+ jogl.all;
+
+ exports java.awt.peer to jcef;
exports java.awt.dnd.peer to jdk.unsupported.desktop;
exports sun.awt.dnd to jdk.unsupported.desktop;

File diff suppressed because it is too large Load Diff

View File

@@ -1,29 +0,0 @@
From 9b18096f241be0350245868e8cf26729f6c3d110 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/45] 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 db5b8da58fc..6d9e5116df1 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 784dd5e16922110b0ee802d5bf1063e2b94499bc 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/45] 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 5308b079e67..c1b1b354541 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 a48e07e3a6a..3551b06ecde 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 97ab12615a56e90993b5df4615c6dbd7eb856ebb 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/45] 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 c1b1b354541..ad05b4f34cf 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 cb8d0e41bed94d0c8b8a4c51f692a4ca66dc3672 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/45] 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 ad05b4f34cf..95be32f0070 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 74de59c61db380a0e1c85686714bd9a3f1b29210 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/45] 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 845a39b0225..fb6d1667156 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 c00c2a58550ae33ab2c842b521bf3b73163a93a1 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/45] 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 c04d57e5278aa5d3cb6ef53fc161d2b6b4f19f3c 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/45] 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 6d9e5116df1..1e2b40dd1f2 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);
@@ -3808,7 +3808,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 3e9df9bdd901f1a7f7af57f2d37a738c059e3bb3 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/45] 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 2a27d36f5fbb0ebd94da192355f3946138c495bd 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/45] 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 a27c2ff87ae..001d2c782d8 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 09af8da3c8fcb6d97917951673a56696fd7d6a2b 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/45] 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 fc0d2894212fd2186498d3341dddf2f201965686 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/45] 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 c181fe044e2..a8ac12450d7 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 d20a52a5e7a87003da6f3e4bda39ec2976868a75 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/45] 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 001d2c782d8..d742679d199 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 b315e7cd828e79d63562b0296b97795015b644af 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/45] 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 d742679d199..1433e429e30 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 25d78e62a702ad754c1a3a0136db1453089f008e 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/45] 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 b84814b31883b0f5441fca6d77b18c7426d26c36 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/45] 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 1433e429e30..af34d751bdb 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 61f62e7f831..43f1aff8e91 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 9da70fec073a442e9c0aee19a5ec643c1f84cea5 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/45] 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 9661f2b62b9..252ebbc4e57 100644
--- a/src/hotspot/share/runtime/arguments.cpp
+++ b/src/hotspot/share/runtime/arguments.cpp
@@ -4027,6 +4027,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 5d065e823c431a80251696c2543f6c98e68f00a6 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/45] 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 a8ac12450d7..ab2d7f10f9c 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;
@@ -3828,7 +3828,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 af34d751bdb..0b1db1581d1 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 43f1aff8e91..ae0a15281f3 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 3adc03a6583..b8eb4d0ab24 100644
--- a/src/hotspot/share/runtime/arguments.hpp
+++ b/src/hotspot/share/runtime/arguments.hpp
@@ -487,6 +487,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 09f5f22d61675a9f8909e903fa6e6f51507b656c 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/45] 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 0b1db1581d1..b88c071be13 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 90b8572ff42dd5f64a6d2063aab6842bceddcf55 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/45] 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 86f7318e889fcb0d883501b4a70105d087b39482 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/45] 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 ab2d7f10f9c..bcb0da6301f 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 79ea607bf68161cfcee3a681d14540cffe5589a3 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/45] 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 99c65ab84080d35c1ba1df6efd5641ad3ab9e1e8 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/45] 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 e7e7920986355d6fd5ad0c333ec780c93583d030 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/45] 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 252ebbc4e57..9c6fab8ae4b 100644
--- a/src/hotspot/share/runtime/arguments.cpp
+++ b/src/hotspot/share/runtime/arguments.cpp
@@ -4034,6 +4034,8 @@ jint Arguments::parse(const JavaVMInitArgs* initial_cmd_args) {
}
}
+ setup_hotswap_agent();
+
#if !INCLUDE_CDS
if (DumpSharedSpaces || RequireSharedSpaces) {
jio_fprintf(defaultStream::error_stream(),
@@ -4390,3 +4392,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 b8eb4d0ab24..a14e11b48ef 100644
--- a/src/hotspot/share/runtime/arguments.hpp
+++ b/src/hotspot/share/runtime/arguments.hpp
@@ -496,6 +496,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 fb6d1667156..20838a878ce 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 854df9651b358f3a8d89cd8a7d60fed26ca3d1d5 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/45] 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 b88c071be13..fb9da134e97 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 ae0a15281f3..d0d2f78aa62 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 01f4cb9929cad1512d02e20cc7538a29ff0d3ef1 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/45] 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 fb9da134e97..890382e2029 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 cac2eac1986ae05e264b2213d0d2658e2f57f07f 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/45] 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 890382e2029..90dfc1ae545 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 4c87af809d20a12553f155110592a9f230ec0ea5 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/45] 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 90dfc1ae545..10407755457 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 c4941350aa7d3c5df3a20652f640fe446ff00c5c 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/45] 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 bcb0da6301f..c5f37d42a9a 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 10407755457..e87d4452d31 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 dad40d31ec8a1633189e70eff57ae5fd21544b20 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/45] 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 e87d4452d31..0aeeea4e7a4 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 d0d2f78aa62..252287a3697 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 7fcef1a84c37c568c0afafb8cb22303efda68f0d 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/45] 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 c5f37d42a9a..9920e7fb25d 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 0aeeea4e7a4..e7f26b7d08e 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 e16371268f8ba1c752dc61635a09c94e978f5117 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/45] 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 4d7390cedc3d06281f6a89f12b469108f11aab42 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/45] 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 e7f26b7d08e..4d145f30100 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 24fe3ebd655068b819a437af62d40c2ee9ed7171 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/45] 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 4d145f30100..8615806ac98 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 3e62ad1914f202d2d3fe907036924e181cd60fcb 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/45] 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 4cfb8eb8caa9b13f54f21cdd34b4d761b2b488cc 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/45] 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

@@ -1,222 +0,0 @@
From 92651c5d109896613e14792aa96ed5226a797f9b Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 10 Oct 2021 20:25:30 +0200
Subject: [PATCH 40/45] 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.
---
src/hotspot/share/prims/jvmtiExtensions.cpp | 24 ++++++++++++++
.../share/native/libjdwp/VirtualMachineImpl.c | 20 +++++++++++
.../share/native/libjdwp/commonRef.c | 29 ++++++++++++++++
.../share/native/libjdwp/commonRef.h | 2 ++
.../share/native/libjdwp/util.c | 33 +++++++++++++++++++
.../share/native/libjdwp/util.h | 3 ++
6 files changed, 111 insertions(+)
diff --git a/src/hotspot/share/prims/jvmtiExtensions.cpp b/src/hotspot/share/prims/jvmtiExtensions.cpp
index a3fc430e1d1..ab2e663b95d 100644
--- a/src/hotspot/share/prims/jvmtiExtensions.cpp
+++ b/src/hotspot/share/prims/jvmtiExtensions.cpp
@@ -49,6 +49,15 @@ static jvmtiError JNICALL IsClassUnloadingEnabled(const jvmtiEnv* env, ...) {
return JVMTI_ERROR_NONE;
}
+// extension function
+static jvmtiError JNICALL IsEnhancedClassRedefinitionEnabled(const jvmtiEnv* env, jboolean* enabled, ...) {
+ if (enabled == NULL) {
+ return JVMTI_ERROR_NULL_POINTER;
+ }
+ *enabled = (jboolean)AllowEnhancedClassRedefinition;
+ return JVMTI_ERROR_NONE;
+}
+
// register extension functions and events. In this implementation we
// have a single extension function (to prove the API) that tests if class
// unloading is enabled or disabled. We also have a single extension event
@@ -88,6 +97,21 @@ void JvmtiExtensions::register_extensions() {
event_params
};
_ext_events->append(&ext_event);
+
+ static jvmtiParamInfo func_params_enh_redef[] = {
+ { (char*)"IsEnhancedClassRedefinitionEnabled", JVMTI_KIND_OUT, JVMTI_TYPE_JBOOLEAN, JNI_FALSE }
+
+ };
+ static jvmtiExtensionFunctionInfo ext_func_enh_redef = {
+ (jvmtiExtensionFunction)IsEnhancedClassRedefinitionEnabled,
+ (char*)"com.sun.hotspot.functions.IsEnhancedClassRedefinitionEnabled",
+ (char*)"Tell if enhanced class redefinition is enabled (-noclassgc)",
+ sizeof(func_params_enh_redef)/sizeof(func_params_enh_redef[0]),
+ func_params_enh_redef,
+ 0, // no non-universal errors
+ NULL
+ };
+ _ext_functions->append(&ext_func_enh_redef);
}
diff --git a/src/jdk.jdwp.agent/share/native/libjdwp/VirtualMachineImpl.c b/src/jdk.jdwp.agent/share/native/libjdwp/VirtualMachineImpl.c
index c07bdac2922..7e3070d7d1d 100644
--- a/src/jdk.jdwp.agent/share/native/libjdwp/VirtualMachineImpl.c
+++ b/src/jdk.jdwp.agent/share/native/libjdwp/VirtualMachineImpl.c
@@ -477,6 +477,14 @@ redefineClasses(PacketInputStream *in, PacketOutputStream *out)
if (ok == JNI_TRUE) {
jvmtiError error;
+ jlong classIds[classCount];
+
+ if (gdata->isEnhancedClassRedefinitionEnabled) {
+ for (i = 0; i < classCount; ++i) {
+ classIds[i] = commonRef_refToID(env, classDefs[i].klass);
+ }
+ }
+
error = JVMTI_FUNC_PTR(gdata->jvmti,RedefineClasses)
(gdata->jvmti, classCount, classDefs);
if (error != JVMTI_ERROR_NONE) {
@@ -486,6 +494,18 @@ redefineClasses(PacketInputStream *in, PacketOutputStream *out)
for ( i = 0 ; i < classCount; i++ ) {
eventHandler_freeClassBreakpoints(classDefs[i].klass);
}
+
+ if (gdata->isEnhancedClassRedefinitionEnabled) {
+ /* Update tags in jvmti to use new classes */
+ for ( i = 0 ; i < classCount; i++ ) {
+ /* pointer in classIds[i] is updated by advanced redefinition to a new class */
+ error = commonRef_updateTags(env, classIds[i]);
+ if (error != JVMTI_ERROR_NONE) {
+ break;
+ }
+ }
+ }
+
}
}
diff --git a/src/jdk.jdwp.agent/share/native/libjdwp/commonRef.c b/src/jdk.jdwp.agent/share/native/libjdwp/commonRef.c
index bc7ddb660bf..f8cb8e36f17 100644
--- a/src/jdk.jdwp.agent/share/native/libjdwp/commonRef.c
+++ b/src/jdk.jdwp.agent/share/native/libjdwp/commonRef.c
@@ -712,3 +712,32 @@ commonRef_unlock(void)
{
debugMonitorExit(gdata->refLock);
}
+
+/*
+ * Update JVMTI tags, used from enhanced redefinition
+ */
+jvmtiError
+commonRef_updateTags(JNIEnv *env, jlong id)
+{
+ jvmtiError error;
+
+ error = JVMTI_ERROR_NONE;
+
+ if (id == NULL_OBJECT_ID) {
+ return error;
+ }
+
+ debugMonitorEnter(gdata->refLock); {
+ RefNode *node;
+
+ node = findNodeByID(env, id);
+ if (node != NULL) {
+ error = JVMTI_FUNC_PTR(gdata->jvmti, SetTag)
+ (gdata->jvmti, node->ref, ptr_to_jlong(node));
+ } else {
+ printf("Node not found\n");
+ }
+ } debugMonitorExit(gdata->refLock);
+
+ return error;
+}
diff --git a/src/jdk.jdwp.agent/share/native/libjdwp/commonRef.h b/src/jdk.jdwp.agent/share/native/libjdwp/commonRef.h
index c3700f8c743..35c77e4adbf 100644
--- a/src/jdk.jdwp.agent/share/native/libjdwp/commonRef.h
+++ b/src/jdk.jdwp.agent/share/native/libjdwp/commonRef.h
@@ -43,4 +43,6 @@ void commonRef_compact(void);
void commonRef_lock(void);
void commonRef_unlock(void);
+jvmtiError commonRef_updateTags(JNIEnv *env, jlong id);
+
#endif
diff --git a/src/jdk.jdwp.agent/share/native/libjdwp/util.c b/src/jdk.jdwp.agent/share/native/libjdwp/util.c
index 2403c5273ba..b4a5ad183e0 100644
--- a/src/jdk.jdwp.agent/share/native/libjdwp/util.c
+++ b/src/jdk.jdwp.agent/share/native/libjdwp/util.c
@@ -43,6 +43,7 @@ BackendGlobalData *gdata = NULL;
static jboolean isInterface(jclass clazz);
static jboolean isArrayClass(jclass clazz);
static char * getPropertyUTF8(JNIEnv *env, char *propertyName);
+static jboolean isEnhancedClassRedefinitionEnabled(JNIEnv *env);
/* Save an object reference for use later (create a NewGlobalRef) */
void
@@ -285,6 +286,8 @@ util_initialize(JNIEnv *env)
}
}
+ gdata->isEnhancedClassRedefinitionEnabled = isEnhancedClassRedefinitionEnabled(env);
+
} END_WITH_LOCAL_REFS(env);
}
@@ -1701,6 +1704,36 @@ getPropertyUTF8(JNIEnv *env, char *propertyName)
return value;
}
+static jboolean
+isEnhancedClassRedefinitionEnabled(JNIEnv *env)
+{
+ jvmtiError error;
+ jint count, i;
+ jvmtiExtensionFunctionInfo* ext_funcs;
+
+ error = JVMTI_FUNC_PTR(gdata->jvmti,GetExtensionFunctions)
+ (gdata->jvmti, &count, &ext_funcs);
+ if (error != JVMTI_ERROR_NONE) {
+ return JNI_FALSE;
+ }
+
+ for (i=0; i<count; i++) {
+ if (strcmp(ext_funcs[i].id, (char*)"com.sun.hotspot.functions.IsEnhancedClassRedefinitionEnabled") == 0) {
+ jboolean enabled;
+ error = (*ext_funcs[i].func)(gdata->jvmti, &enabled);
+
+ if (error != JVMTI_ERROR_NONE) {
+ return JNI_FALSE;
+ } else {
+ return enabled;
+ }
+ }
+ }
+
+ return JNI_FALSE;
+}
+
+
jboolean
isMethodObsolete(jmethodID method)
{
diff --git a/src/jdk.jdwp.agent/share/native/libjdwp/util.h b/src/jdk.jdwp.agent/share/native/libjdwp/util.h
index f62b5c409f0..6de8f17bb23 100644
--- a/src/jdk.jdwp.agent/share/native/libjdwp/util.h
+++ b/src/jdk.jdwp.agent/share/native/libjdwp/util.h
@@ -133,6 +133,9 @@ typedef struct {
int objectsByIDsize;
int objectsByIDcount;
+ /* true if enhanced class redefinition is enabled */
+ jboolean isEnhancedClassRedefinitionEnabled;
+
/* Indication that the agent has been loaded */
jboolean isLoaded;
--
2.23.0

View File

@@ -1,54 +0,0 @@
From 7cfd70e1e43bca677b9827a5a7643bb604e6ae38 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Mon, 11 Oct 2021 20:22:26 +0200
Subject: [PATCH 41/45] JBR-3867 - fix msvc compilation issue with non const
array on stack
---
.../share/native/libjdwp/VirtualMachineImpl.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/jdk.jdwp.agent/share/native/libjdwp/VirtualMachineImpl.c b/src/jdk.jdwp.agent/share/native/libjdwp/VirtualMachineImpl.c
index 7e3070d7d1d..669fac7cb5b 100644
--- a/src/jdk.jdwp.agent/share/native/libjdwp/VirtualMachineImpl.c
+++ b/src/jdk.jdwp.agent/share/native/libjdwp/VirtualMachineImpl.c
@@ -477,11 +477,16 @@ redefineClasses(PacketInputStream *in, PacketOutputStream *out)
if (ok == JNI_TRUE) {
jvmtiError error;
- jlong classIds[classCount];
+ jlong* classIds = NULL;
if (gdata->isEnhancedClassRedefinitionEnabled) {
- for (i = 0; i < classCount; ++i) {
- classIds[i] = commonRef_refToID(env, classDefs[i].klass);
+ classIds = jvmtiAllocate(classCount*(int)sizeof(jlong));
+ if (classIds == NULL) {
+ outStream_setError(out, JDWP_ERROR(OUT_OF_MEMORY));
+ return JNI_TRUE;
+ }
+ for (i = 0; i < classCount; i++) {
+ classIds[i] = commonRef_refToID(env, classDefs[i].klass);
}
}
@@ -495,7 +500,7 @@ redefineClasses(PacketInputStream *in, PacketOutputStream *out)
eventHandler_freeClassBreakpoints(classDefs[i].klass);
}
- if (gdata->isEnhancedClassRedefinitionEnabled) {
+ if (gdata->isEnhancedClassRedefinitionEnabled && classIds != NULL) {
/* Update tags in jvmti to use new classes */
for ( i = 0 ; i < classCount; i++ ) {
/* pointer in classIds[i] is updated by advanced redefinition to a new class */
@@ -504,6 +509,7 @@ redefineClasses(PacketInputStream *in, PacketOutputStream *out)
break;
}
}
+ jvmtiDeallocate((void*) classIds);
}
}
--
2.23.0

View File

@@ -1,31 +0,0 @@
From d41ca807dcf4f192bc730c577acb5d2bff0aa3f7 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Tue, 19 Oct 2021 17:02:35 +0200
Subject: [PATCH 42/45] Attempt to fix JBR-3887
---
src/hotspot/share/prims/jvmtiExtensions.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/hotspot/share/prims/jvmtiExtensions.cpp b/src/hotspot/share/prims/jvmtiExtensions.cpp
index ab2e663b95d..698d32a7228 100644
--- a/src/hotspot/share/prims/jvmtiExtensions.cpp
+++ b/src/hotspot/share/prims/jvmtiExtensions.cpp
@@ -50,7 +50,13 @@ static jvmtiError JNICALL IsClassUnloadingEnabled(const jvmtiEnv* env, ...) {
}
// extension function
-static jvmtiError JNICALL IsEnhancedClassRedefinitionEnabled(const jvmtiEnv* env, jboolean* enabled, ...) {
+static jvmtiError JNICALL IsEnhancedClassRedefinitionEnabled(const jvmtiEnv* env, ...) {
+ jboolean* enabled = NULL;
+ va_list ap;
+
+ va_start(ap, env);
+ enabled = va_arg(ap, jboolean *);
+ va_end(ap);
if (enabled == NULL) {
return JVMTI_ERROR_NULL_POINTER;
}
--
2.23.0

View File

@@ -1,180 +0,0 @@
From 91534f381bf08471b7e6e5064d561fb75e2890c6 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Mon, 1 Nov 2021 19:00:41 +0100
Subject: [PATCH 43/45] 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.
---
src/hotspot/share/compiler/compileBroker.cpp | 38 ++++++++++++++++++--
src/hotspot/share/compiler/compileBroker.hpp | 6 ++++
src/hotspot/share/prims/jvmtiEnv.cpp | 7 ++++
src/hotspot/share/runtime/mutexLocker.cpp | 3 ++
src/hotspot/share/runtime/mutexLocker.hpp | 1 +
5 files changed, 53 insertions(+), 2 deletions(-)
diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp
index aaf8e4b1f1e..878bc265d2f 100644
--- a/src/hotspot/share/compiler/compileBroker.cpp
+++ b/src/hotspot/share/compiler/compileBroker.cpp
@@ -140,6 +140,8 @@ CompileLog** CompileBroker::_compiler2_logs = NULL;
// These counters are used to assign an unique ID to each compilation.
volatile jint CompileBroker::_compilation_id = 0;
volatile jint CompileBroker::_osr_compilation_id = 0;
+volatile bool CompileBroker::_compilation_stopped = false;
+volatile int CompileBroker::_active_compilations = 0;
// Performance counters
PerfCounter* CompileBroker::_perf_total_compilation = NULL;
@@ -2320,8 +2322,19 @@ void CompileBroker::invoke_compiler_on_method(CompileTask* task) {
locker.wait();
}
}
- comp->compile_method(&ci_env, target, osr_bci, true, directive);
-
+ if (AllowEnhancedClassRedefinition) {
+ {
+ MonitorLocker locker(DcevmCompilation_lock, Mutex::_no_safepoint_check_flag);
+ while (_compilation_stopped) {
+ locker.wait();
+ }
+ Atomic::add(&_active_compilations, 1);
+ }
+ comp->compile_method(&ci_env, target, osr_bci, true, directive);
+ Atomic::sub(&_active_compilations, 1);
+ } else {
+ comp->compile_method(&ci_env, target, osr_bci, true, directive);
+ }
/* Repeat compilation without installing code for profiling purposes */
int repeat_compilation_count = directive->RepeatCompilationOption;
while (repeat_compilation_count > 0) {
@@ -2329,6 +2342,7 @@ void CompileBroker::invoke_compiler_on_method(CompileTask* task) {
comp->compile_method(&ci_env, target, osr_bci, false , directive);
repeat_compilation_count--;
}
+
}
if (!ci_env.failing() && task->code() == NULL) {
@@ -2942,3 +2956,23 @@ void CompileBroker::print_heapinfo(outputStream* out, const char* function, size
}
out->print_cr("\n__ CodeHeapStateAnalytics total duration %10.3f seconds _________\n", ts_total.seconds());
}
+
+void CompileBroker::stopCompilationBeforeEnhancedRedefinition() {
+ if (AllowEnhancedClassRedefinition) {
+ MonitorLocker locker(DcevmCompilation_lock, Mutex::_no_safepoint_check_flag);
+ _compilation_stopped = true;
+ while (_active_compilations > 0) {
+ VM_ThreadsSuspendJVMTI tsj; // force safepoint to run C1/C2 VM op
+ VMThread::execute(&tsj);
+ locker.wait(10);
+ }
+ }
+}
+
+void CompileBroker::releaseCompilationAfterEnhancedRedefinition() {
+ if (AllowEnhancedClassRedefinition) {
+ MonitorLocker locker(DcevmCompilation_lock, Mutex::_no_safepoint_check_flag);
+ _compilation_stopped = false;
+ locker.notify_all();
+ }
+}
diff --git a/src/hotspot/share/compiler/compileBroker.hpp b/src/hotspot/share/compiler/compileBroker.hpp
index 0b721f83121..f146ff5c93d 100644
--- a/src/hotspot/share/compiler/compileBroker.hpp
+++ b/src/hotspot/share/compiler/compileBroker.hpp
@@ -175,6 +175,9 @@ class CompileBroker: AllStatic {
static volatile jint _compilation_id;
static volatile jint _osr_compilation_id;
+ static volatile bool _compilation_stopped;
+ static volatile int _active_compilations;
+
static CompileQueue* _c2_compile_queue;
static CompileQueue* _c1_compile_queue;
@@ -423,6 +426,9 @@ public:
// CodeHeap State Analytics.
static void print_info(outputStream *out);
static void print_heapinfo(outputStream *out, const char* function, size_t granularity);
+
+ static void stopCompilationBeforeEnhancedRedefinition();
+ static void releaseCompilationAfterEnhancedRedefinition();
};
#endif // SHARE_COMPILER_COMPILEBROKER_HPP
diff --git a/src/hotspot/share/prims/jvmtiEnv.cpp b/src/hotspot/share/prims/jvmtiEnv.cpp
index 8970d7991b7..9ca8e660197 100644
--- a/src/hotspot/share/prims/jvmtiEnv.cpp
+++ b/src/hotspot/share/prims/jvmtiEnv.cpp
@@ -31,6 +31,7 @@
#include "classfile/vmClasses.hpp"
#include "classfile/vmSymbols.hpp"
#include "gc/shared/collectedHeap.hpp"
+#include "compiler/compileBroker.hpp"
#include "interpreter/bytecodeStream.hpp"
#include "interpreter/interpreter.hpp"
#include "jfr/jfrEvents.hpp"
@@ -458,8 +459,11 @@ JvmtiEnv::RetransformClasses(jint class_count, const jclass* classes) {
if (AllowEnhancedClassRedefinition) {
MutexLocker sd_mutex(EnhancedRedefineClasses_lock);
+ // Stop compilation to avoid compilator race condition (crashes) with advanced redefinition
+ CompileBroker::stopCompilationBeforeEnhancedRedefinition();
VM_EnhancedRedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_retransform);
VMThread::execute(&op);
+ CompileBroker::releaseCompilationAfterEnhancedRedefinition();
op_id = op.id();
error = (op.check_error());
} else {
@@ -489,8 +493,11 @@ JvmtiEnv::RedefineClasses(jint class_count, const jvmtiClassDefinition* class_de
if (AllowEnhancedClassRedefinition) {
MutexLocker sd_mutex(EnhancedRedefineClasses_lock);
+ // Stop compilation to avoid compilator race condition (crashes) with advanced redefinition
+ CompileBroker::stopCompilationBeforeEnhancedRedefinition();
VM_EnhancedRedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_redefine);
VMThread::execute(&op);
+ CompileBroker::releaseCompilationAfterEnhancedRedefinition();
op_id = op.id();
error = (op.check_error());
} else {
diff --git a/src/hotspot/share/runtime/mutexLocker.cpp b/src/hotspot/share/runtime/mutexLocker.cpp
index 83982382e6f..beb36ebc177 100644
--- a/src/hotspot/share/runtime/mutexLocker.cpp
+++ b/src/hotspot/share/runtime/mutexLocker.cpp
@@ -84,6 +84,7 @@ Mutex* Compile_lock = NULL;
Monitor* MethodCompileQueue_lock = NULL;
Monitor* CompileThread_lock = NULL;
Monitor* Compilation_lock = NULL;
+Monitor* DcevmCompilation_lock = NULL;
Mutex* CompileTaskAlloc_lock = NULL;
Mutex* CompileStatistics_lock = NULL;
Mutex* DirectivesStack_lock = NULL;
@@ -318,6 +319,8 @@ void mutex_init() {
def(Compilation_lock , PaddedMonitor, leaf, false, _safepoint_check_never);
}
+ def(DcevmCompilation_lock , PaddedMonitor, nonleaf+1, false, _safepoint_check_never);
+
#if INCLUDE_JFR
def(JfrMsg_lock , PaddedMonitor, leaf, true, _safepoint_check_always);
def(JfrBuffer_lock , PaddedMutex , leaf, true, _safepoint_check_never);
diff --git a/src/hotspot/share/runtime/mutexLocker.hpp b/src/hotspot/share/runtime/mutexLocker.hpp
index 65a6366bbfb..4333bd51464 100644
--- a/src/hotspot/share/runtime/mutexLocker.hpp
+++ b/src/hotspot/share/runtime/mutexLocker.hpp
@@ -80,6 +80,7 @@ extern Mutex* Compile_lock; // a lock held when Compilation
extern Monitor* MethodCompileQueue_lock; // a lock held when method compilations are enqueued, dequeued
extern Monitor* CompileThread_lock; // a lock held by compile threads during compilation system initialization
extern Monitor* Compilation_lock; // a lock used to pause compilation
+extern Monitor* DcevmCompilation_lock; // a lock used to pause compilation from dcevm
extern Mutex* CompileTaskAlloc_lock; // a lock held when CompileTasks are allocated
extern Mutex* CompileStatistics_lock; // a lock held when updating compilation statistics
extern Mutex* DirectivesStack_lock; // a lock held when mutating the dirstack and ref counting directives
--
2.23.0

View File

@@ -1,111 +0,0 @@
From c45eb681e77d16b7e873c8e4dbd19f98879a102a Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sat, 6 Nov 2021 19:47:08 +0100
Subject: [PATCH 44/45] G1 fixes, code cleanup
---
src/hotspot/share/compiler/compileBroker.cpp | 2 ++
src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp | 4 +---
src/hotspot/share/gc/g1/g1FullGCPrepareTask.cpp | 4 ++++
src/hotspot/share/gc/shared/gcConfig.cpp | 6 +++---
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp | 3 ++-
5 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp
index 878bc265d2f..d8275508f9b 100644
--- a/src/hotspot/share/compiler/compileBroker.cpp
+++ b/src/hotspot/share/compiler/compileBroker.cpp
@@ -2958,6 +2958,8 @@ void CompileBroker::print_heapinfo(outputStream* out, const char* function, size
}
void CompileBroker::stopCompilationBeforeEnhancedRedefinition() {
+ // There are hard to fix C1/C2 race conditions with dcevm. The easiest solution
+ // is to stop compilation.
if (AllowEnhancedClassRedefinition) {
MonitorLocker locker(DcevmCompilation_lock, Mutex::_no_safepoint_check_flag);
_compilation_stopped = true;
diff --git a/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp b/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
index 765630a9826..c5bffc9bc49 100644
--- a/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
+++ b/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
@@ -140,7 +140,6 @@ void G1FullGCCompactTask::compact_region_dcevm(HeapRegion* hr, GrowableArray<Hea
hr->apply_to_marked_objects(collector()->mark_bitmap(), &compact);
// Once all objects have been moved the liveness information
// needs be cleared.
- collector()->mark_bitmap()->clear_region(hr);
if (G1VerifyBitmaps) {
collector()->mark_bitmap()->clear_region(hr);
}
@@ -150,8 +149,7 @@ void G1FullGCCompactTask::compact_region_dcevm(HeapRegion* hr, GrowableArray<Hea
void G1FullGCCompactTask::serial_compaction_dcevm() {
GCTraceTime(Debug, gc, phases) tm("Phase 4: Serial Compaction", collector()->scope()->timer());
- // compact remaining, not parallel compacted rescued oops using serial compact point
-
+ // Clear allocated resources at compact points now, since all rescued oops are copied to destination.
for (uint i = 0; i < collector()->workers(); i++) {
G1FullGCCompactionPoint* cp = collector()->compaction_point(i);
DcevmSharedGC::clear_rescued_objects_heap(cp->rescued_oops_values());
diff --git a/src/hotspot/share/gc/g1/g1FullGCPrepareTask.cpp b/src/hotspot/share/gc/g1/g1FullGCPrepareTask.cpp
index 93c066383a1..aa199f57dd7 100644
--- a/src/hotspot/share/gc/g1/g1FullGCPrepareTask.cpp
+++ b/src/hotspot/share/gc/g1/g1FullGCPrepareTask.cpp
@@ -146,6 +146,9 @@ bool G1FullGCPrepareTask::G1CalculatePointersClosure::should_compact(HeapRegion*
if (hr->is_pinned()) {
return false;
}
+ if (Universe::is_redefining_gc_run()) {
+ return true;
+ }
size_t live_words = _collector->live_words(hr->hrm_index());
size_t live_words_threshold = _collector->scope()->region_compaction_threshold();
// High live ratio region will not be compacted.
@@ -324,6 +327,7 @@ bool G1FullGCPrepareTask::G1PrepareCompactLiveClosureDcevm::must_rescue(oop old_
int new_size = old_obj->size_given_klass(oop(old_obj)->klass()->new_version());
int original_size = old_obj->size();
+ // what if old_obj > new_obj ?
bool overlap = (cast_from_oop<HeapWord*>(old_obj) + original_size < cast_from_oop<HeapWord*>(new_obj) + new_size);
return overlap;
diff --git a/src/hotspot/share/gc/shared/gcConfig.cpp b/src/hotspot/share/gc/shared/gcConfig.cpp
index 8e78696bef5..f8365f94214 100644
--- a/src/hotspot/share/gc/shared/gcConfig.cpp
+++ b/src/hotspot/share/gc/shared/gcConfig.cpp
@@ -96,9 +96,9 @@ void GCConfig::fail_if_non_included_gc_is_selected() {
}
void GCConfig::select_gc_ergonomically() {
- if (AllowEnhancedClassRedefinition && !UseG1GC) {
- // (DCEVM) Enhanced class redefinition only supports serial GC at the moment
- FLAG_SET_ERGO(UseSerialGC, true);
+ if (AllowEnhancedClassRedefinition && !UseSerialGC) {
+ // (DCEVM) use G1 as default GC in Enhanced class redefinition
+ FLAG_SET_ERGO(UseG1GC, true);
} else if (os::is_server_class_machine()) {
#if INCLUDE_G1GC
FLAG_SET_ERGO_IF_DEFAULT(UseG1GC, true);
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 8615806ac98..32e0fcbe62b 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -385,7 +385,7 @@ class ChangePointersOopClosure : public BasicOopIterateClosure {
bool oop_updated = false;
if (obj->is_instance() && InstanceKlass::cast(obj->klass())->is_mirror_instance_klass()) {
Klass* klass = java_lang_Class::as_Klass(obj);
- if (klass != NULL && klass->is_instance_klass()) {
+ if (klass != NULL && klass->is_instance_klass() && klass->new_version() != NULL) {
assert(obj == InstanceKlass::cast(klass)->java_mirror(), "just checking");
if (klass->new_version() != NULL) {
obj = InstanceKlass::cast(klass->new_version())->java_mirror();
@@ -578,6 +578,7 @@ void VM_EnhancedRedefineClasses::doit() {
if (log_is_enabled(Info, redefine, class, timer)) {
_timer_heap_iterate.start();
}
+ // returns after the iteration is finished
G1CollectedHeap::heap()->object_par_iterate(&objectClosure);
_timer_heap_iterate.stop();
} else {
--
2.23.0

View File

@@ -1,35 +0,0 @@
From bb7c41e91326eaa90e25e02e13a2559adf41ae9e Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Mon, 8 Nov 2021 19:51:41 +0100
Subject: [PATCH 45/45] 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.
---
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 32e0fcbe62b..35dfc1a66d1 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -67,6 +67,7 @@
#include "gc/shared/dcevmSharedGC.hpp"
#include "gc/shared/scavengableNMethods.hpp"
#include "gc/shared/oopStorageSet.inline.hpp"
+#include "gc/shared/weakProcessor.hpp"
#include "ci/ciObjectFactory.hpp"
Array<Method*>* VM_EnhancedRedefineClasses::_old_methods = NULL;
@@ -250,6 +251,7 @@ void VM_EnhancedRedefineClasses::root_oops_do(OopClosure *oopClosure) {
Threads::oops_do(oopClosure, NULL);
OopStorageSet::strong_oops_do(oopClosure);
+ WeakProcessor::oops_do(oopClosure);
CodeBlobToOopClosure blobClosure(oopClosure, CodeBlobToOopClosure::FixRelocations);
CodeCache::blobs_do(&blobClosure);
--
2.23.0

View File

@@ -0,0 +1,153 @@
#!/bin/bash
set -euo pipefail
while getopts ":t" o; do
case "${o}" in
t)
t="With Teamcity tests info"
TC_PRINT=1
;;
esac
done
shift $((OPTIND-1))
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$4
#
# Get the size of new artifact
#
"$NEWFILEPATH")
;;
MINGW*)
NEWFILESIZE=$(stat -c%s "$NEWFILEPATH")
;;
*)
echo "Unknown machine: ${unameOut}"
exit 1
esac
FILENAME=$(basename ${NEWFILEPATH})
#
# Get pattern of artifact name
# Base filename pattern: <BUNDLE_TYPE>-<JDK_VERSION>-<OS>-<ARCH>-b<BUILD>.tar.gz: jbr_dcevm-17.0.2-osx-x64-b1234.tar.gz
# BUNDLE_TYPE: jbr, jbrsdk, jbr_dcevm, jbrsdk_jcef etc.
# OS_ARCH_PATTERN - <os_architecture>: osx-x64, linux-aarch64, windows-x64 etc.
BUNDLE_TYPE=jbrsdk
OS_ARCH_PATTERN=""
FILE_EXTENSION=tar.gz
re='(jbr[a-z_]*).*-[0-9_\.]+-(.+)-b[0-9]+(.+)'
if [[ $FILENAME =~ $re ]]; then
BUNDLE_TYPE=${BASH_REMATCH[1]}
OS_ARCH_PATTERN=${BASH_REMATCH[2]}
FILE_EXTENSION=${BASH_REMATCH[3]}
fi
if [ $TC_PRINT -eq 1 ]; then
testname_file_ext=`echo $FILE_EXTENSION | sed 's/\./_/g'`
testname=$BUNDLE_TYPE"_"$OS_ARCH_PATTERN$testname_file_ext
echo \#\#teamcity[testStarted name=\'$testname\']
fi
echo "BUNDLE_TYPE: " $BUNDLE_TYPE
echo "OS_ARCH_PATTERN: " $OS_ARCH_PATTERN
echo "FILE_EXTENSION: " $FILE_EXTENSION
echo "New size of $FILENAME = $NEWFILESIZE bytes."
function test_failed_msg() {
if [ $3 -eq 1 ]; then
echo \#\#teamcity[testFailed name=\'$1\' message=\'$2\']
fi
}
function test_finished_msg() {
if [ $2 -eq 1 ]; then
echo \#\#teamcity[testFinished name=\'$1\']
fi
}
#
# Get previous successful build ID
# Example:
# CONFIGID=IntellijCustomJdk_Jdk17_Master_LinuxX64jcef
# BUILDID=12345678
#
# expected return value
# id="123".number="567"
#
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: Previous successful build id
ID=0
if [[ $CURL_RESPONSE =~ $re ]]; then
ID=${BASH_REMATCH[1]}
echo "BUILD Number: ${BASH_REMATCH[2]}"
else
msg="ERROR: can't find previous build"
echo $msg
echo $CURL_RESPONSE
test_failed_msg $testname $msg $TC_PRINT
test_finished_msg $testname $TC_PRINT
exit 1
fi
#
# Get artifacts from previous successful build
#
# expected return value
# name="jbrsdk_jcef*.tar.gz size="123'
#
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 previous build of $CONFIGID :"
echo $CURL_RESPONSE
# Find binary size (in response) with reg exp
re='name=\"('$BUNDLE_TYPE'[^\"]+'${OS_ARCH_PATTERN}'[^\"]+'${FILE_EXTENSION}')\" 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
msg="ERROR: new size is significally greater than prev size (need to investigate)"
echo $msg
test_failed_msg $testname $msg $TC_PRINT
test_finished_msg $testname $TC_PRINT
exit 1
else
echo "PASSED"
test_finished_msg $testname $TC_PRINT
fi
else
msg="ERROR: can't find string with size in xml response:"
echo $msg
echo $CURL_RESPONSE
test_failed_msg $testname $msg $TC_PRINT
test_finished_msg $testname $TC_PRINT
exit 1
fi

20
jb/project/tools/test/perfcmp.sh Normal file → Executable file
View File

@@ -1,4 +1,7 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -x
usage ()
{
@@ -49,7 +52,7 @@ echo $refFile
echo $resFile
curValues=`cat "$curFile" | cut -f 2 | tr -d '\t'`
if [ -z noHeaders ]; then
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`
@@ -57,8 +60,14 @@ 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
testContent=`echo "$testContent" | tr "," "." | 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
@@ -68,11 +77,12 @@ if [ -z $tc ]; then
exit 0
fi
failed=0
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 "$s" | cut -c1 | grep -c "*" && failed=1
echo \#\#teamcity[testStarted name=\'$testNamePrefix$testname\']
echo "===>$s"
echo \#\#teamcity[buildStatisticValue key=\'$testNamePrefix$testname\' value=\'$duration\']

View File

@@ -0,0 +1,142 @@
#!/bin/bash
set -euo pipefail
set -x
# The following parameters must be specified:
# 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
#
# 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_aarch64
if [ -z "$BUILD_JDK" ]; then
echo "BUILD_JDK environment variable must be specified and point to a JDK built from the current sources" \
" and is able to run on the build system. See OpenJDK documentation for --with-build-jdk for more info."
exit 1
fi
source jb/project/tools/common/scripts/common.sh
WORK_DIR=$(pwd)
JCEF_PATH=${JCEF_PATH:=$WORK_DIR/jcef_win_aarch64}
function do_configure {
sh ./configure \
--enable-option-checking=fatal \
--openjdk-target=aarch64-unknown-cygwin \
$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 \
--with-build-jdk=$BUILD_JDK \
--disable-ccache \
--enable-cds=yes \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
|| do_exit $?
}
function create_image_bundle {
__bundle_name=$1
__arch_name=$2
__modules_path=$3
__modules=$4
fastdebug_infix=''
[ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-"
__root_dir=${__bundle_name}-${JBSDK_VERSION}-aarch64-${fastdebug_infix:-}b${build_number%%.*}
echo Running jlink ...
${BUILD_JDK}/bin/jlink \
--module-path $__modules_path --no-man-pages --compress=2 \
--add-modules $__modules --output $__root_dir || do_exit $?
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__root_dir/release
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
sed 's/JBR/JBRSDK/g' $__root_dir/release > release
mv release $__root_dir/release
for dir in $(ls -d $IMAGES_DIR/jdk/*); do
rsync -a --exclude demo --exclude sample $dir $__root_dir
done
copy_jmods "$__modules" "$__modules_path" "$__root_dir"/jmods
fi
}
WITH_DEBUG_LEVEL="--with-debug-level=release"
RELEASE_NAME=windows-aarch64-server-release
case "$bundle_type" in
"jcef")
do_reset_changes=0
do_maketest=1
;;
"nomod" | "")
bundle_type=""
;;
"fd")
do_reset_changes=0
WITH_DEBUG_LEVEL="--with-debug-level=fastdebug"
RELEASE_NAME=windows-aarch64-server-fastdebug
;;
esac
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
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
JSDK=$IMAGES_DIR/jdk
JSDK_MODS_DIR=$IMAGES_DIR/jmods
JBRSDK_BUNDLE=jbrsdk
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then
git apply -p0 < jb/project/tools/patches/add_jcef_module_aarch64.patch || do_exit $?
update_jsdk_mods "$BUILD_JDK" "$JCEF_PATH"/jmods "$JSDK"/jmods "$JSDK_MODS_DIR" || do_exit $?
cp $JCEF_PATH/jmods/* ${JSDK_MODS_DIR} # $JSDK/jmods is not unchanged
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""
fi
# create runtime image bundle
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) || do_exit $?
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

View File

@@ -1,46 +1,30 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -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
while getopts ":i?" o; do
case "${o}" in
i)
i="incremental build"
INC_BUILD=1
;;
esac
done
shift $((OPTIND-1))
source jb/project/tools/common/scripts/common.sh
JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2
build_number=$3
bundle_type=$4
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
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 \
@@ -53,7 +37,10 @@ function do_configure {
--with-toolchain-version=$TOOLCHAIN_VERSION \
--with-boot-jdk=$BOOT_JDK \
--disable-ccache \
--enable-cds=yes || do_exit $?
--enable-cds=yes \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
|| do_exit $?
}
function create_image_bundle {
@@ -62,18 +49,24 @@ function create_image_bundle {
__modules_path=$3
__modules=$4
fastdebug_infix=''
[ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-"
__root_dir=${__bundle_name}-${JBSDK_VERSION}-x64-${fastdebug_infix:-}b${build_number%%.*}
echo Running jlink ...
${JSDK}/bin/jlink \
--module-path $__modules_path --no-man-pages --compress=2 \
--add-modules $__modules --output $__arch_name || do_exit $?
--add-modules $__modules --output $__root_dir || do_exit $?
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__arch_name/release
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
sed 's/JBR/JBRSDK/g' $__arch_name/release > release
mv release $__arch_name/release
copy_jmods "$__modules" "$__modules_path" "$__arch_name"/jmods
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__root_dir/release
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
sed 's/JBR/JBRSDK/g' $__root_dir/release > release
mv release $__root_dir/release
for dir in $(ls -d $IMAGES_DIR/jdk/*); do
rsync -a --exclude demo --exclude sample $dir $__root_dir
done
copy_jmods "$__modules" "$__modules_path" "$__root_dir"/jmods
fi
}
@@ -83,12 +76,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=""
@@ -100,15 +88,15 @@ case "$bundle_type" in
;;
esac
if [ -z "$INC_BUILD" ]; then
if [ -z "${INC_BUILD:-}" ]; then
do_configure || do_exit $?
if [ -z "$bundle_type" ]; then
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
if [ -z "$bundle_type" ]; then
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 $?
@@ -120,23 +108,26 @@ 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
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""
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 $?
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

@@ -1,12 +1,14 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -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
#
# jbrsdk-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
# jbr-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
# 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
#
# $ ./java --version
# openjdk 11.0.6 2020-01-14
@@ -14,49 +16,112 @@
# 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
JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}
WORK_DIR=$(pwd)
[ -z "$bundle_type" ] && (git apply -p0 < jb/project/tools/patches/exclude_jcef_module.patch || exit $?)
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 \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
|| do_exit $?
}
PATH="/usr/local/bin:/usr/bin:${PATH}"
./configure \
--with-target-bits=32 \
--with-vendor-name="${VENDOR_NAME}" \
--with-vendor-version-string="${VENDOR_VERSION_STRING}" \
--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 || exit 1
make clean CONF=windows-x86-server-release || exit 1
make LOG=info images CONF=windows-x86-server-release test-image || exit 1
function create_image_bundle {
__bundle_name=$1
__arch_name=$2
__modules_path=$3
__modules=$4
JBSDK=${JBRSDK_BASE_NAME}-windows-x86-b${build_number}
BASE_DIR=build/windows-x86-server-release/images
JSDK=${BASE_DIR}/jdk
fastdebug_infix=''
[ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-"
__root_dir=${__bundle_name}-${JBSDK_VERSION}-x86-${fastdebug_infix:-}b${build_number%%.*}
echo Running jlink ...
${JSDK}/bin/jlink \
--module-path $__modules_path --no-man-pages --compress=2 \
--add-modules $__modules --output $__root_dir || do_exit $?
grep -v "^JAVA_VERSION" "$JSDK"/release | grep -v "^MODULES" >> $__root_dir/release
if [ "$__arch_name" == "$JBRSDK_BUNDLE" ]; then
sed 's/JBR/JBRSDK/g' $__root_dir/release > release
mv release $__root_dir/release
for dir in $(ls -d $IMAGES_DIR/jdk/*); do
rsync -a --exclude demo --exclude sample $dir $__root_dir
done
copy_jmods "$__modules" "$__modules_path" "$__root_dir"/jmods
fi
}
WITH_DEBUG_LEVEL="--with-debug-level=release"
RELEASE_NAME=windows-x86_64-server-release
case "$bundle_type" in
"jcef")
echo "not implemented" && do_exit 1
;;
"nomod" | "")
bundle_type=""
;;
"fd")
do_reset_changes=0
WITH_DEBUG_LEVEL="--with-debug-level=fastdebug"
RELEASE_NAME=windows-x86_64-server-fastdebug
;;
esac
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
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
JSDK=$IMAGES_DIR/jdk
JSDK_MODS_DIR=$IMAGES_DIR/jmods
JBRSDK_BUNDLE=jbrsdk
rm -rf ${BASE_DIR}/${JBRSDK_BUNDLE} && rsync -a --exclude demo --exclude sample ${JSDK}/ ${JBRSDK_BUNDLE} || exit 1
sed 's/JBR/JBRSDK/g' ${JSDK}/release > release
mv release ${JBRSDK_BUNDLE}/release
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
JBR_BUNDLE=jbr
rm -rf ${JBR_BUNDLE}
grep -v javafx modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > 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 $?
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""
fi
echo Modifying release info ...
#grep -v \"^JAVA_VERSION\" ${JSDK}/release | grep -v \"^MODULES\" >> ${JBR_BUNDLE}/release
# create runtime image bundle
modules=$(grep -v "jdk.internal.vm" jb/project/tools/common/modules.list | xargs | 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" == "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

View File

@@ -0,0 +1,56 @@
#!/bin/bash
set -euo pipefail
set -x
# The following parameters must be specified:
# 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
#
# 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
[ "$bundle_type" == "jcef" ] && do_maketest=1
function pack_jbr {
__bundle_name=$1
__arch_name=$2
fastdebug_infix=''
[ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-"
JBR=${__bundle_name}-${JBSDK_VERSION}-windows-aarch64-${fastdebug_infix}b${build_number}
__root_dir=${__bundle_name}-${JBSDK_VERSION}-aarch64-${fastdebug_infix:-}b${build_number%%.*}
echo Creating $JBR.tar.gz ...
chmod -R ug+rwx,o+rx ${BASE_DIR}/$__root_dir
/usr/bin/tar -czf $JBR.tar.gz -C $BASE_DIR $__root_dir || do_exit $?
}
[ "$bundle_type" == "nomod" ] && bundle_type=""
JBRSDK_BUNDLE=jbrsdk
RELEASE_NAME=windows-aarch64-server-release
IMAGES_DIR=build/$RELEASE_NAME/images
BASE_DIR=.
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ]; then
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""
fi
pack_jbr jbr${jbr_name_postfix} jbr
pack_jbr jbrsdk${jbr_name_postfix} jbrsdk
if [ $do_maketest -eq 1 ]; then
JBRSDK_TEST=$JBRSDK_BUNDLE-$JBSDK_VERSION-windows-test-aarch64-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

@@ -1,40 +1,36 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -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
__arch_name=$2
fastdebug_infix=''
[ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-"
JBR=${__bundle_name}-${JBSDK_VERSION}-windows-x64-${fastdebug_infix}b${build_number}
__root_dir=${__bundle_name}-${JBSDK_VERSION}-x64-${fastdebug_infix:-}b${build_number%%.*}
echo Creating $JBR.tar.gz ...
/usr/bin/tar -czf $JBR.tar.gz -C $BASE_DIR $__arch_name || do_exit $?
chmod -R ug+rwx,o+rx ${BASE_DIR}/$__root_dir
/usr/bin/tar -czf $JBR.tar.gz -C $BASE_DIR $__root_dir || do_exit $?
}
[ "$bundle_type" == "nomod" ] && bundle_type=""
@@ -46,12 +42,14 @@ BASE_DIR=.
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ]; then
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""
fi
pack_jbr jbr${jbr_name_postfix} jbr
pack_jbr jbrsdk${jbr_name_postfix} jbrsdk
if [ -z "$bundle_type" ]; then
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 $?

View File

@@ -1,42 +1,50 @@
#!/bin/bash -x
#!/bin/bash
set -euo pipefail
set -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
#
# 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)
# 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)
# fd - the fastdebug bundles which also include the jcef module
#
JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2
build_number=$3
source jb/project/tools/common/scripts/common.sh
JBRSDK_BASE_NAME=jbrsdk-$JBSDK_VERSION
JBR_BASE_NAME=jbr-$JBSDK_VERSION
[ "$bundle_type" == "jcef" ] && echo "not implemented" && do_exit 1
IMAGES_DIR=build/windows-x86-server-release/images
JSDK=$IMAGES_DIR/jdk
JBSDK=$JBRSDK_BASE_NAME-windows-x86-b$build_number
BASE_DIR=.
function pack_jbr {
__bundle_name=$1
__arch_name=$2
fastdebug_infix=''
[ "$bundle_type" == "fd" ] && [ "$__arch_name" == "$JBRSDK_BUNDLE" ] && __bundle_name=$__arch_name && fastdebug_infix="fastdebug-"
JBR=${__bundle_name}-${JBSDK_VERSION}-windows-x86-${fastdebug_infix}b${build_number}
__root_dir=${__bundle_name}-${JBSDK_VERSION}-x86-${fastdebug_infix:-}b${build_number%%.*}
echo Creating $JBR.tar.gz ...
chmod -R ug+rwx,o+rx ${BASE_DIR}/$__root_dir
/usr/bin/tar -czf $JBR.tar.gz -C $BASE_DIR $__root_dir || do_exit $?
}
[ "$bundle_type" == "nomod" ] && bundle_type=""
JBRSDK_BUNDLE=jbrsdk
echo Creating $JBSDK.tar.gz ...
/usr/bin/tar -czf $JBSDK.tar.gz $JBRSDK_BUNDLE || exit 1
BASE_DIR=.
JBR_BUNDLE=jbr
JBR_BASE_NAME=jbr-${JBSDK_VERSION}
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "dcevm" ] || [ "$bundle_type" == "fd" ]; then
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""
fi
JBR=$JBR_BASE_NAME-windows-x86-b$build_number
echo Creating $JBR.tar.gz ...
/usr/bin/tar -czf $JBR.tar.gz -C $BASE_DIR ${JBR_BUNDLE} || exit 1
pack_jbr jbr${jbr_name_postfix} jbr
pack_jbr jbrsdk${jbr_name_postfix} jbrsdk
JBRSDK_TEST=$JBRSDK_BASE_NAME-windows-test-x86-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 || exit 1
if [ $do_maketest -eq 1 ]; then
JBRSDK_TEST=$JBRSDK_BUNDLE-$JBSDK_VERSION-windows-test-x86-b$build_number
echo Creating $JBRSDK_TEST.tar.gz ...
/usr/bin/tar -czf $JBRSDK_TEST.tar.gz -C $BASE_DIR --exclude='test/jdk/demos' test || do_exit $?
fi

View File

@@ -221,6 +221,30 @@ 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)
# If boot JDK's jar supported --date, jrt-fs.jar would've been built with
# that option already.
ifneq ($(BOOT_JDK_JAR_SUPPORTS_DATE), 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 := $(BUILD_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
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 +256,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) 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

@@ -18,18 +18,19 @@ include $(SPEC)
include MakeBase.gmk
include JavaCompilation.gmk
JBR_API_ROOT_DIR := $(TOPDIR)/src/jetbrains.api
JBR_API_GENSRC_TEMPLATES := $(JBR_API_ROOT_DIR)/templates
JBR_API_SRC_DIR := $(JBR_API_ROOT_DIR)/src
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_GENSRC_SOURCES := $(call FindFiles, $(JBR_API_GENSRC_TEMPLATES))
JBR_API_GENSRC_FILES := $(foreach f, $(call FindFiles, $(JBR_API_GENSRC_TEMPLATES)/com), \
$(JBR_API_GENSRC_DIR)/$(call RelativePath, $f, $(JBR_API_GENSRC_TEMPLATES)))
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>
@@ -43,27 +44,30 @@ 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) $(JBR_API_SRC_DIR), \
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) $(JBR_API_SRC_FILES), \
SRCS := $(JBR_API_GENSRC_DIR) $(JBR_API_SRC_DIR), \
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), \
))
$(JBR_API_GENSRC_FILES): $(JBR_API_GENSRC_SOURCES) $(JBR_API_SRC_FILES) $(JBR_API_VERSION_PROPERTIES)
# 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_GENSRC_TEMPLATES)/Gensrc.java" \
$(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_SRC_FILES) $(JBR_API_VERSION_PROPERTIES)
$(JAVA_CMD) $(JAVA_FLAGS_SMALL) "$(JBR_API_GENSRC_TEMPLATES)/CheckVersion.java" \
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
@@ -72,7 +76,7 @@ jbr-api: $(BUILD_JBR_API) $(BUILD_JBR_API_SOURCES_JAR) jbr-api-check-version
ifneq ($(JBR_API_CONF_FILE),)
$(JBR_API_CONF_FILE): $(JBR_API_GENSRC_FILES)
$(ECHO) "VERSION=`$(CAT) $(JBR_API_OUTPUT_DIR)/jbr-api.version`" > $(JBR_API_CONF_FILE)
$(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)

View File

@@ -200,7 +200,7 @@ $(eval $(call SetTestOpt,FAILURE_HANDLER_TIMEOUT,JTREG))
$(eval $(call ParseKeywordVariable, JTREG, \
SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR FAILURE_HANDLER_TIMEOUT \
TEST_MODE ASSERT VERBOSE RETAIN MAX_MEM RUN_PROBLEM_LISTS \
RETRY_COUNT MAX_OUTPUT, \
RETRY_COUNT REPEAT_COUNT MAX_OUTPUT, \
STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS KEYWORDS \
EXTRA_PROBLEM_LISTS LAUNCHER_OPTIONS, \
))
@@ -744,6 +744,15 @@ define SetupRunJtregTestBody
JTREG_RETAIN ?= fail,error
JTREG_RUN_PROBLEM_LISTS ?= false
JTREG_RETRY_COUNT ?= 0
JTREG_REPEAT_COUNT ?= 0
ifneq ($$(JTREG_RETRY_COUNT), 0)
ifneq ($$(JTREG_REPEAT_COUNT), 0)
$$(info Error: Cannot use both JTREG_RETRY_COUNT and JTREG_REPEAT_COUNT together.)
$$(info Please choose one or the other.)
$$(error Cannot continue)
endif
endif
ifneq ($$(JTREG_LAUNCHER_OPTIONS), )
$1_JTREG_LAUNCHER_OPTIONS += $$(JTREG_LAUNCHER_OPTIONS)
@@ -875,6 +884,18 @@ define SetupRunJtregTestBody
done
endif
ifneq ($$(JTREG_REPEAT_COUNT), 0)
$1_COMMAND_LINE := \
for i in {1..$$(JTREG_REPEAT_COUNT)}; do \
$$(PRINTF) "\nRepeating Jtreg run: $$$$i out of $$(JTREG_REPEAT_COUNT)\n"; \
$$($1_COMMAND_LINE); \
if [ "`$$(CAT) $$($1_EXITCODE)`" != "0" ]; then \
$$(PRINTF) "\nFailures detected, no more repeats.\n"; \
break; \
fi; \
done
endif
run-test-$1: pre-run-test clean-workdir-$1
$$(call LogWarn)
$$(call LogWarn, Running test '$$($1_TEST)')

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,13 +356,17 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
fi
AC_SUBST(IS_GNU_TIME)
# Check if it's GNU date
check_date=`$DATE --version 2>&1 | $GREP GNU`
# 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)

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

@@ -95,8 +95,24 @@ AC_DEFUN([FLAGS_SETUP_DEBUG_SYMBOLS],
# info flags for toolchains unless we know they work.
# See JDK-8207057.
ASFLAGS_DEBUG_SYMBOLS=""
# Debug prefix mapping if supported by compiler
DEBUG_PREFIX_CFLAGS=
# Debug symbols
if test "x$TOOLCHAIN_TYPE" = xgcc; then
if test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = "xfalse"; then
# Check if compiler supports -fdebug-prefix-map. If so, use that to make
# the debug symbol paths resolve to paths relative to the workspace root.
workspace_root_trailing_slash="${WORKSPACE_ROOT%/}/"
DEBUG_PREFIX_CFLAGS="-fdebug-prefix-map=${workspace_root_trailing_slash}="
FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${DEBUG_PREFIX_CFLAGS}],
IF_FALSE: [
DEBUG_PREFIX_CFLAGS=
]
)
fi
CFLAGS_DEBUG_SYMBOLS="-g"
ASFLAGS_DEBUG_SYMBOLS="-g"
elif test "x$TOOLCHAIN_TYPE" = xclang; then
@@ -108,6 +124,11 @@ AC_DEFUN([FLAGS_SETUP_DEBUG_SYMBOLS],
CFLAGS_DEBUG_SYMBOLS="-Z7"
fi
if test "x$DEBUG_PREFIX_CFLAGS" != x; then
CFLAGS_DEBUG_SYMBOLS="$CFLAGS_DEBUG_SYMBOLS $DEBUG_PREFIX_CFLAGS"
ASFLAGS_DEBUG_SYMBOLS="$ASFLAGS_DEBUG_SYMBOLS $DEBUG_PREFIX_CFLAGS"
fi
AC_SUBST(CFLAGS_DEBUG_SYMBOLS)
AC_SUBST(ASFLAGS_DEBUG_SYMBOLS)
])
@@ -782,10 +803,8 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
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,

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

@@ -169,6 +169,23 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
fi
AC_SUBST(CACERTS_FILE)
# Choose cacerts source folder for user provided PEM files
AC_ARG_WITH(cacerts-src, [AS_HELP_STRING([--with-cacerts-src],
[specify alternative cacerts source folder containing certificates])])
CACERTS_SRC=""
AC_MSG_CHECKING([for cacerts source])
if test "x$with_cacerts_src" == x; then
AC_MSG_RESULT([default])
else
CACERTS_SRC=$with_cacerts_src
if test ! -d "$CACERTS_SRC"; then
AC_MSG_RESULT([fail])
AC_MSG_ERROR([Specified cacerts source folder "$CACERTS_SRC" does not exist])
fi
AC_MSG_RESULT([$CACERTS_SRC])
fi
AC_SUBST(CACERTS_SRC)
# Enable or disable unlimited crypto
UTIL_ARG_ENABLE(NAME: unlimited-crypto, DEFAULT: true, RESULT: UNLIMITED_CRYPTO,
DESC: [enable unlimited crypto policy])

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@
@@ -409,6 +412,8 @@ GTEST_FRAMEWORK_SRC := @GTEST_FRAMEWORK_SRC@
# Source file for cacerts
CACERTS_FILE=@CACERTS_FILE@
# Source folder for user provided cacerts PEM files
CACERTS_SRC=@CACERTS_SRC@
# Enable unlimited crypto policy
UNLIMITED_CRYPTO=@UNLIMITED_CRYPTO@
@@ -707,6 +712,7 @@ CODESIGN:=@CODESIGN@
CP:=@CP@
CUT:=@CUT@
DATE:=@DATE@
IS_GNU_DATE:=@IS_GNU_DATE@
DIFF:=@DIFF@
DIRNAME:=@DIRNAME@
DSYMUTIL:=@DSYMUTIL@

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2021, 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
@@ -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}
@@ -228,7 +234,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETERMINE_TOOLCHAIN_TYPE],
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
if test -n "$XCODEBUILD"; then
# On Mac OS X, default toolchain to clang after Xcode 5
XCODE_VERSION_OUTPUT=`"$XCODEBUILD" -version 2>&1 | $HEAD -n 1`
XCODE_VERSION_OUTPUT=`"$XCODEBUILD" -version | $HEAD -n 1`
$ECHO "$XCODE_VERSION_OUTPUT" | $GREP "Xcode " > /dev/null
if test $? -ne 0; then
AC_MSG_NOTICE([xcodebuild output: $XCODE_VERSION_OUTPUT])
@@ -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
@@ -25,7 +25,7 @@
################################################################################
# The order of these defines the priority by which we try to find them.
VALID_VS_VERSIONS="2019 2017"
VALID_VS_VERSIONS="2019 2017 2022"
VS_DESCRIPTION_2017="Microsoft Visual Studio 2017"
VS_VERSION_INTERNAL_2017=141
@@ -56,6 +56,21 @@ VS_SDK_PLATFORM_NAME_2019=
VS_SUPPORTED_2019=true
VS_TOOLSET_SUPPORTED_2019=true
VS_DESCRIPTION_2022="Microsoft Visual Studio 2022"
VS_VERSION_INTERNAL_2022=143
VS_MSVCR_2022=vcruntime140.dll
VS_VCRUNTIME_1_2022=vcruntime140_1.dll
VS_MSVCP_2022=msvcp140.dll
VS_ENVVAR_2022="VS170COMNTOOLS"
VS_USE_UCRT_2022="true"
VS_VS_INSTALLDIR_2022="Microsoft Visual Studio/2022"
VS_EDITIONS_2022="BuildTools Community Professional Enterprise"
VS_SDK_INSTALLDIR_2022=
VS_VS_PLATFORM_NAME_2022="v143"
VS_SDK_PLATFORM_NAME_2022=
VS_SUPPORTED_2022=true
VS_TOOLSET_SUPPORTED_2022=true
################################################################################
AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT],

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
@@ -230,20 +230,25 @@ AC_DEFUN([UTIL_GET_MATCHING_VALUES],
# Converts an ISO-8601 date/time string to a unix epoch timestamp. If no
# suitable conversion method was found, an empty string is returned.
#
# Sets the specified variable to the resulting list.
#
# $1: result variable name
# $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
# ISO-8601 date&time in Zulu 'date'T'time'Z
timestamp=$($DATE -u -j -f "%FT%TZ" "$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)
# If this did not work, we give up and return the empty string
# BSD date cannot handle trailing milliseconds.
# Try again ignoring characters at end
timestamp=$($DATE -u -j -f "%Y-%m-%dT%H:%M:%S" "$2" "+%s" 2> /dev/null)
fi
if test "x$timestamp" = x; then
# Perhaps the time was missing.
timestamp=$($DATE -u -j -f "%FT%TZ" "$2""T00:00:00Z" "+%s" 2> /dev/null)
fi
fi
$1=$timestamp

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2019, 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
@@ -193,7 +193,8 @@ 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; \
$(SORT) $$($1_BIN)/_the.$$($1_JARNAME)_contents > $$($1_BIN)/_the.$$($1_JARNAME)_contents_sorted && \
$$($1_JAR_CMD) --update $$($1_JAR_OPTIONS) --file $$@ @$$($1_BIN)/_the.$$($1_JARNAME)_contents_sorted; \
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 +213,29 @@ 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=\
$(SORT) $$($1_BIN)/_the.$$($1_JARNAME)_contents > $$($1_BIN)/_the.$$($1_JARNAME)_contents_sorted && \
$$($1_JAR_CMD) --update $$($1_JAR_OPTIONS) --file $$@ @$$($1_BIN)/_the.$$($1_JARNAME)_contents_sorted $$(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 +260,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, 2021, 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
@@ -358,6 +358,20 @@ define SetupCompileNativeFileBody
# Compile as preprocessed assembler file
$1_FLAGS := $(BASIC_ASFLAGS) $$($1_BASE_ASFLAGS)
$1_COMPILER := $(AS)
# gcc assembly files must contain an appropriate relative .file
# path for reproducible builds.
ifeq ($(TOOLCHAIN_TYPE), gcc)
# If no absolute paths allowed, work out relative source file path
# for assembly .file substitution, otherwise use full file path
ifeq ($(ALLOW_ABSOLUTE_PATHS_IN_OUTPUT), false)
$1_REL_ASM_SRC := $$(call RelativePath, $$($1_FILE), $(WORKSPACE_ROOT))
else
$1_REL_ASM_SRC := $$($1_FILE)
endif
$1_FLAGS := $$($1_FLAGS) -DASSEMBLY_SRC_FILE='"$$($1_REL_ASM_SRC)"' \
-include $(TOPDIR)/make/data/autoheaders/assemblyprefix.h
endif
else ifneq ($$(filter %.cpp %.cc %.mm, $$($1_FILENAME)), )
# Compile as a C++ or Objective-C++ file
$1_FLAGS := $(CFLAGS_CCACHE) $$($1_USE_PCH_FLAGS) $$($1_BASE_CXXFLAGS) \
@@ -389,6 +403,12 @@ define SetupCompileNativeFileBody
$1_OBJ_DEPS := $$($1_SRC_FILE) $$($$($1_BASE)_COMPILE_VARDEPS_FILE) \
$$($$($1_BASE)_EXTRA_DEPS) $$($1_VARDEPS_FILE)
$1_COMPILE_OPTIONS := $$($1_FLAGS) $(CC_OUT_OPTION)$$($1_OBJ) $$($1_SRC_FILE)
# For reproducible builds with gcc ensure random symbol generation is seeded deterministically
ifeq ($(TOOLCHAIN_TYPE), gcc)
ifeq ($$(ENABLE_REPRODUCIBLE_BUILD), true)
$1_COMPILE_OPTIONS += -frandom-seed="$$($1_FILENAME)"
endif
endif
$$($1_OBJ_JSON): $$($1_OBJ_DEPS)
$$(call WriteCompileCommandsFragment, $$@, $$(PWD), $$($1_SRC_FILE), \

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

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