Compare commits

..

2 Commits
master ... 1861

5364 changed files with 249380 additions and 267983 deletions

View File

@@ -174,7 +174,7 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get install gcc-9=9.4.0-1ubuntu1~20.04.1 g++-9=9.4.0-1ubuntu1~20.04.1 libxrandr-dev libxtst-dev libcups2-dev libasound2-dev sudo apt-get install gcc-9=9.3.0-17ubuntu1~20.04 g++-9=9.3.0-17ubuntu1~20.04 libxrandr-dev libxtst-dev libcups2-dev libasound2-dev
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100 --slave /usr/bin/g++ g++ /usr/bin/g++-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100 --slave /usr/bin/g++ g++ /usr/bin/g++-9
- name: Configure - name: Configure
@@ -341,7 +341,6 @@ jobs:
run: > run: >
if ! grep --include=test-summary.txt -lqr build/*/test-results -e "TEST SUCCESS" ; then 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/newfailures.txt ;
cat build/*/test-results/*/text/other_errors.txt ;
exit 1 ; exit 1 ;
fi fi
@@ -496,12 +495,12 @@ jobs:
- name: Install native host dependencies - name: Install native host dependencies
run: | run: |
sudo apt-get install gcc-9=9.4.0-1ubuntu1~20.04.1 g++-9=9.4.0-1ubuntu1~20.04.1 libxrandr-dev libxtst-dev libcups2-dev libasound2-dev sudo apt-get install gcc-9=9.3.0-17ubuntu1~20.04 g++-9=9.3.0-17ubuntu1~20.04 libxrandr-dev libxtst-dev libcups2-dev libasound2-dev
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100 --slave /usr/bin/g++ g++ /usr/bin/g++-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100 --slave /usr/bin/g++ g++ /usr/bin/g++-9
if: matrix.debian-arch == '' if: matrix.debian-arch == ''
- name: Install cross-compilation host dependencies - name: Install cross-compilation host dependencies
run: sudo apt-get install gcc-9-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}=9.4.0-1ubuntu1~20.04.1cross2 g++-9-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}=9.4.0-1ubuntu1~20.04.1cross2 run: sudo apt-get install gcc-9-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}=9.3.0-17ubuntu1~20.04cross2 g++-9-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}=9.3.0-17ubuntu1~20.04cross2
if: matrix.debian-arch != '' if: matrix.debian-arch != ''
- name: Cache sysroot - name: Cache sysroot
@@ -810,7 +809,6 @@ jobs:
run: > run: >
if ! grep --include=test-summary.txt -lqr build/*/test-results -e "TEST SUCCESS" ; then 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/newfailures.txt ;
cat build/*/test-results/*/text/other_errors.txt ;
exit 1 ; exit 1 ;
fi fi
@@ -889,7 +887,7 @@ jobs:
run: | run: |
New-Item -Force -ItemType directory -Path "$HOME\cygwin" 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" & 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 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
- name: Checkout the source - name: Checkout the source
uses: actions/checkout@v2 uses: actions/checkout@v2
@@ -1053,7 +1051,7 @@ jobs:
run: | run: |
New-Item -Force -ItemType directory -Path "$HOME\cygwin" 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" & 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 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
- name: Restore jtreg artifact - name: Restore jtreg artifact
id: jtreg_restore id: jtreg_restore
@@ -1126,7 +1124,6 @@ jobs:
run: > run: >
if ((Get-ChildItem -Path build\*\test-results\test-summary.txt -Recurse | Select-String -Pattern "TEST SUCCESS" ).Count -eq 0) { 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\*\*\newfailures.txt ;
Get-Content -Path build\*\test-results\*\*\other_errors.txt ;
exit 1 exit 1
} }
@@ -1412,7 +1409,6 @@ jobs:
run: > run: >
if ! grep --include=test-summary.txt -lqr build/*/test-results -e "TEST SUCCESS" ; then 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/newfailures.txt ;
cat build/*/test-results/*/text/other_errors.txt ;
exit 1 ; exit 1 ;
fi fi

1
.gitignore vendored
View File

@@ -6,6 +6,7 @@ JTreport
.idea/modules.xml .idea/modules.xml
.idea/shelf/ .idea/shelf/
JetBrainsRuntime.iml JetBrainsRuntime.iml
build/
# Project exclude paths # Project exclude paths
/jb/project/java-gradle/.gradle/ /jb/project/java-gradle/.gradle/
/build/ /build/

View File

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

169
README.md
View File

@@ -3,5 +3,170 @@
# Welcome to JetBrains Runtime! # Welcome to JetBrains Runtime!
<a name="jetbrains-runtime"></a> <a name="jetbrains-runtime"></a>
Do not use this branch. It is [outdated](https://youtrack.jetbrains.com/issue/JBR-4375/New-branch-naming-policy-in-JBR-repo). JetBrains Runtime is a fork of [OpenJDK](https://github.com/openjdk/jdk) available for Windows, Mac OS X, and Linux.
Please use [jbr11](https://github.com/JetBrains/JetBrainsRuntime/tree/jbr11) instead. It includes a number enhancements in font rendering, HiDPI support, ligatures, performance improvements, and bugfixes.
## Releases
Download the latest releases of JetBrains Runtime to use with JetBrains IDEs. The full list
can be found on the [releases page](https://github.com/JetBrains/JetBrainsRuntime/releases).
| IDE Version | Latest JBR | Date Released |
| --- | --- | --- |
| 2021.3 | [11_0_13-b1751.19](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr11_0_13b1751.19) | 9-Nov-2021 |
| 2021.2 | [11_0_13-b1504.49](https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jb11_0_13-b1504.49) | 15-Nov-2021 |
| 2021.1 | [11.0.11+9-b1341.60](https://confluence.jetbrains.com/pages/viewpage.action?pageId=218857477) | 15-Jun-2021 |
| 2020.3 | [11_0_11-b1145.115](https://confluence.jetbrains.com/pages/viewpage.action?pageId=219349001) | 21-Jun-2021 |
## Contents
- [Welcome to JetBrains Runtime](#jetbrains-runtime)
- [Products Built on JetBrains Runtime](#products-built-on-jetbrains-runtime)
- [Getting Sources](#getting-sources)
- [macOS, Linux](#macos-linux)
- [Windows](#sources-windows)
- [Configuring the Build Environment](#configuring-the-build-environment)
- [Linux (Docker)](#linux-docker)
- [Ubuntu Linux](#ubuntu-linux)
- [Windows](#build-windows)
- [macOS](#macos)
- [Developing](#developing)
- [Contributing](#contributing)
- [Resources](#resources)
## Products Built on JetBrains Runtime
* [Android Studio](https://developer.android.com/studio). The official IDE for Google's Android operating system.
* [CLion](https://www.jetbrains.com/clion/). A cross-platform IDE for C and C++ from JetBrains.
* [DataGrip](https://www.jetbrains.com/datagrip/). The IDE for Databases and SQL from JetBrains.
* [GoLand](https://www.jetbrains.com/go/). The cross-platform Go IDE from JetBrains.
* [IntelliJ IDEA](https://www.jetbrains.com/idea/). The IDE for JVM from JetBrains.
* [JProfiler](https://www.ej-technologies.com/products/jprofiler/overview.html). The Java profiler.
* [PhpStorm](https://www.jetbrains.com/phpstorm/). The PHP IDE from JetBrains.
* [PyCharm](https://www.jetbrains.com/pycharm/). The Python IDE from JetBrains.
* [Rider](https://www.jetbrains.com/rider/). The cross-platform .NET IDE from JetBrains.
* [RubyMine](https://www.jetbrains.com/ruby/). The Ruby and Rails IDE from JetBrains.
* [WebStorm](https://www.jetbrains.com/webstorm/). The JavaScript IDE from JetBrains.
* [YourKit](https://www.yourkit.com/). Java and .NET profilers.
## Getting Sources
### macOS, Linux
```
git config --global core.autocrlf input
git clone git@github.com:JetBrains/JetBrainsRuntime.git
```
### Windows
<a name="sources-windows"></a>
```
git config --global core.autocrlf false
git clone git@github.com:JetBrains/JetBrainsRuntime.git
```
## Configuring the Build Environment
Here are quick per-platform instructions for those who can't wait to get started.
Please refer to [OpenJDK build docs](http://hg.openjdk.java.net/jdk/jdk11/raw-file/tip/doc/building.html) for in-depth
coverage of all the details.
> **_TIP:_** To get a preliminary report of what's missing, run `./configure` and check its output.
> It would usually have a meaningful advice on how to solve the problem.
### Linux (Docker)
Create a container:
```
$ cd jb/project/docker
$ docker build .
...
Successfully built 942ea9900054
```
Run these commands in the new container:
```
$ docker run -v `pwd`../../../../:/JetBrainsRuntime -it 942ea9900054
# cd /JetBrainsRuntime
# sh ./configure
# make images CONF=linux-x86_64-normal-server-release
```
### Ubuntu Linux
Install the necessary tools, libraries, and headers with:
```
$ sudo apt-get install autoconf make build-essential libx11-dev libxext-dev libxrender-dev libxtst-dev \
libxt-dev libxrandr-dev libcups2-dev libfontconfig1-dev libasound2-dev \
openjdk-11-jdk
```
Then run the following:
```
$ cd JetBrainsRuntime
$ sh ./configure --disable-warnings-as-errors
$ make images
```
### Windows
<a name="build-windows"></a>
Install the following:
* [Cygwin x64](http://www.cygwin.com/).
Required packages: `autoconf`, `binutils`, `cpio`, `diffutils`, `file`, `gawk`, `gcc-core`, `make`, `m4`, `unzip`, `zip`.
Install those together with Cygwin.
* [Visual Studio compiler toolset](https://visualstudio.microsoft.com/downloads/).
Install with the desktop development kit, which includes Windows SDK and compilers.
Visual Studio 2015 is supported by default.
* [Java 11](https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html).
If you have problems while configuring, read [Java tips on Cygwin](http://horstmann.com/articles/cygwin-tips.html).
From the command line:
```
"c:\Program Files (x86)\Microsoft Visual Studio 15.0\VC\vcvarsall.bat" amd64
c:\cygwin64\bin\mintty.exe /usr/bin/bash -l
```
The first command sets up environment variables, the second starts a Cygwin shell with the proper environment.
In the Cygwin shell:
```
$ cd JetBrainsRuntime
$ bash configure --enable-option-checking=fatal --with-toolchain-version=2015 \
--with-boot-jdk="/cygdrive/c/Program Files/Java/jdk-11.0.5" --disable-warnings-as-errors
$ make images
```
### macOS
Install the following:
* Xcode command line developer tools and `autoconf` via [Homebrew](getDpiInfo).
* [Java 11](https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html).
From the command line:
```
$ cd JetBrainsRuntime
$ sh ./configure --prefix=$(pwd)/build --disable-warnings-as-errors
$ make images
```
## Developing
You can use [CLion](https://www.jetbrains.com/clion/) to develop native parts of the JetBrains Runtime and
[IntelliJ IDEA](https://www.jetbrains.com/idea/) for the parts written in Java.
Both require projects to be created.
### CLion
Run
```
$ make compile-commands
```
in the git root and open the resulting `build/.../compile_commands.json` file as a project.
Then use `Tools | Compilation Database | Change Project Root` to point to git root of this repository.
See also this detailed step-by-step tutorial for all platforms:
[How to develop OpenJDK with CLion](https://blog.jetbrains.com/clion/2020/03/openjdk-with-clion/).
### IDEA
Run
```
$ sh ./bin/idea.sh
```
in the git root to generate project files (add `--help` for options). Then open the git root directory
as a project in IDEA.
## Contributing
We are happy to receive your pull requests!
Before you submit one, please sign our [Contributor License Agreement (CLA)](https://www.jetbrains.com/agreements/cla/).
## Resources
* [JetBrains Runtime on github](https://github.com/JetBrains/JetBrainsRuntime).
* [OpenJDK build instructions](http://hg.openjdk.java.net/jdk/jdk11/raw-file/tip/doc/building.html).
* [OpenJDK test instructions](http://hg.openjdk.java.net/jdk/jdk11/raw-file/tip/doc/building.html#running-tests).
* [How to develop OpenJDK with CLion](https://blog.jetbrains.com/clion/2020/03/openjdk-with-clion/).

View File

@@ -686,24 +686,11 @@ cp: cannot stat `arm-linux-gnueabihf/libXt.so&#39;: No such file or directory</c
<li><p>Install cross-compiler on the <em>build</em> system:</p> <li><p>Install cross-compiler on the <em>build</em> system:</p>
<pre><code>apt install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu</code></pre></li> <pre><code>apt install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu</code></pre></li>
<li><p>Create chroot on the <em>build</em> system, configuring it for <em>target</em> system:</p> <li><p>Create chroot on the <em>build</em> system, configuring it for <em>target</em> system:</p>
<pre><code>sudo qemu-debootstrap \ <pre><code>sudo qemu-debootstrap --arch=arm64 --verbose \
--arch=arm64 \ --include=fakeroot,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libasound2-dev,libfreetype6-dev,libpng12-dev \
--verbose \ --resolve-deps jessie /chroots/arm64 http://httpredir.debian.org/debian/</code></pre></li>
--include=fakeroot,symlinks,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxrandr-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libasound2-dev,libfreetype6-dev,libpng-dev \
--resolve-deps \
buster \
~/sysroot-arm64 \
http://httpredir.debian.org/debian/</code></pre></li>
<li><p>Make sure the symlinks inside the newly created chroot point to proper locations:</p>
<pre><code>sudo chroot ~/sysroot-arm64 symlinks -cr .</code></pre></li>
<li><p>Configure and build with newly created chroot as sysroot/toolchain-path:</p> <li><p>Configure and build with newly created chroot as sysroot/toolchain-path:</p>
<pre><code>CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ sh ./configure \ <pre><code>CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ sh ./configure --openjdk-target=aarch64-linux-gnu --with-sysroot=/chroots/arm64/ --with-toolchain-path=/chroots/arm64/
--openjdk-target=aarch64-linux-gnu \
--with-sysroot=~/sysroot-arm64 \
--with-toolchain-path=~/sysroot-arm64 \
--with-freetype-lib=~/sysroot-arm64/usr/lib/aarch64-linux-gnu/ \
--with-freetype-include=~/sysroot-arm64/usr/include/freetype2/ \
--x-libraries=~/sysroot-arm64/usr/lib/aarch64-linux-gnu/
make images make images
ls build/linux-aarch64-normal-server-release/</code></pre></li> ls build/linux-aarch64-normal-server-release/</code></pre></li>
</ul> </ul>

View File

@@ -1100,39 +1100,23 @@ for foreign architectures with native compilation speed.
For example, cross-compiling to AArch64 from x86_64 could be done like this: For example, cross-compiling to AArch64 from x86_64 could be done like this:
* Install cross-compiler on the *build* system: * Install cross-compiler on the *build* system:
``` ```
apt install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu apt install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu
``` ```
* Create chroot on the *build* system, configuring it for *target* system: * Create chroot on the *build* system, configuring it for *target* system:
``` ```
sudo qemu-debootstrap \ sudo qemu-debootstrap --arch=arm64 --verbose \
--arch=arm64 \ --include=fakeroot,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libasound2-dev,libfreetype6-dev,libpng12-dev \
--verbose \ --resolve-deps jessie /chroots/arm64 http://httpredir.debian.org/debian/
--include=fakeroot,symlinks,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxrandr-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libasound2-dev,libfreetype6-dev,libpng-dev \ ```
--resolve-deps \
buster \
~/sysroot-arm64 \
http://httpredir.debian.org/debian/
```
* Make sure the symlinks inside the newly created chroot point to proper locations:
```
sudo chroot ~/sysroot-arm64 symlinks -cr .
```
* Configure and build with newly created chroot as sysroot/toolchain-path: * Configure and build with newly created chroot as sysroot/toolchain-path:
``` ```
CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ sh ./configure \ CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ sh ./configure --openjdk-target=aarch64-linux-gnu --with-sysroot=/chroots/arm64/ --with-toolchain-path=/chroots/arm64/
--openjdk-target=aarch64-linux-gnu \ make images
--with-sysroot=~/sysroot-arm64 \ ls build/linux-aarch64-normal-server-release/
--with-toolchain-path=~/sysroot-arm64 \ ```
--with-freetype-lib=~/sysroot-arm64/usr/lib/aarch64-linux-gnu/ \
--with-freetype-include=~/sysroot-arm64/usr/include/freetype2/ \
--x-libraries=~/sysroot-arm64/usr/lib/aarch64-linux-gnu/
make images
ls build/linux-aarch64-normal-server-release/
```
The build does not create new files in that chroot, so it can be reused for multiple builds The build does not create new files in that chroot, so it can be reused for multiple builds
without additional cleanup. without additional cleanup.

View File

@@ -27,7 +27,6 @@
<li><a href="#configuration">Configuration</a></li> <li><a href="#configuration">Configuration</a></li>
</ul></li> </ul></li>
<li><a href="#test-selection">Test selection</a><ul> <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="#jtreg">JTReg</a></li>
<li><a href="#gtest">Gtest</a></li> <li><a href="#gtest">Gtest</a></li>
</ul></li> </ul></li>
@@ -60,19 +59,6 @@ $ make exploded-run-test TEST=tier2</code></pre>
<p>All functionality is available using the run-test 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, run-test-only can be used instead, which do not depend on the source and test image build.</p> <p>All functionality is available using the run-test 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, run-test-only 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 run-test-tier1</code> is equivalent to <code>make run-test TEST=&quot;tier1&quot;</code>, but the latter is more tab-completion friendly. For more complex test runs, the <code>run-test TEST=&quot;x&quot;</code> solution needs to be used.</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 run-test-tier1</code> is equivalent to <code>make run-test TEST=&quot;tier1&quot;</code>, but the latter is more tab-completion friendly. For more complex test runs, the <code>run-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> <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> <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 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> <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>
@@ -156,8 +142,6 @@ TEST FAILURE</code></pre>
<p>Additional VM options to JTReg (<code>-vmoption</code>).</p> <p>Additional VM options to JTReg (<code>-vmoption</code>).</p>
<h4 id="aot_modules-1">AOT_MODULES</h4> <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> <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>
<h3 id="gtest-keywords">Gtest keywords</h3> <h3 id="gtest-keywords">Gtest keywords</h3>
<h4 id="repeat">REPEAT</h4> <h4 id="repeat">REPEAT</h4>
<p>The number of times to repeat the tests (<code>--gtest_repeat</code>).</p> <p>The number of times to repeat the tests (<code>--gtest_repeat</code>).</p>

View File

@@ -52,52 +52,6 @@ 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 always submit a list of fully qualified test descriptors in the `TEST` variable
if you want to shortcut the parser. 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
JTReg tests can be selected either by picking a JTReg test group, or a selection JTReg tests can be selected either by picking a JTReg test group, or a selection
@@ -315,10 +269,6 @@ Generate AOT modules before testing for the specified module, or set of
modules. If multiple modules are specified, they should be separated by space modules. If multiple modules are specified, they should be separated by space
(or, to help avoid quoting issues, the special value `%20`). (or, to help avoid quoting issues, the special value `%20`).
#### RETRY_COUNT
Retry failed tests up to a set number of times. Defaults to 0.
### Gtest keywords ### Gtest keywords
#### REPEAT #### REPEAT

View File

@@ -1,39 +0,0 @@
# NOTE: This Dockerfile is meant to be used from the mkdocker_aarch64.sh script.
# Pull a concrete version of Linux that does NOT recieve updates after it's
# been created. This is so that the image is as stable as possible to make
# image creation reproducible.
# NB: this also means there may be no security-related fixes there, need to
# move the version to the next manually.
FROM arm64v8/centos:7
# Install the necessary build tools
RUN export DEBIAN_FRONTEND=noninteractive \
export DEBCONF_NONINTERACTIVE_SEEN=true && \
yum -y update && \
yum -y groupinstall \
"Development Tools" && \
yum -y install centos-release-scl && \
yum -y install devtoolset-8 && \
yum -y install \
centos-release-scl-rh \
devtoolset-8 \
which \
autoconf \
git \
file \
make \
libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel \
cups-devel \
fontconfig-devel \
alsa-lib-devel \
unzip \
zip \
&& \
yum -y clean all && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ENV PATH /opt/rh/devtoolset-8/root/usr/bin:$PATH
RUN git config --global user.email "teamcity@jetbrains.com" && \
git config --global user.name "builduser"

View File

@@ -1,6 +1,7 @@
FROM i386/ubuntu:xenial FROM i386/ubuntu:xenial
RUN linux32 apt-get update && apt-get install -y --no-install-recommends apt-utils 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 \ 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 \ libxrender-dev libxrandr-dev libxtst-dev libxt-dev libcups2-dev libasound2-data \
libpng12-0 libasound2 libfreetype6 libfontconfig1-dev libasound2-dev autoconf rsync libpng12-0 libasound2 libfreetype6 libfontconfig1-dev libasound2-dev autoconf

View File

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

View File

@@ -5,21 +5,10 @@ VENDOR_VERSION_STRING="JBR-${JBSDK_VERSION_WITH_DOTS}.${JDK_BUILD_NUMBER}-${buil
do_reset_changes=0 do_reset_changes=0
do_reset_dcevm=0 do_reset_dcevm=0
HEAD_REVISION=0 HEAD_REVISION=0
WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS="--with-native-debug-symbols=zipped"
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() { function do_exit() {
exit_code=$1 exit_code=$1
[ $do_reset_changes -eq 1 ] && git checkout HEAD jb/project/tools/common/modules.list src/java.desktop/share/classes/module-info.java [ $do_reset_changes -eq 1 ] && git checkout HEAD modules.list src/java.desktop/share/classes/module-info.java
if [ $do_reset_dcevm -eq 1 ]; then if [ $do_reset_dcevm -eq 1 ]; then
[ ! -z $HEAD_REVISION ] && git reset --hard $HEAD_REVISION [ ! -z $HEAD_REVISION ] && git reset --hard $HEAD_REVISION
fi fi

View File

@@ -1,28 +1,20 @@
#!/bin/bash -x #!/bin/bash -x
# The following parameters must be specified: # The following parameters must be specified:
# JBSDK_VERSION - specifies major version of OpenJDK e.g. 11_0_6 (instead of dots '.' underbars "_" are used) # JBSDK_VERSION - specifies the current version of OpenJDK e.g. 11_0_6
# JDK_BUILD_NUMBER - specifies update release of OpenJDK build or the value of --with-version-build argument to configure # 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: # bundle_type - specifies bundle to bu built; possible values:
# jcef - the release bundles with jcef # jcef - the bundles 1) jbr with jcef+javafx, 2) jbrsdk and 3) test will be created
# dcevm - the release bundles with dcevm patches
# nomod - the release bundles without any additional modules (jcef)
# fd - the fastdebug bundles which also include the jcef module
# #
# jbrsdk-${JBSDK_VERSION}-osx-aarch64-b${build_number}.tar.gz # jbrsdk-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
# jbr-${JBSDK_VERSION}-osx-aarch64-b${build_number}.tar.gz # jbr-${JBSDK_VERSION}-osx-x64-b${build_number}.tar.gz
# #
# $ ./java --version # $ ./java --version
# openjdk 11.0.6 2020-01-14 # openjdk 11.0.6 2020-01-14
# OpenJDK Runtime Environment (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number}) # 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) # OpenJDK 64-Bit Server VM (build 11.0.6+${JDK_BUILD_NUMBER}-b${build_number}, mixed mode)
# #
# Environment variables:
# MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located.
# By default imported modules should be located in ./jcef_linux_aarch64/modular-sdk
# JCEF_PATH - specifies the path to the directory with JCEF binaries.
# By default JCEF binaries should be located in ./jcef_linux_aarch64
while getopts ":i?" o; do while getopts ":i?" o; do
case "${o}" in case "${o}" in
@@ -37,141 +29,74 @@ shift $((OPTIND-1))
JBSDK_VERSION=$1 JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2 JDK_BUILD_NUMBER=$2
build_number=$3 build_number=$3
bundle_type=$4
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g') JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
JCEF_PATH=${JCEF_PATH:=./jcef_linux_aarch64}
WITH_IMPORT_MODULES="--with-import-modules=${MODULAR_SDK_PATH:=${JCEF_PATH}/modular-sdk}"
source jb/project/tools/common.sh source jb/project/tools/common.sh
function do_configure { function do_configure {
sh configure \ sh configure \
--disable-warnings-as-errors \ --disable-warnings-as-errors \
$WITH_DEBUG_LEVEL \ --with-debug-level=release \
--with-vendor-name="${VENDOR_NAME}" \ --with-vendor-name="${VENDOR_NAME}" \
--with-vendor-version-string="${VENDOR_VERSION_STRING}" \ --with-vendor-version-string="${VENDOR_VERSION_STRING}" \
--with-jvm-features=shenandoahgc \ --with-jvm-features=shenandoahgc \
--with-version-pre= \ --with-version-pre= \
--with-version-build=${JDK_BUILD_NUMBER} \ --with-version-build=${JDK_BUILD_NUMBER} \
--with-version-opt=b${build_number} \ --with-version-opt=b${build_number} \
--with-boot-jdk=${BOOT_JDK} \ --with-import-modules=./modular-sdk \
$WITH_IMPORT_MODULES \ --with-boot-jdk=amazon-corretto-11.0.5.10.1-linux-aarch64 \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \ --enable-cds=yes || exit $?
--enable-cds=yes || do_exit $?
} }
function create_jbr { JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}
JBR_BUNDLE=jbr_${bundle_type}
case "${bundle_type}" in
"jcef" | "dcevm" | "nomod" | "fd")
JBR_BASE_NAME=jbr_${bundle_type}-${JBSDK_VERSION}
;;
*)
echo "***ERR*** bundle was not specified" && do_exit 1
;;
esac
cat jb/project/tools/common/modules.list > modules_tmp.list
rm -rf ${BASE_DIR}/${JBR_BUNDLE}
JBR=${JBR_BASE_NAME}-linux-aarch64-b${build_number}
echo Running jlink....
$JSDK/bin/jlink \
--module-path $JSDK/jmods --no-man-pages --compress=2 \
--add-modules $(xargs < modules_tmp.list | sed s/" "//g) --output $BASE_DIR/$JBR_BUNDLE || do_exit $?
if [[ "${bundle_type}" == *jcef* ]] || [[ "${bundle_type}" == *dcevm* ]] || [[ "${bundle_type}" == fd ]]; then
cp -R $BASE_DIR/$JBR_BUNDLE $BASE_DIR/jbr
rsync -av ${JCEF_PATH}/ $BASE_DIR/$JBR_BUNDLE/lib --exclude="modular-sdk" || do_exit $?
fi
grep -v "^JAVA_VERSION" $JSDK/release | grep -v "^MODULES" >> $BASE_DIR/$JBR_BUNDLE/release
echo Creating ${JBR}.tar.gz ...
rm -rf ${BASE_DIR}/jbr
cp -R ${BASE_DIR}/${JBR_BUNDLE} ${BASE_DIR}/jbr
tar -pcf ${JBR}.tar -C ${BASE_DIR} jbr || do_exit $?
gzip -f ${JBR}.tar || do_exit $?
rm -rf ${BASE_DIR}/${JBR_BUNDLE}
}
JBRSDK_BASE_NAME=jbrsdk_${bundle_type}-${JBSDK_VERSION}
WITH_DEBUG_LEVEL="--with-debug-level=release"
RELEASE_NAME=linux-aarch64-normal-server-release
JBSDK=${JBRSDK_BASE_NAME}-linux-aarch64-b${build_number}
case "$bundle_type" in
"jcef")
git apply -p0 < jb/project/tools/patches/add_jcef_module_aarch64.patch || do_exit $?
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
git apply -p0 < jb/project/tools/patches/add_jcef_module_aarch64.patch || do_exit $?
do_reset_changes=1
;;
"nomod")
WITH_IMPORT_MODULES=""
;;
"fd")
git apply -p0 < jb/project/tools/patches/add_jcef_module_aarch64.patch || do_exit $?
do_reset_changes=1
WITH_DEBUG_LEVEL="--with-debug-level=fastdebug"
RELEASE_NAME=linux-aarch64-normal-server-fastdebug
JBSDK=jbrsdk-${JBSDK_VERSION}-linux-aarch64-fastdebug-b${build_number}
;;
*)
echo "***ERR*** bundle was not specified" && do_exit 1
;;
esac
if [ -z "$INC_BUILD" ]; then if [ -z "$INC_BUILD" ]; then
do_configure || do_exit $? do_configure || do_exit $?
make clean CONF=$RELEASE_NAME || do_exit $? make clean CONF=linux-aarch64-normal-server-release || exit $?
fi fi
make images CONF=$RELEASE_NAME || do_exit $? make images CONF=linux-aarch64-normal-server-release test-image || exit $?
JSDK=build/${RELEASE_NAME}/images/jdk JBSDK=${JBRSDK_BASE_NAME}-linux-aarch64-b${build_number}
BASE_DIR=build/linux-aarch64-normal-server-release/images
JSDK=${BASE_DIR}/jdk
JBRSDK_BUNDLE=jbrsdk
echo Fixing permissions echo Fixing permissions
chmod -R a+r $JSDK chmod -R a+r $JSDK
BASE_DIR=build/${RELEASE_NAME}/images rm -rf $BASE_DIR/$JBRSDK_BUNDLE
if [ "${bundle_type}" == "dcevm" ] || [ "${bundle_type}" == "jcef" ]; then cp -r $JSDK $BASE_DIR/$JBRSDK_BUNDLE || exit $?
JBRSDK_BUNDLE=jbrsdk_${bundle_type}
else
JBRSDK_BUNDLE=jbrsdk
fi
rm -rf ${BASE_DIR}/${JBRSDK_BUNDLE}
cp -r $JSDK $BASE_DIR/$JBRSDK_BUNDLE || do_exit $?
if [[ "${bundle_type}" == *jcef* ]] || [[ "${bundle_type}" == *dcevm* ]] || [[ "${bundle_type}" == fd ]]; then
rsync -av ${JCEF_PATH}/ $BASE_DIR/$JBRSDK_BUNDLE/lib --exclude="modular-sdk" || do_exit $?
fi
echo Creating $JBSDK.tar.gz ... echo Creating $JBSDK.tar.gz ...
sed 's/JBR/JBRSDK/g' ${BASE_DIR}/${JBRSDK_BUNDLE}/release > release sed 's/JBR/JBRSDK/g' ${BASE_DIR}/${JBRSDK_BUNDLE}/release > release
mv release ${BASE_DIR}/${JBRSDK_BUNDLE}/release mv release ${BASE_DIR}/${JBRSDK_BUNDLE}/release
tar -pcf ${JBSDK}.tar --exclude=*.debuginfo --exclude=demo --exclude=sample --exclude=man \ tar -pcf $JBSDK.tar \
-C ${BASE_DIR} ${JBRSDK_BUNDLE} || do_exit $? --exclude=*.debuginfo --exclude=demo --exclude=sample --exclude=man \
gzip -f ${JBSDK}.tar || do_exit $? -C $BASE_DIR ${JBRSDK_BUNDLE} || exit $?
gzip $JBSDK.tar || exit $?
zip_native_debug_symbols ${BASE_DIR}/jdk "${JBSDK}_diz" JBR_BUNDLE=jbr
JBR_BASE_NAME=jbr-$JBSDK_VERSION
rm -rf $BASE_DIR/$JBR_BUNDLE
create_jbr || 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 [ "$bundle_type" == "dcevm" ]; then echo Modifying release info ...
make test-image CONF=$RELEASE_NAME || do_exit $? grep -v \"^JAVA_VERSION\" ${JSDK}/release | grep -v \"^MODULES\" >> ${BASE_DIR}/${JBR_BUNDLE}/release
JBRSDK_TEST=jbrsdk-${JBSDK_VERSION}-linux-test-aarch64-b$build_number echo Creating $JBR.tar.gz ...
tar -pcf $JBR.tar -C $BASE_DIR ${JBR_BUNDLE} || exit $?
gzip $JBR.tar || exit $?
echo Creating $JBSDK_TEST.tar.gz ... JBRSDK_TEST=$JBRSDK_BASE_NAME-linux-test-aarch64-b$build_number
tar -pcf ${JBRSDK_TEST}.tar -C ${BASE_DIR} --exclude='test/jdk/demos' test || do_exit $? echo Creating $JBRSDK_TEST.tar.gz ...
gzip -f ${JBRSDK_TEST}.tar || do_exit $? tar -pcf $JBRSDK_TEST.tar -C $BASE_DIR --exclude='test/jdk/demos' test || exit $?
fi gzip $JBRSDK_TEST.tar || exit $?
do_exit 0

View File

@@ -20,7 +20,7 @@
# #
# Environment variables: # Environment variables:
# MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located. # MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located.
# By default imported modules should be located in ./jcef_linux_x64/modular-sdk # By default imported modules should be located in ./modular-sdk
# JCEF_PATH - specifies the path to the directory with JCEF binaries. # JCEF_PATH - specifies the path to the directory with JCEF binaries.
# By default JCEF binaries should be located in ./jcef_linux_x64 # By default JCEF binaries should be located in ./jcef_linux_x64
@@ -39,8 +39,8 @@ JDK_BUILD_NUMBER=$2
build_number=$3 build_number=$3
bundle_type=$4 bundle_type=$4
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g') 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_linux_x64} JCEF_PATH=${JCEF_PATH:=./jcef_linux_x64}
WITH_IMPORT_MODULES="--with-import-modules=${MODULAR_SDK_PATH:=${JCEF_PATH}/modular-sdk}"
source jb/project/tools/common.sh source jb/project/tools/common.sh
@@ -54,9 +54,7 @@ function do_configure {
--with-version-pre= \ --with-version-pre= \
--with-version-build=${JDK_BUILD_NUMBER} \ --with-version-build=${JDK_BUILD_NUMBER} \
--with-version-opt=b${build_number} \ --with-version-opt=b${build_number} \
--with-boot-jdk=${BOOT_JDK} \
$WITH_IMPORT_MODULES \ $WITH_IMPORT_MODULES \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
--enable-cds=yes || do_exit $? --enable-cds=yes || do_exit $?
} }
@@ -72,7 +70,7 @@ function create_jbr {
echo "***ERR*** bundle was not specified" && do_exit 1 echo "***ERR*** bundle was not specified" && do_exit 1
;; ;;
esac esac
cat jb/project/tools/common/modules.list > modules_tmp.list cat modules.list > modules_tmp.list
rm -rf ${BASE_DIR}/${JBR_BUNDLE} rm -rf ${BASE_DIR}/${JBR_BUNDLE}
JBR=${JBR_BASE_NAME}-linux-x64-b${build_number} JBR=${JBR_BASE_NAME}-linux-x64-b${build_number}
@@ -96,7 +94,7 @@ function create_jbr {
rm -rf ${BASE_DIR}/${JBR_BUNDLE} rm -rf ${BASE_DIR}/${JBR_BUNDLE}
} }
JBRSDK_BASE_NAME=jbrsdk_${bundle_type}-${JBSDK_VERSION} JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}
WITH_DEBUG_LEVEL="--with-debug-level=release" WITH_DEBUG_LEVEL="--with-debug-level=release"
RELEASE_NAME=linux-x86_64-normal-server-release RELEASE_NAME=linux-x86_64-normal-server-release
JBSDK=${JBRSDK_BASE_NAME}-linux-x64-b${build_number} JBSDK=${JBRSDK_BASE_NAME}-linux-x64-b${build_number}
@@ -120,7 +118,7 @@ case "$bundle_type" in
do_reset_changes=1 do_reset_changes=1
WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" WITH_DEBUG_LEVEL="--with-debug-level=fastdebug"
RELEASE_NAME=linux-x86_64-normal-server-fastdebug RELEASE_NAME=linux-x86_64-normal-server-fastdebug
JBSDK=jbrsdk-${JBSDK_VERSION}-linux-x64-fastdebug-b${build_number} JBSDK=${JBRSDK_BASE_NAME}-linux-x64-fastdebug-b${build_number}
;; ;;
*) *)
echo "***ERR*** bundle was not specified" && do_exit 1 echo "***ERR*** bundle was not specified" && do_exit 1
@@ -139,11 +137,7 @@ echo Fixing permissions
chmod -R a+r $JSDK chmod -R a+r $JSDK
BASE_DIR=build/${RELEASE_NAME}/images BASE_DIR=build/${RELEASE_NAME}/images
if [ "${bundle_type}" == "dcevm" ] || [ "${bundle_type}" == "jcef" ]; then JBRSDK_BUNDLE=jbrsdk
JBRSDK_BUNDLE=jbrsdk_${bundle_type}
else
JBRSDK_BUNDLE=jbrsdk
fi
rm -rf ${BASE_DIR}/${JBRSDK_BUNDLE} rm -rf ${BASE_DIR}/${JBRSDK_BUNDLE}
cp -r $JSDK $BASE_DIR/$JBRSDK_BUNDLE || do_exit $? cp -r $JSDK $BASE_DIR/$JBRSDK_BUNDLE || do_exit $?
@@ -151,27 +145,26 @@ cp -r $JSDK $BASE_DIR/$JBRSDK_BUNDLE || do_exit $?
if [[ "${bundle_type}" == *jcef* ]] || [[ "${bundle_type}" == *dcevm* ]] || [[ "${bundle_type}" == fd ]]; then if [[ "${bundle_type}" == *jcef* ]] || [[ "${bundle_type}" == *dcevm* ]] || [[ "${bundle_type}" == fd ]]; then
rsync -av ${JCEF_PATH}/ $BASE_DIR/$JBRSDK_BUNDLE/lib --exclude="modular-sdk" || do_exit $? rsync -av ${JCEF_PATH}/ $BASE_DIR/$JBRSDK_BUNDLE/lib --exclude="modular-sdk" || do_exit $?
fi fi
if [ "${bundle_type}" == "jcef" ] || [ "${bundle_type}" == "fd" ]; then
echo Creating $JBSDK.tar.gz ...
sed 's/JBR/JBRSDK/g' ${BASE_DIR}/${JBRSDK_BUNDLE}/release > release
mv release ${BASE_DIR}/${JBRSDK_BUNDLE}/release
echo Creating $JBSDK.tar.gz ... tar -pcf ${JBSDK}.tar --exclude=*.debuginfo --exclude=demo --exclude=sample --exclude=man \
sed 's/JBR/JBRSDK/g' ${BASE_DIR}/${JBRSDK_BUNDLE}/release > release -C ${BASE_DIR} ${JBRSDK_BUNDLE} || do_exit $?
mv release ${BASE_DIR}/${JBRSDK_BUNDLE}/release gzip -f ${JBSDK}.tar || do_exit $?
fi
tar -pcf ${JBSDK}.tar --exclude=*.debuginfo --exclude=demo --exclude=sample --exclude=man \
-C ${BASE_DIR} ${JBRSDK_BUNDLE} || do_exit $?
gzip -f ${JBSDK}.tar || do_exit $?
zip_native_debug_symbols ${BASE_DIR}/jdk "${JBSDK}_diz"
create_jbr || do_exit $? create_jbr || do_exit $?
if [ "$bundle_type" == "dcevm" ]; then if [ "$bundle_type" == "jcef" ]; then
make test-image CONF=$RELEASE_NAME || do_exit $? make test-image CONF=$RELEASE_NAME || do_exit $?
JBRSDK_TEST=jbrsdk-${JBSDK_VERSION}-linux-test-x64-b$build_number JBRSDK_TEST=$JBRSDK_BASE_NAME-linux-test-x64-b$build_number
echo Creating $JBSDK_TEST.tar.gz ... echo Creating $JBSDK_TEST.tar.gz ...
tar -pcf ${JBRSDK_TEST}.tar -C ${BASE_DIR} --exclude='test/jdk/demos' test || do_exit $? tar -pcf ${JBRSDK_TEST}.tar -C ${BASE_DIR} --exclude='test/jdk/demos' test || do_exit $?
gzip -f ${JBRSDK_TEST}.tar || do_exit $? gzip -f ${JBRSDK_TEST}.tar || do_exit $?
fi fi
do_exit 0 do_exit 0

View File

@@ -19,7 +19,6 @@
JBSDK_VERSION=$1 JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2 JDK_BUILD_NUMBER=$2
build_number=$3 build_number=$3
BOOT_JDK=${BOOT_JDK:=$(/jbrsdk-11.0.5-b1)}
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g') JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
@@ -36,8 +35,7 @@ linux32 bash configure \
--with-version-pre= \ --with-version-pre= \
--with-version-build=$JDK_BUILD_NUMBER \ --with-version-build=$JDK_BUILD_NUMBER \
--with-version-opt=b${build_number} \ --with-version-opt=b${build_number} \
--with-boot-jdk=${BOOT_JDK} \ --with-boot-jdk=/jbrsdk-11.0.5-b1 \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \
--enable-cds=yes || exit $? --enable-cds=yes || exit $?
make clean CONF=linux-x86-normal-server-release || exit $? make clean CONF=linux-x86-normal-server-release || exit $?
make images CONF=linux-x86-normal-server-release test-image || exit $? make images CONF=linux-x86-normal-server-release test-image || exit $?
@@ -60,14 +58,12 @@ mv release ${BASE_DIR}/${JBRSDK_BUNDLE}/release
tar -pcf $JBSDK.tar --exclude=*.debuginfo --exclude=demo --exclude=sample --exclude=man -C $BASE_DIR ${JBRSDK_BUNDLE} || exit $? tar -pcf $JBSDK.tar --exclude=*.debuginfo --exclude=demo --exclude=sample --exclude=man -C $BASE_DIR ${JBRSDK_BUNDLE} || exit $?
gzip $JBSDK.tar || exit $? gzip $JBSDK.tar || exit $?
zip_native_debug_symbols ${BASE_DIR}/jdk "${JBSDK}_diz"
JBR_BUNDLE=jbr JBR_BUNDLE=jbr
JBR_BASE_NAME=jbr-$JBSDK_VERSION JBR_BASE_NAME=jbr-$JBSDK_VERSION
rm -rf $BASE_DIR/$JBR_BUNDLE rm -rf $BASE_DIR/$JBR_BUNDLE
JBR=$JBR_BASE_NAME-linux-x86-b$build_number JBR=$JBR_BASE_NAME-linux-x86-b$build_number
grep -v javafx jb/project/tools/common/modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > modules.list.x86 grep -v javafx modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > modules.list.x86
echo Running jlink.... echo Running jlink....
${JSDK}/bin/jlink \ ${JSDK}/bin/jlink \
--module-path ${JSDK}/jmods --no-man-pages --compress=2 \ --module-path ${JSDK}/jmods --no-man-pages --compress=2 \
@@ -83,4 +79,4 @@ gzip $JBR.tar || exit $?
JBRSDK_TEST=$JBRSDK_BASE_NAME-linux-test-x86-b$build_number JBRSDK_TEST=$JBRSDK_BASE_NAME-linux-test-x86-b$build_number
echo Creating $JBRSDK_TEST.tar.gz ... echo Creating $JBRSDK_TEST.tar.gz ...
tar -pcf $JBRSDK_TEST.tar -C $BASE_DIR --exclude='test/jdk/demos' --exclude='test/hotspot/gtest' test || exit $? tar -pcf $JBRSDK_TEST.tar -C $BASE_DIR --exclude='test/jdk/demos' --exclude='test/hotspot/gtest' test || exit $?
gzip $JBRSDK_TEST.tar || exit $? gzip $JBRSDK_TEST.tar || exit $?

View File

@@ -20,7 +20,7 @@
# #
# Environment variables: # Environment variables:
# MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located. # MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located.
# By default imported modules should be located in ./jcef_mac/modular-sdk # By default imported modules should be located in ./modular-sdk
# JCEF_PATH - specifies the path to the directory with JCEF binaries. # JCEF_PATH - specifies the path to the directory with JCEF binaries.
# By default JCEF binaries should be located in ./jcef_mac # By default JCEF binaries should be located in ./jcef_mac
@@ -41,10 +41,9 @@ bundle_type=$4
architecture=$5 # aarch64 or x64 architecture=$5 # aarch64 or x64
enable_aot=$6 # temporary param for building test jre with aot under aarch64 enable_aot=$6 # temporary param for building test jre with aot under aarch64
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g') 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} JCEF_PATH=${JCEF_PATH:=./jcef_mac}
WITH_IMPORT_MODULES="--with-import-modules=${MODULAR_SDK_PATH:=${JCEF_PATH}/modular-sdk}"
architecture=${architecture:=x64} architecture=${architecture:=x64}
BOOT_JDK=${BOOT_JDK:=$(/usr/libexec/java_home -v 11)}
source jb/project/tools/common.sh source jb/project/tools/common.sh
@@ -66,8 +65,7 @@ function do_configure {
--with-version-build=${JDK_BUILD_NUMBER} \ --with-version-build=${JDK_BUILD_NUMBER} \
--with-version-opt=b${build_number} \ --with-version-opt=b${build_number} \
$WITH_IMPORT_MODULES \ $WITH_IMPORT_MODULES \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \ --with-boot-jdk=`/usr/libexec/java_home -v 11` \
--with-boot-jdk=${BOOT_JDK} \
--disable-hotspot-gtest --disable-javac-server --disable-full-docs --disable-manpages \ --disable-hotspot-gtest --disable-javac-server --disable-full-docs --disable-manpages \
--enable-cds=no \ --enable-cds=no \
$WITH_JVM_FEATURES \ $WITH_JVM_FEATURES \
@@ -85,8 +83,7 @@ function do_configure {
--with-version-build=${JDK_BUILD_NUMBER} \ --with-version-build=${JDK_BUILD_NUMBER} \
--with-version-opt=b${build_number} \ --with-version-opt=b${build_number} \
$WITH_IMPORT_MODULES \ $WITH_IMPORT_MODULES \
$WITH_ZIPPED_NATIVE_DEBUG_SYMBOLS \ --with-boot-jdk=`/usr/libexec/java_home -v 11` \
--with-boot-jdk=${BOOT_JDK} \
--enable-cds=yes || do_exit $? --enable-cds=yes || do_exit $?
fi fi
} }
@@ -106,11 +103,11 @@ function create_jbr {
if [[ "${architecture}" == *aarch64* ]] && [[ "${enable_aot}" != *enable_aot* ]]; then if [[ "${architecture}" == *aarch64* ]] && [[ "${enable_aot}" != *enable_aot* ]]; then
# aot isn't supported yet, so remove dependent modules # aot isn't supported yet, so remove dependent modules
echo "Exclude jdk.internal.vm.compiler and jdk.aot (because aot not supported yet)" echo "Exclude jdk.internal.vm.compiler and jdk.aot (because aot not supported yet)"
cat jb/project/tools/common/modules.list | \ cat modules.list | \
grep -v "jdk.internal.vm.compiler\|jdk.aot" \ grep -v "jdk.internal.vm.compiler\|jdk.aot" \
> modules_tmp.list > modules_tmp.list
else else
cat jb/project/tools/common/modules.list > modules_tmp.list cat modules.list > modules_tmp.list
fi fi
rm -rf ${BASE_DIR}/${JBR_BUNDLE} rm -rf ${BASE_DIR}/${JBR_BUNDLE}
@@ -144,7 +141,7 @@ function create_jbr {
rm -rf ${BASE_DIR}/${JBR_BUNDLE} rm -rf ${BASE_DIR}/${JBR_BUNDLE}
} }
JBRSDK_BASE_NAME=jbrsdk_${bundle_type}-${JBSDK_VERSION} JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}
WITH_DEBUG_LEVEL="--with-debug-level=release" WITH_DEBUG_LEVEL="--with-debug-level=release"
CONF_ARCHITECTURE=x86_64 CONF_ARCHITECTURE=x86_64
if [[ "${architecture}" == *aarch64* ]]; then if [[ "${architecture}" == *aarch64* ]]; then
@@ -152,7 +149,7 @@ if [[ "${architecture}" == *aarch64* ]]; then
fi fi
CONF_NAME=macosx-${CONF_ARCHITECTURE}-normal-server-release CONF_NAME=macosx-${CONF_ARCHITECTURE}-normal-server-release
JBSDK="${JBRSDK_BASE_NAME}-osx-${architecture}-b${build_number}" JBSDK=${JBRSDK_BASE_NAME}-osx-${architecture}-b${build_number}
case "$bundle_type" in case "$bundle_type" in
"jcef") "jcef")
git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $? git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $?
@@ -173,7 +170,7 @@ case "$bundle_type" in
do_reset_changes=1 do_reset_changes=1
WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" WITH_DEBUG_LEVEL="--with-debug-level=fastdebug"
CONF_NAME=macosx-${CONF_ARCHITECTURE}-normal-server-fastdebug CONF_NAME=macosx-${CONF_ARCHITECTURE}-normal-server-fastdebug
JBSDK=jbrsdk-${JBSDK_VERSION}-osx-${architecture}-fastdebug-b${build_number} JBSDK=${JBRSDK_BASE_NAME}-osx-${architecture}-fastdebug-b${build_number}
;; ;;
*) *)
echo "***ERR*** bundle was not specified" && do_exit 1 echo "***ERR*** bundle was not specified" && do_exit 1
@@ -189,11 +186,7 @@ make images CONF=$CONF_NAME || do_exit $?
JSDK=build/${CONF_NAME}/images/jdk-bundle JSDK=build/${CONF_NAME}/images/jdk-bundle
BASE_DIR=jre BASE_DIR=jre
if [ "${bundle_type}" == "dcevm" ] || [ "${bundle_type}" == "jcef" ]; then JBRSDK_BUNDLE=jbrsdk
JBRSDK_BUNDLE=jbrsdk_${bundle_type}
else
JBRSDK_BUNDLE=jbrsdk
fi
rm -rf $BASE_DIR rm -rf $BASE_DIR
mkdir $BASE_DIR || do_exit $? mkdir $BASE_DIR || do_exit $?
@@ -201,24 +194,23 @@ cp -a $JSDK/jdk-$JBSDK_VERSION_WITH_DOTS.jdk $BASE_DIR/$JBRSDK_BUNDLE || do_exit
if [[ "${bundle_type}" == *jcef* ]] || [[ "${bundle_type}" == *dcevm* ]] || [[ "${bundle_type}" == fd ]]; then if [[ "${bundle_type}" == *jcef* ]] || [[ "${bundle_type}" == *dcevm* ]] || [[ "${bundle_type}" == fd ]]; then
cp -a ${JCEF_PATH}/Frameworks $BASE_DIR/$JBRSDK_BUNDLE/Contents/ cp -a ${JCEF_PATH}/Frameworks $BASE_DIR/$JBRSDK_BUNDLE/Contents/
fi fi
if [ "${bundle_type}" == "jcef" ] || [ "${bundle_type}" == "fd" ]; then
echo Creating $JBSDK.tar.gz ... echo Creating $JBSDK.tar.gz ...
sed 's/JBR/JBRSDK/g' ${BASE_DIR}/${JBRSDK_BUNDLE}/Contents/Home/release > release sed 's/JBR/JBRSDK/g' ${BASE_DIR}/${JBRSDK_BUNDLE}/Contents/Home/release > release
mv release ${BASE_DIR}/${JBRSDK_BUNDLE}/Contents/Home/release mv release ${BASE_DIR}/${JBRSDK_BUNDLE}/Contents/Home/release
[ -f "${JBSDK}.tar.gz" ] && rm "${JBSDK}.tar.gz" [ -f "${JBSDK}.tar.gz" ] && rm "${JBSDK}.tar.gz"
COPYFILE_DISABLE=1 tar -pczf ${JBSDK}.tar.gz -C ${BASE_DIR} \ COPYFILE_DISABLE=1 tar -pczf ${JBSDK}.tar.gz -C ${BASE_DIR} \
--exclude='.DS_Store' --exclude='*~' \ --exclude='.DS_Store' --exclude='*~' \
--exclude='Home/demo' --exclude='Home/man' --exclude='Home/sample' \ --exclude='Home/demo' --exclude='Home/man' --exclude='Home/sample' \
${JBRSDK_BUNDLE} || do_exit $? ${JBRSDK_BUNDLE} || do_exit $?
fi
zip_native_debug_symbols ${JSDK} "${JBSDK}_diz"
create_jbr || do_exit $? create_jbr || do_exit $?
if [ "$bundle_type" == "dcevm" ]; then if [ "$bundle_type" == "jcef" ]; then
make test-image CONF=$CONF_NAME || do_exit $? make test-image CONF=$CONF_NAME || do_exit $?
JBRSDK_TEST=jbrsdk-${JBSDK_VERSION}-osx-test-${architecture}-b$build_number JBRSDK_TEST=$JBRSDK_BASE_NAME-osx-test-${architecture}-b$build_number
echo Creating $JBRSDK_TEST.tar.gz ... echo Creating $JBRSDK_TEST.tar.gz ...
[ -f "${JBRSDK_TEST}.tar.gz" ] && rm "${JBRSDK_TEST}.tar.gz" [ -f "${JBRSDK_TEST}.tar.gz" ] && rm "${JBRSDK_TEST}.tar.gz"
@@ -226,4 +218,4 @@ if [ "$bundle_type" == "dcevm" ]; then
--exclude='test/jdk/demos' test || do_exit $? --exclude='test/jdk/demos' test || do_exit $?
fi fi
do_exit 0 do_exit 0

View File

@@ -1,7 +1,7 @@
diff --git jb/project/tools/common/modules.list jb/project/tools/common/modules.list diff --git modules.list modules.list
index 33375b527c4..76539cbc0e0 100644 index 33375b527c4..76539cbc0e0 100644
--- jb/project/tools/common/modules.list --- modules.list
+++ jb/project/tools/common/modules.list +++ modules.list
@@ -55,4 +55,7 @@ jdk.unsupported, @@ -55,4 +55,7 @@ jdk.unsupported,
jdk.xml.dom, jdk.xml.dom,
jdk.zipfs, jdk.zipfs,

View File

@@ -1,27 +0,0 @@
diff --git jb/project/tools/common/modules.list jb/project/tools/common/modules.list
index 33375b527c4..76539cbc0e0 100644
--- jb/project/tools/common/modules.list
+++ jb/project/tools/common/modules.list
@@ -55,4 +55,5 @@ jdk.unsupported,
jdk.xml.dom,
jdk.zipfs,
jdk.hotspot.agent,
-jdk.jcmd
+jdk.jcmd,
+jcef
diff --git src/java.desktop/share/classes/module-info.java src/java.desktop/share/classes/module-info.java
index b663b382f52..3e9acdc0c27 100644
--- src/java.desktop/share/classes/module-info.java
+++ src/java.desktop/share/classes/module-info.java
@@ -109,7 +109,10 @@ module java.desktop {
// see make/GensrcModuleInfo.gmk
exports sun.awt to
jdk.accessibility,
- jdk.unsupported.desktop;
+ jdk.unsupported.desktop,
+ jcef;
+
+ exports java.awt.peer to jcef;
exports java.awt.dnd.peer to jdk.unsupported.desktop;
exports sun.awt.dnd to jdk.unsupported.desktop;

View File

@@ -0,0 +1,27 @@
diff --git modules.list modules.list
index 33375b527c4..76539cbc0e0 100644
--- modules.list
+++ modules.list
@@ -55,4 +55,5 @@ jdk.unsupported,
jdk.xml.dom,
jdk.zipfs,
jdk.hotspot.agent,
-jdk.jcmd
+jdk.jcmd,
+jcef
diff --git src/java.desktop/share/classes/module-info.java src/java.desktop/share/classes/module-info.java
index b663b382f52..3e9acdc0c27 100644
--- src/java.desktop/share/classes/module-info.java
+++ src/java.desktop/share/classes/module-info.java
@@ -109,7 +109,10 @@ module java.desktop {
// see make/GensrcModuleInfo.gmk
exports sun.awt to
jdk.accessibility,
- jdk.unsupported.desktop;
+ jdk.unsupported.desktop,
+ jcef;
+
+ 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,7 +1,7 @@
From 049d83cfb1db63a0c20cd53696686a7ae11be824 Mon Sep 17 00:00:00 2001 From a23078dc957ec7b88de7b82fdea6438c9a046cf1 Mon Sep 17 00:00:00 2001
From: skybber <lada.dvorak7@gmail.com> From: skybber <lada.dvorak7@gmail.com>
Date: Wed, 12 Dec 2018 19:38:28 +0100 Date: Wed, 12 Dec 2018 19:38:28 +0100
Subject: [PATCH 03/44] Support for Concurrent Mark Sweep (CMS) collector Subject: [PATCH 03/33] Support for Concurrent Mark Sweep (CMS) collector
--- ---
.../share/gc/cms/compactibleFreeListSpace.cpp | 139 ++++++++++++------ .../share/gc/cms/compactibleFreeListSpace.cpp | 139 ++++++++++++------
@@ -422,45 +422,45 @@ index 6b109fcd2e5..8c255d6d428 100644
Klass* new_version = oop(cur_obj)->klass()->new_version(); Klass* new_version = oop(cur_obj)->klass()->new_version();
if (new_version->update_information() == NULL) { if (new_version->update_information() == NULL) {
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 92ce6c27b8a..41e82ae7a69 100644 index 43d761cdbb2..14af1aad21b 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -54,6 +54,7 @@ @@ -54,6 +54,7 @@
#include "prims/jvmtiThreadState.inline.hpp" #include "prims/jvmtiThreadState.inline.hpp"
#include "utilities/events.hpp" #include "utilities/events.hpp"
#include "oops/constantPool.inline.hpp" #include "oops/constantPool.inline.hpp"
+#include "gc/cms/cmsHeap.hpp" +#include "gc/cms/cmsHeap.hpp"
Array<Method*>* VM_EnhancedRedefineClasses::_old_methods = NULL; Array<Method*>* VM_EnhancedRedefineClasses::_old_methods = NULL;
Array<Method*>* VM_EnhancedRedefineClasses::_new_methods = NULL; Array<Method*>* VM_EnhancedRedefineClasses::_new_methods = NULL;
@@ -416,13 +417,11 @@ public: @@ -416,13 +417,11 @@ public:
Klass* new_klass = obj->klass()->new_version(); Klass* new_klass = obj->klass()->new_version();
if (new_klass->update_information() != NULL) { if (new_klass->update_information() != NULL) {
- int size_diff = obj->size() - obj->size_given_klass(new_klass); - int size_diff = obj->size() - obj->size_given_klass(new_klass);
- -
- // Either new size is bigger or gap is to small to be filled - // Either new size is bigger or gap is to small to be filled
- if (size_diff < 0 || (size_diff > 0 && (size_t) size_diff < CollectedHeap::min_fill_size())) { - if (size_diff < 0 || (size_diff > 0 && (size_t) size_diff < CollectedHeap::min_fill_size())) {
+ if (obj->size() - obj->size_given_klass(new_klass) != 0) { + if (obj->size() - obj->size_given_klass(new_klass) != 0) {
// We need an instance update => set back to old klass // We need an instance update => set back to old klass
_needs_instance_update = true; _needs_instance_update = true;
} else { } else {
+ // Either new size is bigger or gap is to small to be filled + // Either new size is bigger or gap is to small to be filled
oop src = obj; oop src = obj;
if (new_klass->is_copying_backwards()) { if (new_klass->is_copying_backwards()) {
copy_to_tmp(obj); copy_to_tmp(obj);
@@ -432,11 +431,6 @@ public: @@ -432,11 +431,6 @@ public:
// FIXME: instance updates... // FIXME: instance updates...
//guarantee(false, "instance updates!"); //guarantee(false, "instance updates!");
MarkSweep::update_fields(obj, src, new_klass->update_information()); MarkSweep::update_fields(obj, src, new_klass->update_information());
- -
- if (size_diff > 0) { - if (size_diff > 0) {
- HeapWord* dead_space = ((HeapWord *)obj) + obj->size(); - HeapWord* dead_space = ((HeapWord *)obj) + obj->size();
- CollectedHeap::fill_with_object(dead_space, size_diff); - CollectedHeap::fill_with_object(dead_space, size_diff);
- } - }
} }
} else { } else {
obj->set_klass(obj->klass()->new_version()); obj->set_klass(obj->klass()->new_version());
diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp
index 4e2a3ff1083..e3cb44d8690 100644 index 4e2a3ff1083..e3cb44d8690 100644
--- a/src/hotspot/share/runtime/arguments.cpp --- a/src/hotspot/share/runtime/arguments.cpp

View File

@@ -1,7 +1,7 @@
From 199dbcfcc71ea6992970c9cf9cfeee6f13d2a600 Mon Sep 17 00:00:00 2001 From 89334947f64b857d6ef052e51dc645a0baa9cc65 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@mailprofiler.com> From: Vladimir Dvorak <vladimir.dvorak@mailprofiler.com>
Date: Wed, 11 Mar 2020 14:19:34 +0100 Date: Wed, 11 Mar 2020 14:19:34 +0100
Subject: [PATCH 04/44] Fix class cast exception on redefinition of class A, Subject: [PATCH 04/33] Fix class cast exception on redefinition of class A,
that is superclass of B that has anonymous class C that is superclass of B that has anonymous class C
--- ---
@@ -9,7 +9,7 @@ Subject: [PATCH 04/44] Fix class cast exception on redefinition of class A,
1 file changed, 4 insertions(+), 1 deletion(-) 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp
index e3724984aa5..b10e566b7c3 100644 index 77708e25aae..76791cdd905 100644
--- a/src/hotspot/share/oops/instanceKlass.cpp --- a/src/hotspot/share/oops/instanceKlass.cpp
+++ b/src/hotspot/share/oops/instanceKlass.cpp +++ b/src/hotspot/share/oops/instanceKlass.cpp
@@ -788,7 +788,10 @@ bool InstanceKlass::link_class_impl(bool throw_verifyerror, TRAPS) { @@ -788,7 +788,10 @@ bool InstanceKlass::link_class_impl(bool throw_verifyerror, TRAPS) {

View File

@@ -1,7 +1,7 @@
From 238ef84478962cdba49b479803163b6e71f46914 Mon Sep 17 00:00:00 2001 From 9d8b4cee545f9895b77f5f05059cbd519c6c8094 Mon Sep 17 00:00:00 2001
From: skybber <lada.dvorak7@gmail.com> From: skybber <lada.dvorak7@gmail.com>
Date: Wed, 14 Nov 2018 21:20:08 +0100 Date: Thu, 15 Nov 2018 03:20:08 +0700
Subject: [PATCH 05/44] HotswapAgent integration Subject: [PATCH 05/33] HotswapAgent integration
It include: It include:
@@ -37,7 +37,7 @@ old DCEVM
make/launcher/Launcher-jdk.jartool.gmk | 2 + make/launcher/Launcher-jdk.jartool.gmk | 2 +
make/launcher/Launcher-jdk.javadoc.gmk | 3 +- make/launcher/Launcher-jdk.javadoc.gmk | 3 +-
make/launcher/Launcher-jdk.jcmd.gmk | 13 +++- make/launcher/Launcher-jdk.jcmd.gmk | 13 +++-
make/launcher/Launcher-jdk.jconsole.gmk | 5 +- make/launcher/Launcher-jdk.jconsole.gmk | 1 +
make/launcher/Launcher-jdk.jdeps.gmk | 3 + make/launcher/Launcher-jdk.jdeps.gmk | 3 +
make/launcher/Launcher-jdk.jdi.gmk | 1 + make/launcher/Launcher-jdk.jdi.gmk | 1 +
make/launcher/Launcher-jdk.jlink.gmk | 5 +- make/launcher/Launcher-jdk.jlink.gmk | 5 +-
@@ -55,7 +55,7 @@ old DCEVM
.../classes/com/sun/beans/package-info.java | 26 +++++++ .../classes/com/sun/beans/package-info.java | 26 +++++++
.../com/sun/beans/util/package-info.java | 26 +++++++ .../com/sun/beans/util/package-info.java | 26 +++++++
.../share/classes/module-info.java | 3 + .../share/classes/module-info.java | 3 +
28 files changed, 210 insertions(+), 12 deletions(-) 28 files changed, 208 insertions(+), 10 deletions(-)
create mode 100644 src/java.desktop/share/classes/com/sun/beans/introspect/package-info.java create mode 100644 src/java.desktop/share/classes/com/sun/beans/introspect/package-info.java
create mode 100644 src/java.desktop/share/classes/com/sun/beans/package-info.java create mode 100644 src/java.desktop/share/classes/com/sun/beans/package-info.java
create mode 100644 src/java.desktop/share/classes/com/sun/beans/util/package-info.java create mode 100644 src/java.desktop/share/classes/com/sun/beans/util/package-info.java
@@ -259,18 +259,14 @@ index 7117fa78059..761a52d8466 100644
# Hook to include the corresponding custom file, if present. # Hook to include the corresponding custom file, if present.
diff --git a/make/launcher/Launcher-jdk.jconsole.gmk b/make/launcher/Launcher-jdk.jconsole.gmk diff --git a/make/launcher/Launcher-jdk.jconsole.gmk b/make/launcher/Launcher-jdk.jconsole.gmk
index 575b9e0595b..2ec087d710f 100644 index 575b9e0595b..2f442f69113 100644
--- a/make/launcher/Launcher-jdk.jconsole.gmk --- a/make/launcher/Launcher-jdk.jconsole.gmk
+++ b/make/launcher/Launcher-jdk.jconsole.gmk +++ b/make/launcher/Launcher-jdk.jconsole.gmk
@@ -28,8 +28,9 @@ include LauncherCommon.gmk @@ -30,6 +30,7 @@ $(eval $(call SetupBuildLauncher, jconsole, \
$(eval $(call SetupBuildLauncher, jconsole, \
MAIN_CLASS := sun.tools.jconsole.JConsole, \
JAVA_ARGS := --add-opens java.base/java.io=jdk.jconsole \ JAVA_ARGS := --add-opens java.base/java.io=jdk.jconsole \
- -Djconsole.showOutputViewer \ -Djconsole.showOutputViewer \
- -Djdk.attach.allowAttachSelf=true, \ -Djdk.attach.allowAttachSelf=true, \
+ -Djconsole.showOutputViewer \ + -XX:+DisableHotswapAgent, \
+ -Djdk.attach.allowAttachSelf=true \
+ -XX:+DisableHotswapAgent, \
CFLAGS_windows := -DJAVAW, \ CFLAGS_windows := -DJAVAW, \
LIBS_windows := user32.lib, \ LIBS_windows := user32.lib, \
)) ))
@@ -501,7 +497,7 @@ index e3cb44d8690..36276741b5c 100644
+ +
+} +}
diff --git a/src/hotspot/share/runtime/arguments.hpp b/src/hotspot/share/runtime/arguments.hpp diff --git a/src/hotspot/share/runtime/arguments.hpp b/src/hotspot/share/runtime/arguments.hpp
index 5cb7f5c4bd8..d7fd03d079e 100644 index cc7f71a4404..b2bab2e1f44 100644
--- a/src/hotspot/share/runtime/arguments.hpp --- a/src/hotspot/share/runtime/arguments.hpp
+++ b/src/hotspot/share/runtime/arguments.hpp +++ b/src/hotspot/share/runtime/arguments.hpp
@@ -507,6 +507,9 @@ class Arguments : AllStatic { @@ -507,6 +507,9 @@ class Arguments : AllStatic {
@@ -515,7 +511,7 @@ index 5cb7f5c4bd8..d7fd03d079e 100644
static size_t max_heap_for_compressed_oops(); static size_t max_heap_for_compressed_oops();
diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp
index 35b8205f7c7..4d6fe0034a3 100644 index 194242e4c4b..9c007fc2d82 100644
--- a/src/hotspot/share/runtime/globals.hpp --- a/src/hotspot/share/runtime/globals.hpp
+++ b/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp
@@ -32,6 +32,12 @@ @@ -32,6 +32,12 @@
@@ -531,7 +527,7 @@ index 35b8205f7c7..4d6fe0034a3 100644
// The larger HeapWordSize for 64bit requires larger heaps // The larger HeapWordSize for 64bit requires larger heaps
// for the same application running in 64bit. See bug 4967770. // for the same application running in 64bit. See bug 4967770.
// The minimum alignment to a heap word size is done. Other // The minimum alignment to a heap word size is done. Other
@@ -2687,8 +2693,10 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G); @@ -2684,8 +2690,10 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G);
\ \
product(bool, AllowEnhancedClassRedefinition, true, \ product(bool, AllowEnhancedClassRedefinition, true, \
"Allow enhanced class redefinition beyond swapping method " \ "Allow enhanced class redefinition beyond swapping method " \

View File

@@ -1,7 +1,7 @@
From 2b6afed7b4bd890326b2cc7a3eaf3020e3f0fe44 Mon Sep 17 00:00:00 2001 From 4386e1b6a0429a39e390cca3bc66f920bf6dafe5 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Sun, 4 Oct 2020 21:12:12 +0200 Date: Sun, 4 Oct 2020 21:12:12 +0200
Subject: [PATCH 06/44] Support for Lambda class redefinition Subject: [PATCH 06/33] Support for Lambda class redefinition
--- ---
.../share/classfile/classLoaderData.cpp | 9 +++ .../share/classfile/classLoaderData.cpp | 9 +++
@@ -47,10 +47,10 @@ index b5a7cf21c85..c4f617ab800 100644
void unload(); void unload();
diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp
index 0059af83584..89375cd59fa 100644 index f69167ae53c..42e0fee800f 100644
--- a/src/hotspot/share/classfile/systemDictionary.cpp --- a/src/hotspot/share/classfile/systemDictionary.cpp
+++ b/src/hotspot/share/classfile/systemDictionary.cpp +++ b/src/hotspot/share/classfile/systemDictionary.cpp
@@ -970,12 +970,16 @@ InstanceKlass* SystemDictionary::parse_stream(Symbol* class_name, @@ -971,12 +971,16 @@ InstanceKlass* SystemDictionary::parse_stream(Symbol* class_name,
Handle protection_domain, Handle protection_domain,
ClassFileStream* st, ClassFileStream* st,
const InstanceKlass* host_klass, const InstanceKlass* host_klass,
@@ -67,7 +67,7 @@ index 0059af83584..89375cd59fa 100644
if (host_klass != NULL) { if (host_klass != NULL) {
// Create a new CLD for anonymous class, that uses the same class loader // Create a new CLD for anonymous class, that uses the same class loader
// as the host_klass // as the host_klass
@@ -999,8 +1003,12 @@ InstanceKlass* SystemDictionary::parse_stream(Symbol* class_name, @@ -1000,8 +1004,12 @@ InstanceKlass* SystemDictionary::parse_stream(Symbol* class_name,
protection_domain, protection_domain,
host_klass, host_klass,
cp_patches, cp_patches,
@@ -81,7 +81,7 @@ index 0059af83584..89375cd59fa 100644
if (host_klass != NULL && k != NULL) { if (host_klass != NULL && k != NULL) {
// Anonymous classes must update ClassLoaderData holder (was host_klass loader) // Anonymous classes must update ClassLoaderData holder (was host_klass loader)
@@ -1841,7 +1849,7 @@ void SystemDictionary::remove_from_hierarchy(InstanceKlass* k) { @@ -1846,7 +1854,7 @@ void SystemDictionary::remove_from_hierarchy(InstanceKlass* k) {
k->remove_from_sibling_list(); k->remove_from_sibling_list();
} }
@@ -91,7 +91,7 @@ index 0059af83584..89375cd59fa 100644
constraints()->update_after_redefinition(); constraints()->update_after_redefinition();
} }
diff --git a/src/hotspot/share/classfile/systemDictionary.hpp b/src/hotspot/share/classfile/systemDictionary.hpp diff --git a/src/hotspot/share/classfile/systemDictionary.hpp b/src/hotspot/share/classfile/systemDictionary.hpp
index 8b5ba8546dd..0002abe6122 100644 index b956c6a7519..a8359143908 100644
--- a/src/hotspot/share/classfile/systemDictionary.hpp --- a/src/hotspot/share/classfile/systemDictionary.hpp
+++ b/src/hotspot/share/classfile/systemDictionary.hpp +++ b/src/hotspot/share/classfile/systemDictionary.hpp
@@ -307,6 +307,7 @@ public: @@ -307,6 +307,7 @@ public:
@@ -111,114 +111,114 @@ index 8b5ba8546dd..0002abe6122 100644
TRAPS); TRAPS);
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 41e82ae7a69..b94caa39562 100644 index 14af1aad21b..0b239b2ff6d 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -488,6 +488,8 @@ void VM_EnhancedRedefineClasses::doit() { @@ -488,6 +488,8 @@ void VM_EnhancedRedefineClasses::doit() {
ClassLoaderDataGraph::classes_do(&clear_cpool_cache); ClassLoaderDataGraph::classes_do(&clear_cpool_cache);
+ // SystemDictionary::methods_do(fix_invoke_method); + // SystemDictionary::methods_do(fix_invoke_method);
+ +
// JSR-292 support // JSR-292 support
if (_any_class_has_resolved_methods) { if (_any_class_has_resolved_methods) {
bool trace_name_printed = false; bool trace_name_printed = false;
@@ -750,12 +752,34 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) { @@ -750,12 +752,34 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
// load hook event. // load hook event.
state->set_class_being_redefined(the_class, _class_load_kind); state->set_class_being_redefined(the_class, _class_load_kind);
- InstanceKlass* k = SystemDictionary::resolve_from_stream(the_class_sym, - InstanceKlass* k = SystemDictionary::resolve_from_stream(the_class_sym,
- the_class_loader, - the_class_loader,
- protection_domain, - protection_domain,
- &st, - &st,
- the_class, - the_class,
- THREAD); - THREAD);
+ InstanceKlass* k; + InstanceKlass* k;
+ +
+ if (InstanceKlass::cast(the_class)->is_anonymous()) { + if (InstanceKlass::cast(the_class)->is_anonymous()) {
+ const InstanceKlass* host_class = the_class->host_klass(); + const InstanceKlass* host_class = the_class->host_klass();
+ +
+ // Make sure it's the real host class, not another anonymous class. + // Make sure it's the real host class, not another anonymous class.
+ while (host_class != NULL && host_class->is_anonymous()) { + while (host_class != NULL && host_class->is_anonymous()) {
+ host_class = host_class->host_klass(); + host_class = host_class->host_klass();
+ } + }
+ +
+ k = SystemDictionary::parse_stream(the_class_sym, + k = SystemDictionary::parse_stream(the_class_sym,
+ the_class_loader, + the_class_loader,
+ protection_domain, + protection_domain,
+ &st, + &st,
+ host_class, + host_class,
+ the_class, + the_class,
+ NULL, + NULL,
+ THREAD); + THREAD);
+ k->class_loader_data()->exchange_holders(the_class->class_loader_data()); + k->class_loader_data()->exchange_holders(the_class->class_loader_data());
+ the_class->class_loader_data()->inc_keep_alive(); + the_class->class_loader_data()->inc_keep_alive();
+ } else { + } else {
+ k = SystemDictionary::resolve_from_stream(the_class_sym, + k = SystemDictionary::resolve_from_stream(the_class_sym,
+ the_class_loader, + the_class_loader,
+ protection_domain, + protection_domain,
+ &st, + &st,
+ the_class, + the_class,
+ THREAD); + THREAD);
+ } + }
// Clear class_being_redefined just to be sure. // Clear class_being_redefined just to be sure.
state->clear_class_being_redefined(); state->clear_class_being_redefined();
@@ -1436,6 +1460,30 @@ void VM_EnhancedRedefineClasses::MethodDataCleaner::do_klass(Klass* k) { @@ -1436,6 +1460,30 @@ void VM_EnhancedRedefineClasses::MethodDataCleaner::do_klass(Klass* k) {
} }
} }
+void VM_EnhancedRedefineClasses::fix_invoke_method(Method* method) { +void VM_EnhancedRedefineClasses::fix_invoke_method(Method* method) {
+ +
+ constantPoolHandle other_cp = constantPoolHandle(method->constants()); + constantPoolHandle other_cp = constantPoolHandle(method->constants());
+ +
+ for (int i = 0; i < other_cp->length(); i++) { + for (int i = 0; i < other_cp->length(); i++) {
+ if (other_cp->tag_at(i).is_klass()) { + if (other_cp->tag_at(i).is_klass()) {
+ Klass* klass = other_cp->resolved_klass_at(i); + Klass* klass = other_cp->resolved_klass_at(i);
+ if (klass->new_version() != NULL) { + if (klass->new_version() != NULL) {
+ // Constant pool entry points to redefined class -- update to the new version + // Constant pool entry points to redefined class -- update to the new version
+ other_cp->klass_at_put(i, klass->newest_version()); + other_cp->klass_at_put(i, klass->newest_version());
+ } + }
+ assert(other_cp->resolved_klass_at(i)->new_version() == NULL, "Must be new klass!"); + assert(other_cp->resolved_klass_at(i)->new_version() == NULL, "Must be new klass!");
+ } + }
+ } + }
+ +
+ ConstantPoolCache* cp_cache = other_cp->cache(); + ConstantPoolCache* cp_cache = other_cp->cache();
+ if (cp_cache != NULL) { + if (cp_cache != NULL) {
+ cp_cache->clear_entries(); + cp_cache->clear_entries();
+ } + }
+ +
+} +}
+ +
+ +
+ +
void VM_EnhancedRedefineClasses::update_jmethod_ids() { void VM_EnhancedRedefineClasses::update_jmethod_ids() {
for (int j = 0; j < _matching_methods_length; ++j) { for (int j = 0; j < _matching_methods_length; ++j) {
Method* old_method = _matching_old_methods[j]; Method* old_method = _matching_old_methods[j];
@@ -1973,7 +2021,10 @@ jvmtiError VM_EnhancedRedefineClasses::find_sorted_affected_classes(TRAPS) { @@ -1973,7 +2021,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) // Find classes not directly redefined, but affected by a redefinition (because one of its supertypes is redefined)
AffectedKlassClosure closure(_affected_klasses); AffectedKlassClosure closure(_affected_klasses);
// Updated in j10, from original SystemDictionary::classes_do // Updated in j10, from original SystemDictionary::classes_do
- ClassLoaderDataGraph::dictionary_classes_do(&closure); - ClassLoaderDataGraph::dictionary_classes_do(&closure);
+ +
+ ClassLoaderDataGraph::classes_do(&closure); + ClassLoaderDataGraph::classes_do(&closure);
+ //ClassLoaderDataGraph::dictionary_classes_do(&closure); + //ClassLoaderDataGraph::dictionary_classes_do(&closure);
+ +
log_trace(redefine, class, load)("%d classes affected", _affected_klasses->length()); 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. // 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 diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
index 60b62c3170a..d8a11b51fe9 100644 index a48e07e3a6a..3551b06ecde 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
@@ -116,6 +116,7 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation { @@ -116,6 +116,7 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
void rollback(); void rollback();
static void mark_as_scavengable(nmethod* nm); static void mark_as_scavengable(nmethod* nm);
static void unpatch_bytecode(Method* method); static void unpatch_bytecode(Method* method);
+ static void fix_invoke_method(Method* method); + static void fix_invoke_method(Method* method);
// Figure out which new methods match old methods in name and signature, // Figure out which new methods match old methods in name and signature,
// which methods have been added, and which are no longer present // 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 diff --git a/src/hotspot/share/prims/resolvedMethodTable.cpp b/src/hotspot/share/prims/resolvedMethodTable.cpp
index 8098b80baa6..5a5d5e98623 100644 index 8098b80baa6..5a5d5e98623 100644
--- a/src/hotspot/share/prims/resolvedMethodTable.cpp --- a/src/hotspot/share/prims/resolvedMethodTable.cpp

View File

@@ -1,7 +1,7 @@
From d78e34a89b273508d3502d7456bf40b568edb3fd Mon Sep 17 00:00:00 2001 From 9e65f8342345df054cc1cb694fb4859e2557401d Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Sat, 23 May 2020 10:02:15 +0200 Date: Sat, 23 May 2020 10:02:15 +0200
Subject: [PATCH 07/44] Fix "no original bytecode found" error if method with Subject: [PATCH 07/33] Fix "no original bytecode found" error if method with
bkp is missing bkp is missing
Sometimes IDE can deploy class with erroneous method, such method has Sometimes IDE can deploy class with erroneous method, such method has
@@ -41,7 +41,7 @@ index aeafba285f0..026fe9234fb 100644
IRT_ENTRY(void, InterpreterRuntime::set_original_bytecode_at(JavaThread* thread, Method* method, address bcp, Bytecodes::Code new_code)) IRT_ENTRY(void, InterpreterRuntime::set_original_bytecode_at(JavaThread* thread, Method* method, address bcp, Bytecodes::Code new_code))
diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp
index 0a12f01536a..037ceef2c44 100644 index e47dd223f92..165a2e4de36 100644
--- a/src/hotspot/share/oops/method.cpp --- a/src/hotspot/share/oops/method.cpp
+++ b/src/hotspot/share/oops/method.cpp +++ b/src/hotspot/share/oops/method.cpp
@@ -1789,14 +1789,14 @@ bool CompressedLineNumberReadStream::read_pair() { @@ -1789,14 +1789,14 @@ bool CompressedLineNumberReadStream::read_pair() {
@@ -102,34 +102,34 @@ index 4ac3e6e80de..9ff4f0e8036 100644
void set_breakpoint(int bci); void set_breakpoint(int bci);
void clear_breakpoint(int bci); void clear_breakpoint(int bci);
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index b94caa39562..1fbba406087 100644 index 0b239b2ff6d..aba99bb60fa 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -1356,14 +1356,16 @@ void VM_EnhancedRedefineClasses::unpatch_bytecode(Method* method) { @@ -1356,14 +1356,16 @@ void VM_EnhancedRedefineClasses::unpatch_bytecode(Method* method) {
if (code == Bytecodes::_breakpoint) { if (code == Bytecodes::_breakpoint) {
int bci = method->bci_from(bcp); int bci = method->bci_from(bcp);
- code = method->orig_bytecode_at(bci); - code = method->orig_bytecode_at(bci);
- java_code = Bytecodes::java_code(code); - java_code = Bytecodes::java_code(code);
- if (code != java_code && - if (code != java_code &&
- (java_code == Bytecodes::_getfield || - (java_code == Bytecodes::_getfield ||
- java_code == Bytecodes::_putfield || - java_code == Bytecodes::_putfield ||
- java_code == Bytecodes::_aload_0)) { - java_code == Bytecodes::_aload_0)) {
- // Let breakpoint table handling unpatch bytecode - // Let breakpoint table handling unpatch bytecode
- method->set_orig_bytecode_at(bci, java_code); - method->set_orig_bytecode_at(bci, java_code);
+ code = method->orig_bytecode_at(bci, true); + code = method->orig_bytecode_at(bci, true);
+ if (code != Bytecodes::_shouldnotreachhere) { + if (code != Bytecodes::_shouldnotreachhere) {
+ java_code = Bytecodes::java_code(code); + java_code = Bytecodes::java_code(code);
+ if (code != java_code && + if (code != java_code &&
+ (java_code == Bytecodes::_getfield || + (java_code == Bytecodes::_getfield ||
+ java_code == Bytecodes::_putfield || + java_code == Bytecodes::_putfield ||
+ java_code == Bytecodes::_aload_0)) { + java_code == Bytecodes::_aload_0)) {
+ // Let breakpoint table handling unpatch bytecode + // Let breakpoint table handling unpatch bytecode
+ method->set_orig_bytecode_at(bci, java_code); + method->set_orig_bytecode_at(bci, java_code);
+ } + }
} }
} else { } else {
java_code = Bytecodes::java_code(code); java_code = Bytecodes::java_code(code);
-- --
2.23.0 2.23.0

View File

@@ -1,7 +1,7 @@
From 7035df8436fdda697753f1af48c26701328f684a Mon Sep 17 00:00:00 2001 From 08175b2107ccaabcd626ebaf6f154bdd2841a88e Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Sun, 24 May 2020 12:07:42 +0200 Date: Sun, 24 May 2020 12:07:42 +0200
Subject: [PATCH 08/44] Replace deleted method with Subject: [PATCH 08/33] Replace deleted method with
Universe::throw_no_such_method_error Universe::throw_no_such_method_error
--- ---

View File

@@ -1,11 +1,11 @@
From 7c0fb4d6401dd7f87e6985c514484ee9846bf447 Mon Sep 17 00:00:00 2001 From f243b468b99115fcc4552644fea57cb695ab3ef8 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Fri, 12 Jun 2020 17:43:52 +0200 Date: Fri, 12 Jun 2020 17:43:52 +0200
Subject: [PATCH 09/44] Support for G1 gc Subject: [PATCH 09/33] Support for G1 gc
--- ---
src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 20 +++ src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 20 +++
src/hotspot/share/gc/g1/g1CollectedHeap.hpp | 2 + src/hotspot/share/gc/g1/g1CollectedHeap.hpp | 3 +
src/hotspot/share/gc/g1/g1FullCollector.cpp | 16 +- src/hotspot/share/gc/g1/g1FullCollector.cpp | 16 +-
.../share/gc/g1/g1FullGCCompactTask.cpp | 92 +++++++++- .../share/gc/g1/g1FullGCCompactTask.cpp | 92 +++++++++-
.../share/gc/g1/g1FullGCCompactTask.hpp | 19 +++ .../share/gc/g1/g1FullGCCompactTask.hpp | 19 +++
@@ -26,12 +26,12 @@ Subject: [PATCH 09/44] Support for G1 gc
.../prims/jvmtiEnhancedRedefineClasses.hpp | 6 +- .../prims/jvmtiEnhancedRedefineClasses.hpp | 6 +-
src/hotspot/share/runtime/arguments.cpp | 4 +- src/hotspot/share/runtime/arguments.cpp | 4 +-
src/hotspot/share/utilities/growableArray.hpp | 4 + src/hotspot/share/utilities/growableArray.hpp | 4 +
22 files changed, 627 insertions(+), 141 deletions(-) 22 files changed, 628 insertions(+), 141 deletions(-)
create mode 100644 src/hotspot/share/gc/shared/dcevmSharedGC.cpp create mode 100644 src/hotspot/share/gc/shared/dcevmSharedGC.cpp
create mode 100644 src/hotspot/share/gc/shared/dcevmSharedGC.hpp create mode 100644 src/hotspot/share/gc/shared/dcevmSharedGC.hpp
diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
index 3b0e6eb6587..d33a5ff3a54 100644 index 83b7d6b5077..c4ae1eee351 100644
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp --- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
@@ -2115,6 +2115,21 @@ public: @@ -2115,6 +2115,21 @@ public:
@@ -56,7 +56,7 @@ index 3b0e6eb6587..d33a5ff3a54 100644
void G1CollectedHeap::object_iterate(ObjectClosure* cl) { void G1CollectedHeap::object_iterate(ObjectClosure* cl) {
IterateObjectClosureRegionClosure blk(cl); IterateObjectClosureRegionClosure blk(cl);
heap_region_iterate(&blk); heap_region_iterate(&blk);
@@ -2152,6 +2167,11 @@ void G1CollectedHeap::heap_region_iterate(HeapRegionClosure* cl) const { @@ -2128,6 +2143,11 @@ void G1CollectedHeap::heap_region_iterate(HeapRegionClosure* cl) const {
_hrm.iterate(cl); _hrm.iterate(cl);
} }
@@ -69,7 +69,7 @@ index 3b0e6eb6587..d33a5ff3a54 100644
HeapRegionClaimer *hrclaimer, HeapRegionClaimer *hrclaimer,
uint worker_id) const { uint worker_id) const {
diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp
index 1f2029ab1f0..39b05017b92 100644 index be160d04bfe..9e92ee4a1fa 100644
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp --- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp
@@ -144,6 +144,7 @@ class G1CollectedHeap : public CollectedHeap { @@ -144,6 +144,7 @@ class G1CollectedHeap : public CollectedHeap {
@@ -80,14 +80,15 @@ index 1f2029ab1f0..39b05017b92 100644
// Other related classes. // Other related classes.
friend class HeapRegionClaimer; friend class HeapRegionClaimer;
@@ -1117,6 +1118,7 @@ public: @@ -1116,6 +1117,8 @@ public:
// Iteration functions. // Iteration functions.
void object_iterate_parallel(ObjectClosure* cl, uint worker_id, HeapRegionClaimer* claimer);
+ void object_par_iterate(ObjectClosure* cl); + void object_par_iterate(ObjectClosure* cl);
+
// Iterate over all objects, calling "cl.do_object" on each. // Iterate over all objects, calling "cl.do_object" on each.
virtual void object_iterate(ObjectClosure* cl); virtual void object_iterate(ObjectClosure* cl);
diff --git a/src/hotspot/share/gc/g1/g1FullCollector.cpp b/src/hotspot/share/gc/g1/g1FullCollector.cpp diff --git a/src/hotspot/share/gc/g1/g1FullCollector.cpp b/src/hotspot/share/gc/g1/g1FullCollector.cpp
index 4362ee87e30..7b9496976b8 100644 index 4362ee87e30..7b9496976b8 100644
--- a/src/hotspot/share/gc/g1/g1FullCollector.cpp --- a/src/hotspot/share/gc/g1/g1FullCollector.cpp
@@ -1039,234 +1040,234 @@ index 9a633280118..2e4f597cf1f 100644
SystemDictionary::oops_do(oopClosure); SystemDictionary::oops_do(oopClosure);
} }
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 1fbba406087..e67fc2dd58f 100644 index aba99bb60fa..8b6fad2128e 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -36,7 +36,6 @@ @@ -36,7 +36,6 @@
#include "memory/metaspaceShared.hpp" #include "memory/metaspaceShared.hpp"
#include "memory/resourceArea.hpp" #include "memory/resourceArea.hpp"
#include "memory/iterator.inline.hpp" #include "memory/iterator.inline.hpp"
-#include "gc/serial/markSweep.hpp" -#include "gc/serial/markSweep.hpp"
#include "oops/fieldStreams.hpp" #include "oops/fieldStreams.hpp"
#include "oops/klassVtable.hpp" #include "oops/klassVtable.hpp"
#include "oops/oop.inline.hpp" #include "oops/oop.inline.hpp"
@@ -55,6 +54,8 @@ @@ -55,6 +54,8 @@
#include "utilities/events.hpp" #include "utilities/events.hpp"
#include "oops/constantPool.inline.hpp" #include "oops/constantPool.inline.hpp"
#include "gc/cms/cmsHeap.hpp" #include "gc/cms/cmsHeap.hpp"
+#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/g1CollectedHeap.hpp"
+#include "gc/shared/dcevmSharedGC.hpp" +#include "gc/shared/dcevmSharedGC.hpp"
Array<Method*>* VM_EnhancedRedefineClasses::_old_methods = NULL; Array<Method*>* VM_EnhancedRedefineClasses::_old_methods = NULL;
Array<Method*>* VM_EnhancedRedefineClasses::_new_methods = NULL; Array<Method*>* VM_EnhancedRedefineClasses::_new_methods = NULL;
@@ -78,7 +79,7 @@ Klass* VM_EnhancedRedefineClasses::_the_class_oop = NULL; @@ -78,7 +79,7 @@ Klass* VM_EnhancedRedefineClasses::_the_class_oop = NULL;
// - class_defs class definition - either new class or redefined class // - class_defs class definition - either new class or redefined class
// note that this is not the final array of classes to be redefined // note that this is not the final array of classes to be redefined
// we need to scan for all affected classes (e.g. subclasses) and // we need to scan for all affected classes (e.g. subclasses) and
-// caculcate redefinition for them as well. -// caculcate redefinition for them as well.
+// calculate redefinition for them as well. +// calculate redefinition for them as well.
// @param class_load_kind always jvmti_class_load_kind_redefine // @param class_load_kind always jvmti_class_load_kind_redefine
VM_EnhancedRedefineClasses::VM_EnhancedRedefineClasses(jint class_count, const jvmtiClassDefinition *class_defs, JvmtiClassLoadKind class_load_kind) : VM_EnhancedRedefineClasses::VM_EnhancedRedefineClasses(jint class_count, const jvmtiClassDefinition *class_defs, JvmtiClassLoadKind class_load_kind) :
VM_GC_Operation(Universe::heap()->total_collections(), GCCause::_heap_inspection, Universe::heap()->total_full_collections(), true) { VM_GC_Operation(Universe::heap()->total_collections(), GCCause::_heap_inspection, Universe::heap()->total_full_collections(), true) {
@@ -216,6 +217,13 @@ void VM_EnhancedRedefineClasses::mark_as_scavengable(nmethod* nm) { @@ -216,6 +217,13 @@ void VM_EnhancedRedefineClasses::mark_as_scavengable(nmethod* nm) {
} }
} }
+void VM_EnhancedRedefineClasses::mark_as_scavengable_g1(nmethod* nm) { +void VM_EnhancedRedefineClasses::mark_as_scavengable_g1(nmethod* nm) {
+ // It should work not only for G1 but also for another GCs, but this way is safer now + // 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_zombie() && !nm->is_unloaded()) {
+ Universe::heap()->register_nmethod(nm); + Universe::heap()->register_nmethod(nm);
+ } + }
+} +}
+ +
// TODO comment // TODO comment
struct StoreBarrier { struct StoreBarrier {
// TODO: j10 review change ::oop_store -> HeapAccess<>::oop_store // TODO: j10 review change ::oop_store -> HeapAccess<>::oop_store
@@ -430,7 +438,7 @@ public: @@ -430,7 +438,7 @@ public:
src->set_klass(obj->klass()->new_version()); src->set_klass(obj->klass()->new_version());
// FIXME: instance updates... // FIXME: instance updates...
//guarantee(false, "instance updates!"); //guarantee(false, "instance updates!");
- MarkSweep::update_fields(obj, src, new_klass->update_information()); - MarkSweep::update_fields(obj, src, new_klass->update_information());
+ DcevmSharedGC::update_fields(obj, src, new_klass->update_information()); + DcevmSharedGC::update_fields(obj, src, new_klass->update_information());
} }
} else { } else {
obj->set_klass(obj->klass()->new_version()); obj->set_klass(obj->klass()->new_version());
@@ -452,6 +460,10 @@ public: @@ -452,6 +460,10 @@ public:
void VM_EnhancedRedefineClasses::doit() { void VM_EnhancedRedefineClasses::doit() {
Thread *thread = Thread::current(); Thread *thread = Thread::current();
+ if (log_is_enabled(Info, redefine, class, timer)) { + if (log_is_enabled(Info, redefine, class, timer)) {
+ _timer_vm_op_doit.start(); + _timer_vm_op_doit.start();
+ } + }
+ +
#if INCLUDE_CDS #if INCLUDE_CDS
if (UseSharedSpaces) { if (UseSharedSpaces) {
// Sharing is enabled so we remap the shared readonly space to // Sharing is enabled so we remap the shared readonly space to
@@ -507,12 +519,31 @@ void VM_EnhancedRedefineClasses::doit() { @@ -507,12 +519,31 @@ void VM_EnhancedRedefineClasses::doit() {
// mark such nmethod's as "scavengable". // mark such nmethod's as "scavengable".
// For now, mark all nmethod's as scavengable that are not scavengable already // For now, mark all nmethod's as scavengable that are not scavengable already
if (ScavengeRootsInCode) { if (ScavengeRootsInCode) {
- CodeCache::nmethods_do(mark_as_scavengable); - CodeCache::nmethods_do(mark_as_scavengable);
+ if (UseG1GC) { + if (UseG1GC) {
+ // this should work also for other GCs + // this should work also for other GCs
+ CodeCache::nmethods_do(mark_as_scavengable_g1); + CodeCache::nmethods_do(mark_as_scavengable_g1);
+ } else { + } else {
+ CodeCache::nmethods_do(mark_as_scavengable); + CodeCache::nmethods_do(mark_as_scavengable);
+ } + }
} }
Universe::heap()->ensure_parsability(false); Universe::heap()->ensure_parsability(false);
- Universe::heap()->object_iterate(&objectClosure); - Universe::heap()->object_iterate(&objectClosure);
+ if (UseG1GC) { + if (UseG1GC) {
+ if (log_is_enabled(Info, redefine, class, timer)) { + if (log_is_enabled(Info, redefine, class, timer)) {
+ _timer_heap_iterate.start(); + _timer_heap_iterate.start();
+ } + }
+ G1CollectedHeap::heap()->object_par_iterate(&objectClosure); + G1CollectedHeap::heap()->object_par_iterate(&objectClosure);
+ _timer_heap_iterate.stop(); + _timer_heap_iterate.stop();
+ } else { + } else {
+ if (log_is_enabled(Info, redefine, class, timer)) { + if (log_is_enabled(Info, redefine, class, timer)) {
+ _timer_heap_iterate.start(); + _timer_heap_iterate.start();
+ } + }
+ Universe::heap()->object_iterate(&objectClosure); + Universe::heap()->object_iterate(&objectClosure);
+ _timer_heap_iterate.stop(); + _timer_heap_iterate.stop();
+ } + }
+ +
Universe::root_oops_do(&oopClosureNoBarrier); Universe::root_oops_do(&oopClosureNoBarrier);
+ +
} }
log_trace(redefine, class, obsolete, metadata)("After updating instances"); log_trace(redefine, class, obsolete, metadata)("After updating instances");
@@ -565,11 +596,19 @@ void VM_EnhancedRedefineClasses::doit() { @@ -565,11 +596,19 @@ void VM_EnhancedRedefineClasses::doit() {
if (objectClosure.needs_instance_update()) { if (objectClosure.needs_instance_update()) {
// Do a full garbage collection to update the instance sizes accordingly // Do a full garbage collection to update the instance sizes accordingly
+ +
+ if (log_is_enabled(Info, redefine, class, timer)) { + if (log_is_enabled(Info, redefine, class, timer)) {
+ _timer_heap_full_gc.start(); + _timer_heap_full_gc.start();
+ } + }
+ +
Universe::set_redefining_gc_run(true); Universe::set_redefining_gc_run(true);
notify_gc_begin(true); notify_gc_begin(true);
+ // TODO: check _metadata_GC_clear_soft_refs with ScavengeRootsInCode + // TODO: check _metadata_GC_clear_soft_refs with ScavengeRootsInCode
Universe::heap()->collect_as_vm_thread(GCCause::_heap_inspection); Universe::heap()->collect_as_vm_thread(GCCause::_heap_inspection);
notify_gc_end(); notify_gc_end();
Universe::set_redefining_gc_run(false); Universe::set_redefining_gc_run(false);
+ +
+ _timer_heap_full_gc.stop(); + _timer_heap_full_gc.stop();
} }
// Unmark Klass*s as "redefining" // Unmark Klass*s as "redefining"
@@ -617,6 +656,7 @@ void VM_EnhancedRedefineClasses::doit() { @@ -617,6 +656,7 @@ void VM_EnhancedRedefineClasses::doit() {
} }
#endif #endif
+ _timer_vm_op_doit.stop(); + _timer_vm_op_doit.stop();
} }
// Cleanup - runs in JVM thread // Cleanup - runs in JVM thread
@@ -640,16 +680,14 @@ void VM_EnhancedRedefineClasses::doit_epilogue() { @@ -640,16 +680,14 @@ void VM_EnhancedRedefineClasses::doit_epilogue() {
if (log_is_enabled(Info, redefine, class, timer)) { if (log_is_enabled(Info, redefine, class, timer)) {
// Used to have separate timers for "doit" and "all", but the timer // Used to have separate timers for "doit" and "all", but the timer
// overhead skewed the measurements. // overhead skewed the measurements.
- jlong doit_time = _timer_rsc_phase1.milliseconds() + - jlong doit_time = _timer_rsc_phase1.milliseconds() +
- _timer_rsc_phase2.milliseconds(); - _timer_rsc_phase2.milliseconds();
- jlong all_time = _timer_vm_op_prologue.milliseconds() + doit_time; - jlong all_time = _timer_vm_op_prologue.milliseconds() + doit_time;
+ jlong all_time = _timer_vm_op_prologue.milliseconds() + _timer_vm_op_doit.milliseconds(); + jlong all_time = _timer_vm_op_prologue.milliseconds() + _timer_vm_op_doit.milliseconds();
log_info(redefine, class, timer) log_info(redefine, class, timer)
("vm_op: all=" JLONG_FORMAT " prologue=" JLONG_FORMAT " doit=" JLONG_FORMAT, ("vm_op: all=" JLONG_FORMAT " prologue=" JLONG_FORMAT " doit=" JLONG_FORMAT,
- all_time, _timer_vm_op_prologue.milliseconds(), doit_time); - all_time, _timer_vm_op_prologue.milliseconds(), doit_time);
+ all_time, _timer_vm_op_prologue.milliseconds(), _timer_vm_op_doit.milliseconds()); + all_time, _timer_vm_op_prologue.milliseconds(), _timer_vm_op_doit.milliseconds());
log_info(redefine, class, timer) log_info(redefine, class, timer)
- ("redefine_single_class: phase1=" JLONG_FORMAT " phase2=" JLONG_FORMAT, - ("redefine_single_class: phase1=" JLONG_FORMAT " phase2=" JLONG_FORMAT,
- _timer_rsc_phase1.milliseconds(), _timer_rsc_phase2.milliseconds()); - _timer_rsc_phase1.milliseconds(), _timer_rsc_phase2.milliseconds());
+ ("doit: heap iterate=" JLONG_FORMAT " fullgc=" JLONG_FORMAT, + ("doit: heap iterate=" JLONG_FORMAT " fullgc=" JLONG_FORMAT,
+ _timer_heap_iterate.milliseconds(), _timer_heap_full_gc.milliseconds()); + _timer_heap_iterate.milliseconds(), _timer_heap_full_gc.milliseconds());
} }
} }
@@ -1398,7 +1436,7 @@ void VM_EnhancedRedefineClasses::unpatch_bytecode(Method* method) { @@ -1398,7 +1436,7 @@ void VM_EnhancedRedefineClasses::unpatch_bytecode(Method* method) {
// arrayKlassOops. See Open Issues in jvmtiRedefineClasses.hpp. // arrayKlassOops. See Open Issues in jvmtiRedefineClasses.hpp.
void VM_EnhancedRedefineClasses::ClearCpoolCacheAndUnpatch::do_klass(Klass* k) { void VM_EnhancedRedefineClasses::ClearCpoolCacheAndUnpatch::do_klass(Klass* k) {
if (!k->is_instance_klass()) { if (!k->is_instance_klass()) {
- return; - return;
+ return; + return;
} }
HandleMark hm(_thread); HandleMark hm(_thread);
@@ -1584,7 +1622,7 @@ class TransferNativeFunctionRegistration { @@ -1584,7 +1622,7 @@ class TransferNativeFunctionRegistration {
// Recursively search the binary tree of possibly prefixed method names. // Recursively search the binary tree of possibly prefixed method names.
// Iteration could be used if all agents were well behaved. Full tree walk is // Iteration could be used if all agents were well behaved. Full tree walk is
- // more resilent to agents not cleaning up intermediate methods. - // more resilent to agents not cleaning up intermediate methods.
+ // more resilient to agents not cleaning up intermediate methods. + // more resilient to agents not cleaning up intermediate methods.
// Branch at each depth in the binary tree is: // Branch at each depth in the binary tree is:
// (1) without the prefix. // (1) without the prefix.
// (2) with the prefix. // (2) with the prefix.
@@ -1689,7 +1727,7 @@ void VM_EnhancedRedefineClasses::transfer_old_native_function_registrations(Inst @@ -1689,7 +1727,7 @@ void VM_EnhancedRedefineClasses::transfer_old_native_function_registrations(Inst
transfer.transfer_registrations(_matching_old_methods, _matching_methods_length); transfer.transfer_registrations(_matching_old_methods, _matching_methods_length);
} }
-// DCEVM - it always deoptimases everything! (because it is very difficult to find only correct dependencies) -// DCEVM - it always deoptimases everything! (because it is very difficult to find only correct dependencies)
+// DCEVM - it always deoptimizes everything! (because it is very difficult to find only correct dependencies) +// DCEVM - it always deoptimizes everything! (because it is very difficult to find only correct dependencies)
// Deoptimize all compiled code that depends on this class. // Deoptimize all compiled code that depends on this class.
// //
// If the can_redefine_classes capability is obtained in the onload // If the can_redefine_classes capability is obtained in the onload
@@ -1816,10 +1854,6 @@ void VM_EnhancedRedefineClasses::redefine_single_class(InstanceKlass* new_class_ @@ -1816,10 +1854,6 @@ void VM_EnhancedRedefineClasses::redefine_single_class(InstanceKlass* new_class_
HandleMark hm(THREAD); // make sure handles from this call are freed HandleMark hm(THREAD); // make sure handles from this call are freed
- if (log_is_enabled(Info, redefine, class, timer)) { - if (log_is_enabled(Info, redefine, class, timer)) {
- _timer_rsc_phase1.start(); - _timer_rsc_phase1.start();
- } - }
- -
InstanceKlass* new_class = new_class_oop; InstanceKlass* new_class = new_class_oop;
InstanceKlass* the_class = InstanceKlass::cast(new_class_oop->old_version()); InstanceKlass* the_class = InstanceKlass::cast(new_class_oop->old_version());
assert(the_class != NULL, "must have old version"); assert(the_class != NULL, "must have old version");
@@ -1874,7 +1908,6 @@ void VM_EnhancedRedefineClasses::redefine_single_class(InstanceKlass* new_class_ @@ -1874,7 +1908,6 @@ void VM_EnhancedRedefineClasses::redefine_single_class(InstanceKlass* new_class_
new_class->external_name(), new_class->external_name(),
java_lang_Class::classRedefinedCount(new_class->java_mirror())); java_lang_Class::classRedefinedCount(new_class->java_mirror()));
} }
- _timer_rsc_phase2.stop(); - _timer_rsc_phase2.stop();
} // end redefine_single_class() } // end redefine_single_class()
@@ -2057,8 +2090,8 @@ static bool match_second(void* value, KlassPair elem) { @@ -2057,8 +2090,8 @@ static bool match_second(void* value, KlassPair elem) {
// For each class to be redefined parse the bytecode and figure out the superclass and all interfaces. // For each class to be redefined parse the bytecode and figure out the superclass and all interfaces.
// First newly introduced classes (_class_defs) are scanned and then affected classed (_affected_klasses). // First newly introduced classes (_class_defs) are scanned and then affected classed (_affected_klasses).
// Affected flag is cleared (clear_redefinition_flag(Klass::MarkedAsAffected)) // Affected flag is cleared (clear_redefinition_flag(Klass::MarkedAsAffected))
-// For each dependency create a KlassPair instance. Finnaly, affected classes (_affected_klasses) are sorted according to pairs. -// For each dependency create a KlassPair instance. Finnaly, affected classes (_affected_klasses) are sorted according to pairs.
-// TODO - the class file is potentionally parsed multiple times - introduce a cache? -// TODO - the class file is potentionally parsed multiple times - introduce a cache?
+// For each dependency create a KlassPair instance. Finally, affected classes (_affected_klasses) are sorted according to pairs. +// For each dependency create a KlassPair instance. Finally, affected classes (_affected_klasses) are sorted according to pairs.
+// TODO - the class file is potentially parsed multiple times - introduce a cache? +// TODO - the class file is potentially parsed multiple times - introduce a cache?
jvmtiError VM_EnhancedRedefineClasses::do_topological_class_sorting(TRAPS) { jvmtiError VM_EnhancedRedefineClasses::do_topological_class_sorting(TRAPS) {
ResourceMark mark(THREAD); ResourceMark mark(THREAD);
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
index d8a11b51fe9..9755944d70b 100644 index 3551b06ecde..62a0fbf54d4 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
@@ -86,9 +86,10 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation { @@ -86,9 +86,10 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
// Performance measurement support. These timers do not cover all // Performance measurement support. These timers do not cover all
// the work done for JVM/TI RedefineClasses() but they do cover // the work done for JVM/TI RedefineClasses() but they do cover
// the heavy lifting. // the heavy lifting.
- elapsedTimer _timer_rsc_phase1; - elapsedTimer _timer_rsc_phase1;
- elapsedTimer _timer_rsc_phase2; - elapsedTimer _timer_rsc_phase2;
+ elapsedTimer _timer_vm_op_doit; + elapsedTimer _timer_vm_op_doit;
elapsedTimer _timer_vm_op_prologue; elapsedTimer _timer_vm_op_prologue;
+ elapsedTimer _timer_heap_iterate; + elapsedTimer _timer_heap_iterate;
+ elapsedTimer _timer_heap_full_gc; + elapsedTimer _timer_heap_full_gc;
// These routines are roughly in call order unless otherwise noted. // These routines are roughly in call order unless otherwise noted.
@@ -115,6 +116,7 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation { @@ -115,6 +116,7 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
void rollback(); void rollback();
static void mark_as_scavengable(nmethod* nm); static void mark_as_scavengable(nmethod* nm);
+ static void mark_as_scavengable_g1(nmethod* nm); + static void mark_as_scavengable_g1(nmethod* nm);
static void unpatch_bytecode(Method* method); static void unpatch_bytecode(Method* method);
static void fix_invoke_method(Method* method); static void fix_invoke_method(Method* method);
diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp
index 36276741b5c..0db55d00bd3 100644 index 36276741b5c..0db55d00bd3 100644
--- a/src/hotspot/share/runtime/arguments.cpp --- a/src/hotspot/share/runtime/arguments.cpp

View File

@@ -1,7 +1,7 @@
From 840e28ad947e63d97d40a5e05fdacc0bfd371962 Mon Sep 17 00:00:00 2001 From c7bf974723c6822dca4abc878ee3e59df59d5330 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Sat, 13 Jun 2020 18:50:59 +0200 Date: Sat, 13 Jun 2020 18:50:59 +0200
Subject: [PATCH 10/44] Change log level in advanced redefinition Subject: [PATCH 10/33] Change log level in advanced redefinition
- Change log level for "Comparing different class ver.." to debug - Change log level for "Comparing different class ver.." to debug
- Fix adjust_method_entries_dcevm logging levels and severity - Fix adjust_method_entries_dcevm logging levels and severity
@@ -11,18 +11,18 @@ Subject: [PATCH 10/44] Change log level in advanced redefinition
2 files changed, 3 insertions(+), 3 deletions(-) 2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index e67fc2dd58f..5be9bb74305 100644 index 8b6fad2128e..a8adfa5af47 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -915,7 +915,7 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) { @@ -915,7 +915,7 @@ jvmtiError VM_EnhancedRedefineClasses::load_new_class_versions(TRAPS) {
// Calculated the difference between new and old class (field change, method change, supertype change, ...). // Calculated the difference between new and old class (field change, method change, supertype change, ...).
int VM_EnhancedRedefineClasses::calculate_redefinition_flags(InstanceKlass* new_class) { int VM_EnhancedRedefineClasses::calculate_redefinition_flags(InstanceKlass* new_class) {
int result = Klass::NoRedefinition; int result = Klass::NoRedefinition;
- log_info(redefine, class, load)("Comparing different class versions of class %s",new_class->name()->as_C_string()); - 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()); + 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"); assert(new_class->old_version() != NULL, "must have old version");
InstanceKlass* the_class = InstanceKlass::cast(new_class->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 diff --git a/src/hotspot/share/prims/resolvedMethodTable.cpp b/src/hotspot/share/prims/resolvedMethodTable.cpp
index c7996df51bc..082d3d26c34 100644 index c7996df51bc..082d3d26c34 100644
--- a/src/hotspot/share/prims/resolvedMethodTable.cpp --- a/src/hotspot/share/prims/resolvedMethodTable.cpp

View File

@@ -1,7 +1,7 @@
From 68c65981000d71555a529443831a18c9738c9566 Mon Sep 17 00:00:00 2001 From 3645c65d712993ba5af60e10585dd01c18a7f81f Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Tue, 6 Oct 2020 22:15:31 +0200 Date: Tue, 6 Oct 2020 22:15:31 +0200
Subject: [PATCH 11/44] AllowEnhancedClassRedefinition is false (disabled) by Subject: [PATCH 11/33] AllowEnhancedClassRedefinition is false (disabled) by
default default
--- ---
@@ -9,10 +9,10 @@ Subject: [PATCH 11/44] AllowEnhancedClassRedefinition is false (disabled) by
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp
index 4d6fe0034a3..1984b8c28f9 100644 index 9c007fc2d82..705381825ff 100644
--- a/src/hotspot/share/runtime/globals.hpp --- a/src/hotspot/share/runtime/globals.hpp
+++ b/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp
@@ -2691,7 +2691,7 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G); @@ -2688,7 +2688,7 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G);
experimental(bool, UseFastUnorderedTimeStamps, false, \ experimental(bool, UseFastUnorderedTimeStamps, false, \
"Use platform unstable time where supported for timestamps only") \ "Use platform unstable time where supported for timestamps only") \
\ \

View File

@@ -1,7 +1,7 @@
From b7e705f79f0a6fcc486511a5b8d7007dde4feec0 Mon Sep 17 00:00:00 2001 From ee129595faa4dfc3f9c44329a4d6c7a53f5b294d Mon Sep 17 00:00:00 2001
From: Artem Khvastunov <artem.khvastunov@jetbrains.com> From: Artem Khvastunov <artem.khvastunov@jetbrains.com>
Date: Tue, 14 Apr 2020 19:11:35 +0200 Date: Tue, 14 Apr 2020 19:11:35 +0200
Subject: [PATCH 12/44] add jvmtiEnhancedRedefineClasses.* to CMakeLists.txt Subject: [PATCH 12/33] add jvmtiEnhancedRedefineClasses.* to CMakeLists.txt
--- ---
jb/project/hotspot-cmake/CMakeLists.txt | 2 ++ jb/project/hotspot-cmake/CMakeLists.txt | 2 ++

View File

@@ -1,14 +1,14 @@
From 7f887b3b4819fbbe79a8caaae0e4f175c1368f77 Mon Sep 17 00:00:00 2001 From faa30c1c0dc07670641a062b510363c57718e9bf Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Mon, 19 Oct 2020 20:00:04 +0200 Date: Mon, 19 Oct 2020 20:00:04 +0200
Subject: [PATCH 13/44] Set HOTSPOT_VM_DISTRO=Dynamic Code Evolution Subject: [PATCH 13/33] Set HOTSPOT_VM_DISTRO=Dynamic Code Evolution
--- ---
make/autoconf/version-numbers | 2 +- make/autoconf/version-numbers | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/make/autoconf/version-numbers b/make/autoconf/version-numbers diff --git a/make/autoconf/version-numbers b/make/autoconf/version-numbers
index f8945e435aa..30f6b825493 100644 index 0b3247633e3..e1592f4cd3b 100644
--- a/make/autoconf/version-numbers --- a/make/autoconf/version-numbers
+++ b/make/autoconf/version-numbers +++ b/make/autoconf/version-numbers
@@ -44,7 +44,7 @@ PRODUCT_NAME=OpenJDK @@ -44,7 +44,7 @@ PRODUCT_NAME=OpenJDK

View File

@@ -1,7 +1,7 @@
From 01acfab08f6fb1c1a0db80915cacf8987021272c Mon Sep 17 00:00:00 2001 From 8f0ce0a1ae603cb32b2ab39a6bb7d3ad86092c46 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Sun, 11 Oct 2020 10:43:28 +0200 Date: Sun, 11 Oct 2020 10:43:28 +0200
Subject: [PATCH 14/44] Fix G1 nmethod registration Subject: [PATCH 14/33] Fix G1 nmethod registration
--- ---
.../prims/jvmtiEnhancedRedefineClasses.cpp | 19 ++++++++++++++++--- .../prims/jvmtiEnhancedRedefineClasses.cpp | 19 ++++++++++++++++---
@@ -9,63 +9,63 @@ Subject: [PATCH 14/44] Fix G1 nmethod registration
2 files changed, 18 insertions(+), 4 deletions(-) 2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 5be9bb74305..f4bde7504c8 100644 index a8adfa5af47..4ee12b7021f 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -217,7 +217,14 @@ void VM_EnhancedRedefineClasses::mark_as_scavengable(nmethod* nm) { @@ -217,7 +217,14 @@ void VM_EnhancedRedefineClasses::mark_as_scavengable(nmethod* nm) {
} }
} }
-void VM_EnhancedRedefineClasses::mark_as_scavengable_g1(nmethod* nm) { -void VM_EnhancedRedefineClasses::mark_as_scavengable_g1(nmethod* nm) {
+void VM_EnhancedRedefineClasses::unregister_nmethod_g1(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 + // 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_zombie() && !nm->is_unloaded()) {
+ Universe::heap()->unregister_nmethod(nm); + Universe::heap()->unregister_nmethod(nm);
+ } + }
+} +}
+ +
+void VM_EnhancedRedefineClasses::register_nmethod_g1(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 // 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_zombie() && !nm->is_unloaded()) {
Universe::heap()->register_nmethod(nm); Universe::heap()->register_nmethod(nm);
@@ -520,8 +527,9 @@ void VM_EnhancedRedefineClasses::doit() { @@ -520,8 +527,9 @@ void VM_EnhancedRedefineClasses::doit() {
// For now, mark all nmethod's as scavengable that are not scavengable already // For now, mark all nmethod's as scavengable that are not scavengable already
if (ScavengeRootsInCode) { if (ScavengeRootsInCode) {
if (UseG1GC) { if (UseG1GC) {
- // this should work also for other GCs - // this should work also for other GCs
- CodeCache::nmethods_do(mark_as_scavengable_g1); - CodeCache::nmethods_do(mark_as_scavengable_g1);
+ // G1 holds references to nmethods in regions based on oops values. Since oops in nmethod can be changed in ChangePointers* closures + // G1 holds references to nmethods in regions based on oops values. Since oops in nmethod can be changed in ChangePointers* closures
+ // we unregister nmethods from G1 heap, then closures are processed (oops are changed) and finally we register nmethod to G1 again + // we unregister nmethods from G1 heap, then closures are processed (oops are changed) and finally we register nmethod to G1 again
+ CodeCache::nmethods_do(unregister_nmethod_g1); + CodeCache::nmethods_do(unregister_nmethod_g1);
} else { } else {
CodeCache::nmethods_do(mark_as_scavengable); CodeCache::nmethods_do(mark_as_scavengable);
} }
@@ -544,6 +552,11 @@ void VM_EnhancedRedefineClasses::doit() { @@ -544,6 +552,11 @@ void VM_EnhancedRedefineClasses::doit() {
Universe::root_oops_do(&oopClosureNoBarrier); Universe::root_oops_do(&oopClosureNoBarrier);
+ if (UseG1GC) { + if (UseG1GC) {
+ // this should work also for other GCs + // this should work also for other GCs
+ CodeCache::nmethods_do(register_nmethod_g1); + CodeCache::nmethods_do(register_nmethod_g1);
+ } + }
+ +
} }
log_trace(redefine, class, obsolete, metadata)("After updating instances"); log_trace(redefine, class, obsolete, metadata)("After updating instances");
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
index 9755944d70b..4c0412d343d 100644 index 62a0fbf54d4..d00109a0b92 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
@@ -116,7 +116,8 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation { @@ -116,7 +116,8 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
void rollback(); void rollback();
static void mark_as_scavengable(nmethod* nm); static void mark_as_scavengable(nmethod* nm);
- static void mark_as_scavengable_g1(nmethod* nm); - static void mark_as_scavengable_g1(nmethod* nm);
+ static void unregister_nmethod_g1(nmethod* nm); + static void unregister_nmethod_g1(nmethod* nm);
+ static void register_nmethod_g1(nmethod* nm); + static void register_nmethod_g1(nmethod* nm);
static void unpatch_bytecode(Method* method); static void unpatch_bytecode(Method* method);
static void fix_invoke_method(Method* method); static void fix_invoke_method(Method* method);
-- --
2.23.0 2.23.0

View File

@@ -1,14 +1,14 @@
From ca37cdca38fa1dd08844767510fce418a8c49b9e Mon Sep 17 00:00:00 2001 From 08f455c41f2db7b810c10fa208fc90f55a06fa87 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Thu, 22 Oct 2020 20:15:20 +0200 Date: Thu, 22 Oct 2020 20:15:20 +0200
Subject: [PATCH 15/44] Initialize method's _new_version/_old_version to NULL Subject: [PATCH 15/33] Initialize method's _new_version/_old_version to NULL
--- ---
src/hotspot/share/oops/method.cpp | 3 ++- src/hotspot/share/oops/method.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-) 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp
index 037ceef2c44..6b8e2198e55 100644 index 165a2e4de36..17c08a9dc18 100644
--- a/src/hotspot/share/oops/method.cpp --- a/src/hotspot/share/oops/method.cpp
+++ b/src/hotspot/share/oops/method.cpp +++ b/src/hotspot/share/oops/method.cpp
@@ -83,7 +83,8 @@ Method* Method::allocate(ClassLoaderData* loader_data, @@ -83,7 +83,8 @@ Method* Method::allocate(ClassLoaderData* loader_data,

View File

@@ -1,7 +1,7 @@
From 400fa82043b7b9589e1f77c43f6696b133fc1188 Mon Sep 17 00:00:00 2001 From 82bbf38d7385e26f28f47df65b58b1ab7f8c52c3 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Fri, 23 Oct 2020 10:20:26 +0200 Date: Fri, 23 Oct 2020 10:20:26 +0200
Subject: [PATCH 16/44] Clear dcevm code separation Subject: [PATCH 16/33] Clear dcevm code separation
--- ---
src/hotspot/share/classfile/systemDictionary.cpp | 4 ++-- src/hotspot/share/classfile/systemDictionary.cpp | 4 ++--
@@ -15,10 +15,10 @@ Subject: [PATCH 16/44] Clear dcevm code separation
8 files changed, 27 insertions(+), 17 deletions(-) 8 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp
index 89375cd59fa..a61c342f5bd 100644 index 42e0fee800f..be4d2010c0c 100644
--- a/src/hotspot/share/classfile/systemDictionary.cpp --- a/src/hotspot/share/classfile/systemDictionary.cpp
+++ b/src/hotspot/share/classfile/systemDictionary.cpp +++ b/src/hotspot/share/classfile/systemDictionary.cpp
@@ -1147,7 +1147,7 @@ InstanceKlass* SystemDictionary::resolve_from_stream(Symbol* class_name, @@ -1152,7 +1152,7 @@ InstanceKlass* SystemDictionary::resolve_from_stream(Symbol* class_name,
MutexLocker mu(SystemDictionary_lock, THREAD); MutexLocker mu(SystemDictionary_lock, THREAD);
Klass* check = find_class(h_name, k->class_loader_data()); Klass* check = find_class(h_name, k->class_loader_data());
@@ -27,7 +27,7 @@ index 89375cd59fa..a61c342f5bd 100644
} ); } );
return k; return k;
@@ -2149,7 +2149,7 @@ void SystemDictionary::check_constraints(unsigned int d_hash, @@ -2155,7 +2155,7 @@ void SystemDictionary::check_constraints(unsigned int d_hash,
// also hold array classes. // also hold array classes.
assert(check->is_instance_klass(), "noninstance in systemdictionary"); assert(check->is_instance_klass(), "noninstance in systemdictionary");
@@ -106,7 +106,7 @@ index 61a406377ee..da9df7a21a2 100644
if (HAS_PENDING_EXCEPTION) { if (HAS_PENDING_EXCEPTION) {
log_pending_exception(PENDING_EXCEPTION); log_pending_exception(PENDING_EXCEPTION);
diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp
index b10e566b7c3..7557a84fbf3 100644 index 76791cdd905..cb448b1b762 100644
--- a/src/hotspot/share/oops/instanceKlass.cpp --- a/src/hotspot/share/oops/instanceKlass.cpp
+++ b/src/hotspot/share/oops/instanceKlass.cpp +++ b/src/hotspot/share/oops/instanceKlass.cpp
@@ -178,7 +178,9 @@ bool InstanceKlass::has_nest_member(InstanceKlass* k, TRAPS) const { @@ -178,7 +178,9 @@ bool InstanceKlass::has_nest_member(InstanceKlass* k, TRAPS) const {
@@ -138,7 +138,7 @@ index b10e566b7c3..7557a84fbf3 100644
wait = true; wait = true;
ol.waitUninterruptibly(CHECK); ol.waitUninterruptibly(CHECK);
} }
@@ -3632,7 +3634,7 @@ void InstanceKlass::verify_on(outputStream* st) { @@ -3629,7 +3631,7 @@ void InstanceKlass::verify_on(outputStream* st) {
guarantee(sib->is_klass(), "should be klass"); guarantee(sib->is_klass(), "should be klass");
// TODO: (DCEVM) explain // TODO: (DCEVM) explain
@@ -148,10 +148,10 @@ index b10e566b7c3..7557a84fbf3 100644
// Verify implementor fields requires the Compile_lock, but this is sometimes // Verify implementor fields requires the Compile_lock, but this is sometimes
diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp
index 6b8e2198e55..2af3e71635e 100644 index 17c08a9dc18..2596ed7add2 100644
--- a/src/hotspot/share/oops/method.cpp --- a/src/hotspot/share/oops/method.cpp
+++ b/src/hotspot/share/oops/method.cpp +++ b/src/hotspot/share/oops/method.cpp
@@ -2144,7 +2144,7 @@ void Method::ensure_jmethod_ids(ClassLoaderData* loader_data, int capacity) { @@ -2145,7 +2145,7 @@ void Method::ensure_jmethod_ids(ClassLoaderData* loader_data, int capacity) {
// Add a method id to the jmethod_ids // Add a method id to the jmethod_ids
jmethodID Method::make_jmethod_id(ClassLoaderData* loader_data, Method* m) { jmethodID Method::make_jmethod_id(ClassLoaderData* loader_data, Method* m) {
// FIXME: (DCEVM) ??? // FIXME: (DCEVM) ???

View File

@@ -1,7 +1,7 @@
From 22608d7381bc606fa488389c3d4e56987abd166b Mon Sep 17 00:00:00 2001 From 19981a51c2ea2322f958216fa2c6e83604138d7e Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Fri, 23 Oct 2020 11:07:40 +0200 Date: Fri, 23 Oct 2020 11:07:40 +0200
Subject: [PATCH 17/44] Fix metadataOnStack bug Subject: [PATCH 17/33] Fix metadataOnStack bug
--- ---
.../share/classfile/classLoaderData.cpp | 7 +- .../share/classfile/classLoaderData.cpp | 7 +-
@@ -143,7 +143,7 @@ index 8da4ac6f92b..6d327ab98f2 100644
static void record(Metadata* m); static void record(Metadata* m);
diff --git a/src/hotspot/share/prims/jvmtiRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiRedefineClasses.cpp
index aee84b1d7c5..3dd86d63a1f 100644 index fb81189d9c2..18bc7f4eea4 100644
--- a/src/hotspot/share/prims/jvmtiRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiRedefineClasses.cpp
@@ -199,7 +199,7 @@ void VM_RedefineClasses::doit() { @@ -199,7 +199,7 @@ void VM_RedefineClasses::doit() {

View File

@@ -1,7 +1,7 @@
From 371093160151f400b149a5e5e4cd1acc89b1ab52 Mon Sep 17 00:00:00 2001 From 163cf26017433389041f824c7d8342eb54f4cef8 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Sun, 1 Nov 2020 21:19:00 +0100 Date: Sun, 1 Nov 2020 21:19:00 +0100
Subject: [PATCH 18/44] Ignore MetadataOnStackMark if redefining_gc_run Subject: [PATCH 18/33] Ignore MetadataOnStackMark if redefining_gc_run
--- ---
src/hotspot/share/classfile/classLoaderData.cpp | 2 +- src/hotspot/share/classfile/classLoaderData.cpp | 2 +-

View File

@@ -1,7 +1,7 @@
From 3151c71be433365e2d8ce5fb6e061b12fbca009a Mon Sep 17 00:00:00 2001 From 1876c6a039a2b866dd9d2c3dbbcc52e8f7af4d2a Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Wed, 11 Nov 2020 18:45:15 +0100 Date: Wed, 11 Nov 2020 18:45:15 +0100
Subject: [PATCH 19/44] Fix LoadedClassesClosure - fixes problems with remote Subject: [PATCH 19/33] Fix LoadedClassesClosure - fixes problems with remote
debugging debugging
--- ---

View File

@@ -1,7 +1,7 @@
From 9a869a57205c3e0f75ea0c23f6c5dc4334e6ddd8 Mon Sep 17 00:00:00 2001 From ad9db6fe3e625d0b366898c3bdb2589b678f6764 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com> From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 5 Feb 2021 23:30:49 +0100 Date: Fri, 5 Feb 2021 23:30:49 +0100
Subject: [PATCH 20/44] Disable AllowEnhancedClassRedefinition in flight Subject: [PATCH 20/33] Disable AllowEnhancedClassRedefinition in flight
recorder recorder
--- ---

View File

@@ -1,7 +1,7 @@
From a6b2a48880db25c3c8ce5bc3bae9040eda6f18f2 Mon Sep 17 00:00:00 2001 From 4bcccb549465675d13a1f5bb399ca99654465ca5 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com> From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 12 Feb 2021 12:33:11 +0100 Date: Fri, 12 Feb 2021 12:33:11 +0100
Subject: [PATCH 21/44] JBR-3106 Check InstanceKlass::has_nestmate_access_to Subject: [PATCH 21/33] JBR-3106 Check InstanceKlass::has_nestmate_access_to
with active classes with active classes
Dcevm can leave old host in nested class if nested class is not Dcevm can leave old host in nested class if nested class is not
@@ -11,7 +11,7 @@ redefined together with host class
1 file changed, 10 insertions(+) 1 file changed, 10 insertions(+)
diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp
index 7557a84fbf3..ed26b33466a 100644 index cb448b1b762..234c3e86037 100644
--- a/src/hotspot/share/oops/instanceKlass.cpp --- a/src/hotspot/share/oops/instanceKlass.cpp
+++ b/src/hotspot/share/oops/instanceKlass.cpp +++ b/src/hotspot/share/oops/instanceKlass.cpp
@@ -327,11 +327,21 @@ bool InstanceKlass::has_nestmate_access_to(InstanceKlass* k, TRAPS) { @@ -327,11 +327,21 @@ bool InstanceKlass::has_nestmate_access_to(InstanceKlass* k, TRAPS) {

View File

@@ -1,7 +1,7 @@
From 01b00e2df98dbcfc2e37c42017a545de5f29e852 Mon Sep 17 00:00:00 2001 From b45056c713cd7f8496bc9fb9528ff8a20c112c76 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Sun, 7 Feb 2021 12:08:58 +0100 Date: Sun, 7 Feb 2021 12:08:58 +0100
Subject: [PATCH 22/44] JBR-3110 Fix assert in MetadataOnStackMark Subject: [PATCH 22/33] JBR-3110 Fix assert in MetadataOnStackMark
Fixed fastdebug tests crashes in redefine gc run Fixed fastdebug tests crashes in redefine gc run
--- ---

View File

@@ -1,7 +1,7 @@
From 214a02487be521857a088595f8568df7846acd62 Mon Sep 17 00:00:00 2001 From ae2b3fba2882b52ec7c5a9ac49d179616fc49e77 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Fri, 12 Feb 2021 11:27:39 +0100 Date: Fri, 12 Feb 2021 11:27:39 +0100
Subject: [PATCH 23/44] Code cleanup Subject: [PATCH 23/33] Code cleanup
- Rename confusing method name old_if_redefined to old_if_redefining - Rename confusing method name old_if_redefined to old_if_redefining
- Remove unused is_redefining_gc_run - Remove unused is_redefining_gc_run

View File

@@ -1,7 +1,7 @@
From 88d359a84fb3a7dd7556c91ed0e17dca5b8d7d25 Mon Sep 17 00:00:00 2001 From 3af6608b1808653ad706b447e6e96a039819d03f Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Sat, 13 Feb 2021 20:47:52 +0100 Date: Sat, 13 Feb 2021 20:47:52 +0100
Subject: [PATCH 24/44] JBR-3111 Update class in all dictionaries where it was Subject: [PATCH 24/33] JBR-3111 Update class in all dictionaries where it was
already defined already defined
This patch keeps compatibility with std redefinition, that does not This patch keeps compatibility with std redefinition, that does not
@@ -76,10 +76,10 @@ index f6e08e7bfd5..2932cc9c320 100644
void rollback_redefinition(); void rollback_redefinition();
diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp
index a61c342f5bd..cf0a05176c8 100644 index be4d2010c0c..d0365162b81 100644
--- a/src/hotspot/share/classfile/systemDictionary.cpp --- a/src/hotspot/share/classfile/systemDictionary.cpp
+++ b/src/hotspot/share/classfile/systemDictionary.cpp +++ b/src/hotspot/share/classfile/systemDictionary.cpp
@@ -1603,7 +1603,9 @@ void SystemDictionary::define_instance_class(InstanceKlass* k, InstanceKlass* ol @@ -1608,7 +1608,9 @@ void SystemDictionary::define_instance_class(InstanceKlass* k, InstanceKlass* ol
Dictionary* dictionary = loader_data->dictionary(); Dictionary* dictionary = loader_data->dictionary();
unsigned int d_hash = dictionary->compute_hash(name_h); unsigned int d_hash = dictionary->compute_hash(name_h);
if (is_redefining) { if (is_redefining) {

View File

@@ -1,7 +1,7 @@
From cfdbad725c55a4ce45d407393a4591d8b8f333c9 Mon Sep 17 00:00:00 2001 From 7cbf2af248f33daa6fb5b55a7fb9316b1d2680e0 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Thu, 18 Jun 2020 18:40:11 +0200 Date: Thu, 18 Jun 2020 18:40:11 +0200
Subject: [PATCH 25/44] JBR-3140 - support for modularized HotswapAgent Subject: [PATCH 25/33] JBR-3140 - support for modularized HotswapAgent
Add -XX:HotswapAgent=[disabled,fatjar.core] Add -XX:HotswapAgent=[disabled,fatjar.core]
--- ---
@@ -500,10 +500,10 @@ index 8763b83fd37..c9ed15a89e1 100644
#endif /* SHARE_VM_RUNTIME_JVMFLAGCONSTRAINTSRUNTIME_HPP */ #endif /* SHARE_VM_RUNTIME_JVMFLAGCONSTRAINTSRUNTIME_HPP */
diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp
index 1984b8c28f9..c015b89b176 100644 index 705381825ff..eda4eca2451 100644
--- a/src/hotspot/share/runtime/globals.hpp --- a/src/hotspot/share/runtime/globals.hpp
+++ b/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp
@@ -2695,8 +2695,16 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G); @@ -2692,8 +2692,16 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G);
"Allow enhanced class redefinition beyond swapping method " \ "Allow enhanced class redefinition beyond swapping method " \
"bodies") \ "bodies") \
\ \

View File

@@ -1,7 +1,7 @@
From a9468fd22397d85bc238b6ec763f4643245999ab Mon Sep 17 00:00:00 2001 From 8dd54d6e012458db96f199550d0f6016537c6d82 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com> From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 7 Mar 2021 20:22:54 +0100 Date: Mon, 8 Mar 2021 02:22:54 +0700
Subject: [PATCH 26/44] Support for redefinition of Well Known classses Subject: [PATCH 26/33] Support for redefinition of Well Known classses
(java.*,jdk.*, sun.*) (java.*,jdk.*, sun.*)
--- ---
@@ -31,7 +31,7 @@ index 896f489453a..c610c365aba 100644
#endif // SHARE_VM_CI_CIKLASS_HPP #endif // SHARE_VM_CI_CIKLASS_HPP
diff --git a/src/hotspot/share/ci/ciObjectFactory.cpp b/src/hotspot/share/ci/ciObjectFactory.cpp diff --git a/src/hotspot/share/ci/ciObjectFactory.cpp b/src/hotspot/share/ci/ciObjectFactory.cpp
index b2ab15c4b65..d997a90a055 100644 index c8a03aa9ee9..6b187909943 100644
--- a/src/hotspot/share/ci/ciObjectFactory.cpp --- a/src/hotspot/share/ci/ciObjectFactory.cpp
+++ b/src/hotspot/share/ci/ciObjectFactory.cpp +++ b/src/hotspot/share/ci/ciObjectFactory.cpp
@@ -70,7 +70,10 @@ GrowableArray<ciMetadata*>* ciObjectFactory::_shared_ci_metadata = NULL; @@ -70,7 +70,10 @@ GrowableArray<ciMetadata*>* ciObjectFactory::_shared_ci_metadata = NULL;
@@ -91,7 +91,7 @@ index b2ab15c4b65..d997a90a055 100644
_next_ident = 1; // start numbering CI objects at 1 _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 diff --git a/src/hotspot/share/ci/ciObjectFactory.hpp b/src/hotspot/share/ci/ciObjectFactory.hpp
index 5d573350aa2..2978261328c 100644 index 3e9d48c4cdc..79059f6e2e8 100644
--- a/src/hotspot/share/ci/ciObjectFactory.hpp --- a/src/hotspot/share/ci/ciObjectFactory.hpp
+++ b/src/hotspot/share/ci/ciObjectFactory.hpp +++ b/src/hotspot/share/ci/ciObjectFactory.hpp
@@ -41,9 +41,11 @@ class ciObjectFactory : public ResourceObj { @@ -41,9 +41,11 @@ class ciObjectFactory : public ResourceObj {
@@ -122,10 +122,10 @@ index 5d573350aa2..2978261328c 100644
void remove_symbols(); void remove_symbols();
diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp
index cf0a05176c8..be7fcbf2b47 100644 index d0365162b81..74f30524279 100644
--- a/src/hotspot/share/classfile/systemDictionary.cpp --- a/src/hotspot/share/classfile/systemDictionary.cpp
+++ b/src/hotspot/share/classfile/systemDictionary.cpp +++ b/src/hotspot/share/classfile/systemDictionary.cpp
@@ -1979,6 +1979,16 @@ bool SystemDictionary::is_well_known_klass(Symbol* class_name) { @@ -1985,6 +1985,16 @@ bool SystemDictionary::is_well_known_klass(Symbol* class_name) {
} }
#endif #endif
@@ -143,10 +143,10 @@ index cf0a05176c8..be7fcbf2b47 100644
assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
int info = wk_init_info[id - FIRST_WKID]; int info = wk_init_info[id - FIRST_WKID];
diff --git a/src/hotspot/share/classfile/systemDictionary.hpp b/src/hotspot/share/classfile/systemDictionary.hpp diff --git a/src/hotspot/share/classfile/systemDictionary.hpp b/src/hotspot/share/classfile/systemDictionary.hpp
index 0002abe6122..707ff871e19 100644 index a8359143908..aba2780a321 100644
--- a/src/hotspot/share/classfile/systemDictionary.hpp --- a/src/hotspot/share/classfile/systemDictionary.hpp
+++ b/src/hotspot/share/classfile/systemDictionary.hpp +++ b/src/hotspot/share/classfile/systemDictionary.hpp
@@ -463,6 +463,8 @@ public: @@ -470,6 +470,8 @@ public:
static bool is_well_known_klass(Symbol* class_name); static bool is_well_known_klass(Symbol* class_name);
#endif #endif
@@ -169,10 +169,10 @@ index 0d0badeabd0..3477a408cb6 100644
template(threads_name, "threads") \ template(threads_name, "threads") \
template(groups_name, "groups") \ template(groups_name, "groups") \
diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp
index 1ff09ebf3ec..bd662b5ebef 100644 index 80a940980a5..5ec54baec96 100644
--- a/src/hotspot/share/compiler/compileBroker.cpp --- a/src/hotspot/share/compiler/compileBroker.cpp
+++ b/src/hotspot/share/compiler/compileBroker.cpp +++ b/src/hotspot/share/compiler/compileBroker.cpp
@@ -1871,6 +1871,17 @@ void CompileBroker::compiler_thread_loop() { @@ -1877,6 +1877,17 @@ void CompileBroker::compiler_thread_loop() {
if (method()->number_of_breakpoints() == 0) { if (method()->number_of_breakpoints() == 0) {
// Compile the method. // Compile the method.
if ((UseCompiler || AlwaysCompileLoopMethods) && CompileBroker::should_compile_new_jobs()) { if ((UseCompiler || AlwaysCompileLoopMethods) && CompileBroker::should_compile_new_jobs()) {
@@ -224,110 +224,110 @@ index 742dada0e8f..d1af82b5fa7 100644
static oop arithmetic_exception_instance() { return _arithmetic_exception_instance; } static oop arithmetic_exception_instance() { return _arithmetic_exception_instance; }
static oop virtual_machine_error_instance() { return _virtual_machine_error_instance; } static oop virtual_machine_error_instance() { return _virtual_machine_error_instance; }
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index f4bde7504c8..80d4e68ccae 100644 index 4ee12b7021f..7997b178d22 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -497,6 +497,16 @@ void VM_EnhancedRedefineClasses::doit() { @@ -497,6 +497,16 @@ void VM_EnhancedRedefineClasses::doit() {
redefine_single_class(_new_classes->at(i), thread); redefine_single_class(_new_classes->at(i), thread);
} }
+ // Update possible redefinition of well-known classes (like ClassLoader) + // Update possible redefinition of well-known classes (like ClassLoader)
+ for (int i = 0; i < _new_classes->length(); i++) { + for (int i = 0; i < _new_classes->length(); i++) {
+ InstanceKlass* cur = _new_classes->at(i); + InstanceKlass* cur = _new_classes->at(i);
+ if (cur->old_version() != NULL && SystemDictionary::update_well_known_klass(InstanceKlass::cast(cur->old_version()), cur)) + if (cur->old_version() != NULL && SystemDictionary::update_well_known_klass(InstanceKlass::cast(cur->old_version()), cur))
+ { + {
+ log_trace(redefine, class, obsolete, metadata)("Well known class updated %s", cur->external_name()); + log_trace(redefine, class, obsolete, metadata)("Well known class updated %s", cur->external_name());
+ ciObjectFactory::set_reinitialize_wk_klasses(); + ciObjectFactory::set_reinitialize_wk_klasses();
+ } + }
+ } + }
+ +
// Deoptimize all compiled code that depends on this class (do only once, because it clears whole cache) // Deoptimize all compiled code that depends on this class (do only once, because it clears whole cache)
// if (_max_redefinition_flags > Klass::ModifyClass) { // if (_max_redefinition_flags > Klass::ModifyClass) {
flush_dependent_code(NULL, thread); flush_dependent_code(NULL, thread);
@@ -672,12 +682,56 @@ void VM_EnhancedRedefineClasses::doit() { @@ -672,12 +682,56 @@ void VM_EnhancedRedefineClasses::doit() {
_timer_vm_op_doit.stop(); _timer_vm_op_doit.stop();
} }
+void VM_EnhancedRedefineClasses::reinitializeJDKClasses() { +void VM_EnhancedRedefineClasses::reinitializeJDKClasses() {
+ if (!_new_classes->is_empty()) { + if (!_new_classes->is_empty()) {
+ ResourceMark rm(Thread::current()); + ResourceMark rm(Thread::current());
+ +
+ for (int i = 0; i < _new_classes->length(); i++) { + for (int i = 0; i < _new_classes->length(); i++) {
+ InstanceKlass* cur = _new_classes->at(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/")) {
+ +
+ if (cur == SystemDictionary::ClassLoader_klass()) { + if (cur == SystemDictionary::ClassLoader_klass()) {
+ // ClassLoader.addClass method is cached in Universe, we must redefine + // ClassLoader.addClass method is cached in Universe, we must redefine
+ Universe::reinitialize_loader_addClass_method(Thread::current()); + Universe::reinitialize_loader_addClass_method(Thread::current());
+ log_trace(redefine, class, obsolete, metadata)("Reinitialize ClassLoade addClass method cache."); + log_trace(redefine, class, obsolete, metadata)("Reinitialize ClassLoade addClass method cache.");
+ } + }
+ +
+ // naive assumptions that only JDK classes has native static "registerNative" and "initIDs" methods + // naive assumptions that only JDK classes has native static "registerNative" and "initIDs" methods
+ int end; + int end;
+ Symbol* signature = vmSymbols::registerNatives_method_name(); + Symbol* signature = vmSymbols::registerNatives_method_name();
+ int midx = cur->find_method_by_name(signature, &end); + int midx = cur->find_method_by_name(signature, &end);
+ if (midx == -1) { + if (midx == -1) {
+ signature = vmSymbols::initIDs_method_name(); + signature = vmSymbols::initIDs_method_name();
+ midx = cur->find_method_by_name(signature, &end); + midx = cur->find_method_by_name(signature, &end);
+ } + }
+ Method* m = NULL; + Method* m = NULL;
+ if (midx != -1) { + if (midx != -1) {
+ m = cur->methods()->at(midx); + m = cur->methods()->at(midx);
+ } + }
+ if (m != NULL && m->is_static() && m->is_native()) { + if (m != NULL && m->is_static() && m->is_native()) {
+ // call static registerNative if present + // call static registerNative if present
+ JavaValue result(T_VOID); + JavaValue result(T_VOID);
+ JavaCalls::call_static(&result, + JavaCalls::call_static(&result,
+ cur, + cur,
+ signature, + signature,
+ vmSymbols::void_method_signature(), + vmSymbols::void_method_signature(),
+ Thread::current()); + Thread::current());
+ log_trace(redefine, class, obsolete, metadata)("Reregister natives of JDK class %s", cur->external_name()); + log_trace(redefine, class, obsolete, metadata)("Reregister natives of JDK class %s", cur->external_name());
+ } + }
+ } + }
+ } + }
+ } + }
+} +}
+ +
// Cleanup - runs in JVM thread // Cleanup - runs in JVM thread
// - free used memory // - free used memory
// - end GC // - end GC
void VM_EnhancedRedefineClasses::doit_epilogue() { void VM_EnhancedRedefineClasses::doit_epilogue() {
VM_GC_Operation::doit_epilogue(); VM_GC_Operation::doit_epilogue();
+ reinitializeJDKClasses(); + reinitializeJDKClasses();
+ +
if (_new_classes != NULL) { if (_new_classes != NULL) {
delete _new_classes; delete _new_classes;
} }
@@ -1589,7 +1643,12 @@ void VM_EnhancedRedefineClasses::check_methods_and_mark_as_obsolete() { @@ -1589,7 +1643,12 @@ void VM_EnhancedRedefineClasses::check_methods_and_mark_as_obsolete() {
// obsolete methods need a unique idnum so they become new entries in // obsolete methods need a unique idnum so they become new entries in
// the jmethodID cache in InstanceKlass // the jmethodID cache in InstanceKlass
- assert(old_method->method_idnum() == new_method->method_idnum(), "must match"); - assert(old_method->method_idnum() == new_method->method_idnum(), "must match");
+ if (old_method->method_idnum() != new_method->method_idnum()) { + if (old_method->method_idnum() != new_method->method_idnum()) {
+ log_error(redefine, class, normalize) + log_error(redefine, class, normalize)
+ ("Method not matched: %d != %d old: %s = new: %s", old_method->method_idnum(), new_method->method_idnum(), + ("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()); + 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"); + // assert(old_method->method_idnum() == new_method->method_idnum(), "must match");
+ } + }
// u2 num = InstanceKlass::cast(_the_class_oop)->next_method_idnum(); // u2 num = InstanceKlass::cast(_the_class_oop)->next_method_idnum();
// if (num != ConstMethod::UNSET_IDNUM) { // if (num != ConstMethod::UNSET_IDNUM) {
// old_method->set_method_idnum(num); // old_method->set_method_idnum(num);
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
index 4c0412d343d..79ea17b0d47 100644 index d00109a0b92..8c47baa8a74 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
@@ -141,6 +141,8 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation { @@ -141,6 +141,8 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
void flush_dependent_code(InstanceKlass* k_h, TRAPS); void flush_dependent_code(InstanceKlass* k_h, TRAPS);
+ void reinitializeJDKClasses(); + void reinitializeJDKClasses();
+ +
static void check_class(InstanceKlass* k_oop, TRAPS); static void check_class(InstanceKlass* k_oop, TRAPS);
static void dump_methods(); static void dump_methods();
-- --
2.23.0 2.23.0

View File

@@ -1,7 +1,7 @@
From acafc3515aa1083d2214336af596cb579a488c8d Mon Sep 17 00:00:00 2001 From 91cfd6de1aac67a2f096568fda3b5992c19bddfb Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Fri, 19 Mar 2021 19:13:38 +0100 Date: Fri, 19 Mar 2021 19:13:38 +0100
Subject: [PATCH 27/44] JBR-3458: Skip dynamic proxy classes based on Subject: [PATCH 27/33] JBR-3458: Skip dynamic proxy classes based on
com.sun.proxy com.sun.proxy
--- ---
@@ -9,19 +9,19 @@ Subject: [PATCH 27/44] JBR-3458: Skip dynamic proxy classes based on
1 file changed, 2 insertions(+), 1 deletion(-) 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 80d4e68ccae..10c375d601c 100644 index 7997b178d22..0d1c68f5cd0 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -689,7 +689,8 @@ void VM_EnhancedRedefineClasses::reinitializeJDKClasses() { @@ -689,7 +689,8 @@ void VM_EnhancedRedefineClasses::reinitializeJDKClasses() {
for (int i = 0; i < _new_classes->length(); i++) { for (int i = 0; i < _new_classes->length(); i++) {
InstanceKlass* cur = _new_classes->at(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/")) {
+ 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 + && cur->name()->index_of_at(0, "$$") == -1) { // skip dynamic proxies
if (cur == SystemDictionary::ClassLoader_klass()) { if (cur == SystemDictionary::ClassLoader_klass()) {
// ClassLoader.addClass method is cached in Universe, we must redefine // ClassLoader.addClass method is cached in Universe, we must redefine
-- --
2.23.0 2.23.0

View File

@@ -1,7 +1,7 @@
From 4ba18f232db0dd92369d110cbb4f38f5a35eb5c7 Mon Sep 17 00:00:00 2001 From 33a280c972960380f3627fd178d170b14f0b7995 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <lada.dvorak7@gmail.com> From: Vladimir Dvorak <lada.dvorak7@gmail.com>
Date: Sat, 20 Mar 2021 20:51:08 +0100 Date: Sat, 20 Mar 2021 20:51:08 +0100
Subject: [PATCH 28/44] JBR-3459: Fix race condition in Subject: [PATCH 28/33] JBR-3459: Fix race condition in
ClassLoaderDataGraph::classes_do ClassLoaderDataGraph::classes_do
InstanceKlass in ClassLoaderData can be uninitialized when InstanceKlass in ClassLoaderData can be uninitialized when
@@ -51,29 +51,29 @@ index 92f57dac23e..c4c17112a2d 100644
static void methods_do(void f(Method*)); static void methods_do(void f(Method*));
static void modules_do(void f(ModuleEntry*)); static void modules_do(void f(ModuleEntry*));
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 10c375d601c..5de5f78aea0 100644 index 0d1c68f5cd0..745109902af 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -2130,8 +2130,17 @@ jvmtiError VM_EnhancedRedefineClasses::find_sorted_affected_classes(TRAPS) { @@ -2130,8 +2130,17 @@ jvmtiError VM_EnhancedRedefineClasses::find_sorted_affected_classes(TRAPS) {
AffectedKlassClosure closure(_affected_klasses); AffectedKlassClosure closure(_affected_klasses);
// Updated in j10, from original SystemDictionary::classes_do // Updated in j10, from original SystemDictionary::classes_do
- ClassLoaderDataGraph::classes_do(&closure); - ClassLoaderDataGraph::classes_do(&closure);
- //ClassLoaderDataGraph::dictionary_classes_do(&closure); - //ClassLoaderDataGraph::dictionary_classes_do(&closure);
+ // 0. we can't use ClassLoaderDataGraph::classes_do since classes can be uninitialized in cld, + // 0. we can't use ClassLoaderDataGraph::classes_do since classes can be uninitialized in cld,
+ // fully initialized class is in system dictionary + // fully initialized class is in system dictionary
+ // ClassLoaderDataGraph::classes_do(&closure); + // ClassLoaderDataGraph::classes_do(&closure);
+ +
+ // 1. Scan over dictionaries + // 1. Scan over dictionaries
+ ClassLoaderDataGraph::dictionary_classes_do(&closure); + ClassLoaderDataGraph::dictionary_classes_do(&closure);
+ +
+ // 2. Anonymous class is not in dictionary, we have to iterate anonymous cld directly, but there is race cond... + // 2. Anonymous 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, + // TODO: review ... anonymous class is added to cld before InstanceKlass initialization,
+ // find out how to check if the InstanceKlass is initialized + // find out how to check if the InstanceKlass is initialized
+ ClassLoaderDataGraph::anonymous_classes_do(&closure); + ClassLoaderDataGraph::anonymous_classes_do(&closure);
log_trace(redefine, class, load)("%d classes affected", _affected_klasses->length()); log_trace(redefine, class, load)("%d classes affected", _affected_klasses->length());
-- --
2.23.0 2.23.0

View File

@@ -1,7 +1,7 @@
From f0c417c9f5eaf721a7c022e7c901af59a0993885 Mon Sep 17 00:00:00 2001 From daa0ca3b718e428ffde26e9633a07a37658beb61 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com> From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 10 Oct 2021 20:25:30 +0200 Date: Sun, 10 Oct 2021 20:25:30 +0200
Subject: [PATCH 29/44] JBR-3867 - update keys of jvmti TAG map after Subject: [PATCH 29/33] JBR-3867 - update keys of jvmti TAG map after
redefinition redefinition
jdwp keeps relation class_ptr->class_ref in jvmti tag. class_ptr is used jdwp keeps relation class_ptr->class_ref in jvmti tag. class_ptr is used

View File

@@ -1,7 +1,7 @@
From 43ad1316176425552ac8aa34e26ab8554ec3a9f1 Mon Sep 17 00:00:00 2001 From d7ea3b028367ca5ac2b622a2282bb4e468442e4b Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com> From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Mon, 11 Oct 2021 20:22:26 +0200 Date: Mon, 11 Oct 2021 20:22:26 +0200
Subject: [PATCH 30/44] JBR-3867 - fix msvc compilation issue with non const Subject: [PATCH 30/33] JBR-3867 - fix msvc compilation issue with non const
array on stack array on stack
--- ---

View File

@@ -1,7 +1,7 @@
From 39d5a7e6ffd06362a40984c43a439b5778b65d53 Mon Sep 17 00:00:00 2001 From 6dc05f05716854367e229d72d5fa03f8f7d0739d Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com> From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Tue, 19 Oct 2021 17:02:35 +0200 Date: Tue, 19 Oct 2021 17:02:35 +0200
Subject: [PATCH 31/44] Attempt to fix JBR-3887 Subject: [PATCH 31/33] Attempt to fix JBR-3887
--- ---
src/hotspot/share/prims/jvmtiExtensions.cpp | 8 +++++++- src/hotspot/share/prims/jvmtiExtensions.cpp | 8 +++++++-

View File

@@ -1,7 +1,7 @@
From 56b381db23651cc1cec0a4b649dd2796b85e8b09 Mon Sep 17 00:00:00 2001 From 256af0b88776c1ba2afdae760d3220ef48a644aa Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com> From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Mon, 1 Nov 2021 19:00:41 +0100 Date: Mon, 1 Nov 2021 19:00:41 +0100
Subject: [PATCH 32/44] JBR-3937 Fix crashes in C1/C2 compilers Subject: [PATCH 32/33] JBR-3937 Fix crashes in C1/C2 compilers
There is a race condition in enhanced redefinition with C1/C2. Therefore There is a race condition in enhanced redefinition with C1/C2. Therefore
the patch stops C1/C2 compilation before redefinition and release after the patch stops C1/C2 compilation before redefinition and release after
@@ -14,7 +14,7 @@ flushes all code cache.
3 files changed, 51 insertions(+), 1 deletion(-) 3 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp
index bd662b5ebef..bd0f9f0efab 100644 index 5ec54baec96..a72560069e4 100644
--- a/src/hotspot/share/compiler/compileBroker.cpp --- a/src/hotspot/share/compiler/compileBroker.cpp
+++ b/src/hotspot/share/compiler/compileBroker.cpp +++ b/src/hotspot/share/compiler/compileBroker.cpp
@@ -133,6 +133,8 @@ CompileLog** CompileBroker::_compiler2_logs = NULL; @@ -133,6 +133,8 @@ CompileLog** CompileBroker::_compiler2_logs = NULL;
@@ -26,7 +26,7 @@ index bd662b5ebef..bd0f9f0efab 100644
// Debugging information // Debugging information
int CompileBroker::_last_compile_type = no_compile; int CompileBroker::_last_compile_type = no_compile;
@@ -2191,7 +2193,22 @@ void CompileBroker::invoke_compiler_on_method(CompileTask* task) { @@ -2203,7 +2205,22 @@ void CompileBroker::invoke_compiler_on_method(CompileTask* task) {
locker.wait(Mutex::_no_safepoint_check_flag); locker.wait(Mutex::_no_safepoint_check_flag);
} }
} }
@@ -50,7 +50,7 @@ index bd662b5ebef..bd0f9f0efab 100644
} }
if (!ci_env.failing() && task->code() == NULL) { if (!ci_env.failing() && task->code() == NULL) {
@@ -2853,3 +2870,23 @@ void CompileBroker::print_heapinfo(outputStream* out, const char* function, size @@ -2865,3 +2882,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()); out->print_cr("\n__ CodeHeapStateAnalytics total duration %10.3f seconds _________\n", ts_total.seconds());
} }

View File

@@ -1,7 +1,7 @@
From 962796e56be75ef70c1d6dcaa9eaf19e755c61d8 Mon Sep 17 00:00:00 2001 From 81d93376d08058144aa5b2ecf6744d607c516e88 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com> From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Mon, 1 Nov 2021 19:20:13 +0100 Date: Tue, 2 Nov 2021 01:20:13 +0700
Subject: [PATCH 33/44] JBR-3938 - fix race condition in anonymous class Subject: [PATCH 33/33] JBR-3938 - fix race condition in anonymous class
loading loading
Anonymous class must be checked if it is fully initialized if it is used Anonymous class must be checked if it is fully initialized if it is used
@@ -12,110 +12,110 @@ in ClassLoaderDataGraph closure.
2 files changed, 14 insertions(+), 31 deletions(-) 2 files changed, 14 insertions(+), 31 deletions(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index 5de5f78aea0..a8546a5fbe2 100644 index 745109902af..1e63561064a 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -517,8 +517,6 @@ void VM_EnhancedRedefineClasses::doit() { @@ -517,8 +517,6 @@ void VM_EnhancedRedefineClasses::doit() {
ClassLoaderDataGraph::classes_do(&clear_cpool_cache); ClassLoaderDataGraph::classes_do(&clear_cpool_cache);
- // SystemDictionary::methods_do(fix_invoke_method); - // SystemDictionary::methods_do(fix_invoke_method);
- -
// JSR-292 support // JSR-292 support
if (_any_class_has_resolved_methods) { if (_any_class_has_resolved_methods) {
bool trace_name_printed = false; bool trace_name_printed = false;
@@ -647,10 +645,6 @@ void VM_EnhancedRedefineClasses::doit() { @@ -647,10 +645,6 @@ void VM_EnhancedRedefineClasses::doit() {
// TODO: explain... // TODO: explain...
ciObjectFactory::resort_shared_ci_metadata(); ciObjectFactory::resort_shared_ci_metadata();
- // FIXME - check if it was in JDK8. Copied from standard JDK9 hotswap. - // FIXME - check if it was in JDK8. Copied from standard JDK9 hotswap.
- //MethodDataCleaner clean_weak_method_links; - //MethodDataCleaner clean_weak_method_links;
- //ClassLoaderDataGraph::classes_do(&clean_weak_method_links); - //ClassLoaderDataGraph::classes_do(&clean_weak_method_links);
- -
// Disable any dependent concurrent compilations // Disable any dependent concurrent compilations
SystemDictionary::notice_modification(); SystemDictionary::notice_modification();
@@ -1568,29 +1562,6 @@ void VM_EnhancedRedefineClasses::MethodDataCleaner::do_klass(Klass* k) { @@ -1568,29 +1562,6 @@ void VM_EnhancedRedefineClasses::MethodDataCleaner::do_klass(Klass* k) {
} }
} }
-void VM_EnhancedRedefineClasses::fix_invoke_method(Method* method) { -void VM_EnhancedRedefineClasses::fix_invoke_method(Method* method) {
- -
- constantPoolHandle other_cp = constantPoolHandle(method->constants()); - constantPoolHandle other_cp = constantPoolHandle(method->constants());
- -
- for (int i = 0; i < other_cp->length(); i++) { - for (int i = 0; i < other_cp->length(); i++) {
- if (other_cp->tag_at(i).is_klass()) { - if (other_cp->tag_at(i).is_klass()) {
- Klass* klass = other_cp->resolved_klass_at(i); - Klass* klass = other_cp->resolved_klass_at(i);
- if (klass->new_version() != NULL) { - if (klass->new_version() != NULL) {
- // Constant pool entry points to redefined class -- update to the new version - // Constant pool entry points to redefined class -- update to the new version
- other_cp->klass_at_put(i, klass->newest_version()); - other_cp->klass_at_put(i, klass->newest_version());
- } - }
- assert(other_cp->resolved_klass_at(i)->new_version() == NULL, "Must be new klass!"); - assert(other_cp->resolved_klass_at(i)->new_version() == NULL, "Must be new klass!");
- } - }
- } - }
- -
- ConstantPoolCache* cp_cache = other_cp->cache(); - ConstantPoolCache* cp_cache = other_cp->cache();
- if (cp_cache != NULL) { - if (cp_cache != NULL) {
- cp_cache->clear_entries(); - cp_cache->clear_entries();
- } - }
- -
-} -}
- -
- -
void VM_EnhancedRedefineClasses::update_jmethod_ids() { void VM_EnhancedRedefineClasses::update_jmethod_ids() {
for (int j = 0; j < _matching_methods_length; ++j) { for (int j = 0; j < _matching_methods_length; ++j) {
@@ -2071,12 +2042,23 @@ void VM_EnhancedRedefineClasses::dump_methods() { @@ -2071,12 +2042,23 @@ void VM_EnhancedRedefineClasses::dump_methods() {
class AffectedKlassClosure : public KlassClosure { class AffectedKlassClosure : public KlassClosure {
private: private:
GrowableArray<Klass*>* _affected_klasses; GrowableArray<Klass*>* _affected_klasses;
+ bool _is_anonymous; + bool _is_anonymous;
public: public:
- AffectedKlassClosure(GrowableArray<Klass*>* affected_klasses) : _affected_klasses(affected_klasses) {} - AffectedKlassClosure(GrowableArray<Klass*>* affected_klasses) : _affected_klasses(affected_klasses) {}
+ AffectedKlassClosure(GrowableArray<Klass*>* affected_klasses) : _affected_klasses(affected_klasses), _is_anonymous(false) {} + AffectedKlassClosure(GrowableArray<Klass*>* affected_klasses) : _affected_klasses(affected_klasses), _is_anonymous(false) {}
+ +
+ bool is_anonymous() { return _is_anonymous; } + bool is_anonymous() { return _is_anonymous; }
+ void set_anonymous(bool value) { _is_anonymous = value; } + void set_anonymous(bool value) { _is_anonymous = value; }
void do_klass(Klass* klass) { void do_klass(Klass* klass) {
assert(!_affected_klasses->contains(klass), "must not occur more than once!"); assert(!_affected_klasses->contains(klass), "must not occur more than once!");
+ if (_is_anonymous && klass->is_instance_klass()) { + if (_is_anonymous && klass->is_instance_klass()) {
+ InstanceKlass *ik = InstanceKlass::cast(klass); + InstanceKlass *ik = InstanceKlass::cast(klass);
+ if (ik->is_not_initialized()) { + if (ik->is_not_initialized()) {
+ return; // anonymous class does not need to be initialized + return; // anonymous class does not need to be initialized
+ } + }
+ } + }
+ +
if (klass->new_version() != NULL) { if (klass->new_version() != NULL) {
return; return;
} }
@@ -2135,11 +2117,13 @@ jvmtiError VM_EnhancedRedefineClasses::find_sorted_affected_classes(TRAPS) { @@ -2135,11 +2117,13 @@ jvmtiError VM_EnhancedRedefineClasses::find_sorted_affected_classes(TRAPS) {
// ClassLoaderDataGraph::classes_do(&closure); // ClassLoaderDataGraph::classes_do(&closure);
// 1. Scan over dictionaries // 1. Scan over dictionaries
+ closure.set_anonymous(false); + closure.set_anonymous(false);
ClassLoaderDataGraph::dictionary_classes_do(&closure); ClassLoaderDataGraph::dictionary_classes_do(&closure);
// 2. Anonymous class is not in dictionary, we have to iterate anonymous cld directly, but there is race cond... // 2. Anonymous 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, // TODO: review ... anonymous class is added to cld before InstanceKlass initialization,
// find out how to check if the InstanceKlass is initialized // find out how to check if the InstanceKlass is initialized
+ closure.set_anonymous(true); + closure.set_anonymous(true);
ClassLoaderDataGraph::anonymous_classes_do(&closure); ClassLoaderDataGraph::anonymous_classes_do(&closure);
log_trace(redefine, class, load)("%d classes affected", _affected_klasses->length()); log_trace(redefine, class, load)("%d classes affected", _affected_klasses->length());
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
index 79ea17b0d47..fc0d8e82643 100644 index 8c47baa8a74..c69325ca4ab 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp --- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp +++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.hpp
@@ -119,7 +119,6 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation { @@ -119,7 +119,6 @@ class VM_EnhancedRedefineClasses: public VM_GC_Operation {
static void unregister_nmethod_g1(nmethod* nm); static void unregister_nmethod_g1(nmethod* nm);
static void register_nmethod_g1(nmethod* nm); static void register_nmethod_g1(nmethod* nm);
static void unpatch_bytecode(Method* method); static void unpatch_bytecode(Method* method);
- static void fix_invoke_method(Method* method); - static void fix_invoke_method(Method* method);
// Figure out which new methods match old methods in name and signature, // Figure out which new methods match old methods in name and signature,
// which methods have been added, and which are no longer present // which methods have been added, and which are no longer present
-- --
2.23.0 2.23.0

View File

@@ -1,27 +0,0 @@
From 15d06f325a892e2fa665698b4b76988cff236075 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 5 Nov 2021 18:16:01 +0100
Subject: [PATCH 35/44] JBR-3963 - fix memory leaks in G1 in redefinition
ChangePointersObjectClosure allocates handles and resources, that must
be properly released in worker thread
---
src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
index d33a5ff3a54..7c68dbf4bf1 100644
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
@@ -2125,6 +2125,8 @@ class G1IterateObjectClosureTask : public AbstractGangTask {
_cl(cl), _g1h(g1h), _hrclaimer(g1h->workers()->active_workers()) { }
virtual void work(uint worker_id) {
+ ResourceMark rm;
+ HandleMark hm;
IterateObjectClosureRegionClosure blk(_cl);
_g1h->heap_region_par_iterate_from_worker_offset(&blk, &_hrclaimer, worker_id);
}
--
2.23.0

View File

@@ -1,114 +0,0 @@
From eb5af1af95c0f1dcd7298be6114d9af74f72b5f8 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 5 Nov 2021 18:53:11 +0100
Subject: [PATCH 36/44] JBR-3937 - use specialized DcevmCompilation_lock to
pause C1/C2
Sources are synchronized now with dcevm17 code base. Compilation_lock is
used exclusively for WhiteBox, so we use a new lock for dcevm
---
src/hotspot/share/compiler/compileBroker.cpp | 10 +++++-----
src/hotspot/share/prims/jvmtiEnv.cpp | 4 ++--
src/hotspot/share/runtime/mutexLocker.cpp | 3 +++
src/hotspot/share/runtime/mutexLocker.hpp | 1 +
4 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp
index bd0f9f0efab..448e9b1002b 100644
--- a/src/hotspot/share/compiler/compileBroker.cpp
+++ b/src/hotspot/share/compiler/compileBroker.cpp
@@ -2196,7 +2196,7 @@ void CompileBroker::invoke_compiler_on_method(CompileTask* task) {
if (AllowEnhancedClassRedefinition) {
{
- MonitorLockerEx locker(Compilation_lock, Mutex::_no_safepoint_check_flag);
+ MonitorLockerEx locker(DcevmCompilation_lock, Mutex::_no_safepoint_check_flag);
while (_compilation_stopped) {
locker.wait(Mutex::_no_safepoint_check_flag);
}
@@ -2873,19 +2873,19 @@ void CompileBroker::print_heapinfo(outputStream* out, const char* function, size
void CompileBroker::stopCompilationBeforeEnhancedRedefinition() {
if (AllowEnhancedClassRedefinition) {
- MonitorLockerEx locker(Compilation_lock, Mutex::_no_safepoint_check_flag);
+ MonitorLockerEx locker(DcevmCompilation_lock, Mutex::_no_safepoint_check_flag);
_compilation_stopped = true;
while (_active_compilations > 0) {
- VM_ThreadsSuspendJVMTI tsj;
+ VM_ThreadsSuspendJVMTI tsj; // force safepoint to run C1/C2 VM op
VMThread::execute(&tsj);
- locker.wait(Mutex::_no_safepoint_check_flag);
+ locker.wait(Mutex::_no_safepoint_check_flag, 10);
}
}
}
void CompileBroker::releaseCompilationAfterEnhancedRedefinition() {
if (AllowEnhancedClassRedefinition) {
- MonitorLockerEx locker(Compilation_lock, Mutex::_no_safepoint_check_flag);
+ MonitorLockerEx locker(DcevmCompilation_lock, Mutex::_no_safepoint_check_flag);
_compilation_stopped = false;
locker.notify_all();
}
diff --git a/src/hotspot/share/prims/jvmtiEnv.cpp b/src/hotspot/share/prims/jvmtiEnv.cpp
index 0ca9ec020a9..221e8a20c76 100644
--- a/src/hotspot/share/prims/jvmtiEnv.cpp
+++ b/src/hotspot/share/prims/jvmtiEnv.cpp
@@ -454,9 +454,9 @@ JvmtiEnv::RetransformClasses(jint class_count, const jclass* classes) {
class_definitions[index].klass = jcls;
}
if (AllowEnhancedClassRedefinition) {
+ MutexLocker sd_mutex(EnhancedRedefineClasses_lock);
// Stop compilation to avoid compilator race condition (crashes) with advanced redefinition
CompileBroker::stopCompilationBeforeEnhancedRedefinition();
- MutexLocker sd_mutex(EnhancedRedefineClasses_lock);
VM_EnhancedRedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_retransform);
VMThread::execute(&op);
CompileBroker::releaseCompilationAfterEnhancedRedefinition();
@@ -473,9 +473,9 @@ JvmtiEnv::RetransformClasses(jint class_count, const jclass* classes) {
jvmtiError
JvmtiEnv::RedefineClasses(jint class_count, const jvmtiClassDefinition* class_definitions) {
if (AllowEnhancedClassRedefinition) {
+ MutexLocker sd_mutex(EnhancedRedefineClasses_lock);
// Stop compilation to avoid compilator race condition (crashes) with advanced redefinition
CompileBroker::stopCompilationBeforeEnhancedRedefinition();
- MutexLocker sd_mutex(EnhancedRedefineClasses_lock);
VM_EnhancedRedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_redefine);
VMThread::execute(&op);
CompileBroker::releaseCompilationAfterEnhancedRedefinition();
diff --git a/src/hotspot/share/runtime/mutexLocker.cpp b/src/hotspot/share/runtime/mutexLocker.cpp
index 16e91c85fd1..ae68611e992 100644
--- a/src/hotspot/share/runtime/mutexLocker.cpp
+++ b/src/hotspot/share/runtime/mutexLocker.cpp
@@ -95,6 +95,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;
@@ -327,6 +328,8 @@ void mutex_init() {
def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never);
}
+ def(DcevmCompilation_lock , PaddedMonitor, nonleaf+1, false, Monitor::_safepoint_check_never);
+
#if INCLUDE_JFR
def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always);
def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
diff --git a/src/hotspot/share/runtime/mutexLocker.hpp b/src/hotspot/share/runtime/mutexLocker.hpp
index b41abcb82ae..a9530a3a0e9 100644
--- a/src/hotspot/share/runtime/mutexLocker.hpp
+++ b/src/hotspot/share/runtime/mutexLocker.hpp
@@ -99,6 +99,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,29 +0,0 @@
From eda304d04f9d7ca3d8c488d0375c77eae989a268 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 5 Nov 2021 19:36:08 +0100
Subject: [PATCH 37/44] JBR-3964 - now G1 is the default GC in
AllowEnhancedClassRedefinition
---
src/hotspot/share/gc/shared/gcConfig.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/hotspot/share/gc/shared/gcConfig.cpp b/src/hotspot/share/gc/shared/gcConfig.cpp
index 20e0ef9ee8a..aea0ae3759f 100644
--- a/src/hotspot/share/gc/shared/gcConfig.cpp
+++ b/src/hotspot/share/gc/shared/gcConfig.cpp
@@ -106,9 +106,9 @@ void GCConfig::fail_if_unsupported_gc_is_selected() {
}
void GCConfig::select_gc_ergonomically() {
- if (AllowEnhancedClassRedefinition && !UseConcMarkSweepGC && !UseG1GC) {
+ if (AllowEnhancedClassRedefinition && !UseConcMarkSweepGC && !UseSerialGC) {
// Enhanced class redefinition only supports serial GC at the moment
- FLAG_SET_ERGO(bool, UseSerialGC, true);
+ FLAG_SET_ERGO(bool, UseG1GC, true);
} else if (os::is_server_class_machine()) {
#if INCLUDE_G1GC
FLAG_SET_ERGO_IF_DEFAULT(bool, UseG1GC, true);
--
2.23.0

View File

@@ -1,76 +0,0 @@
From 983a17c530f48d95cc5c48d548d991749d1d49e2 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sat, 6 Nov 2021 19:43:35 +0100
Subject: [PATCH 38/44] Code cleanup
---
src/hotspot/share/compiler/compileBroker.cpp | 2 ++
src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp | 5 ++---
src/hotspot/share/gc/shared/gcConfig.cpp | 2 +-
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp | 1 +
4 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp
index 448e9b1002b..23f3a16c589 100644
--- a/src/hotspot/share/compiler/compileBroker.cpp
+++ b/src/hotspot/share/compiler/compileBroker.cpp
@@ -2872,6 +2872,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) {
MonitorLockerEx 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 e7d830979f6..58d9a6015e7 100644
--- a/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
+++ b/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp
@@ -114,7 +114,7 @@ void G1FullGCCompactTask::work(uint worker_id) {
}
}
- // TODO: (DCEV) check it
+ // TODO: (DCEVM) check it
G1ResetHumongousClosure hc(collector()->mark_bitmap());
G1CollectedHeap::heap()->heap_region_par_iterate_from_worker_offset(&hc, &_claimer, worker_id);
log_task("Compaction task", worker_id, start);
@@ -146,8 +146,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/shared/gcConfig.cpp b/src/hotspot/share/gc/shared/gcConfig.cpp
index aea0ae3759f..c056e564fa3 100644
--- a/src/hotspot/share/gc/shared/gcConfig.cpp
+++ b/src/hotspot/share/gc/shared/gcConfig.cpp
@@ -107,7 +107,7 @@ void GCConfig::fail_if_unsupported_gc_is_selected() {
void GCConfig::select_gc_ergonomically() {
if (AllowEnhancedClassRedefinition && !UseConcMarkSweepGC && !UseSerialGC) {
- // Enhanced class redefinition only supports serial GC at the moment
+ // (DCEVM) use G1 as default GC in Enhanced class redefinition
FLAG_SET_ERGO(bool, UseG1GC, 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 1e63561064a..ee6e6f1d8d5 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -548,6 +548,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,93 +0,0 @@
From 8eb32c4c4dd67aeaebae168e17201559ac0fb50f Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 21 Nov 2021 16:57:57 +0100
Subject: [PATCH 39/44] JBR-4018 - fix zero variant compilation issues
---
.../share/prims/jvmtiEnhancedRedefineClasses.cpp | 12 ++++++++++++
src/hotspot/share/runtime/arguments.cpp | 2 ++
2 files changed, 14 insertions(+)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index ee6e6f1d8d5..c2721b2aab1 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -54,7 +54,9 @@
#include "utilities/events.hpp"
#include "oops/constantPool.inline.hpp"
#include "gc/cms/cmsHeap.hpp"
+#if INCLUDE_G1GC
#include "gc/g1/g1CollectedHeap.hpp"
+#endif
#include "gc/shared/dcevmSharedGC.hpp"
Array<Method*>* VM_EnhancedRedefineClasses::_old_methods = NULL;
@@ -534,16 +536,21 @@ void VM_EnhancedRedefineClasses::doit() {
// mark such nmethod's as "scavengable".
// For now, mark all nmethod's as scavengable that are not scavengable already
if (ScavengeRootsInCode) {
+#if INCLUDE_G1GC
if (UseG1GC) {
// G1 holds references to nmethods in regions based on oops values. Since oops in nmethod can be changed in ChangePointers* closures
// we unregister nmethods from G1 heap, then closures are processed (oops are changed) and finally we register nmethod to G1 again
CodeCache::nmethods_do(unregister_nmethod_g1);
} else {
+#endif
CodeCache::nmethods_do(mark_as_scavengable);
+#if INCLUDE_G1GC
}
+#endif
}
Universe::heap()->ensure_parsability(false);
+#if INCLUDE_G1GC
if (UseG1GC) {
if (log_is_enabled(Info, redefine, class, timer)) {
_timer_heap_iterate.start();
@@ -552,19 +559,24 @@ void VM_EnhancedRedefineClasses::doit() {
G1CollectedHeap::heap()->object_par_iterate(&objectClosure);
_timer_heap_iterate.stop();
} else {
+#endif
if (log_is_enabled(Info, redefine, class, timer)) {
_timer_heap_iterate.start();
}
Universe::heap()->object_iterate(&objectClosure);
_timer_heap_iterate.stop();
+#if INCLUDE_G1GC
}
+#endif
Universe::root_oops_do(&oopClosureNoBarrier);
+#if INCLUDE_G1GC
if (UseG1GC) {
// this should work also for other GCs
CodeCache::nmethods_do(register_nmethod_g1);
}
+#endif
}
log_trace(redefine, class, obsolete, metadata)("After updating instances");
diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp
index dce89a044e9..77238a4608d 100644
--- a/src/hotspot/share/runtime/arguments.cpp
+++ b/src/hotspot/share/runtime/arguments.cpp
@@ -3967,12 +3967,14 @@ jint Arguments::parse(const JavaVMInitArgs* initial_cmd_args) {
// Set object alignment values.
set_object_alignment();
+#ifndef ZERO
if (FlightRecorder) {
if (AllowEnhancedClassRedefinition) {
warning("EnhancedClassRedefinition was disabled, it is not allowed in FlightRecorder.");
AllowEnhancedClassRedefinition = false;
}
}
+#endif
setup_hotswap_agent();
--
2.23.0

View File

@@ -1,111 +0,0 @@
From 96862f74063229132611259eb35f523badd0c9e1 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 28 Nov 2021 11:10:58 +0100
Subject: [PATCH 40/44] 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).
---
src/hotspot/share/oops/cpCache.cpp | 14 ++++----------
src/hotspot/share/oops/cpCache.hpp | 8 ++++----
src/hotspot/share/oops/cpCache.inline.hpp | 7 ++++++-
3 files changed, 14 insertions(+), 15 deletions(-)
diff --git a/src/hotspot/share/oops/cpCache.cpp b/src/hotspot/share/oops/cpCache.cpp
index 4318df227d1..52cf5fe5bdf 100644
--- a/src/hotspot/share/oops/cpCache.cpp
+++ b/src/hotspot/share/oops/cpCache.cpp
@@ -450,6 +450,8 @@ void ConstantPoolCacheEntry::set_method_handle_common(const constantPoolHandle&
release_set_f1(adapter()); // This must be the last one to set (see NOTE above)!
+ OrderAccess::release_store(&_flags, _flags & ~(1u << is_f1_null_dcevm_shift));
+
// The interpreter assembly code does not check byte_2,
// but it is used by is_resolved, method_if_resolved, etc.
set_bytecode_1(invoke_code);
@@ -654,16 +656,8 @@ void ConstantPoolCacheEntry::clear_entry() {
_indices = constant_pool_index();
if (clearData) {
- if (!is_resolved_reference()) {
- _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
- // keep parameter size the same.
- // For example, it's used in TemplateInterpreterGenerator::generate_return_entry_for
- // Also, we need to keep flag marking entry as one containing resolved_reference
- _flags &= parameter_size_mask | (1 << is_resolved_ref_shift);
- _f1 = NULL;
+ // DCEVM: do not clear f1 now, since it can be used before cache entry is re-resolved
+ _flags |= (1 << is_f1_null_dcevm_shift);
}
}
diff --git a/src/hotspot/share/oops/cpCache.hpp b/src/hotspot/share/oops/cpCache.hpp
index 2a9eb978b43..bb4e40373b2 100644
--- a/src/hotspot/share/oops/cpCache.hpp
+++ b/src/hotspot/share/oops/cpCache.hpp
@@ -178,8 +178,9 @@ class ConstantPoolCacheEntry {
tos_state_bits = 4,
tos_state_mask = right_n_bits(tos_state_bits),
tos_state_shift = BitsPerInt - tos_state_bits, // see verify_tos_state_shift below
- // (DCEVM) We need to remember entries which has resolved reference indices as we don't want to clean them
- is_resolved_ref_shift = 27,
+ // (DCEVM) dcevm additional indicator, that f1 is NULL. DCEVM need to keep the old value of the f1 until the
+ // cache entry is reresolved to avoid race condition
+ is_f1_null_dcevm_shift = 27,
// misc. option bits; can be any bit position in [16..27]
is_field_entry_shift = 26, // (F) is it a field or a method?
has_method_type_shift = 25, // (M) does the call site have a MethodType?
@@ -213,7 +214,6 @@ 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;
}
void set_field( // sets entry to resolved field state
@@ -363,7 +363,6 @@ class ConstantPoolCacheEntry {
bool is_method_entry() const { return (_flags & (1 << is_field_entry_shift)) == 0; }
bool is_field_entry() const { return (_flags & (1 << is_field_entry_shift)) != 0; }
bool is_long() const { return flag_state() == ltos; }
- bool is_resolved_reference() const { return (_flags & (1 << is_resolved_ref_shift)) != 0; }
bool is_double() const { return flag_state() == dtos; }
TosState flag_state() const { assert((uint)number_of_states <= (uint)tos_state_mask+1, "");
return (TosState)((_flags >> tos_state_shift) & tos_state_mask); }
@@ -407,6 +406,7 @@ class ConstantPoolCacheEntry {
void verify_just_initialized(bool f2_used);
void reinitialize(bool f2_used);
+
};
diff --git a/src/hotspot/share/oops/cpCache.inline.hpp b/src/hotspot/share/oops/cpCache.inline.hpp
index c876e669de3..2cf48c67a9f 100644
--- a/src/hotspot/share/oops/cpCache.inline.hpp
+++ b/src/hotspot/share/oops/cpCache.inline.hpp
@@ -65,7 +65,12 @@ inline Klass* ConstantPoolCacheEntry::f1_as_klass() const {
return (Klass*)f1;
}
-inline bool ConstantPoolCacheEntry::is_f1_null() const { Metadata* f1 = f1_ord(); return f1 == NULL; }
+inline bool ConstantPoolCacheEntry::is_f1_null() const {
+ Metadata* f1 = f1_ord();
+ intx flags = flags_ord();
+ return f1 == NULL || (flags & (1 << is_f1_null_dcevm_shift)) != 0;
+}
+
inline bool ConstantPoolCacheEntry::has_appendix() const {
return (!is_f1_null()) && (_flags & (1 << has_appendix_shift)) != 0;
--
2.23.0

View File

@@ -1,30 +0,0 @@
From be92eb0b4440f27298330581ec34b17fdac14da9 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Mon, 29 Nov 2021 17:28:36 +0100
Subject: [PATCH 41/44] JBR-3997 - change order of clear is_f1_null_dcevm_shift
and set _f1
---
src/hotspot/share/oops/cpCache.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/hotspot/share/oops/cpCache.cpp b/src/hotspot/share/oops/cpCache.cpp
index 52cf5fe5bdf..a223fc17cae 100644
--- a/src/hotspot/share/oops/cpCache.cpp
+++ b/src/hotspot/share/oops/cpCache.cpp
@@ -448,10 +448,10 @@ void ConstantPoolCacheEntry::set_method_handle_common(const constantPoolHandle&
resolved_references->obj_at_put(method_type_index, method_type());
}
- release_set_f1(adapter()); // This must be the last one to set (see NOTE above)!
-
OrderAccess::release_store(&_flags, _flags & ~(1u << is_f1_null_dcevm_shift));
+ release_set_f1(adapter()); // This must be the last one to set (see NOTE above)!
+
// The interpreter assembly code does not check byte_2,
// but it is used by is_resolved, method_if_resolved, etc.
set_bytecode_1(invoke_code);
--
2.23.0

View File

@@ -1,26 +0,0 @@
From 73b3c3daf4f521c103f8474708add0717adcda70 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Sun, 19 Dec 2021 10:14:48 +0100
Subject: [PATCH 42/44] JBR-4125 - fix wrong addition of java.lang.Object as
superclass
---
src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
index c2721b2aab1..66600206aab 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -1018,7 +1018,7 @@ int VM_EnhancedRedefineClasses::calculate_redefinition_flags(InstanceKlass* new_
cur_klass = new_class->super();
while (cur_klass != NULL) {
- if (!the_class->is_subclass_of(cur_klass->old_version())) {
+ if (!the_class->is_subclass_of(cur_klass->is_redefining() ? cur_klass->old_version() : cur_klass)) {
log_info(redefine, class, load)("added super class %s", cur_klass->name()->as_C_string());
result = result | Klass::ModifyClass | Klass::ModifyInstances;
}
--
2.23.0

View File

@@ -1,26 +0,0 @@
From d211ae68e72eac8b868c9b198929f73f385c18d7 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Wed, 29 Dec 2021 17:44:02 +0100
Subject: [PATCH 43/44] JBR-4148 - removed meaningless copying of data to
itself
---
src/hotspot/share/oops/method.cpp | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp
index 2af3e71635e..55eb4e8c294 100644
--- a/src/hotspot/share/oops/method.cpp
+++ b/src/hotspot/share/oops/method.cpp
@@ -1448,8 +1448,6 @@ methodHandle Method::clone_with_new_data(const methodHandle& m, u_char* new_code
// Reset correct method/const method, method size, and parameter info
newm->set_constMethod(newcm);
- newm->set_new_version(newm->new_version());
- newm->set_old_version(newm->old_version());
newm->constMethod()->set_code_size(new_code_length);
newm->constMethod()->set_constMethod_size(new_const_method_size);
assert(newm->code_size() == new_code_length, "check");
--
2.23.0

View File

@@ -1,29 +0,0 @@
From 71dea432524297595b3193943981e18bcf35e822 Mon Sep 17 00:00:00 2001
From: Vladimir Dvorak <vladimir.dvorak@jetbrains.com>
Date: Fri, 28 Jan 2022 18:52:58 +0100
Subject: [PATCH 44/44] Fix compilation problem - remove notice_modification
SystemDictionary::notice_modification was removed in jdk11.0.4, it contained
number of redefinition counter for informational purposes
---
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 66600206aab..ece6e71b209 100644
--- a/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
+++ b/src/hotspot/share/prims/jvmtiEnhancedRedefineClasses.cpp
@@ -658,8 +658,8 @@ void VM_EnhancedRedefineClasses::doit() {
// TODO: explain...
ciObjectFactory::resort_shared_ci_metadata();
- // Disable any dependent concurrent compilations
- SystemDictionary::notice_modification();
+ // notice_modification() was removed in 11.0.14
+ // SystemDictionary::notice_modification();
// Set flag indicating that some invariants are no longer true.
// See jvmtiExport.hpp for detailed explanation.
--
2.23.0

View File

@@ -1,152 +0,0 @@
#!/bin/bash
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

View File

@@ -20,9 +20,9 @@
# #
# Environment variables: # Environment variables:
# MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located. # MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located.
# By default imported modules should be located in ./jcef_win_aarch64/modular-sdk # By default imported modules should be located in ./modular-sdk.
# JCEF_PATH - specifies the path to the directory with JCEF binaries. # JCEF_PATH - specifies the path to the directory with JCEF binaries.
# By default JCEF binaries should be located in ./jcef_win_aarch64 # By default JCEF binaries should be located in ./jcef_win_aarch64.
# BOOT_JDK - specifies the path to the directory with a ready build of OpenJDK 11 with # BOOT_JDK - specifies the path to the directory with a ready build of OpenJDK 11 with
# the same architecture as the build system. It will be used as the boot jdk. # the same architecture as the build system. It will be used as the boot jdk.
@@ -42,8 +42,8 @@ build_number=$3
bundle_type=$4 bundle_type=$4
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g') JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
WORK_DIR=$(pwd) WORK_DIR=$(pwd)
WITH_IMPORT_MODULES="--with-import-modules=${MODULAR_SDK_PATH:=${WORK_DIR}/modular-sdk}"
JCEF_PATH=${JCEF_PATH:=${WORK_DIR}/jcef_win_aarch64} JCEF_PATH=${JCEF_PATH:=${WORK_DIR}/jcef_win_aarch64}
WITH_IMPORT_MODULES="--with-import-modules=${MODULAR_SDK_PATH:=${JCEF_PATH}/modular-sdk}"
TOOLCHAIN_VERSION=${TOOLCHAIN_VERSION:=2019} TOOLCHAIN_VERSION=${TOOLCHAIN_VERSION:=2019}
source jb/project/tools/common.sh source jb/project/tools/common.sh
@@ -81,10 +81,9 @@ function create_jbr {
esac esac
echo "Exclude jdk.internal.vm.compiler and jdk.aot (because aot is not supported yet)" echo "Exclude jdk.internal.vm.compiler and jdk.aot (because aot is not supported yet)"
cat jb/project/tools/common/modules.list | \ cat modules.list | \
grep -v "jdk.internal.vm.compiler\|jdk.aot" \ grep -v "jdk.internal.vm.compiler\|jdk.aot" \
> modules_tmp.list > modules_tmp.list
echo ",jdk.crypto.mscapi" >> modules_tmp.list
rm -rf ${JBR_BUNDLE} rm -rf ${JBR_BUNDLE}
@@ -106,21 +105,21 @@ RELEASE_NAME=windows-aarch64-normal-server-release
JBSDK=${JBRSDK_BASE_NAME}-windows-aarch64-b${build_number} JBSDK=${JBRSDK_BASE_NAME}-windows-aarch64-b${build_number}
case "$bundle_type" in case "$bundle_type" in
"jcef") "jcef")
git apply -p0 < jb/project/tools/patches/add_jcef_module_arch64.patch || do_exit $? git apply -p0 < jb/project/tools/patches/add_jcef_module_winaarch64.patch || do_exit $?
do_reset_changes=1 do_reset_changes=1
;; ;;
"dcevm") "dcevm")
HEAD_REVISION=$(git rev-parse HEAD) HEAD_REVISION=$(git rev-parse HEAD)
git am jb/project/tools/patches/dcevm/*.patch || do_exit $? git am jb/project/tools/patches/dcevm/*.patch || do_exit $?
do_reset_dcevm=1 do_reset_dcevm=1
git apply -p0 < jb/project/tools/patches/add_jcef_module_arch64.patch || do_exit $? git apply -p0 < jb/project/tools/patches/add_jcef_module_winaarch64.patch || do_exit $?
do_reset_changes=1 do_reset_changes=1
;; ;;
"nomod") "nomod")
WITH_IMPORT_MODULES="" WITH_IMPORT_MODULES=""
;; ;;
"fd") "fd")
git apply -p0 < jb/project/tools/patches/add_jcef_module_arch64.patch || do_exit $? git apply -p0 < jb/project/tools/patches/add_jcef_module_winaarch64.patch || do_exit $?
do_reset_changes=1 do_reset_changes=1
WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" WITH_DEBUG_LEVEL="--with-debug-level=fastdebug"
RELEASE_NAME=windows-aarch64-normal-server-fastdebug RELEASE_NAME=windows-aarch64-normal-server-fastdebug
@@ -161,4 +160,4 @@ fi
create_jbr || do_exit $? create_jbr || do_exit $?
do_exit 0 do_exit 0

View File

@@ -20,7 +20,7 @@
# #
# Environment variables: # Environment variables:
# MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located. # MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located.
# By default imported modules should be located in ./jcef_win_x64/modular-sdk # By default imported modules should be located in ./modular-sdk
# JCEF_PATH - specifies the path to the directory with JCEF binaries. # JCEF_PATH - specifies the path to the directory with JCEF binaries.
# By default JCEF binaries should be located in ./jcef_win_x64 # By default JCEF binaries should be located in ./jcef_win_x64
@@ -40,9 +40,9 @@ build_number=$3
bundle_type=$4 bundle_type=$4
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g') JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
WORK_DIR=$(pwd) WORK_DIR=$(pwd)
WITH_IMPORT_MODULES="--with-import-modules=${MODULAR_SDK_PATH:=${WORK_DIR}/modular-sdk}"
JCEF_PATH=${JCEF_PATH:=${WORK_DIR}/jcef_win_x64} JCEF_PATH=${JCEF_PATH:=${WORK_DIR}/jcef_win_x64}
WITH_IMPORT_MODULES="--with-import-modules=${MODULAR_SDK_PATH:=${JCEF_PATH}/modular-sdk}" TOOLCHAIN_VERSION=${TOOLCHAIN_VERSION:=2015}
TOOLCHAIN_VERSION=${TOOLCHAIN_VERSION:=2017}
source jb/project/tools/common.sh source jb/project/tools/common.sh
@@ -75,8 +75,7 @@ function create_jbr {
echo "***ERR*** bundle was not specified" && do_exit 1 echo "***ERR*** bundle was not specified" && do_exit 1
;; ;;
esac esac
cat jb/project/tools/common/modules.list > modules_tmp.list cat modules.list > modules_tmp.list
echo ",jdk.crypto.mscapi" >> modules_tmp.list
rm -rf ${JBR_BUNDLE} rm -rf ${JBR_BUNDLE}
echo Running jlink.... echo Running jlink....
@@ -91,7 +90,7 @@ function create_jbr {
cat ${JSDK}/release | tr -d '\r' | grep -v 'JAVA_VERSION' | grep -v 'MODULES' >> ${JBR_BUNDLE}/release cat ${JSDK}/release | tr -d '\r' | grep -v 'JAVA_VERSION' | grep -v 'MODULES' >> ${JBR_BUNDLE}/release
} }
JBRSDK_BASE_NAME=jbrsdk_${bundle_type}-${JBSDK_VERSION} JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}
WITH_DEBUG_LEVEL="--with-debug-level=release" WITH_DEBUG_LEVEL="--with-debug-level=release"
RELEASE_NAME=windows-x86_64-normal-server-release RELEASE_NAME=windows-x86_64-normal-server-release
JBSDK=${JBRSDK_BASE_NAME}-windows-x64-b${build_number} JBSDK=${JBRSDK_BASE_NAME}-windows-x64-b${build_number}
@@ -116,7 +115,7 @@ case "$bundle_type" in
WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" WITH_DEBUG_LEVEL="--with-debug-level=fastdebug"
RELEASE_NAME=windows-x86_64-normal-server-fastdebug RELEASE_NAME=windows-x86_64-normal-server-fastdebug
JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}-fastdebug JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}-fastdebug
JBSDK=jbrsdk-${JBSDK_VERSION}-windows-x64-fastdebug-b${build_number} JBSDK=${JBRSDK_BASE_NAME}-windows-x64-fastdebug-b${build_number}
;; ;;
*) *)
echo "***ERR*** bundle was not specified" && do_exit 1 echo "***ERR*** bundle was not specified" && do_exit 1
@@ -125,13 +124,13 @@ esac
if [ -z "$INC_BUILD" ]; then if [ -z "$INC_BUILD" ]; then
do_configure || do_exit $? do_configure || do_exit $?
if [ "${bundle_type}" == "dcevm" ]; then if [ "${bundle_type}" == "jcef" ]; then
make LOG=info CONF=$RELEASE_NAME clean images test-image || do_exit $? make LOG=info CONF=$RELEASE_NAME clean images test-image || do_exit $?
else else
make LOG=info CONF=$RELEASE_NAME clean images || do_exit $? make LOG=info CONF=$RELEASE_NAME clean images || do_exit $?
fi fi
else else
if [ "${bundle_type}" == "dcevm" ]; then if [ "${bundle_type}" == "jcef" ]; then
make LOG=info CONF=$RELEASE_NAME images test-image || do_exit $? make LOG=info CONF=$RELEASE_NAME images test-image || do_exit $?
else else
make LOG=info CONF=$RELEASE_NAME images || do_exit $? make LOG=info CONF=$RELEASE_NAME images || do_exit $?
@@ -140,12 +139,7 @@ fi
JSDK=build/$RELEASE_NAME/images/jdk JSDK=build/$RELEASE_NAME/images/jdk
BASE_DIR=build/$RELEASE_NAME/images BASE_DIR=build/$RELEASE_NAME/images
BASE_DIR=jre JBRSDK_BUNDLE=jbrsdk
if [ "${bundle_type}" == "fd" ]; then
JBRSDK_BUNDLE=jbrsdk
else
JBRSDK_BUNDLE=jbrsdk_${bundle_type}
fi
rm -rf ${BASE_DIR}/${JBRSDK_BUNDLE} && rsync -a --exclude demo --exclude sample ${JSDK}/ ${JBRSDK_BUNDLE} || do_exit $? rm -rf ${BASE_DIR}/${JBRSDK_BUNDLE} && rsync -a --exclude demo --exclude sample ${JSDK}/ ${JBRSDK_BUNDLE} || do_exit $?
if [[ "${bundle_type}" == *jcef* ]] || [[ "${bundle_type}" == *dcevm* ]] || [[ "${bundle_type}" == fd ]] if [[ "${bundle_type}" == *jcef* ]] || [[ "${bundle_type}" == *dcevm* ]] || [[ "${bundle_type}" == fd ]]
@@ -157,4 +151,4 @@ fi
create_jbr || do_exit $? create_jbr || do_exit $?
do_exit 0 do_exit 0

View File

@@ -21,7 +21,6 @@ JDK_BUILD_NUMBER=$2
build_number=$3 build_number=$3
JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g') JBSDK_VERSION_WITH_DOTS=$(echo $JBSDK_VERSION | sed 's/_/\./g')
TOOLCHAIN_VERSION=${TOOLCHAIN_VERSION:=2017}
source jb/project/tools/common.sh source jb/project/tools/common.sh
@@ -39,7 +38,7 @@ PATH="/usr/local/bin:/usr/bin:${PATH}"
--with-version-pre= \ --with-version-pre= \
--with-version-build=${JDK_BUILD_NUMBER} \ --with-version-build=${JDK_BUILD_NUMBER} \
--with-version-opt=b${build_number} \ --with-version-opt=b${build_number} \
--with-toolchain-version=${TOOLCHAIN_VERSION} \ --with-toolchain-version=2015 \
--with-boot-jdk=${BOOT_JDK} \ --with-boot-jdk=${BOOT_JDK} \
--disable-ccache \ --disable-ccache \
--enable-cds=yes || exit 1 --enable-cds=yes || exit 1
@@ -57,8 +56,7 @@ mv release ${JBRSDK_BUNDLE}/release
JBR_BUNDLE=jbr JBR_BUNDLE=jbr
rm -rf ${JBR_BUNDLE} rm -rf ${JBR_BUNDLE}
grep -v javafx jb/project/tools/common/modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > modules.list.x86 grep -v javafx modules.list | grep -v "jdk.internal.vm\|jdk.aot\|jcef" > modules.list.x86
echo ",jdk.crypto.mscapi" >> modules.list.x86
${JSDK}/bin/jlink \ ${JSDK}/bin/jlink \
--module-path ${JSDK}/jmods --no-man-pages --compress=2 \ --module-path ${JSDK}/jmods --no-man-pages --compress=2 \
--add-modules $(xargs < modules.list.x86 | sed s/" "//g) --output ${JBR_BUNDLE} || exit $? --add-modules $(xargs < modules.list.x86 | sed s/" "//g) --output ${JBR_BUNDLE} || exit $?

View File

@@ -20,9 +20,9 @@
# #
# Environment variables: # Environment variables:
# MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located. # MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located.
# By default imported modules should be located in ./jcef_win_aarch64/modular-sdk # By default imported modules should be located in ./modular-sdk.
# JCEF_PATH - specifies the path to the directory with JCEF binaries. # JCEF_PATH - specifies the path to the directory with JCEF binaries.
# By default JCEF binaries should be located in ./jcef_win_aarch64 # By default JCEF binaries should be located in ./jcef_win_aarch64.
JBSDK_VERSION=$1 JBSDK_VERSION=$1
JDK_BUILD_NUMBER=$2 JDK_BUILD_NUMBER=$2
@@ -67,7 +67,7 @@ IMAGES_DIR=build/$RELEASE_NAME/images
JSDK=$IMAGES_DIR/jdk JSDK=$IMAGES_DIR/jdk
BASE_DIR=. BASE_DIR=.
if [ "${bundle_type}" == "dcevm" ] || [ "${bundle_type}" == "fd" ]; then if [ "${bundle_type}" == "jcef" ] || [ "${bundle_type}" == "fd" ]; then
JBRSDK_BUNDLE=jbrsdk JBRSDK_BUNDLE=jbrsdk
echo Creating $JBSDK.tar.gz ... echo Creating $JBSDK.tar.gz ...
[ -f "$JBSDK.tar.gz" ] && rm "$JBSDK.tar.gz" [ -f "$JBSDK.tar.gz" ] && rm "$JBSDK.tar.gz"
@@ -76,7 +76,7 @@ fi
pack_jbr $bundle_type pack_jbr $bundle_type
if [ "$bundle_type" == "dcevm" ]; then if [ "$bundle_type" == "jcef" ]; then
JBRSDK_TEST=$JBRSDK_BASE_NAME-windows-test-aarch64-b$build_number JBRSDK_TEST=$JBRSDK_BASE_NAME-windows-test-aarch64-b$build_number
echo Creating $JBRSDK_TEST.tar.gz ... echo Creating $JBRSDK_TEST.tar.gz ...
/usr/bin/tar -czf $JBRSDK_TEST.tar.gz -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $? /usr/bin/tar -czf $JBRSDK_TEST.tar.gz -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $?

View File

@@ -20,7 +20,7 @@
# #
# Environment variables: # Environment variables:
# MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located. # MODULAR_SDK_PATH - specifies the path to the directory where imported modules are located.
# By default imported modules should be located in ./jcef_win_x64/modular-sdk # By default imported modules should be located in ./modular-sdk
# JCEF_PATH - specifies the path to the directory with JCEF binaries. # JCEF_PATH - specifies the path to the directory with JCEF binaries.
# By default JCEF binaries should be located in ./jcef_win_x64 # By default JCEF binaries should be located in ./jcef_win_x64
@@ -51,7 +51,7 @@ function pack_jbr {
/usr/bin/tar -czf $JBR.tar.gz -C $BASE_DIR jbr || do_exit $? /usr/bin/tar -czf $JBR.tar.gz -C $BASE_DIR jbr || do_exit $?
} }
JBRSDK_BASE_NAME=jbrsdk_${bundle_type}-${JBSDK_VERSION} JBRSDK_BASE_NAME=jbrsdk-${JBSDK_VERSION}
WITH_DEBUG_LEVEL="--with-debug-level=release" WITH_DEBUG_LEVEL="--with-debug-level=release"
RELEASE_NAME=windows-x86_64-normal-server-release RELEASE_NAME=windows-x86_64-normal-server-release
JBSDK=${JBRSDK_BASE_NAME}-windows-x64-b${build_number} JBSDK=${JBRSDK_BASE_NAME}-windows-x64-b${build_number}
@@ -59,27 +59,25 @@ case "$bundle_type" in
"fd") "fd")
WITH_DEBUG_LEVEL="--with-debug-level=fastdebug" WITH_DEBUG_LEVEL="--with-debug-level=fastdebug"
RELEASE_NAME=windows-x86_64-normal-server-fastdebug RELEASE_NAME=windows-x86_64-normal-server-fastdebug
JBSDK=jbrsdk-${JBSDK_VERSION}-windows-x64-fastdebug-b${build_number} JBSDK=${JBRSDK_BASE_NAME}-windows-x64-fastdebug-b${build_number}
;; ;;
esac esac
IMAGES_DIR=build/$RELEASE_NAME/images IMAGES_DIR=build/$RELEASE_NAME/images
JSDK=$IMAGES_DIR/jdk JSDK=$IMAGES_DIR/jdk
BASE_DIR=. BASE_DIR=.
if [ "${bundle_type}" == "fd" ]; then
JBRSDK_BUNDLE=jbrsdk
else
JBRSDK_BUNDLE=jbrsdk_${bundle_type}
fi
echo Creating $JBSDK.tar.gz ... if [ "${bundle_type}" == "jcef" ] || [ "${bundle_type}" == "fd" ]; then
[ -f "$JBSDK.tar.gz" ] && rm "$JBSDK.tar.gz" JBRSDK_BUNDLE=jbrsdk
/usr/bin/tar -czf $JBSDK.tar.gz $JBRSDK_BUNDLE || do_exit $? echo Creating $JBSDK.tar.gz ...
[ -f "$JBSDK.tar.gz" ] && rm "$JBSDK.tar.gz"
/usr/bin/tar -czf $JBSDK.tar.gz $JBRSDK_BUNDLE || do_exit $?
fi
pack_jbr $bundle_type pack_jbr $bundle_type
if [ "$bundle_type" == "dcevm" ]; then if [ "$bundle_type" == "jcef" ]; then
JBRSDK_TEST=jbrsdk-${JBSDK_VERSION}-windows-test-x64-b$build_number JBRSDK_TEST=$JBRSDK_BASE_NAME-windows-test-x64-b$build_number
echo Creating $JBRSDK_TEST.tar.gz ... echo Creating $JBRSDK_TEST.tar.gz ...
/usr/bin/tar -czf $JBRSDK_TEST.tar.gz -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $? /usr/bin/tar -czf $JBRSDK_TEST.tar.gz -C $IMAGES_DIR --exclude='test/jdk/demos' test || do_exit $?
fi fi

View File

@@ -19,19 +19,17 @@ include MakeBase.gmk
include JavaCompilation.gmk include JavaCompilation.gmk
include SetupJavaCompilers.gmk include SetupJavaCompilers.gmk
JBR_API_ROOT_DIR := $(TOPDIR)/src/jetbrains.api JBR_API_ROOT_DIR := $(TOPDIR)/src/jetbrains.api
JBR_API_TOOLS_DIR := $(JBR_API_ROOT_DIR)/tools JBR_API_GENSRC_TEMPLATES := $(JBR_API_ROOT_DIR)/templates
JBR_API_SRC_DIR := $(JBR_API_ROOT_DIR)/src JBR_API_SRC_DIR := $(JBR_API_ROOT_DIR)/src
JBR_API_OUTPUT_DIR := $(OUTPUTDIR)/jbr-api JBR_API_OUTPUT_DIR := $(OUTPUTDIR)/jbr-api
JBR_API_GENSRC_DIR := $(JBR_API_OUTPUT_DIR)/gensrc JBR_API_GENSRC_DIR := $(JBR_API_OUTPUT_DIR)/gensrc
JBR_API_BIN_DIR := $(JBR_API_OUTPUT_DIR)/bin JBR_API_BIN_DIR := $(JBR_API_OUTPUT_DIR)/bin
JBR_API_VERSION_PROPERTIES := $(JBR_API_ROOT_DIR)/version.properties 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 := $(JBR_API_GENSRC_DIR)/com/jetbrains/JBR.java
JBR_API_SRC_FILES := $(call FindFiles, $(JBR_API_SRC_DIR)) 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),) ifeq ($(JBR_API_JBR_VERSION),)
JBR_API_JBR_VERSION := <DEVELOPMENT> JBR_API_JBR_VERSION := <DEVELOPMENT>
@@ -44,7 +42,7 @@ endif
ARCHIVE_BUILD_JBR_API_BIN := $(JBR_API_BIN_DIR) ARCHIVE_BUILD_JBR_API_BIN := $(JBR_API_BIN_DIR)
$(eval $(call SetupJavaCompilation, BUILD_JBR_API, \ $(eval $(call SetupJavaCompilation, BUILD_JBR_API, \
SETUP := BOOT_JAVAC, \ SETUP := BOOT_JAVAC, \
SRC := $(JBR_API_GENSRC_DIR), \ SRC := $(JBR_API_GENSRC_DIR) $(JBR_API_SRC_DIR), \
EXTRA_FILES := $(JBR_API_GENSRC_FILES), \ EXTRA_FILES := $(JBR_API_GENSRC_FILES), \
DEPENDS := $(JBR_API_GENSRC_FILES), \ DEPENDS := $(JBR_API_GENSRC_FILES), \
BIN := $(JBR_API_BIN_DIR), \ BIN := $(JBR_API_BIN_DIR), \
@@ -52,23 +50,20 @@ $(eval $(call SetupJavaCompilation, BUILD_JBR_API, \
)) ))
$(eval $(call SetupJarArchive, BUILD_JBR_API_SOURCES_JAR, \ $(eval $(call SetupJarArchive, BUILD_JBR_API_SOURCES_JAR, \
DEPENDENCIES := $(JBR_API_GENSRC_FILES), \ DEPENDENCIES := $(JBR_API_GENSRC_FILES) $(JBR_API_SRC_FILES), \
SRCS := $(JBR_API_GENSRC_DIR), \ SRCS := $(JBR_API_GENSRC_DIR) $(JBR_API_SRC_DIR), \
JAR := $(JBR_API_OUTPUT_DIR)/jbr-api-sources.jar, \ JAR := $(JBR_API_OUTPUT_DIR)/jbr-api-sources.jar, \
SUFFIXES := .java, \ SUFFIXES := .java, \
BIN := $(JBR_API_BIN_DIR), \ BIN := $(JBR_API_BIN_DIR), \
)) ))
# Grouped targets may not be supported, so hack dependencies: sources -> version file -> generated sources $(JBR_API_GENSRC_FILES): $(JBR_API_GENSRC_SOURCES) $(JBR_API_SRC_FILES) $(JBR_API_VERSION_PROPERTIES)
$(JBR_API_VERSION_GENSRC): $(JBR_API_SRC_FILES) $(JBR_API_VERSION_PROPERTIES) $(JBR_API_TOOLS_DIR)/Gensrc.java
$(ECHO) Generating sources for JBR API $(ECHO) Generating sources for JBR API
$(JAVA_CMD) $(JAVA_FLAGS_SMALL) "$(JBR_API_TOOLS_DIR)/Gensrc.java" \ $(JAVA_CMD) $(JAVA_FLAGS_SMALL) "$(JBR_API_GENSRC_TEMPLATES)/Gensrc.java" \
"$(TOPDIR)/src" "$(JBR_API_OUTPUT_DIR)" "$(JBR_API_JBR_VERSION)" "$(TOPDIR)/src" "$(JBR_API_OUTPUT_DIR)" "$(JBR_API_JBR_VERSION)"
$(JBR_API_GENSRC_FILES): $(JBR_API_VERSION_GENSRC)
$(TOUCH) $@
jbr-api-check-version: $(JBR_API_GENSRC_FILES) $(JBR_API_VERSION_PROPERTIES) jbr-api-check-version: $(JBR_API_GENSRC_FILES) $(JBR_API_SRC_FILES) $(JBR_API_VERSION_PROPERTIES)
$(JAVA_CMD) $(JAVA_FLAGS_SMALL) "$(JBR_API_TOOLS_DIR)/CheckVersion.java" \ $(JAVA_CMD) $(JAVA_FLAGS_SMALL) "$(JBR_API_GENSRC_TEMPLATES)/CheckVersion.java" \
"$(JBR_API_ROOT_DIR)" "$(JBR_API_GENSRC_DIR)" "$(JBR_API_FAIL_ON_HASH_MISMATCH)" "$(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 jbr-api: $(BUILD_JBR_API) $(BUILD_JBR_API_SOURCES_JAR) jbr-api-check-version
@@ -77,7 +72,7 @@ jbr-api: $(BUILD_JBR_API) $(BUILD_JBR_API_SOURCES_JAR) jbr-api-check-version
ifneq ($(JBR_API_CONF_FILE),) ifneq ($(JBR_API_CONF_FILE),)
$(JBR_API_CONF_FILE): $(JBR_API_GENSRC_FILES) $(JBR_API_CONF_FILE): $(JBR_API_GENSRC_FILES)
$(ECHO) "VERSION=`$(CAT) $(JBR_API_VERSION_GENSRC)`" > $(JBR_API_CONF_FILE) $(ECHO) "VERSION=`$(CAT) $(JBR_API_OUTPUT_DIR)/jbr-api.version`" > $(JBR_API_CONF_FILE)
$(ECHO) "JAR=$(JBR_API_OUTPUT_DIR)/jbr-api.jar" >> $(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) $(ECHO) "SOURCES_JAR=$(JBR_API_OUTPUT_DIR)/jbr-api-sources.jar" >> $(JBR_API_CONF_FILE)
jbr-api: $(JBR_API_CONF_FILE) jbr-api: $(JBR_API_CONF_FILE)

View File

@@ -276,7 +276,7 @@ $(eval $(call SetTestOpt,TIMEOUT_FACTOR,JTREG))
$(eval $(call ParseKeywordVariable, JTREG, \ $(eval $(call ParseKeywordVariable, JTREG, \
SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR TEST_MODE ASSERT VERBOSE RETAIN \ SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR TEST_MODE ASSERT VERBOSE RETAIN \
MAX_MEM RETRY_COUNT, \ MAX_MEM, \
STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS KEYWORDS \ STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS KEYWORDS \
EXTRA_PROBLEM_LISTS AOT_MODULES, \ EXTRA_PROBLEM_LISTS AOT_MODULES, \
)) ))
@@ -312,6 +312,8 @@ langtools_JTREG_PROBLEM_LIST += $(TOPDIR)/test/langtools/ProblemList.txt
nashorn_JTREG_PROBLEM_LIST += $(TOPDIR)/test/nashorn/ProblemList.txt nashorn_JTREG_PROBLEM_LIST += $(TOPDIR)/test/nashorn/ProblemList.txt
hotspot_JTREG_PROBLEM_LIST += $(TOPDIR)/test/hotspot/jtreg/ProblemList.txt hotspot_JTREG_PROBLEM_LIST += $(TOPDIR)/test/hotspot/jtreg/ProblemList.txt
langtools_JTREG_MAX_MEM := 768m
################################################################################ ################################################################################
# Parse test selection # Parse test selection
# #
@@ -625,7 +627,7 @@ define SetupRunJtregTestBody
# Convert JTREG_foo into $1_JTREG_foo with a suitable value. # Convert JTREG_foo into $1_JTREG_foo with a suitable value.
$$(eval $$(call SetJtregValue,$1,JTREG_TEST_MODE,agentvm)) $$(eval $$(call SetJtregValue,$1,JTREG_TEST_MODE,agentvm))
$$(eval $$(call SetJtregValue,$1,JTREG_ASSERT,true)) $$(eval $$(call SetJtregValue,$1,JTREG_ASSERT,true))
$$(eval $$(call SetJtregValue,$1,JTREG_MAX_MEM,768m)) $$(eval $$(call SetJtregValue,$1,JTREG_MAX_MEM,512m))
$$(eval $$(call SetJtregValue,$1,JTREG_NATIVEPATH)) $$(eval $$(call SetJtregValue,$1,JTREG_NATIVEPATH))
$$(eval $$(call SetJtregValue,$1,JTREG_BASIC_OPTIONS)) $$(eval $$(call SetJtregValue,$1,JTREG_BASIC_OPTIONS))
$$(eval $$(call SetJtregValue,$1,JTREG_PROBLEM_LIST)) $$(eval $$(call SetJtregValue,$1,JTREG_PROBLEM_LIST))
@@ -641,7 +643,7 @@ define SetupRunJtregTestBody
# Make sure MaxRAMPercentage is high enough to not cause OOM or swapping since # Make sure MaxRAMPercentage is high enough to not cause OOM or swapping since
# we may end up with a lot of JVM's # we may end up with a lot of JVM's
$1_JTREG_MAX_RAM_PERCENTAGE := $$(shell $(AWK) 'BEGIN { print 25 / $$($1_JTREG_JOBS); }') $1_JTREG_MAX_RAM_PERCENTAGE := $$(shell $$(EXPR) 25 / $$($1_JTREG_JOBS))
# SPARC is in general slower per core so need to scale up timeouts a bit. # SPARC is in general slower per core so need to scale up timeouts a bit.
ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
@@ -651,7 +653,6 @@ define SetupRunJtregTestBody
endif endif
JTREG_VERBOSE ?= fail,error,summary JTREG_VERBOSE ?= fail,error,summary
JTREG_RETAIN ?= fail,error JTREG_RETAIN ?= fail,error
JTREG_RETRY_COUNT ?= 0
ifneq ($$($1_JTREG_MAX_MEM), 0) ifneq ($$($1_JTREG_MAX_MEM), 0)
$1_JTREG_BASIC_OPTIONS += -vmoption:-Xmx$$($1_JTREG_MAX_MEM) $1_JTREG_BASIC_OPTIONS += -vmoption:-Xmx$$($1_JTREG_MAX_MEM)
@@ -741,43 +742,24 @@ define SetupRunJtregTestBody
clean-workdir-$1: clean-workdir-$1:
$$(RM) -r $$($1_TEST_SUPPORT_DIR) $$(RM) -r $$($1_TEST_SUPPORT_DIR)
$1_COMMAND_LINE := \
$$(JAVA) $$($1_JTREG_LAUNCHER_OPTIONS) \
-Dprogram=jtreg -jar $$(JT_HOME)/lib/jtreg.jar \
$$($1_JTREG_BASIC_OPTIONS) \
-testjdk:$$(JDK_IMAGE_DIR) \
-dir:$$(JTREG_TOPDIR) \
-reportDir:$$($1_TEST_RESULTS_DIR) \
-workDir:$$($1_TEST_SUPPORT_DIR) \
-status:$$$${JTREG_STATUS} \
$$(JTREG_OPTIONS) \
$$(JTREG_FAILURE_HANDLER_OPTIONS) \
$$($1_TEST_NAME) \
&& $$(ECHO) $$$$? > $$($1_EXITCODE) \
|| $$(ECHO) $$$$? > $$($1_EXITCODE)
ifneq ($$(JTREG_RETRY_COUNT), 0)
$1_COMMAND_LINE := \
for i in {0..$$(JTREG_RETRY_COUNT)}; do \
if [ "$$$$i" != 0 ]; then \
$$(PRINTF) "\nRetrying Jtreg run. Attempt: $$$$i\n"; \
fi; \
$$($1_COMMAND_LINE); \
if [ "`$$(CAT) $$($1_EXITCODE)`" = "0" ]; then \
break; \
fi; \
export JTREG_STATUS="-status:error,fail"; \
done
endif
run-test-$1: clean-workdir-$1 $$($1_AOT_TARGETS) run-test-$1: clean-workdir-$1 $$($1_AOT_TARGETS)
$$(call LogWarn) $$(call LogWarn)
$$(call LogWarn, Running test '$$($1_TEST)') $$(call LogWarn, Running test '$$($1_TEST)')
$$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR) \ $$(call MakeDir, $$($1_TEST_RESULTS_DIR) $$($1_TEST_SUPPORT_DIR) \
$$($1_TEST_TMP_DIR)) $$($1_TEST_TMP_DIR))
$$(call ExecuteWithLog, $$($1_TEST_SUPPORT_DIR)/jtreg, ( \ $$(call ExecuteWithLog, $$($1_TEST_SUPPORT_DIR)/jtreg, ( \
$$($1_COMMAND_LINE) \ $$(JAVA) $$($1_JTREG_LAUNCHER_OPTIONS) \
-Dprogram=jtreg -jar $$(JT_HOME)/lib/jtreg.jar \
$$($1_JTREG_BASIC_OPTIONS) \
-testjdk:$$(JDK_IMAGE_DIR) \
-dir:$$(JTREG_TOPDIR) \
-reportDir:$$($1_TEST_RESULTS_DIR) \
-workDir:$$($1_TEST_SUPPORT_DIR) \
$$(JTREG_OPTIONS) \
$$(JTREG_FAILURE_HANDLER_OPTIONS) \
$$($1_TEST_NAME) \
&& $$(ECHO) $$$$? > $$($1_EXITCODE) \
|| $$(ECHO) $$$$? > $$($1_EXITCODE) \
)) ))
$1_RESULT_FILE := $$($1_TEST_RESULTS_DIR)/text/stats.txt $1_RESULT_FILE := $$($1_TEST_RESULTS_DIR)/text/stats.txt

View File

@@ -230,7 +230,7 @@ else ifeq ($(OPENJDK_TARGET_OS), macosx)
NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu) NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu)
MEMORY_SIZE := $(shell $(EXPR) `/usr/sbin/sysctl -n hw.memsize` / 1024 / 1024) MEMORY_SIZE := $(shell $(EXPR) `/usr/sbin/sysctl -n hw.memsize` / 1024 / 1024)
else ifeq ($(OPENJDK_TARGET_OS), solaris) else ifeq ($(OPENJDK_TARGET_OS), solaris)
NUM_CORES := $(shell /usr/sbin/psrinfo -v | $(GREP) -c on-line) NUM_CORES := $(shell LC_MESSAGES=C /usr/sbin/psrinfo -v | $(GREP) -c on-line)
MEMORY_SIZE := $(shell \ MEMORY_SIZE := $(shell \
/usr/sbin/prtconf 2> /dev/null | $(GREP) "^Memory [Ss]ize" | $(AWK) '{print $$3}' \ /usr/sbin/prtconf 2> /dev/null | $(GREP) "^Memory [Ss]ize" | $(AWK) '{print $$3}' \
) )

View File

@@ -27,9 +27,6 @@
# Fake minimalistic spec file for RunTestsPrebuilt.gmk. # Fake minimalistic spec file for RunTestsPrebuilt.gmk.
################################################################################ ################################################################################
# Make sure all shell commands are executed with the C locale
export LC_ALL := C
define VerifyVariable define VerifyVariable
ifeq ($$($1), ) ifeq ($$($1), )
$$(info Error: Variable $1 is missing, needed by RunTestPrebuiltSpec.gmk) $$(info Error: Variable $1 is missing, needed by RunTestPrebuiltSpec.gmk)

View File

@@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@@ -73,9 +73,9 @@ TOOL_HASHER = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
TOOL_TZDB = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \ TOOL_TZDB = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
build.tools.tzdb.TzdbZoneRulesCompiler build.tools.tzdb.TzdbZoneRulesCompiler
TOOL_BLOCKED_CERTS = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \ TOOL_BLACKLISTED_CERTS = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
--add-exports java.base/sun.security.util=ALL-UNNAMED \ --add-exports java.base/sun.security.util=ALL-UNNAMED \
build.tools.blockedcertsconverter.BlockedCertsConverter build.tools.blacklistedcertsconverter.BlacklistedCertsConverter
TOOL_MAKEJAVASECURITY = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \ TOOL_MAKEJAVASECURITY = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
build.tools.makejavasecurity.MakeJavaSecurity build.tools.makejavasecurity.MakeJavaSecurity

View File

@@ -405,7 +405,7 @@ AC_DEFUN_ONCE([BASIC_INIT],
# Save the path variable before it gets changed # Save the path variable before it gets changed
ORIGINAL_PATH="$PATH" ORIGINAL_PATH="$PATH"
AC_SUBST(ORIGINAL_PATH) AC_SUBST(ORIGINAL_PATH)
DATE_WHEN_CONFIGURED=`date` DATE_WHEN_CONFIGURED=`LANG=C date`
AC_SUBST(DATE_WHEN_CONFIGURED) AC_SUBST(DATE_WHEN_CONFIGURED)
AC_MSG_NOTICE([Configuration created at $DATE_WHEN_CONFIGURED.]) AC_MSG_NOTICE([Configuration created at $DATE_WHEN_CONFIGURED.])
]) ])

View File

@@ -1,7 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2021, Azul Systems, Inc. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@@ -98,23 +97,6 @@ if [ "x$OUT" = x ]; then
fi fi
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
if [ `uname -m` = arm64 ]; then
OUT=aarch64`echo $OUT | sed -e 's/[^-]*//'`
fi
fi
# Test and fix cpu on Macosx when C preprocessor is not on the path # Test and fix cpu on Macosx when C preprocessor is not on the path
echo $OUT | grep i386-apple-darwin > /dev/null 2> /dev/null echo $OUT | grep i386-apple-darwin > /dev/null 2> /dev/null
if test $? = 0; then if test $? = 0; then

View File

@@ -35,7 +35,7 @@ AC_DEFUN([BPERF_CHECK_CORES],
FOUND_CORES=yes FOUND_CORES=yes
elif test -x /usr/sbin/psrinfo; then elif test -x /usr/sbin/psrinfo; then
# Looks like a Solaris system # Looks like a Solaris system
NUM_CORES=`/usr/sbin/psrinfo -v | grep -c on-line` NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line`
FOUND_CORES=yes FOUND_CORES=yes
elif test -x /usr/sbin/sysctl; then elif test -x /usr/sbin/sysctl; then
# Looks like a MacOSX system # Looks like a MacOSX system

View File

@@ -43,9 +43,6 @@ fi
export CONFIG_SHELL=$BASH export CONFIG_SHELL=$BASH
export _as_can_reexec=no export _as_can_reexec=no
# Make sure all shell commands are executed with the C locale
export LC_ALL=C
if test "x$CUSTOM_CONFIG_DIR" != x; then if test "x$CUSTOM_CONFIG_DIR" != x; then
custom_hook=$CUSTOM_CONFIG_DIR/custom-hook.m4 custom_hook=$CUSTOM_CONFIG_DIR/custom-hook.m4
if test ! -e $custom_hook; then if test ! -e $custom_hook; then

View File

@@ -391,6 +391,16 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS],
CFLAGS="$CFLAGS_OLD" CFLAGS="$CFLAGS_OLD"
CXXFLAGS="$CXXFLAGS_OLD" CXXFLAGS="$CXXFLAGS_OLD"
# Tests are only ever compiled for TARGET
CFLAGS_TESTLIB="$CFLAGS_JDKLIB"
CXXFLAGS_TESTLIB="$CXXFLAGS_JDKLIB"
CFLAGS_TESTEXE="$CFLAGS_JDKEXE"
CXXFLAGS_TESTEXE="$CXXFLAGS_JDKEXE"
AC_SUBST(CFLAGS_TESTLIB)
AC_SUBST(CFLAGS_TESTEXE)
AC_SUBST(CXXFLAGS_TESTLIB)
AC_SUBST(CXXFLAGS_TESTEXE)
]) ])
################################################################################ ################################################################################

View File

@@ -51,7 +51,9 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS],
FLAGS_SETUP_LDFLAGS_CPU_DEP([BUILD], [OPENJDK_BUILD_]) FLAGS_SETUP_LDFLAGS_CPU_DEP([BUILD], [OPENJDK_BUILD_])
LDFLAGS_TESTEXE="${TARGET_LDFLAGS_JDK_LIBPATH}" LDFLAGS_TESTLIB="$LDFLAGS_JDKLIB"
LDFLAGS_TESTEXE="$LDFLAGS_JDKEXE ${TARGET_LDFLAGS_JDK_LIBPATH}"
AC_SUBST(LDFLAGS_TESTLIB)
AC_SUBST(LDFLAGS_TESTEXE) AC_SUBST(LDFLAGS_TESTEXE)
]) ])
@@ -185,17 +187,14 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_CPU_DEP],
$1_CPU_LDFLAGS_JVM_ONLY="-xarch=sparc" $1_CPU_LDFLAGS_JVM_ONLY="-xarch=sparc"
fi fi
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
if test "x${OPENJDK_$1_CPU_BITS}" = "x32"; then
$1_CPU_EXECUTABLE_LDFLAGS="-stack:327680"
elif test "x${OPENJDK_$1_CPU_BITS}" = "x64"; then
$1_CPU_EXECUTABLE_LDFLAGS="-stack:1048576"
fi
if test "x${OPENJDK_$1_CPU}" = "xx86"; then if test "x${OPENJDK_$1_CPU}" = "xx86"; then
$1_CPU_LDFLAGS="-safeseh" $1_CPU_LDFLAGS="-safeseh"
# NOTE: Old build added -machine. Probably not needed.
$1_CPU_LDFLAGS_JVM_ONLY="-machine:I386"
$1_CPU_EXECUTABLE_LDFLAGS="-stack:327680"
elif test "x${OPENJDK_$1_CPU}" = "xaarch64"; then
$1_CPU_EXECUTABLE_LDFLAGS="-stack:1048576"
else
$1_CPU_LDFLAGS_JVM_ONLY="-machine:AMD64"
$1_CPU_EXECUTABLE_LDFLAGS="-stack:1048576"
fi fi
fi fi

View File

@@ -111,25 +111,19 @@ AC_DEFUN([FLAGS_SETUP_MACOSX_VERSION],
[ [
# Additional macosx handling # Additional macosx handling
if test "x$OPENJDK_TARGET_OS" = xmacosx; then if test "x$OPENJDK_TARGET_OS" = xmacosx; then
# The expected format for <version> is either nn.n.n or nn.nn.nn. See
# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/AvailabilityVersions.h
# MACOSX_VERSION_MIN specifies the lowest version of Macosx that the built # MACOSX_VERSION_MIN specifies the lowest version of Macosx that the built
# binaries should be compatible with, even if compiled on a newer version # binaries should be compatible with, even if compiled on a newer version
# of the OS. It currently has a hard coded value. Setting this also limits # of the OS. It currently has a hard coded value. Setting this also limits
# exposure to API changes in header files. Bumping this is likely to # exposure to API changes in header files. Bumping this is likely to
# require code changes to build. # require code changes to build.
if test "x$OPENJDK_TARGET_CPU_ARCH" = xaarch64; then MACOSX_VERSION_MIN=10.9.0
MACOSX_VERSION_MIN=11.00.00
else
MACOSX_VERSION_MIN=10.9.0
fi
MACOSX_VERSION_MIN_NODOTS=${MACOSX_VERSION_MIN//\./} MACOSX_VERSION_MIN_NODOTS=${MACOSX_VERSION_MIN//\./}
AC_SUBST(MACOSX_VERSION_MIN) AC_SUBST(MACOSX_VERSION_MIN)
# Setting --with-macosx-version-max=<version> makes it an error to build or # Setting --with-macosx-version-max=<version> makes it an error to build or
# link to macosx APIs that are newer than the given OS version. # link to macosx APIs that are newer than the given OS version. The expected
# format for <version> is either nn.n.n or nn.nn.nn. See /usr/include/AvailabilityMacros.h.
AC_ARG_WITH([macosx-version-max], [AS_HELP_STRING([--with-macosx-version-max], AC_ARG_WITH([macosx-version-max], [AS_HELP_STRING([--with-macosx-version-max],
[error on use of newer functionality. @<:@macosx@:>@])], [error on use of newer functionality. @<:@macosx@:>@])],
[ [
@@ -264,14 +258,6 @@ AC_DEFUN_ONCE([FLAGS_PRE_TOOLCHAIN],
fi fi
fi fi
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
if test "x$OPENJDK_TARGET_CPU" = xaarch64; then
MACHINE_FLAG="$MACHINE_FLAG -arch arm64"
elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
MACHINE_FLAG="$MACHINE_FLAG -arch x86_64"
fi
fi
# FIXME: global flags are not used yet... # FIXME: global flags are not used yet...
# The "global" flags will *always* be set. Without them, it is not possible to # The "global" flags will *always* be set. Without them, it is not possible to
# get a working compilation. # get a working compilation.

View File

@@ -90,7 +90,7 @@ apt_help() {
devkit) devkit)
PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;;
openjdk) openjdk)
PKGHANDLER_COMMAND="sudo apt-get install openjdk-11-jdk" ;; PKGHANDLER_COMMAND="sudo apt-get install openjdk-8-jdk" ;;
alsa) alsa)
PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;; PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;;
cups) cups)
@@ -117,7 +117,7 @@ yum_help() {
devkit) devkit)
PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;; PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;;
openjdk) openjdk)
PKGHANDLER_COMMAND="sudo yum install java-11-openjdk-devel" ;; PKGHANDLER_COMMAND="sudo yum install java-1.8.0-openjdk-devel" ;;
alsa) alsa)
PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;; PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;;
cups) cups)

View File

@@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@@ -278,7 +278,7 @@ AC_DEFUN_ONCE([HOTSPOT_ENABLE_DISABLE_CDS],
if test "x$OPENJDK_TARGET_OS" = "xmacosx" && test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then if test "x$OPENJDK_TARGET_OS" = "xmacosx" && test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
ENABLE_CDS="false" ENABLE_CDS="false"
if test "x$enable_cds" = "xyes"; then if test "x$enable_cds" = "xyes"; then
AC_MSG_ERROR([CDS is currently not supported on macOS/aarch64. Remove --enable-cds.]) AC_MSG_ERROR([CDS is currently not supported on AIX. Remove --enable-cds.])
fi fi
fi fi
@@ -363,8 +363,7 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
# Only enable Shenandoah on supported arches, and only if requested # Only enable Shenandoah on supported arches, and only if requested
AC_MSG_CHECKING([if shenandoah can be built]) AC_MSG_CHECKING([if shenandoah can be built])
if HOTSPOT_CHECK_JVM_FEATURE(shenandoahgc); then if HOTSPOT_CHECK_JVM_FEATURE(shenandoahgc); then
if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86" || \ if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86" || test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
# Filter out Shenandoah from user requested features, as it's already in non-minimal set # Filter out Shenandoah from user requested features, as it's already in non-minimal set
if HOTSPOT_CHECK_JVM_VARIANT(minimal); then if HOTSPOT_CHECK_JVM_VARIANT(minimal); then
BASIC_GET_NON_MATCHING_VALUES(JVM_FEATURES, $JVM_FEATURES, shenandoahgc) BASIC_GET_NON_MATCHING_VALUES(JVM_FEATURES, $JVM_FEATURES, shenandoahgc)
@@ -426,7 +425,9 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
# Only enable jvmci on x86_64, sparcv9 and aarch64 # Only enable jvmci on x86_64, sparcv9 and aarch64
if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \ if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
test "x$OPENJDK_TARGET_CPU" = "xsparcv9" || \ test "x$OPENJDK_TARGET_CPU" = "xsparcv9" || \
test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xwindows-aarch64" || \
test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-aarch64" || \
test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xmacosx-aarch64" ; then
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
JVM_FEATURES_jvmci="jvmci" JVM_FEATURES_jvmci="jvmci"
INCLUDE_JVMCI="true" INCLUDE_JVMCI="true"

View File

@@ -79,12 +79,6 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU],
VAR_CPU_BITS=64 VAR_CPU_BITS=64
VAR_CPU_ENDIAN=little VAR_CPU_ENDIAN=little
;; ;;
loongarch64)
VAR_CPU=loongarch64
VAR_CPU_ARCH=loongarch
VAR_CPU_BITS=64
VAR_CPU_ENDIAN=little
;;
m68k) m68k)
VAR_CPU=m68k VAR_CPU=m68k
VAR_CPU_ARCH=m68k VAR_CPU_ARCH=m68k
@@ -133,12 +127,6 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU],
VAR_CPU_BITS=64 VAR_CPU_BITS=64
VAR_CPU_ENDIAN=little VAR_CPU_ENDIAN=little
;; ;;
riscv64)
VAR_CPU=riscv64
VAR_CPU_ARCH=riscv
VAR_CPU_BITS=64
VAR_CPU_ENDIAN=little
;;
s390) s390)
VAR_CPU=s390 VAR_CPU=s390
VAR_CPU_ARCH=s390 VAR_CPU_ARCH=s390
@@ -535,8 +523,6 @@ AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS_HELPER],
HOTSPOT_$1_CPU_DEFINE=S390 HOTSPOT_$1_CPU_DEFINE=S390
elif test "x$OPENJDK_$1_CPU" = xs390x; then elif test "x$OPENJDK_$1_CPU" = xs390x; then
HOTSPOT_$1_CPU_DEFINE=S390 HOTSPOT_$1_CPU_DEFINE=S390
elif test "x$OPENJDK_$1_CPU" = xriscv64; then
HOTSPOT_$1_CPU_DEFINE=RISCV
elif test "x$OPENJDK_$1_CPU" != x; then elif test "x$OPENJDK_$1_CPU" != x; then
HOTSPOT_$1_CPU_DEFINE=$(echo $OPENJDK_$1_CPU | tr a-z A-Z) HOTSPOT_$1_CPU_DEFINE=$(echo $OPENJDK_$1_CPU | tr a-z A-Z)
fi fi

View File

@@ -46,9 +46,6 @@ COMMA:=,
# What make to use for main processing, after bootstrapping top-level Makefile. # What make to use for main processing, after bootstrapping top-level Makefile.
MAKE := @MAKE@ MAKE := @MAKE@
# Make sure all shell commands are executed with the C locale
export LC_ALL := C
# The default make arguments # The default make arguments
MAKE_ARGS = $(MAKE_LOG_FLAGS) -r -R -I $(TOPDIR)/make/common SPEC=$(SPEC) \ MAKE_ARGS = $(MAKE_LOG_FLAGS) -r -R -I $(TOPDIR)/make/common SPEC=$(SPEC) \
MAKE_LOG_FLAGS="$(MAKE_LOG_FLAGS)" $(MAKE_LOG_VARS) MAKE_LOG_FLAGS="$(MAKE_LOG_FLAGS)" $(MAKE_LOG_VARS)
@@ -511,6 +508,11 @@ LDCXX:=@FIXPATH@ @LDCXX@
LIBCXX:=@LIBCXX@ LIBCXX:=@LIBCXX@
# Compiler and linker flags used when building native tests # Compiler and linker flags used when building native tests
CFLAGS_TESTLIB:=@CFLAGS_TESTLIB@
CXXFLAGS_TESTLIB:=@CXXFLAGS_TESTLIB@
CFLAGS_TESTEXE:=@CFLAGS_TESTEXE@
CXXFLAGS_TESTEXE:=@CXXFLAGS_TESTEXE@
LDFLAGS_TESTLIB:=@LDFLAGS_TESTLIB@
LDFLAGS_TESTEXE:=@LDFLAGS_TESTEXE@ LDFLAGS_TESTEXE:=@LDFLAGS_TESTEXE@
# BUILD_CC/BUILD_LD is a compiler/linker that generates code that is runnable on the # BUILD_CC/BUILD_LD is a compiler/linker that generates code that is runnable on the

View File

@@ -1,5 +1,5 @@
# #
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@@ -229,7 +229,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETERMINE_TOOLCHAIN_TYPE],
if test "x$OPENJDK_TARGET_OS" = xmacosx; then if test "x$OPENJDK_TARGET_OS" = xmacosx; then
if test -n "$XCODEBUILD"; then if test -n "$XCODEBUILD"; then
# On Mac OS X, default toolchain to clang after Xcode 5 # On Mac OS X, default toolchain to clang after Xcode 5
XCODE_VERSION_OUTPUT=`"$XCODEBUILD" -version | $HEAD -n 1` XCODE_VERSION_OUTPUT=`"$XCODEBUILD" -version 2>&1 | $HEAD -n 1`
$ECHO "$XCODE_VERSION_OUTPUT" | $GREP "Xcode " > /dev/null $ECHO "$XCODE_VERSION_OUTPUT" | $GREP "Xcode " > /dev/null
if test $? -ne 0; then if test $? -ne 0; then
AC_MSG_ERROR([Failed to determine Xcode version.]) AC_MSG_ERROR([Failed to determine Xcode version.])

View File

@@ -577,8 +577,8 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
else else
CYGWIN_VC_TOOLS_REDIST_DIR="$VCToolsRedistDir" CYGWIN_VC_TOOLS_REDIST_DIR="$VCToolsRedistDir"
BASIC_FIXUP_PATH(CYGWIN_VC_TOOLS_REDIST_DIR) BASIC_FIXUP_PATH(CYGWIN_VC_TOOLS_REDIST_DIR)
# Probe: Using well-known location from VS 2017 and VS 2019 # Probe: Using well-known location from VS 2017
POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_TOOLS_REDIST_DIR/$vs_target_cpu/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`" POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/$vs_target_cpu/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
fi fi
# In case any of the above finds more than one file, loop over them. # In case any of the above finds more than one file, loop over them.
for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do

View File

@@ -28,12 +28,12 @@
DEFAULT_VERSION_FEATURE=11 DEFAULT_VERSION_FEATURE=11
DEFAULT_VERSION_INTERIM=0 DEFAULT_VERSION_INTERIM=0
DEFAULT_VERSION_UPDATE=15 DEFAULT_VERSION_UPDATE=13
DEFAULT_VERSION_PATCH=0 DEFAULT_VERSION_PATCH=0
DEFAULT_VERSION_EXTRA1=0 DEFAULT_VERSION_EXTRA1=0
DEFAULT_VERSION_EXTRA2=0 DEFAULT_VERSION_EXTRA2=0
DEFAULT_VERSION_EXTRA3=0 DEFAULT_VERSION_EXTRA3=0
DEFAULT_VERSION_DATE=2022-04-19 DEFAULT_VERSION_DATE=2021-10-19
DEFAULT_VERSION_CLASSFILE_MAJOR=55 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`" DEFAULT_VERSION_CLASSFILE_MAJOR=55 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
DEFAULT_VERSION_CLASSFILE_MINOR=0 DEFAULT_VERSION_CLASSFILE_MINOR=0
DEFAULT_ACCEPTABLE_BOOT_VERSIONS="10 11" DEFAULT_ACCEPTABLE_BOOT_VERSIONS="10 11"

View File

@@ -121,7 +121,7 @@ define add_file_to_clean
$1_CLEAN_$$($2_TARGET) := 1 $1_CLEAN_$$($2_TARGET) := 1
$$($1_BIN)$$($1_MODULE_SUBDIR)$$($2_TARGET) : $2 $$($1_BIN)$$($1_MODULE_SUBDIR)$$($2_TARGET) : $2
$(MKDIR) -p $$(@D) $(MKDIR) -p $$(@D)
( $(CAT) $$< && $(ECHO) "" ) \ export LC_ALL=C ; ( $(CAT) $$< && $(ECHO) "" ) \
| $(SED) -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' \ | $(SED) -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' \
-e 's/\([^\\]\)!/\1\\!/g' -e 's/^[ ]*#.*/#/g' \ -e 's/\([^\\]\)!/\1\\!/g' -e 's/^[ ]*#.*/#/g' \
| $(SED) -f "$(TOPDIR)/make/common/support/unicode2x.sed" \ | $(SED) -f "$(TOPDIR)/make/common/support/unicode2x.sed" \

View File

@@ -583,58 +583,40 @@ endef
# foo/bar/baz, /foo/bar -> <empty> # foo/bar/baz, /foo/bar -> <empty>
# #
# The x prefix is used to preserve the presence of the initial slash # The x prefix is used to preserve the presence of the initial slash
# On Windows paths are treated as case-insensitive
# #
# $1 - Path to compare # $1 - Path to compare
# $2 - Other path to compare # $2 - Other path to compare
FindCommonPathPrefix = \ FindCommonPathPrefix = \
$(call DecodeSpace,$(patsubst x%,%,$(subst $(SPACE),/,$(strip \ $(patsubst x%,%,$(subst $(SPACE),/,$(strip \
$(call FindCommonPathPrefixHelper1, \ $(call FindCommonPathPrefixHelper, \
$(subst /,$(SPACE),x$(call EncodeSpace,$(strip $1))), \ $(subst /,$(SPACE),x$(strip $1)), $(subst /,$(SPACE),x$(strip $2))) \
$(subst /,$(SPACE),x$(call EncodeSpace,$(strip $2)))) \ )))
))))
FindCommonPathPrefixHelper1 = \ FindCommonPathPrefixHelper = \
$(if $(filter $(OPENJDK_TARGET_OS), windows), \
$(call FindCommonPathPrefixHelper2,$(call uppercase,$1),$(call uppercase,$2),$1), \
$(call FindCommonPathPrefixHelper2,$1,$2,$1))
FindCommonPathPrefixHelper2 = \
$(if $(call equals, $(firstword $1), $(firstword $2)), \ $(if $(call equals, $(firstword $1), $(firstword $2)), \
$(if $(call equals, $(firstword $1),),, \ $(firstword $1) \
$(firstword $3) \ $(call FindCommonPathPrefixHelper, \
$(call FindCommonPathPrefixHelper2, \ $(wordlist 2, $(words $1), $1), $(wordlist 2, $(words $2), $2) \
$(wordlist 2, $(words $1), $1), \
$(wordlist 2, $(words $2), $2), \
$(wordlist 2, $(words $3), $3) \
) \
) \ ) \
) )
# Convert a partial path into as many directory levels of ../, removing
# leading and following /.
# Ex: foo/bar/baz/ -> ../../..
# foo/bar -> ../..
# /foo -> ..
DirToDotDot = \
$(subst $(SPACE),/,$(foreach d, $(subst /,$(SPACE),$1),..))
# Computes the relative path from a directory to a file # Computes the relative path from a directory to a file
# $1 - File to compute the relative path to # $1 - File to compute the relative path to
# $2 - Directory to compute the relative path from # $2 - Directory to compute the relative path from
RelativePath = \ RelativePath = \
$(call DecodeSpace,$(strip $(call RelativePathHelper,$(call EncodeSpace \ $(eval $1_prefix := $(call FindCommonPathPrefix, $1, $2)) \
,$(strip $1)),$(call EncodeSpace \ $(eval $1_dotdots := $(call DirToDotDot, $(patsubst $($(strip $1)_prefix)%, %, $2))) \
,$(strip $2)),$(call EncodeSpace \ $(eval $1_dotdots := $(if $($(strip $1)_dotdots),$($(strip $1)_dotdots),.)) \
,$(call FindCommonPathPrefix,$1,$2))))) $(eval $1_suffix := $(patsubst $($(strip $1)_prefix)/%, %, $1)) \
$($(strip $1)_dotdots)/$($(strip $1)_suffix)
RelativePathHelper = \
$(eval $3_prefix_length := $(words $(subst /,$(SPACE),$3))) \
$(eval $1_words := $(subst /,$(SPACE),$1)) \
$(eval $2_words := $(subst /,$(SPACE),$2)) \
$(if $(call equals,$($3_prefix_length),0),, \
$(eval $1_words := $(wordlist 2,$(words $($1_words)),$(wordlist \
$($3_prefix_length),$(words $($1_words)),$($1_words)))) \
$(eval $2_words := $(wordlist 2,$(words $($2_words)),$(wordlist \
$($3_prefix_length),$(words $($2_words)),$($2_words)))) \
) \
$(eval $1_suffix := $(subst $(SPACE),/,$($1_words))) \
$(eval $2_dotdots := $(subst $(SPACE),/,$(foreach d,$($2_words),..))) \
$(if $($1_suffix), \
$(if $($2_dotdots), $($2_dotdots)/$($1_suffix), $($1_suffix)), \
$(if $($2_dotdots), $($2_dotdots), .))
################################################################################ ################################################################################
# link-file-* works similarly to install-file but creates a symlink instead. # link-file-* works similarly to install-file but creates a symlink instead.

View File

@@ -60,16 +60,14 @@ define SetupTestFilesCompilationBody
ifeq ($$($1_TYPE), LIBRARY) ifeq ($$($1_TYPE), LIBRARY)
$1_PREFIX = lib $1_PREFIX = lib
$1_OUTPUT_SUBDIR := lib $1_OUTPUT_SUBDIR := lib
$1_BASE_CFLAGS := $(CFLAGS_JDKLIB) $1_CFLAGS := $(CFLAGS_TESTLIB)
$1_BASE_CXXFLAGS := $(CXXFLAGS_JDKLIB) $1_LDFLAGS := $(LDFLAGS_TESTLIB) $(call SET_SHARED_LIBRARY_ORIGIN)
$1_LDFLAGS := $(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN)
$1_COMPILATION_TYPE := LIBRARY $1_COMPILATION_TYPE := LIBRARY
else ifeq ($$($1_TYPE), PROGRAM) else ifeq ($$($1_TYPE), PROGRAM)
$1_PREFIX = exe $1_PREFIX = exe
$1_OUTPUT_SUBDIR := bin $1_OUTPUT_SUBDIR := bin
$1_BASE_CFLAGS := $(CFLAGS_JDKEXE) $1_CFLAGS := $(CFLAGS_TESTEXE)
$1_BASE_CXXFLAGS := $(CXXFLAGS_JDKEXE) $1_LDFLAGS := $(LDFLAGS_TESTEXE)
$1_LDFLAGS := $(LDFLAGS_JDKEXE) $(LDFLAGS_TESTEXE)
$1_COMPILATION_TYPE := EXECUTABLE $1_COMPILATION_TYPE := EXECUTABLE
else else
$$(error Unknown type: $$($1_TYPE)) $$(error Unknown type: $$($1_TYPE))
@@ -77,7 +75,7 @@ define SetupTestFilesCompilationBody
# Locate all files with the matching prefix # Locate all files with the matching prefix
$1_FILE_LIST := \ $1_FILE_LIST := \
$$(call FindFiles, $$($1_SOURCE_DIRS), $$($1_PREFIX)*.c $$($1_PREFIX)*.cpp $$($1_PREFIX)*.m) $$(call FindFiles, $$($1_SOURCE_DIRS), $$($1_PREFIX)*.c $$($1_PREFIX)*.m)
$1_EXCLUDE_PATTERN := $$(addprefix %/, $$($1_EXCLUDE)) $1_EXCLUDE_PATTERN := $$(addprefix %/, $$($1_EXCLUDE))
$1_FILTERED_FILE_LIST := $$(filter-out $$($1_EXCLUDE_PATTERN), $$($1_FILE_LIST)) $1_FILTERED_FILE_LIST := $$(filter-out $$($1_EXCLUDE_PATTERN), $$($1_FILE_LIST))
@@ -93,13 +91,9 @@ define SetupTestFilesCompilationBody
INCLUDE_FILES := $$(notdir $$(file)), \ INCLUDE_FILES := $$(notdir $$(file)), \
OBJECT_DIR := $$($1_OUTPUT_DIR)/support/$$(name), \ OBJECT_DIR := $$($1_OUTPUT_DIR)/support/$$(name), \
OUTPUT_DIR := $$($1_OUTPUT_DIR)/$$($1_OUTPUT_SUBDIR), \ OUTPUT_DIR := $$($1_OUTPUT_DIR)/$$($1_OUTPUT_SUBDIR), \
CFLAGS := $$($1_BASE_CFLAGS) $$($1_CFLAGS) $$($1_CFLAGS_$$(name)), \ CFLAGS := $$($1_CFLAGS) $$($1_CFLAGS_$$(name)), \
CXXFLAGS := $$($1_BASE_CXXFLAGS) $$($1_CFLAGS) $$($1_CFLAGS_$$(name)), \
LDFLAGS := $$($1_LDFLAGS) $$($1_LDFLAGS_$$(name)), \ LDFLAGS := $$($1_LDFLAGS) $$($1_LDFLAGS_$$(name)), \
DISABLED_WARNINGS_CXX_solstudio := wvarhidenmem, \
DISABLED_WARNINGS_CXX_gcc := format, \
LIBS := $$($1_LIBS_$$(name)), \ LIBS := $$($1_LIBS_$$(name)), \
TOOLCHAIN := $(if $$(filter %.cpp, $$(file)), TOOLCHAIN_LINK_CXX, TOOLCHAIN_DEFAULT), \
OPTIMIZATION := $$(if $$($1_OPTIMIZATION_$$(name)),$$($1_OPTIMIZATION_$$(name)),LOW), \ OPTIMIZATION := $$(if $$($1_OPTIMIZATION_$$(name)),$$($1_OPTIMIZATION_$$(name)),LOW), \
COPY_DEBUG_SYMBOLS := false, \ COPY_DEBUG_SYMBOLS := false, \
STRIP_SYMBOLS := false, \ STRIP_SYMBOLS := false, \

View File

@@ -242,7 +242,7 @@ var getJibProfilesCommon = function (input, data) {
dependencies: ["boot_jdk", "gnumake", "jtreg", "jib", "autoconf"], dependencies: ["boot_jdk", "gnumake", "jtreg", "jib", "autoconf"],
default_make_targets: ["product-bundles", "test-bundles", "static-libs-bundles"], default_make_targets: ["product-bundles", "test-bundles", "static-libs-bundles"],
configure_args: concat(["--enable-jtreg-failure-handler"], configure_args: concat(["--enable-jtreg-failure-handler"],
"--with-exclude-translations=es,fr,it,ko,pt_BR,sv,ca,tr,cs,sk,ja_JP_A,ja_JP_HA,ja_JP_HI,ja_JP_I,zh_TW,zh_HK", "--with-exclude-translations=de,es,fr,it,ko,pt_BR,sv,ca,tr,cs,sk,ja_JP_A,ja_JP_HA,ja_JP_HI,ja_JP_I,zh_TW,zh_HK",
"--disable-manpages", "--disable-manpages",
versionArgs(input, common)) versionArgs(input, common))
}; };
@@ -854,7 +854,7 @@ var getJibProfilesDependencies = function (input, common) {
var devkit_platform_revisions = { var devkit_platform_revisions = {
linux_x64: "gcc7.3.0-OEL6.4+1.1", linux_x64: "gcc7.3.0-OEL6.4+1.1",
macosx_x64: "Xcode11.3.1-MacOSX10.15+1.0", macosx_x64: "Xcode9.4-MacOSX10.13+1.0",
solaris_x64: "SS12u4-Solaris11u1+1.0", solaris_x64: "SS12u4-Solaris11u1+1.0",
solaris_sparcv9: "SS12u4-Solaris11u1+1.1", solaris_sparcv9: "SS12u4-Solaris11u1+1.1",
windows_x64: "VS2017-15.9.16+1.0", windows_x64: "VS2017-15.9.16+1.0",

View File

@@ -0,0 +1,749 @@
#! java BlacklistedCertsConverter SHA-256
# The line above must be the first line of this file. Do not
# remove it.
// Subject: CN=Digisign Server ID (Enrich),
// OU=457608-K,
// O=Digicert Sdn. Bhd.,
// C=MY
// Issuer: CN=GTE CyberTrust Global Root,
// OU=GTE CyberTrust Solutions, Inc.,
// O=GTE Corporation,
// C=US
// Serial: 120001705 (07:27:14:a9)
-----BEGIN CERTIFICATE-----
MIIDyzCCAzSgAwIBAgIEBycUqTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
b2JhbCBSb290MB4XDTA3MDcxNzE1MTc0OFoXDTEyMDcxNzE1MTY1NFowYzELMAkG
A1UEBhMCTVkxGzAZBgNVBAoTEkRpZ2ljZXJ0IFNkbi4gQmhkLjERMA8GA1UECxMI
NDU3NjA4LUsxJDAiBgNVBAMTG0RpZ2lzaWduIFNlcnZlciBJRCAoRW5yaWNoKTCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArahkS02Hx4RZufuQRqCmicDx/tXa
VII3DZkrRSYK6Fawf8qo9I5HhAGCKeOzarWR8/uVhbxyqGToCkCcxfRxrnt7agfq
kBRPjYmvlKuyBtQCanuYH1m5Os1U+iDfsioK6bjdaZDAKdNO0JftZszFGUkGf/pe
LHx7hRsyQt97lSUCAwEAAaOCAXgwggF0MBIGA1UdEwEB/wQIMAYBAf8CAQAwXAYD
VR0gBFUwUzBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcCARYtaHR0cDovL2N5YmVy
dHJ1c3Qub21uaXJvb3QuY29tL3JlcG9zaXRvcnkuY2ZtMAcGBWCDSgEBMA4GA1Ud
DwEB/wQEAwIB5jCBiQYDVR0jBIGBMH+heaR3MHUxCzAJBgNVBAYTAlVTMRgwFgYD
VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
b3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0
LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYDVR0OBBYEFMYWk04WF+wW
royUdvOGbcV0boR3MA0GCSqGSIb3DQEBBQUAA4GBAHYAe6Z4K2Ydjl42xqSOBfIj
knyTZ9P0wAp9iy3Z6tVvGvPhSilaIoRNUC9LDPL/hcJ7VdREgr5trGeOvLQfkpxR
gBoU9m6rYYgLrRx/90tQUdZlG6ZHcRVesHHzNRTyN71jyNXwk1o0X9g96F33xR7A
5c8fhiSpPAdmzcHSNmNZ
-----END CERTIFICATE-----
// Subject: CN=Digisign Server ID - (Enrich),
// OU=457608-K,
// O=Digicert Sdn. Bhd.,
// C=MY
// Issuer: CN=Entrust.net Certification Authority (2048)
// OU=(c) 1999 Entrust.net Limited,
// OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.),
// O=Entrust.net
// Serial: 1184644297 (4c:0e:63:6a)
-----BEGIN CERTIFICATE-----
MIIEzjCCA7agAwIBAgIETA5jajANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw0xMDA3MTYxNzIzMzdaFw0xNTA3
MTYxNzUzMzdaMGUxCzAJBgNVBAYTAk1ZMRswGQYDVQQKExJEaWdpY2VydCBTZG4u
IEJoZC4xETAPBgNVBAsTCDQ1NzYwOC1LMSYwJAYDVQQDEx1EaWdpc2lnbiBTZXJ2
ZXIgSUQgLSAoRW5yaWNoKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AMWJ5PQNBkCSWccaszXRDkwqM/n4r8qef+65p21g9FTob9Wb8xtjMQRoctE0Foy0
FyyX3nPF2JAVoBor9cuzSIZE8B2ITM5BQhrv9Qze/kDaOSD3BlU6ap1GwdJvpbLI
Vz4po5zg6YV3ZuiYpyR+vsBZIOVEb7ZX2L7OwmV3WMZhQdF0BMh/SULFcqlyFu6M
3RJdtErU0a9Qt9iqdXZorT5dqjBtYairEFs+E78z4K9EnTgiW+9ML6ZxJhUmyiiM
2fqOjqmiFDXimySItPR/hZ2DTwehthSQNsQ0HI0mYW0Tb3i+6I8nx0uElqOGaAwj
vgvsjJQAqQSKE5D334VsDLECAwEAAaOCATQwggEwMA4GA1UdDwEB/wQEAwIBBjAS
BgNVHRMBAf8ECDAGAQH/AgEAMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEFBQcD
AgYIKwYBBQUHAwQwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8v
b2NzcC5lbnRydXN0Lm5ldDBEBgNVHSAEPTA7MDkGBWCDSgEBMDAwLgYIKwYBBQUH
AgEWImh0dHA6Ly93d3cuZGlnaWNlcnQuY29tLm15L2Nwcy5odG0wMgYDVR0fBCsw
KTAnoCWgI4YhaHR0cDovL2NybC5lbnRydXN0Lm5ldC8yMDQ4Y2EuY3JsMBEGA1Ud
DgQKBAhMTswlKAMpgTAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDAN
BgkqhkiG9w0BAQUFAAOCAQEAl0zvSjpJrHL8MCBrtClbp8WVBJD5MtXChWreA6E3
+YkAsFqsVX7bQzX/yQH4Ub7MJsrIaqTEVD4mHucMo82XZ5TdpkLrXM2POXlrM3kh
Bnn6gkQVmczBtznTRmJ8snDrb84gqj4Zt+l0gpy0pUtNYQA35IfS8hQ6ZHy4qXth
4JMi59WfPkfmNnagU9gAAzoPtTP+lsrT0oI6Lt3XSOHkp2nMHOmZSufKcEXXCwcO
mnUb0C+Sb/akB8O9HEumhLZ9qJqp0qcp8QtXaR6XVybsK0Os1EWDBQDp4/BGQAf6
6rFRc5Mcpd1TETfIKqcVJx20qsx/qjEw/LhFn0gJ7RDixQ==
-----END CERTIFICATE-----
// Subject: CN=Java Media APIs,
// OU=Java Signed Extensions,
// OU=Corporate Object Signing,
// O=Sun Microsystems Inc
// Issuer: CN=Object Signing CA,
// OU=Class 2 OnSite Subscriber CA,
// OU=VeriSign Trust Network,
// O=Sun Microsystems Inc
// Serial: 6a:8b:99:91:37:59:4f:89:53:e2:97:18:9f:19:1e:4e
-----BEGIN CERTIFICATE-----
MIIFdzCCBF+gAwIBAgIQaouZkTdZT4lT4pcYnxkeTjANBgkqhkiG9w0BAQUFADCB
gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDUxMjAw
MDAwMFoXDTEyMDUxMTIzNTk1OVowfTEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt
cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE
CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEYMBYGA1UEAxQPSmF2YSBNZWRpYSBB
UElzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl5blzoKTVE8y4Hpz
q6E15RZz1bF5HnYEyYqgHkZXnAKedmYCoMzm1XK8s+gQWShLEvGEAvs5yqarx9gE
nnC21N28aEZgIJMa2/arKxCUkS4pxdGPYGexL9UzSRkUpoBShCZKEGdmX7gfJE2K
/sd9MFvGV5/yZtWXrADzvm0Kd/9mg1KRv1gfrZIq0TJbupoXPYYqb73AkI9eT2ZD
q9MdwD4E5+oojsDFXt8GU/D00fUhtXpYwuplU7D667WHYdJhIah0ST6JywyqcLXG
XSuFTXOgITT2idSHluZVmx3dqJ72u9kPkO4JdJTMDfaK8zgNLaRkiU8Qcj+qhLYH
ytaqcwIDAQABo4IB6jCCAeYwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCB4AwfwYD
VR0fBHgwdjB0oHKgcIZuaHR0cDovL29uc2l0ZWNybC52ZXJpc2lnbi5jb20vU3Vu
TWljcm9zeXN0ZW1zSW5jQ29ycG9yYXRlT2JqZWN0U2lnbmluZ0phdmFTaWduZWRF
eHRlbnNpb25zQ2xhc3NCL0xhdGVzdENSTC5jcmwwHwYDVR0jBBgwFoAUs0crgn5T
tHPKuLsZt76BTQeVx+0wHQYDVR0OBBYEFKS32mVx0gNWTeS4ProHEaeSpvvIMDsG
CCsGAQUFBwEBBC8wLTArBggrBgEFBQcwAYYfaHR0cDovL29uc2l0ZS1vY3NwLnZl
cmlzaWduLmNvbTCBtQYDVR0gBIGtMIGqMDkGC2CGSAGG+EUBBxcCMCowKAYIKwYB
BQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwbQYLYIZIAYb3AIN9
nD8wXjAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuc3VuLmNvbS9wa2kvY3BzMDMG
CCsGAQUFBwICMCcaJVZhbGlkYXRlZCBGb3IgU3VuIEJ1c2luZXNzIE9wZXJhdGlv
bnMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcNAQEFBQADggEBAAe6BO4W
3TSNWfezyelJs6kE3HfulT6Bdyz4UUoh9ykXcV8nRwT+kh25I5MdyG2GfkJoADPR
VhC5DYo13UFpIsTNVjq+hGYe2hML93bN7ad9SxCCyjHUo3yMz2qgBbHZI3VA9ZHA
aWM4Tx0saMwbcnVvlbuGh+PXvStfypJqYT6lzcdFfjNVX4FI/QQNGhBswMY51tC8
GTBCL2qhJon0gSCU4zaawDOf7+XxJWirLamYL1Aal1/h2z2sFrvA/1ftxtU3kZ6I
7De8DyoHeZg7pYGdrj7g+lPhCga/WvEhN152I+aP08YbFcJHYmK05ngl/Ye4c6Bd
cdrdfbw6QzEUIYY=
-----END CERTIFICATE-----
// Subject: CN=JavaFX 1.0 Runtime,
// OU=Java Signed Extensions,
// OU=Corporate Object Signing,
// O=Sun Microsystems Inc
// Issuer: CN=Object Signing CA,
// OU=Class 2 OnSite Subscriber CA,
// OU=VeriSign Trust Network,
// O=Sun Microsystems Inc
// Serial: 55:c0:e6:44:59:59:79:9e:d9:26:f1:b0:4a:1e:f0:27
-----BEGIN CERTIFICATE-----
MIIFezCCBGOgAwIBAgIQVcDmRFlZeZ7ZJvGwSh7wJzANBgkqhkiG9w0BAQUFADCB
gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA4MTAwOTAw
MDAwMFoXDTExMTAwOTIzNTk1OVowgYAxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl
bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxHzAdBgNV
BAsUFkphdmEgU2lnbmVkIEV4dGVuc2lvbnMxGzAZBgNVBAMUEkphdmFGWCAxLjAg
UnVudGltZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+WDc6+bu+4
tmAcS/lBtUc02WOt9QZpVsXg9cG2pu/8bUtmDELa8iiYBVFpIs8DU58HLrGQtCUY
SIAGOVPsOJoN29UKCDWfY9j5JeVhfhMGqk9DwrWhzgsjy4cpZ1pIp+k/fJ8zT8Ul
aYLpow1vg3UNddsmwz02tN7cOrMw9WYIG4CRYnY1OrtJSfe2pYzheC4zyvR+aiVl
nang2OtqikSQsNFOFHsLOJFxngy9LrO8evDSu25VTKI6zlWU6/bMeqtztJPN0VOn
NyUrJZvkxZ207Jg0T693BGSxNC1n+ihztXogql8950M/pEuUbDjylv5FFvlp6DSB
dDT2MkutmyMCAwEAAaOCAeowggHmMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeA
MH8GA1UdHwR4MHYwdKByoHCGbmh0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29t
L1N1bk1pY3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdKYXZhU2ln
bmVkRXh0ZW5zaW9uc0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaAFLNH
K4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBTjgufVi3XJ3gx1ewsA6Rr7BR4Z
zjA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUtb2Nz
cC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAqMCgG
CCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CGSAGG
9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtpL2Nw
czAzBggrBgEFBQcCAjAnGiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBPcGVy
YXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IBAQAB
YVJTTVe7rzyTO4jc3zajErOT/COkdQTfNo0eIX1QbNynFieJvwY/jRzUZwjktIFR
2p4JtbpHGAtKtjOAOTieQ8xdDOoC1djzpE7/AbMvuvlTavtUKT+F7tPdhfXgWXJV
6Wbt8jryKyk3zZGiEhauIwZUkfjRkEtffEmZWLUd8c8rURJjfC/XHH2oyurscoxc
CjX29c9ynxSiS/VvQp1an0HvErGh69N48wj7cj8mtZ1yHzd2XCzSSR1OfTPfk0Pt
yg51p7yJaFiH21PTZegEL6zyVNOYBTKwwIi2OzpwYalD3uvK6e3OKDrfFCOxu17u
4PveESbrdyrmvLe7IVez
-----END CERTIFICATE-----
// Subject: CN=JavaFX Runtime,
// OU=Java Signed Extensions,
// OU=Corporate Object Signing,
// O=Sun Microsystems Inc
// Issuer: CN=Object Signing CA,
// OU=Class 2 OnSite Subscriber CA,
// OU=VeriSign Trust Network,
// O=Sun Microsystems Inc
// Serial: 47:f4:55:f1:da:4a:5e:f9:e3:f7:a8:03:62:17:c0:ff
-----BEGIN CERTIFICATE-----
MIIFdjCCBF6gAwIBAgIQR/RV8dpKXvnj96gDYhfA/zANBgkqhkiG9w0BAQUFADCB
gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDEyOTAw
MDAwMFoXDTEyMDEyOTIzNTk1OVowfDEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt
cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE
CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEXMBUGA1UEAxQOSmF2YUZYIFJ1bnRp
bWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIzd0fAk8mI9ONc6RJ
aGieioK2FLdXEwj8zL3vdGDVmBwyR1zwYkaOIFFgF9IW/8qc4iAYA5sGUY+0g8q3
5DuYAxfTzBB5KdaYvbuq6GGnoHIWmTirXY+1friFp8lyXSvtuEaGB1VHaBoZchEg
k+UgeVDA43dHwcT1Ov3DePczJRUes8T/QHzLX+BxUDG43vjyncCEO/AjqLZxXEz2
xrNbKLcH3lGMJK7hdbfssUfF5BjC38Hn71HauYlA43b2no+2y0Sjulwzez2YPbDC
0GLR3TnKtA8dqOrnl5t3DniDbfOBNtBE3VOydJO0XW57Ng1HRXD023nm9ECPY2xp
0N/pAgMBAAGjggHqMIIB5jAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDB/BgNV
HR8EeDB2MHSgcqBwhm5odHRwOi8vb25zaXRlY3JsLnZlcmlzaWduLmNvbS9TdW5N
aWNyb3N5c3RlbXNJbmNDb3Jwb3JhdGVPYmplY3RTaWduaW5nSmF2YVNpZ25lZEV4
dGVuc2lvbnNDbGFzc0IvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBSzRyuCflO0
c8q4uxm3voFNB5XH7TAdBgNVHQ4EFgQUvOdd0cKPj+Yik/iOBwTdphh5A+gwOwYI
KwYBBQUHAQEELzAtMCsGCCsGAQUFBzABhh9odHRwOi8vb25zaXRlLW9jc3AudmVy
aXNpZ24uY29tMIG1BgNVHSAEga0wgaowOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEF
BQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTBtBgtghkgBhvcAg32c
PzBeMCcGCCsGAQUFBwIBFhtodHRwczovL3d3dy5zdW4uY29tL3BraS9jcHMwMwYI
KwYBBQUHAgIwJxolVmFsaWRhdGVkIEZvciBTdW4gQnVzaW5lc3MgT3BlcmF0aW9u
czATBgNVHSUEDDAKBggrBgEFBQcDAzANBgkqhkiG9w0BAQUFAAOCAQEAbGcf2NjL
AI93HG6ny2BbepaZA1a8xa/R6uUc7xV+Qw6MgLwFD4Q4i6LWUztQDvg9l68MM2/i
Y9LEi1KM4lcNbK5+D+t9x98wXBiuojXhVdp5ZmC03EyEBbriopdBsmXVLDSu/Y3+
zowOO5xwpMK3dbgsSDs2Vt0UosD3FTcRaD3GNfOhXMp+o1grHNiXF9YgkmdQbPPZ
DQ2KBhFPCRJXBGvyKOqno/DTg0sQ3crGH/C4/4t7mnQXWldZotmJUZ0ONc9oD+Q1
JAaguUKqIwn9yZ093ie+JWHbYNid9IIIPXYgtRxmf9a376WBhqhu56uJftBJ7x9g
eQ7Lot6CSWCiFw==
-----END CERTIFICATE-----
// Subject: CN=Solaris INTERNAL DEVELOPMENT USE ONLY,
// OU=Solaris Cryptographic Framework,
// OU=Corporate Object Signing,
// O=Sun Microsystems Inc
// Issuer: CN=Object Signing CA,
// OU=Class 2 OnSite Subscriber CA,
// OU=VeriSign Trust Network,
// O=Sun Microsystems Inc
// Serial: 77:29:77:52:6a:19:7b:9a:a6:a2:c7:99:a0:e1:cd:8c
-----BEGIN CERTIFICATE-----
MIIFHjCCBAagAwIBAgIQdyl3UmoZe5qmoseZoOHNjDANBgkqhkiG9w0BAQUFADCB
gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA3MDEwNDAw
MDAwMFoXDTEwMDEwMzIzNTk1OVowgZwxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl
bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxKDAmBgNV
BAsUH1NvbGFyaXMgQ3J5cHRvZ3JhcGhpYyBGcmFtZXdvcmsxLjAsBgNVBAMUJVNv
bGFyaXMgSU5URVJOQUwgREVWRUxPUE1FTlQgVVNFIE9OTFkwgZ8wDQYJKoZIhvcN
AQEBBQADgY0AMIGJAoGBALbNU4hf3mD5ArDI9pjgioAyvV3bjMPRQdCZniIeGJBp
odFlSEH+Mh64W1DsY8coeZ7FvvGJkx9IpTMJW9k8w1oJK9UNqHyAQfaYjQyXi3xQ
LJp62EvYdGfDlwOZejEcR/MbzZG+GOPMMvQj5+xyFDvLXNGfQNTnxw2qnBgCJXjj
AgMBAAGjggH1MIIB8TAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDCBiQYDVR0f
BIGBMH8wfaB7oHmGd2h0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29tL1N1bk1p
Y3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdTb2xhcmlzQ3J5cHRv
Z3JhcGhpY0ZyYW1ld29ya0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaA
FLNHK4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBRpfiGYkehTnsIzuN2H6AFb
VCZG8jA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUt
b2NzcC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAq
MCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CG
SAGG9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtp
L2NwczAzBggrBgEFBQcCAjAnFiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBP
cGVyYXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IB
AQCG5soy3LFHTFbA8/5SzDRhQoJkHUnOP0t3b6nvX6vZYRp649fje7TQOPRm1pFd
CZ17J+tggdZwgzTqY4aYpJ00jZaK6pV37q/vgFC/ia6jDs8Q+ly9cEcadBZ5loYg
cmxp9p57W2MNWx8VA8oFdNtKfF0jUNXbLNtvwGHmgR6YcwLrGN1b6/9Lt9bO3ODl
FO+ZDwkfQz5ClUVrTx2dGBvKRYFqSG5S8JAfsgYhPvcacUQkA7ExyKvfRXLWVrce
ZiPpcElbx+819H2sAPvVvparVeAruZGMAtejHZp9NFoowKen5drJp9VxePS4eM49
3DepB6lKRrNRw66LNQol4ZBz
-----END CERTIFICATE-----
// Subject: EMAILADDRESS=info@diginotar.nl, CN=DigiNotar Cyber CA,
// O=DigiNotar, C=NL
// Issuer: CN=GTE CyberTrust Global Root,
// OU=GTE CyberTrust Solutions, Inc.,
// O=GTE Corporation,
// C=US
// Serial: 120000525 (07:27:10:0D)
-----BEGIN CERTIFICATE-----
MIIFWjCCBMOgAwIBAgIEBycQDTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
b2JhbCBSb290MB4XDTA2MTAwNDEwNTQxMVoXDTExMTAwNDEwNTMxMVowYDELMAkG
A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy
IEN5YmVyIENBMSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIw
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANLOFQotqF6EZ639vu9Gx8i5z3P8
9DS5+SxD52ATPXrjss87Z2yQrcC5P4RS8DVC3HTcKDu9UrSnrHJFF8bwieu0qiXy
XUte0dmHutZ9fPXOMp8QM8WxSrtekTHC0OlBwpFkfglBO9uLCDdqqspS3rU5HsCI
A6U/i5kTYUO1m4Kz7iBvz6FEouova0CfjytXraFTwoUiaZ2gP1HfC0GRDaXhqKpc
SQhdvd5wQbEPyWNr0380dAIvNFp4dRxoeoFnivPaQPBgY/SSINcDpj2jHmfEhBtB
pcmM5r3qSLYFFgizNxJa92E89zhvLpfgb1Y4VNMota0Ubi5LZLUnZbd1JQm2Bz2V
VgIKgmCyc0XgMyZRdJq51FAc9k1bW1JSE1qmf6cO4ehBVGeYjIfVydNsy9NUkgYJ
NEH3gW8/nsl8dVWw58Gzd+jDxAA1lUBwEEoF3iW7n1mlZLxHYL9g43aLE1Xd4XR6
uc8kpmp/3mQiRFhogmoQ+T3lPhu5vfwi9GAEibtVbShV+t6OjRshFNc3izR7Tfay
shDPM7F9HGKZSMsrbHaWVb8ZDR0fu2WqG46ZtcYokOWCLXhQIJr9eS8kf/CJKWn0
fc1zvrPtTsHR7VJej/e4142HrbLZG1ES/1az4a80fVykeIgQnp0DxqWqoiRR90kU
xbHuWUOV36toKDA/AgMBAAGjggGGMIIBgjASBgNVHRMBAf8ECDAGAQH/AgEBMFMG
A1UdIARMMEowSAYJKwYBBAGxPgEAMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93d3cu
cHVibGljLXRydXN0LmNvbS9DUFMvT21uaVJvb3QuaHRtbDAOBgNVHQ8BAf8EBAMC
AQYwgaAGA1UdIwSBmDCBlYAUpgwdn2H/Bxe1vzhG20Mw1Y6wUgaheaR3MHUxCzAJ
BgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdU
RSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVy
VHJ1c3QgR2xvYmFsIFJvb3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93
d3cucHVibGljLXRydXN0LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYD
VR0OBBYEFKv5aN/PSjfXe0WMX3LeQETDZbvCMA0GCSqGSIb3DQEBBQUAA4GBAI9o
a6VbB7pEZg4cqFwwezPkCiYE/O+eGjjWLqEf0JlHwnVkJP2eOyh2uSYoYZEMbSz4
BJ98UAHV42mv7xXSRZskCSpmBU8lgcpdvqrBWSeuM46C9990sFWzjvjnN8huqlZE
9r1TgSOWPbT6MopTZkQloiXGpjwljPDgKAYityZB
-----END CERTIFICATE-----
// Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL
// Issuer: CN=GTE CyberTrust Global Root,
// OU=GTE CyberTrust Solutions, Inc.,
// O=GTE Corporation,
// C=US
// Serial: 120000505 (07:27:0F:F9)
-----BEGIN CERTIFICATE-----
MIIFODCCBKGgAwIBAgIEBycP+TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
b2JhbCBSb290MB4XDTA2MDkyMDA5NDUzMloXDTEzMDkyMDA5NDQwNlowPjELMAkG
A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy
IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o
XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S
tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7
24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp
naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj
9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu
LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU
Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk
vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6
3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt
eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4
iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB
/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC
ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s
MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV
jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv
bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD
VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6
oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw
MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI
hvcNAQEFBQADgYEACcpiD427SuDUejUrBi3RKGG2rAH7g0m8rtQvLYauGYOl1h0T
4he+/jJ06XoUOMqUXvcpAWlxG5Ea/aO7qh3Ke+IW/aGjDvMMX7LhIDGUK16Sdu36
6bUjpr8KOwOpb1JgVM1f6bcvfKIn/UGDdbYN+3gm87FF6TKVKho1IZXFonU=
-----END CERTIFICATE-----
// Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL
// Issuer: CN=GTE CyberTrust Global Root,
// OU=GTE CyberTrust Solutions, Inc.,
// O=GTE Corporation,
// C=US
// Serial: 120000515 (07:27:10:03)
-----BEGIN CERTIFICATE-----
MIIFODCCBKGgAwIBAgIEBycQAzANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
b2JhbCBSb290MB4XDTA2MDkyNzEwNTMzMloXDTExMDkyNzEwNTIzMFowPjELMAkG
A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy
IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o
XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S
tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7
24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp
naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj
9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu
LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU
Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk
vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6
3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt
eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4
iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB
/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC
ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s
MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV
jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv
bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD
VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6
oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw
MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI
hvcNAQEFBQADgYEAWcyGZhizJlRP1jjNupZey+yZG6oMDW4Z11boriMHbYPCndBE
bVh07zmPbZsihOw9w/vm5KbVX5CgxUv4Rhzh/20Faixf3P3bpWg0qgzHVVusNVR/
P50aKkpdK3hp+QLl56e+lWOddSAINIpmcuyDI1hyuzB+GJEASm9tNU/6rs8=
-----END CERTIFICATE-----
// Subject: EMAILADDRESS=info@diginotar.nl,
// CN=DigiNotar Root CA,
// O=DigiNotar, C=NL
// Issuer: CN=Entrust.net Secure Server Certification Authority
// OU=(c) 1999 Entrust.net Limited,
// OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
// O=Entrust.net,
// C=US,
// Serial: 1184644297 (46:9C:3C:C9)
-----BEGIN CERTIFICATE-----
MIIFSDCCBLGgAwIBAgIERpw8yTANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA0
MjYwNTAwMDBaFw0xMzA4MTQyMDEyMzZaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK
EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI
hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt
OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx
hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7
gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D
IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T
BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs
Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8
5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf
DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX
9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e
7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj
ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB
BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF
BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD
VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy
bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G
A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob
BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAI979rBep8tu3TeLunapgsZ0jtXp
GDFjKWSk87dj1jCyYi+q/GyDyZ6ZQZNRP0sF+6twscq05lClWNy3TROMp7QeuoLO
G7Utw3OJaswUtp4YglANMRTHEe3g9ltifUXRH5tSuy7u6yi4LD4WTm5ULP6r/g6l
0CnjXYb0+b1Fmz6U
-----END CERTIFICATE-----
// Subject: EMAILADDRESS=info@diginotar.nl,
// CN=DigiNotar Root CA,
// O=DigiNotar, C=NL
// Issuer: CN=Entrust.net Secure Server Certification Authority
// OU=(c) 1999 Entrust.net Limited,
// OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
// O=Entrust.net,
// C=US,
// Serial: 1184640175 (46:9C:2C:AF)
-----BEGIN CERTIFICATE-----
MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3
MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK
EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI
hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt
OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx
hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7
gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D
IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T
BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs
Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8
5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf
DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX
9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e
7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj
ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB
BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF
BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD
VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy
bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G
A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob
BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh
xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd
ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP
ZFdYf+hthc3m6IcJ
-----END CERTIFICATE-----
// Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2,
// O=DigiNotar B.V.,
// C=NL
// Issuer: CN=Staat der Nederlanden Organisatie CA - G2,
// O=Staat der Nederlanden,
// C=NL
// Serial: 20001983 (01:31:34:bf)
-----BEGIN CERTIFICATE-----
MIIGnDCCBISgAwIBAgIEATE0vzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJO
TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTIwMAYDVQQDDClTdGFh
dCBkZXIgTmVkZXJsYW5kZW4gT3JnYW5pc2F0aWUgQ0EgLSBHMjAeFw0xMDA1MTIw
ODUxMzhaFw0yMDAzMjMwOTUwMDRaMFoxCzAJBgNVBAYTAk5MMRcwFQYDVQQKDA5E
aWdpTm90YXIgQi5WLjEyMDAGA1UEAwwpRGlnaU5vdGFyIFBLSW92ZXJoZWlkIENB
IE9yZ2FuaXNhdGllIC0gRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
AQCxExkPJ+Zs1FWGS9DsiYpFkXisR71HK+T8RetPtCZzWzfTw3/2497Xo/gtaMUI
PkuU1uSHJTZrhLUYdPMoWHMvm2rPvAQe9t7dr/xLqvXbZmIlASWC3vKXWhBu3V2p
IrEEqSNzOvhxrR3PhETrR9Gvbch8KKvH8jd6dF9fxQIUiqNa4xtsAeNdjtlo1vQJ
GzLckbUs9SDrjANtJkm4k8SFXdjSm69WaswFM8ygQp40VUSca6DUEtArVM23iQ3l
9uvo+4UBM096a/GdcjOWDveyhKWlJ8Qn8VFzKXe6Z27+TNy04qGhgS85SY1DOBPO
0KVcwoc6AGdlQiPxNlkKHaNRyLyjlCox3+M88p0aPASw77EKMBNzttfzo0wBdRSF
eMDXijlYhVD6LubFvs+LP6+PNtQlCS3SD6xyk/K/i9RQs/kVUJuZ9RTZ+4uRozIm
JqD43ztggYaDeVsr6xM9KTrBbd29no6H1kquNJcF7hSm9tw4fkrpJFQHPZdoN0Zr
DceoIa8TVOQJavFNRgrJXfubT73e+7dUy7g4nKc5+2otwHuNq6WnV+xKkoozxeEg
XHPYkJIrgNUPhhhpfDlPhIa890xb89W0yqDC8DciynlSH1PmqvOQsDvd8ij9rOvF
BiSgydQvD1j9tZ7sD8+yWdCiBHo4aq5y+73wJWKUCacFCwIDAQABo4IBYTCCAV0w
SAYDVR0gBEEwPzA9BgRVHSAAMDUwMwYIKwYBBQUHAgEWJ2h0dHA6Ly93d3cuZGln
aW5vdGFyLm5sL2Nwcy9wa2lvdmVyaGVpZDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
DwEB/wQEAwIBBjCBhQYDVR0jBH4wfIAUORCLSZJc22ESIM1JnRqO2pxnQLmhXqRc
MFoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4x
KzApBgNVBAMMIlN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENBIC0gRzKCBACY
lvQwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5wa2lvdmVyaGVpZC5ubC9E
b21PcmdhbmlzYXRpZUxhdGVzdENSTC1HMi5jcmwwHQYDVR0OBBYEFLxdlDvZq3sD
JXNhwtst7vyrj2WhMA0GCSqGSIb3DQEBCwUAA4ICAQCP/C1Mt9kt1R+978v0t2gX
dZ1O1ffdnPEqJu2forYcA9VTs+wIzzTi48P0tRYvyMO+19NzqwA2+RpKftZj6V5G
uqW2jhW3oyrYQx3vXcgfgYWzi/f/PPTZ9EYIP5y8HaDZqEzNJVJOCrEg9x/pQ9lU
RoETmsBedGwqmDLq/He7DaWiMZgifnx859qkrey3LhoZcfhIUNpDjyyE3cFAJ+O1
8BVOltT4XOOGKUYr1zsH6zh/yIZXl9PvKjPEF1DVZGlrK2tFXl0vF8paTs/D1zk8
9TufRrmb5w5Jl53W1eMbD+qPAU6aE5RZCgIHSEsaYKt/T+0L2FUNaG9VnGllFULs
wNzdbKzDFs4LHVabpMTE0i7gD+JEJytQaaTcYuiKISlCbMwAOpZ2m+9AwKRed4Qy
bCYqOWauXeO5ubIsaB8empADOfCqs6TMSYsYNOk3yXspx4R8b0QVL+xhWQTJRcui
1lKifH8pktZKxYtCqNT+6tjHhyMY5J16fXNAUpigrm7jBT8FD+Clxm1N7YM3iJzH
89xCmmq21yFJNnfy7xhPxXDZnunetyuL9Lx+KN8NQMmFXK6dxTH/0FwOtah+8Okv
uq+IruW10Vilr5xxpykBkINpN4IFuvwJwQhujHg7wzMCgD9EhQgd31VWCK0shS1d
sQPhrqp0xaTzTro3mHuCuQ==
-----END CERTIFICATE-----
// Subject: CN=DigiNotar PKIoverheid CA Overheid en Bedrijven,
// O=DigiNotar B.V.,
// C=NL
// Issuer: CN=Staat der Nederlanden Overheid CA
// O=Staat der Nederlanden,
// C=NL
// Serial: 20015536 (01:31:69:b0)
-----BEGIN CERTIFICATE-----
MIIEiDCCA3CgAwIBAgIEATFpsDANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO
TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh
dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDcwNzA1MDg0MjA3WhcN
MTUwNzI3MDgzOTQ2WjBfMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy
IEIuVi4xNzA1BgNVBAMTLkRpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp
ZCBlbiBCZWRyaWp2ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDc
vdKnTmoKuzuiheF/AK2+tDBomAfNoHrElM9x+Yo35FPrV3bMi+Zs/u6HVcg+uwQ5
AKeAeKxbT370vbhUuHE7BzFJOZNUfCA7eSuPu2GQfbGs5h+QLp1FAalkLU3DL7nn
UNVOKlyrdnY3Rtd57EKZ96LspIlw3Dgrh6aqJOadkiQbvvb91C8ZF3rmMgeUVAVT
Q+lsvK9Hy7zL/b07RBKB8WtLu+20z6slTxjSzAL8o0+1QjPLWc0J3NNQ/aB2jKx+
ZopC9q0ckvO2+xRG603XLzDgbe5bNr5EdLcgBVeFTegAGaL2DOauocBC36esgl3H
aLcY5olLmmv6znn58yynAgMBAAGjggFQMIIBTDBIBgNVHSAEQTA/MD0GBFUdIAAw
NTAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5kaWdpbm90YXIubmwvY3BzL3BraW92
ZXJoZWlkMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMIGABgNVHSME
eTB3gBQLhtYPd6NosftkCcOIblwEHFfpPaFZpFcwVTELMAkGA1UEBhMCTkwxHjAc
BgNVBAoTFVN0YWF0IGRlciBOZWRlcmxhbmRlbjEmMCQGA1UEAxMdU3RhYXQgZGVy
IE5lZGVybGFuZGVuIFJvb3QgQ0GCBACYmnkwPQYDVR0fBDYwNDAyoDCgLoYsaHR0
cDovL2NybC5wa2lvdmVyaGVpZC5ubC9Eb21PdkxhdGVzdENSTC5jcmwwHQYDVR0O
BBYEFEwIyY128ZjHPt881y91DbF2eZfMMA0GCSqGSIb3DQEBBQUAA4IBAQAMlIca
v03jheLu19hjeQ5Q38aEW9K72fUxCho1l3TfFPoqDz7toOMI9tVOW6+mriXiRWsi
D7dUKH6S3o0UbNEc5W50BJy37zRERd/Jgx0ZH8Apad+J1T/CsFNt5U4X5HNhIxMm
cUP9TFnLw98iqiEr2b+VERqKpOKrp11Lbyn1UtHk0hWxi/7wA8+nfemZhzizDXMU
5HIs4c71rQZIZPrTKbmi2Lv01QulQERDjqC/zlqlUkxk0xcxYczopIro5Ij76eUv
BjMzm5RmZrGrUDqhCYF0U1onuabSJc/Tw6f/ltAv6uAejVLpGBwgCkegllYOQJBR
RKwa/fHuhR/3Qlpl
-----END CERTIFICATE-----
// Subject: CN=DigiNotar PKIoverheid CA Overheid
// O=DigiNotar B.V.,
// C=NL
// Issuer: CN=Staat der Nederlanden Overheid CA
// O=Staat der Nederlanden,
// C=NL
// Serial: 20006006 (01:31:44:76)
-----BEGIN CERTIFICATE-----
MIIEezCCA2OgAwIBAgIEATFEdjANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO
TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh
dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDQwNjI0MDgxOTMyWhcN
MTAwNjIzMDgxNzM2WjBSMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy
IEIuVi4xKjAoBgNVBAMTIURpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp
ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANSlrubta5tlOjVCi/gb
yLCvRqfBjxG8H594VcKHu0WAYc99SPZF9cycj5mw2GyfQvy/WIrGrL4iyNq1gSqR
0QA/mTXKZIaPqzpDhdm+VvrKkmjrbZfaQxgMSs3ChtBsjcP9Lc0X1zXZ4Q8nBe3k
BTp+zehINfmbjoEgXLxsMR5RQ6GxzKjuC04PQpbJQgTIakglKaqYcDDZbEscWgPV
Hgj/2aoHlj6leW/ThHZ+O41jUguEmBLZA3mu3HrCfrHntb5dPt0ihzSx7GtD/SaX
5HBLxnP189YuqMk5iRA95CtiSdKauvon/xRKRLNgG6XAz0ctSoY7xLDdiBVU5kJd
FScCAwEAAaOCAVAwggFMMEgGA1UdIARBMD8wPQYEVR0gADA1MDMGCCsGAQUFBwIB
FidodHRwOi8vd3d3LmRpZ2lub3Rhci5ubC9jcHMvcGtpb3ZlcmhlaWQwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgYAGA1UdIwR5MHeAFAuG1g93o2ix
+2QJw4huXAQcV+k9oVmkVzBVMQswCQYDVQQGEwJOTDEeMBwGA1UEChMVU3RhYXQg
ZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
Um9vdCBDQYIEAJiaeTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnBraW92
ZXJoZWlkLm5sL0RvbU92TGF0ZXN0Q1JMLmNybDAdBgNVHQ4EFgQUvRaYQh2+kdE9
wpcl4CjXWOC1f+IwDQYJKoZIhvcNAQEFBQADggEBAGhQsCWLiaN2EOhPAW+JQP6o
XBOrLv5w6joahzBFVn1BiefzmlMKjibqKYxURRvMAsMkh82/MfL8V0w6ugxl81lu
i42dcxl9cKSVXKMw4bbBzJ2VQI5HTIABwefeNuy/eX6idVwYdt3ajAH7fUA8Q9Cq
vr6H8B+8mwoEqTVTEVlCSsC/EXsokYEUr06PPzRudKjDmijgj7zFaIioZNc8hk7g
ufEgrs/tmcNGylrwRHgCXjCRBt2NHlZ08l7A1AGU8HcHlSbG9Un/2q9kVHUkps0D
gtUaEK+x6jpAu/R8Ojezu/+ZEcwwjI/KOhG+84+ejFmtyEkrUdsAdEdLf/2dKsw=
-----END CERTIFICATE-----
// Subject: EMAILADDRESS=info@diginotar.nl,
// CN=DigiNotar Services 1024 CA
// O=DigiNotar, C=NL
// Issuer: CN=Entrust.net Secure Server Certification Authority,
// OU=(c) 1999 Entrust.net Limited,
// OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
// O=Entrust.net,
// C=US
// Serial: 1184640176 (46:9c:2c:b0)
-----BEGIN CERTIFICATE-----
MIIDzTCCAzagAwIBAgIERpwssDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3
MjYxNTU5MDBaFw0xMzA4MjYxNjI5MDBaMGgxCzAJBgNVBAYTAk5MMRIwEAYDVQQK
EwlEaWdpTm90YXIxIzAhBgNVBAMTGkRpZ2lOb3RhciBTZXJ2aWNlcyAxMDI0IENB
MSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCBnzANBgkqhkiG9w0B
AQEFAAOBjQAwgYkCgYEA2ptNXTz50eKLxsYIIMXZHkjsZlhneWIrQWP0iY1o2q+4
lDaLGSSkoJPSmQ+yrS01Tc0vauH5mxkrvAQafi09UmTN8T5nD4ku6PJPrqYIoYX+
oakJ5sarPkP8r3oDkdqmOaZh7phPGKjTs69mgumfvN1y+QYEvRLZGCTnq5NTi1kC
AwEAAaOCASYwggEiMBIGA1UdEwEB/wQIMAYBAf8CAQAwJwYDVR0lBCAwHgYIKwYB
BQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDBDARBgNVHSAECjAIMAYGBFUdIAAwMwYI
KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0Lm5l
dDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmVudHJ1c3QubmV0L3NlcnZl
cjEuY3JsMB0GA1UdDgQWBBT+3JRJDG/vXH/G8RKZTxZJrfuCZTALBgNVHQ8EBAMC
AQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0BowGQYJKoZIhvZ9B0EA
BAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEFBQADgYEAY3RqN6k/lpxmyFisCcnv
9WWUf6MCxDgxvV0jh+zUVrLJsm7kBQb87PX6iHBZ1O7m3bV6oKNgLwIMq94SXa/w
NUuqikeRGvWFLELHHe+VQ7NeuJWTpdrFKKqtci0xrZlrbP+MISevrZqRK8fdWMNu
B8WfedLHjFW/TMcnXlEWKz4=
-----END CERTIFICATE-----
// Subject: CN=Buster Paper Comercial Ltda,
// O=Buster Paper Comercial Ltda,
// L=S?o Jos? Dos Campos,
// ST=S?o Paulo,
// C=BR
// Issuer: CN=DigiCert Assured ID Code Signing CA-1,
// OU=www.digicert.com,
// O=DigiCert Inc,
// C=US
// Serial: 07:b4:4c:db:ff:fb:78:de:05:f4:26:16:72:a6:73:12
-----BEGIN CERTIFICATE-----
MIIGwzCCBaugAwIBAgIQB7RM2//7eN4F9CYWcqZzEjANBgkqhkiG9w0BAQUFADBv
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv
ZGUgU2lnbmluZyBDQS0xMB4XDTEzMDExNzAwMDAwMFoXDTE0MDEyMjEyMDAwMFow
gY4xCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMR4wHAYDVQQHDBVT
w6NvIEpvc8OpIERvcyBDYW1wb3MxJDAiBgNVBAoTG0J1c3RlciBQYXBlciBDb21l
cmNpYWwgTHRkYTEkMCIGA1UEAxMbQnVzdGVyIFBhcGVyIENvbWVyY2lhbCBMdGRh
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzO0l6jWIpEfO2oUpVHpL
HETj5lzivNb0S9jKHgGJax917czh81PnGTxwxFXd6gLJuy/XFHvmiSi8g8jzlymn
2Ji5zQ3CPaz7nomJokSUDlMVJ2qYWtctw4jrdjuI4qtn+koXXUFkWjkf8h8251I4
tUs7S49HE2Go5owCYP3byajj7fsFAYR/Xb7TdVtndkZsUB/YgOjHovyACjouaNCi
mDiRyQ6zLLjZGiyeD65Yiseuhp5b8/BL5h1p7w76QYMYMVQNAdtDKut2R8MBpuWf
Ny7Eoi0x/gm1p9X5Rcl5aN7K0G4UtTAJKbkuUfXddsyFoM0Nx8uo8SgNQ8Y/X5Jx
BwIDAQABo4IDOTCCAzUwHwYDVR0jBBgwFoAUe2jOKarAF75JeuHlP9an90WPNTIw
HQYDVR0OBBYEFFLZ3n5nt/Eer7n1bvtOqMb1qKO5MA4GA1UdDwEB/wQEAwIHgDAT
BgNVHSUEDDAKBggrBgEFBQcDAzBzBgNVHR8EbDBqMDOgMaAvhi1odHRwOi8vY3Js
My5kaWdpY2VydC5jb20vYXNzdXJlZC1jcy0yMDExYS5jcmwwM6AxoC+GLWh0dHA6
Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9hc3N1cmVkLWNzLTIwMTFhLmNybDCCAcQGA1Ud
IASCAbswggG3MIIBswYJYIZIAYb9bAMBMIIBpDA6BggrBgEFBQcCARYuaHR0cDov
L3d3dy5kaWdpY2VydC5jb20vc3NsLWNwcy1yZXBvc2l0b3J5Lmh0bTCCAWQGCCsG
AQUFBwICMIIBVh6CAVIAQQBuAHkAIAB1AHMAZQAgAG8AZgAgAHQAaABpAHMAIABD
AGUAcgB0AGkAZgBpAGMAYQB0AGUAIABjAG8AbgBzAHQAaQB0AHUAdABlAHMAIABh
AGMAYwBlAHAAdABhAG4AYwBlACAAbwBmACAAdABoAGUAIABEAGkAZwBpAEMAZQBy
AHQAIABDAFAALwBDAFAAUwAgAGEAbgBkACAAdABoAGUAIABSAGUAbAB5AGkAbgBn
ACAAUABhAHIAdAB5ACAAQQBnAHIAZQBlAG0AZQBuAHQAIAB3AGgAaQBjAGgAIABs
AGkAbQBpAHQAIABsAGkAYQBiAGkAbABpAHQAeQAgAGEAbgBkACAAYQByAGUAIABp
AG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGgAZQByAGUAaQBuACAAYgB5ACAAcgBl
AGYAZQByAGUAbgBjAGUALjCBggYIKwYBBQUHAQEEdjB0MCQGCCsGAQUFBzABhhho
dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wTAYIKwYBBQUHMAKGQGh0dHA6Ly9jYWNl
cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENvZGVTaWduaW5nQ0Et
MS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOCAQEAPTTQvpOIikXI
hTLnNbajaFRR5GhQpTzUNgBfF9VYSlNw/wMjpGsrh5RxaJCip52jbehmTgjMRhft
jRYyml44PAVsCcR9uEoDpCZYpI1fHI1R+F8jd1C9rqprbSwwOG4xlg4SmvTHYs6e
gBItQ/1p9XY+Sf4Wv1qOuOFL1qvV/5VyR2zdlOQCmKCeMgxt6a/tHLBDiAA67D44
/vfdoNJl0CU2It0PO60jdCPFNWIRcxL+OSDqAoePeUC7xQ+JsTEIxuUE8+d6w6fc
BV2mYb1flh22t46GLjh4gyo7xw3aL6L0L0jzlTT6IcEw6NIbaPbIKj/npQnHobYj
XMuKLxbh7g==
-----END CERTIFICATE-----
// Subject: CN=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME,
// O=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME,
// L=S?o Paulo,
// ST=S?o Paulo,
// C=BR
// Issuer: CN=DigiCert Assured ID Code Signing CA-1,
// OU=www.digicert.com,
// O=DigiCert Inc,
// C=US
// Serial: 0a:38:9b:95:ee:73:6d:d1:3b:c0:ed:74:3f:d7:4d:2f
-----BEGIN CERTIFICATE-----
MIIG4DCCBcigAwIBAgIQCjible5zbdE7wO10P9dNLzANBgkqhkiG9w0BAQUFADBv
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv
ZGUgU2lnbmluZyBDQS0xMB4XDTEyMTEwOTAwMDAwMFoXDTEzMTExNDEyMDAwMFow
gasxCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMRMwEQYDVQQHDApT
w6NvIFBhdWxvMTgwNgYDVQQKEy9CVVNURVIgQVNTSVNURU5DSUEgVEVDTklDQSBF
TEVUUk9OSUNBIExUREEgLSBNRTE4MDYGA1UEAxMvQlVTVEVSIEFTU0lTVEVOQ0lB
IFRFQ05JQ0EgRUxFVFJPTklDQSBMVERBIC0gTUUwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDAqNeEs5/B2CTXGjTOkUIdu6jV6qulOZwdw4sefHWYj1UR
4z6zPk9kjpUgbnb402RFq88QtfInwddZ/wXn9OxMtDd/3TnC7HrhNS7ga79ZFL2V
JnmzKHum2Yvh0q82QEJ9tHBR2X9VdKpUIH08Zs3k6cWWM1H0YX0cxA/HohhesQJW
kwJ3urOIJiH/HeByDk8a1NS8safcCxk5vxvW4WvCg43iT09LeHY5Aa8abKw8lqVb
0tD5ZSIjdmdj3TT1U37iAHLLRM2DXbxfdbhouUX1c5U1ZHAMA67HwjKiseOiDaHj
NUGbC37C+cgbc9VVM/cURD8WvS0Kj6fQv7F2QtJDAgMBAAGjggM5MIIDNTAfBgNV
HSMEGDAWgBR7aM4pqsAXvkl64eU/1qf3RY81MjAdBgNVHQ4EFgQU88EXKAyDsh30
o9+Gu9a4xUy+FSMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMD
MHMGA1UdHwRsMGowM6AxoC+GLWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9hc3N1
cmVkLWNzLTIwMTFhLmNybDAzoDGgL4YtaHR0cDovL2NybDQuZGlnaWNlcnQuY29t
L2Fzc3VyZWQtY3MtMjAxMWEuY3JsMIIBxAYDVR0gBIIBuzCCAbcwggGzBglghkgB
hv1sAwEwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9z
c2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUHAgIwggFWHoIBUgBBAG4A
eQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQByAHQAaQBmAGkAYwBhAHQA
ZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBjAGUAcAB0AGEAbgBjAGUA
IABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAgAEMAUAAvAEMAUABTACAA
YQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQAGEAcgB0AHkAIABBAGcA
cgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBtAGkAdAAgAGwAaQBhAGIA
aQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBjAG8AcgBwAG8AcgBhAHQA
ZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBlAHIAZQBuAGMAZQAuMIGC
BggrBgEFBQcBAQR2MHQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0
LmNvbTBMBggrBgEFBQcwAoZAaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Rp
Z2lDZXJ0QXNzdXJlZElEQ29kZVNpZ25pbmdDQS0xLmNydDAMBgNVHRMBAf8EAjAA
MA0GCSqGSIb3DQEBBQUAA4IBAQAei1QmiXepje8OIfo/WonD4MIXgpPr2dfRaquQ
A8q63OpTRSveyqdQDCSPpDRF/nvO1Y30yksZvIH1tNBsW5LBdxAKN3lFdBlqBwtE
Q3jHc0KVVYRJ0FBaGE/PJHmRajscdAhYIcMPhTga0u0tDK+wOHEq3993dfl6yHjA
XHU2iW5pnk75ZoE39zALD5eKXT8ZXrET5c3XUFJKWA+XuGmdmyzqo0Au49PanBv9
UlZnabYfqoMArqMS0tGSX4cGgi9/2E+pHG9BX4sFW+ZDumroOA2pxyMWEKjxePEL
zCOfhbsRWdMLYepauaNZOIMZXmFwcrIl0TGMkTAtATz+XmZc
-----END CERTIFICATE-----
// Subject: CN=CLEARESULT CONSULTING INC., OU=Corporate IT,
// O=CLEARESULT CONSULTING INC., L=Austin, ST=TX, C=US
// Issuer: SERIALNUMBER=07969287,
// CN=Go Daddy Secure Certification Authority,
// OU=http://certificates.godaddy.com/repository,
// O="GoDaddy.com, Inc.",
// L=Scottsdale,
// ST=Arizona,
// C=US
// Serial: 2b:73:43:2a:a8:4f:44
-----BEGIN CERTIFICATE-----
MIIFYjCCBEqgAwIBAgIHK3NDKqhPRDANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm
aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5
IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky
ODcwHhcNMTIwMjE1MjEwOTA2WhcNMTQwMjE1MjEwOTA2WjCBjDELMAkGA1UEBgwC
VVMxCzAJBgNVBAgMAlRYMQ8wDQYDVQQHDAZBdXN0aW4xIzAhBgNVBAoMGkNMRUFS
RVNVTFQgQ09OU1VMVElORyBJTkMuMRUwEwYDVQQLDAxDb3Jwb3JhdGUgSVQxIzAh
BgNVBAMMGkNMRUFSRVNVTFQgQ09OU1VMVElORyBJTkMuMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAtIOjCKeAicull+7ZIzt0/4ya3IeXUFlfypqKMLkU
IbKjn0P5uMj6VE3rlbZr44RCegxvdnR6umBh1c0ZXoN3o+yc0JKcKcLiApmJJ277
p7IbLwYDhBXRQNoIJm187IOMRPIxsKN4hL91txn9jGBmW+9zKlJlNhR5R7vjwU2E
jrH/6oqsc9EM2yYpfjlNv6+3jSwAYZCkSWr+27PQOV+YHKmIxtJjX0upFz5FdIrV
9CCX+L2Kji1THOkSgG4QTbYxmEcHqGViWz8hXLeNXjcbEsPuIiAu3hknxRHfUTE/
U0Lh0Ug1e3LrJu+WnxM2SmUY4krsZ22c0yWUW9hzWITIjQIDAQABo4IBhzCCAYMw
DwYDVR0TAQH/BAUwAwEBADATBgNVHSUEDDAKBggrBgEFBQcDAzAOBgNVHQ8BAf8E
BAMCB4AwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nb2RhZGR5LmNvbS9n
ZHM1LTE2LmNybDBTBgNVHSAETDBKMEgGC2CGSAGG/W0BBxcCMDkwNwYIKwYBBQUH
AgEWK2h0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeS8w
gYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZ29kYWRk
eS5jb20vMEoGCCsGAQUFBzAChj5odHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHku
Y29tL3JlcG9zaXRvcnkvZ2RfaW50ZXJtZWRpYXRlLmNydDAfBgNVHSMEGDAWgBT9
rGEyk2xF1uLuhV+auud2mWjM5zAdBgNVHQ4EFgQUDtdeKqeN2QkcbEp1HovFieNB
XiowDQYJKoZIhvcNAQEFBQADggEBAD74Agw5tvi2aBl4/f/s7/VE/BClzDsKMb9K
v9qpeC45ZA/jelxV11HKbQnVF194gDb7D2H9OsAsRUy8HVKbXEcc/8dKvwOqb+BC
2i/EmfjLgmCfezNFtLq8xcPxF3zIRc44vPrK0z4YZsaHdH+yTEJ51p5EMdTqaLaP
4n5m8LX3RfqlQB9dYFe6dUoYZjKm9d/pIRww3VqfOzjl42Edi1w6dWmBVMx1NZuR
DBabJH1vJ9Gd+KwxMCmBZ6pQPl28JDimhJhI2LNqU349uADQVV0HJosddN/ARyyI
LSIQO7BnNVKVG9Iujf33bvPNeg0qNz5qw+rKKq97Pqeum+L5oKU=
-----END CERTIFICATE-----
// Subject: CN=eDellRoot
// Issuer: CN=eDellRoot
// Serial Number:
// 6b:c5:7b:95:18:93:aa:97:4b:62:4a:c0:88:fc:3b:b6
-----BEGIN CERTIFICATE-----
MIIC8zCCAd+gAwIBAgIQa8V7lRiTqpdLYkrAiPw7tjAJBgUrDgMCHQUAMBQxEjAQ
BgNVBAMTCWVEZWxsUm9vdDAeFw0xNTA0MDcxMDIzMjdaFw0zOTEyMzEyMzU5NTla
MBQxEjAQBgNVBAMTCWVEZWxsUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAL3RJg1uzVuEX0Hw4XWGzs6oI9W+o7HZdVdBMMVb4Gzb4uZjCTNjbPx4
b8LNFL1uArUt+5VVMQDsOTY3Lg/Xe/UNukY2b+0llUOzzBYYpbsFcco4n6SsTvDh
Ni5t+kPo7c23ZrYBPmOu82eEJ6cavs/t39u+wFOkXXwvRCiHA/lWyNWNEPh17+bC
EP3q5N+JrV+6Ho3zQPEv5QUJYdmXsMmD2CMQojeQUj68J91P5w5BKjurG0xjivzh
Soie9ym7VRwLFjWScRuw/9XV6CLqTyL5xrqiiDp1uTOuqNj3uxyts9ocbsoJXuxj
5iEYkSM1nvLupEv+lgy9WqzIEFMm1l8CAwEAAaNJMEcwRQYDVR0BBD4wPIAQYA/f
EzPwmaRcZuSaa/VZ1KEWMBQxEjAQBgNVBAMTCWVEZWxsUm9vdIIQa8V7lRiTqpdL
YkrAiPw7tjAJBgUrDgMCHQUAA4IBAQArfdcScsezj8ooJ92UwwnPgg36noOgiUs5
XzPLP4h0JpUYQVKB9hY1WTDwRUfTKGh7oNOowd027a/rVSb/TNeoiJIvMKn4gbvV
CWAiHhO8u2u0RkHCDVsa7e0i4ncpueWsihjn6jBrY8T+7eDYwiFT/F03A8NJ7mK5
lZA8SFd5CTDy3EBUU5UwzXUc5HoIRUxXSPycu3aIBWawg3sCdKiAoikScPAWj0bM
0vmsP/8QSlTOBqO+QFQ6R82BtTvBNU3qbVICV4QObsxib++FAFL56NApPqskg7Vz
LfNIAjKabHUcjbuZkmg6jr4BfYW7+oQDHCsYgADjjKGdKz/8U/fP
-----END CERTIFICATE-----

View File

@@ -1,749 +0,0 @@
#! java BlockedCertsConverter SHA-256
# The line above must be the first line of this file. Do not
# remove it.
// Subject: CN=Digisign Server ID (Enrich),
// OU=457608-K,
// O=Digicert Sdn. Bhd.,
// C=MY
// Issuer: CN=GTE CyberTrust Global Root,
// OU=GTE CyberTrust Solutions, Inc.,
// O=GTE Corporation,
// C=US
// Serial: 120001705 (07:27:14:a9)
-----BEGIN CERTIFICATE-----
MIIDyzCCAzSgAwIBAgIEBycUqTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
b2JhbCBSb290MB4XDTA3MDcxNzE1MTc0OFoXDTEyMDcxNzE1MTY1NFowYzELMAkG
A1UEBhMCTVkxGzAZBgNVBAoTEkRpZ2ljZXJ0IFNkbi4gQmhkLjERMA8GA1UECxMI
NDU3NjA4LUsxJDAiBgNVBAMTG0RpZ2lzaWduIFNlcnZlciBJRCAoRW5yaWNoKTCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArahkS02Hx4RZufuQRqCmicDx/tXa
VII3DZkrRSYK6Fawf8qo9I5HhAGCKeOzarWR8/uVhbxyqGToCkCcxfRxrnt7agfq
kBRPjYmvlKuyBtQCanuYH1m5Os1U+iDfsioK6bjdaZDAKdNO0JftZszFGUkGf/pe
LHx7hRsyQt97lSUCAwEAAaOCAXgwggF0MBIGA1UdEwEB/wQIMAYBAf8CAQAwXAYD
VR0gBFUwUzBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcCARYtaHR0cDovL2N5YmVy
dHJ1c3Qub21uaXJvb3QuY29tL3JlcG9zaXRvcnkuY2ZtMAcGBWCDSgEBMA4GA1Ud
DwEB/wQEAwIB5jCBiQYDVR0jBIGBMH+heaR3MHUxCzAJBgNVBAYTAlVTMRgwFgYD
VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
b3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0
LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYDVR0OBBYEFMYWk04WF+wW
royUdvOGbcV0boR3MA0GCSqGSIb3DQEBBQUAA4GBAHYAe6Z4K2Ydjl42xqSOBfIj
knyTZ9P0wAp9iy3Z6tVvGvPhSilaIoRNUC9LDPL/hcJ7VdREgr5trGeOvLQfkpxR
gBoU9m6rYYgLrRx/90tQUdZlG6ZHcRVesHHzNRTyN71jyNXwk1o0X9g96F33xR7A
5c8fhiSpPAdmzcHSNmNZ
-----END CERTIFICATE-----
// Subject: CN=Digisign Server ID - (Enrich),
// OU=457608-K,
// O=Digicert Sdn. Bhd.,
// C=MY
// Issuer: CN=Entrust.net Certification Authority (2048)
// OU=(c) 1999 Entrust.net Limited,
// OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.),
// O=Entrust.net
// Serial: 1184644297 (4c:0e:63:6a)
-----BEGIN CERTIFICATE-----
MIIEzjCCA7agAwIBAgIETA5jajANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw0xMDA3MTYxNzIzMzdaFw0xNTA3
MTYxNzUzMzdaMGUxCzAJBgNVBAYTAk1ZMRswGQYDVQQKExJEaWdpY2VydCBTZG4u
IEJoZC4xETAPBgNVBAsTCDQ1NzYwOC1LMSYwJAYDVQQDEx1EaWdpc2lnbiBTZXJ2
ZXIgSUQgLSAoRW5yaWNoKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AMWJ5PQNBkCSWccaszXRDkwqM/n4r8qef+65p21g9FTob9Wb8xtjMQRoctE0Foy0
FyyX3nPF2JAVoBor9cuzSIZE8B2ITM5BQhrv9Qze/kDaOSD3BlU6ap1GwdJvpbLI
Vz4po5zg6YV3ZuiYpyR+vsBZIOVEb7ZX2L7OwmV3WMZhQdF0BMh/SULFcqlyFu6M
3RJdtErU0a9Qt9iqdXZorT5dqjBtYairEFs+E78z4K9EnTgiW+9ML6ZxJhUmyiiM
2fqOjqmiFDXimySItPR/hZ2DTwehthSQNsQ0HI0mYW0Tb3i+6I8nx0uElqOGaAwj
vgvsjJQAqQSKE5D334VsDLECAwEAAaOCATQwggEwMA4GA1UdDwEB/wQEAwIBBjAS
BgNVHRMBAf8ECDAGAQH/AgEAMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEFBQcD
AgYIKwYBBQUHAwQwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8v
b2NzcC5lbnRydXN0Lm5ldDBEBgNVHSAEPTA7MDkGBWCDSgEBMDAwLgYIKwYBBQUH
AgEWImh0dHA6Ly93d3cuZGlnaWNlcnQuY29tLm15L2Nwcy5odG0wMgYDVR0fBCsw
KTAnoCWgI4YhaHR0cDovL2NybC5lbnRydXN0Lm5ldC8yMDQ4Y2EuY3JsMBEGA1Ud
DgQKBAhMTswlKAMpgTAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDAN
BgkqhkiG9w0BAQUFAAOCAQEAl0zvSjpJrHL8MCBrtClbp8WVBJD5MtXChWreA6E3
+YkAsFqsVX7bQzX/yQH4Ub7MJsrIaqTEVD4mHucMo82XZ5TdpkLrXM2POXlrM3kh
Bnn6gkQVmczBtznTRmJ8snDrb84gqj4Zt+l0gpy0pUtNYQA35IfS8hQ6ZHy4qXth
4JMi59WfPkfmNnagU9gAAzoPtTP+lsrT0oI6Lt3XSOHkp2nMHOmZSufKcEXXCwcO
mnUb0C+Sb/akB8O9HEumhLZ9qJqp0qcp8QtXaR6XVybsK0Os1EWDBQDp4/BGQAf6
6rFRc5Mcpd1TETfIKqcVJx20qsx/qjEw/LhFn0gJ7RDixQ==
-----END CERTIFICATE-----
// Subject: CN=Java Media APIs,
// OU=Java Signed Extensions,
// OU=Corporate Object Signing,
// O=Sun Microsystems Inc
// Issuer: CN=Object Signing CA,
// OU=Class 2 OnSite Subscriber CA,
// OU=VeriSign Trust Network,
// O=Sun Microsystems Inc
// Serial: 6a:8b:99:91:37:59:4f:89:53:e2:97:18:9f:19:1e:4e
-----BEGIN CERTIFICATE-----
MIIFdzCCBF+gAwIBAgIQaouZkTdZT4lT4pcYnxkeTjANBgkqhkiG9w0BAQUFADCB
gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDUxMjAw
MDAwMFoXDTEyMDUxMTIzNTk1OVowfTEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt
cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE
CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEYMBYGA1UEAxQPSmF2YSBNZWRpYSBB
UElzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl5blzoKTVE8y4Hpz
q6E15RZz1bF5HnYEyYqgHkZXnAKedmYCoMzm1XK8s+gQWShLEvGEAvs5yqarx9gE
nnC21N28aEZgIJMa2/arKxCUkS4pxdGPYGexL9UzSRkUpoBShCZKEGdmX7gfJE2K
/sd9MFvGV5/yZtWXrADzvm0Kd/9mg1KRv1gfrZIq0TJbupoXPYYqb73AkI9eT2ZD
q9MdwD4E5+oojsDFXt8GU/D00fUhtXpYwuplU7D667WHYdJhIah0ST6JywyqcLXG
XSuFTXOgITT2idSHluZVmx3dqJ72u9kPkO4JdJTMDfaK8zgNLaRkiU8Qcj+qhLYH
ytaqcwIDAQABo4IB6jCCAeYwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCB4AwfwYD
VR0fBHgwdjB0oHKgcIZuaHR0cDovL29uc2l0ZWNybC52ZXJpc2lnbi5jb20vU3Vu
TWljcm9zeXN0ZW1zSW5jQ29ycG9yYXRlT2JqZWN0U2lnbmluZ0phdmFTaWduZWRF
eHRlbnNpb25zQ2xhc3NCL0xhdGVzdENSTC5jcmwwHwYDVR0jBBgwFoAUs0crgn5T
tHPKuLsZt76BTQeVx+0wHQYDVR0OBBYEFKS32mVx0gNWTeS4ProHEaeSpvvIMDsG
CCsGAQUFBwEBBC8wLTArBggrBgEFBQcwAYYfaHR0cDovL29uc2l0ZS1vY3NwLnZl
cmlzaWduLmNvbTCBtQYDVR0gBIGtMIGqMDkGC2CGSAGG+EUBBxcCMCowKAYIKwYB
BQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwbQYLYIZIAYb3AIN9
nD8wXjAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuc3VuLmNvbS9wa2kvY3BzMDMG
CCsGAQUFBwICMCcaJVZhbGlkYXRlZCBGb3IgU3VuIEJ1c2luZXNzIE9wZXJhdGlv
bnMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcNAQEFBQADggEBAAe6BO4W
3TSNWfezyelJs6kE3HfulT6Bdyz4UUoh9ykXcV8nRwT+kh25I5MdyG2GfkJoADPR
VhC5DYo13UFpIsTNVjq+hGYe2hML93bN7ad9SxCCyjHUo3yMz2qgBbHZI3VA9ZHA
aWM4Tx0saMwbcnVvlbuGh+PXvStfypJqYT6lzcdFfjNVX4FI/QQNGhBswMY51tC8
GTBCL2qhJon0gSCU4zaawDOf7+XxJWirLamYL1Aal1/h2z2sFrvA/1ftxtU3kZ6I
7De8DyoHeZg7pYGdrj7g+lPhCga/WvEhN152I+aP08YbFcJHYmK05ngl/Ye4c6Bd
cdrdfbw6QzEUIYY=
-----END CERTIFICATE-----
// Subject: CN=JavaFX 1.0 Runtime,
// OU=Java Signed Extensions,
// OU=Corporate Object Signing,
// O=Sun Microsystems Inc
// Issuer: CN=Object Signing CA,
// OU=Class 2 OnSite Subscriber CA,
// OU=VeriSign Trust Network,
// O=Sun Microsystems Inc
// Serial: 55:c0:e6:44:59:59:79:9e:d9:26:f1:b0:4a:1e:f0:27
-----BEGIN CERTIFICATE-----
MIIFezCCBGOgAwIBAgIQVcDmRFlZeZ7ZJvGwSh7wJzANBgkqhkiG9w0BAQUFADCB
gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA4MTAwOTAw
MDAwMFoXDTExMTAwOTIzNTk1OVowgYAxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl
bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxHzAdBgNV
BAsUFkphdmEgU2lnbmVkIEV4dGVuc2lvbnMxGzAZBgNVBAMUEkphdmFGWCAxLjAg
UnVudGltZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+WDc6+bu+4
tmAcS/lBtUc02WOt9QZpVsXg9cG2pu/8bUtmDELa8iiYBVFpIs8DU58HLrGQtCUY
SIAGOVPsOJoN29UKCDWfY9j5JeVhfhMGqk9DwrWhzgsjy4cpZ1pIp+k/fJ8zT8Ul
aYLpow1vg3UNddsmwz02tN7cOrMw9WYIG4CRYnY1OrtJSfe2pYzheC4zyvR+aiVl
nang2OtqikSQsNFOFHsLOJFxngy9LrO8evDSu25VTKI6zlWU6/bMeqtztJPN0VOn
NyUrJZvkxZ207Jg0T693BGSxNC1n+ihztXogql8950M/pEuUbDjylv5FFvlp6DSB
dDT2MkutmyMCAwEAAaOCAeowggHmMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeA
MH8GA1UdHwR4MHYwdKByoHCGbmh0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29t
L1N1bk1pY3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdKYXZhU2ln
bmVkRXh0ZW5zaW9uc0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaAFLNH
K4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBTjgufVi3XJ3gx1ewsA6Rr7BR4Z
zjA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUtb2Nz
cC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAqMCgG
CCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CGSAGG
9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtpL2Nw
czAzBggrBgEFBQcCAjAnGiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBPcGVy
YXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IBAQAB
YVJTTVe7rzyTO4jc3zajErOT/COkdQTfNo0eIX1QbNynFieJvwY/jRzUZwjktIFR
2p4JtbpHGAtKtjOAOTieQ8xdDOoC1djzpE7/AbMvuvlTavtUKT+F7tPdhfXgWXJV
6Wbt8jryKyk3zZGiEhauIwZUkfjRkEtffEmZWLUd8c8rURJjfC/XHH2oyurscoxc
CjX29c9ynxSiS/VvQp1an0HvErGh69N48wj7cj8mtZ1yHzd2XCzSSR1OfTPfk0Pt
yg51p7yJaFiH21PTZegEL6zyVNOYBTKwwIi2OzpwYalD3uvK6e3OKDrfFCOxu17u
4PveESbrdyrmvLe7IVez
-----END CERTIFICATE-----
// Subject: CN=JavaFX Runtime,
// OU=Java Signed Extensions,
// OU=Corporate Object Signing,
// O=Sun Microsystems Inc
// Issuer: CN=Object Signing CA,
// OU=Class 2 OnSite Subscriber CA,
// OU=VeriSign Trust Network,
// O=Sun Microsystems Inc
// Serial: 47:f4:55:f1:da:4a:5e:f9:e3:f7:a8:03:62:17:c0:ff
-----BEGIN CERTIFICATE-----
MIIFdjCCBF6gAwIBAgIQR/RV8dpKXvnj96gDYhfA/zANBgkqhkiG9w0BAQUFADCB
gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDEyOTAw
MDAwMFoXDTEyMDEyOTIzNTk1OVowfDEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt
cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE
CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEXMBUGA1UEAxQOSmF2YUZYIFJ1bnRp
bWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIzd0fAk8mI9ONc6RJ
aGieioK2FLdXEwj8zL3vdGDVmBwyR1zwYkaOIFFgF9IW/8qc4iAYA5sGUY+0g8q3
5DuYAxfTzBB5KdaYvbuq6GGnoHIWmTirXY+1friFp8lyXSvtuEaGB1VHaBoZchEg
k+UgeVDA43dHwcT1Ov3DePczJRUes8T/QHzLX+BxUDG43vjyncCEO/AjqLZxXEz2
xrNbKLcH3lGMJK7hdbfssUfF5BjC38Hn71HauYlA43b2no+2y0Sjulwzez2YPbDC
0GLR3TnKtA8dqOrnl5t3DniDbfOBNtBE3VOydJO0XW57Ng1HRXD023nm9ECPY2xp
0N/pAgMBAAGjggHqMIIB5jAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDB/BgNV
HR8EeDB2MHSgcqBwhm5odHRwOi8vb25zaXRlY3JsLnZlcmlzaWduLmNvbS9TdW5N
aWNyb3N5c3RlbXNJbmNDb3Jwb3JhdGVPYmplY3RTaWduaW5nSmF2YVNpZ25lZEV4
dGVuc2lvbnNDbGFzc0IvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBSzRyuCflO0
c8q4uxm3voFNB5XH7TAdBgNVHQ4EFgQUvOdd0cKPj+Yik/iOBwTdphh5A+gwOwYI
KwYBBQUHAQEELzAtMCsGCCsGAQUFBzABhh9odHRwOi8vb25zaXRlLW9jc3AudmVy
aXNpZ24uY29tMIG1BgNVHSAEga0wgaowOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEF
BQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTBtBgtghkgBhvcAg32c
PzBeMCcGCCsGAQUFBwIBFhtodHRwczovL3d3dy5zdW4uY29tL3BraS9jcHMwMwYI
KwYBBQUHAgIwJxolVmFsaWRhdGVkIEZvciBTdW4gQnVzaW5lc3MgT3BlcmF0aW9u
czATBgNVHSUEDDAKBggrBgEFBQcDAzANBgkqhkiG9w0BAQUFAAOCAQEAbGcf2NjL
AI93HG6ny2BbepaZA1a8xa/R6uUc7xV+Qw6MgLwFD4Q4i6LWUztQDvg9l68MM2/i
Y9LEi1KM4lcNbK5+D+t9x98wXBiuojXhVdp5ZmC03EyEBbriopdBsmXVLDSu/Y3+
zowOO5xwpMK3dbgsSDs2Vt0UosD3FTcRaD3GNfOhXMp+o1grHNiXF9YgkmdQbPPZ
DQ2KBhFPCRJXBGvyKOqno/DTg0sQ3crGH/C4/4t7mnQXWldZotmJUZ0ONc9oD+Q1
JAaguUKqIwn9yZ093ie+JWHbYNid9IIIPXYgtRxmf9a376WBhqhu56uJftBJ7x9g
eQ7Lot6CSWCiFw==
-----END CERTIFICATE-----
// Subject: CN=Solaris INTERNAL DEVELOPMENT USE ONLY,
// OU=Solaris Cryptographic Framework,
// OU=Corporate Object Signing,
// O=Sun Microsystems Inc
// Issuer: CN=Object Signing CA,
// OU=Class 2 OnSite Subscriber CA,
// OU=VeriSign Trust Network,
// O=Sun Microsystems Inc
// Serial: 77:29:77:52:6a:19:7b:9a:a6:a2:c7:99:a0:e1:cd:8c
-----BEGIN CERTIFICATE-----
MIIFHjCCBAagAwIBAgIQdyl3UmoZe5qmoseZoOHNjDANBgkqhkiG9w0BAQUFADCB
gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT
aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj
cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA3MDEwNDAw
MDAwMFoXDTEwMDEwMzIzNTk1OVowgZwxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl
bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxKDAmBgNV
BAsUH1NvbGFyaXMgQ3J5cHRvZ3JhcGhpYyBGcmFtZXdvcmsxLjAsBgNVBAMUJVNv
bGFyaXMgSU5URVJOQUwgREVWRUxPUE1FTlQgVVNFIE9OTFkwgZ8wDQYJKoZIhvcN
AQEBBQADgY0AMIGJAoGBALbNU4hf3mD5ArDI9pjgioAyvV3bjMPRQdCZniIeGJBp
odFlSEH+Mh64W1DsY8coeZ7FvvGJkx9IpTMJW9k8w1oJK9UNqHyAQfaYjQyXi3xQ
LJp62EvYdGfDlwOZejEcR/MbzZG+GOPMMvQj5+xyFDvLXNGfQNTnxw2qnBgCJXjj
AgMBAAGjggH1MIIB8TAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDCBiQYDVR0f
BIGBMH8wfaB7oHmGd2h0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29tL1N1bk1p
Y3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdTb2xhcmlzQ3J5cHRv
Z3JhcGhpY0ZyYW1ld29ya0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaA
FLNHK4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBRpfiGYkehTnsIzuN2H6AFb
VCZG8jA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUt
b2NzcC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAq
MCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CG
SAGG9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtp
L2NwczAzBggrBgEFBQcCAjAnFiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBP
cGVyYXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IB
AQCG5soy3LFHTFbA8/5SzDRhQoJkHUnOP0t3b6nvX6vZYRp649fje7TQOPRm1pFd
CZ17J+tggdZwgzTqY4aYpJ00jZaK6pV37q/vgFC/ia6jDs8Q+ly9cEcadBZ5loYg
cmxp9p57W2MNWx8VA8oFdNtKfF0jUNXbLNtvwGHmgR6YcwLrGN1b6/9Lt9bO3ODl
FO+ZDwkfQz5ClUVrTx2dGBvKRYFqSG5S8JAfsgYhPvcacUQkA7ExyKvfRXLWVrce
ZiPpcElbx+819H2sAPvVvparVeAruZGMAtejHZp9NFoowKen5drJp9VxePS4eM49
3DepB6lKRrNRw66LNQol4ZBz
-----END CERTIFICATE-----
// Subject: EMAILADDRESS=info@diginotar.nl, CN=DigiNotar Cyber CA,
// O=DigiNotar, C=NL
// Issuer: CN=GTE CyberTrust Global Root,
// OU=GTE CyberTrust Solutions, Inc.,
// O=GTE Corporation,
// C=US
// Serial: 120000525 (07:27:10:0D)
-----BEGIN CERTIFICATE-----
MIIFWjCCBMOgAwIBAgIEBycQDTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
b2JhbCBSb290MB4XDTA2MTAwNDEwNTQxMVoXDTExMTAwNDEwNTMxMVowYDELMAkG
A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy
IEN5YmVyIENBMSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIw
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANLOFQotqF6EZ639vu9Gx8i5z3P8
9DS5+SxD52ATPXrjss87Z2yQrcC5P4RS8DVC3HTcKDu9UrSnrHJFF8bwieu0qiXy
XUte0dmHutZ9fPXOMp8QM8WxSrtekTHC0OlBwpFkfglBO9uLCDdqqspS3rU5HsCI
A6U/i5kTYUO1m4Kz7iBvz6FEouova0CfjytXraFTwoUiaZ2gP1HfC0GRDaXhqKpc
SQhdvd5wQbEPyWNr0380dAIvNFp4dRxoeoFnivPaQPBgY/SSINcDpj2jHmfEhBtB
pcmM5r3qSLYFFgizNxJa92E89zhvLpfgb1Y4VNMota0Ubi5LZLUnZbd1JQm2Bz2V
VgIKgmCyc0XgMyZRdJq51FAc9k1bW1JSE1qmf6cO4ehBVGeYjIfVydNsy9NUkgYJ
NEH3gW8/nsl8dVWw58Gzd+jDxAA1lUBwEEoF3iW7n1mlZLxHYL9g43aLE1Xd4XR6
uc8kpmp/3mQiRFhogmoQ+T3lPhu5vfwi9GAEibtVbShV+t6OjRshFNc3izR7Tfay
shDPM7F9HGKZSMsrbHaWVb8ZDR0fu2WqG46ZtcYokOWCLXhQIJr9eS8kf/CJKWn0
fc1zvrPtTsHR7VJej/e4142HrbLZG1ES/1az4a80fVykeIgQnp0DxqWqoiRR90kU
xbHuWUOV36toKDA/AgMBAAGjggGGMIIBgjASBgNVHRMBAf8ECDAGAQH/AgEBMFMG
A1UdIARMMEowSAYJKwYBBAGxPgEAMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93d3cu
cHVibGljLXRydXN0LmNvbS9DUFMvT21uaVJvb3QuaHRtbDAOBgNVHQ8BAf8EBAMC
AQYwgaAGA1UdIwSBmDCBlYAUpgwdn2H/Bxe1vzhG20Mw1Y6wUgaheaR3MHUxCzAJ
BgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdU
RSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVy
VHJ1c3QgR2xvYmFsIFJvb3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93
d3cucHVibGljLXRydXN0LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYD
VR0OBBYEFKv5aN/PSjfXe0WMX3LeQETDZbvCMA0GCSqGSIb3DQEBBQUAA4GBAI9o
a6VbB7pEZg4cqFwwezPkCiYE/O+eGjjWLqEf0JlHwnVkJP2eOyh2uSYoYZEMbSz4
BJ98UAHV42mv7xXSRZskCSpmBU8lgcpdvqrBWSeuM46C9990sFWzjvjnN8huqlZE
9r1TgSOWPbT6MopTZkQloiXGpjwljPDgKAYityZB
-----END CERTIFICATE-----
// Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL
// Issuer: CN=GTE CyberTrust Global Root,
// OU=GTE CyberTrust Solutions, Inc.,
// O=GTE Corporation,
// C=US
// Serial: 120000505 (07:27:0F:F9)
-----BEGIN CERTIFICATE-----
MIIFODCCBKGgAwIBAgIEBycP+TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
b2JhbCBSb290MB4XDTA2MDkyMDA5NDUzMloXDTEzMDkyMDA5NDQwNlowPjELMAkG
A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy
IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o
XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S
tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7
24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp
naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj
9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu
LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU
Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk
vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6
3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt
eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4
iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB
/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC
ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s
MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV
jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv
bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD
VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6
oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw
MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI
hvcNAQEFBQADgYEACcpiD427SuDUejUrBi3RKGG2rAH7g0m8rtQvLYauGYOl1h0T
4he+/jJ06XoUOMqUXvcpAWlxG5Ea/aO7qh3Ke+IW/aGjDvMMX7LhIDGUK16Sdu36
6bUjpr8KOwOpb1JgVM1f6bcvfKIn/UGDdbYN+3gm87FF6TKVKho1IZXFonU=
-----END CERTIFICATE-----
// Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL
// Issuer: CN=GTE CyberTrust Global Root,
// OU=GTE CyberTrust Solutions, Inc.,
// O=GTE Corporation,
// C=US
// Serial: 120000515 (07:27:10:03)
-----BEGIN CERTIFICATE-----
MIIFODCCBKGgAwIBAgIEBycQAzANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
b2JhbCBSb290MB4XDTA2MDkyNzEwNTMzMloXDTExMDkyNzEwNTIzMFowPjELMAkG
A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy
IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o
XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S
tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7
24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp
naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj
9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu
LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU
Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk
vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6
3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt
eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4
iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB
/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC
ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s
MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV
jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv
bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD
VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6
oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw
MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI
hvcNAQEFBQADgYEAWcyGZhizJlRP1jjNupZey+yZG6oMDW4Z11boriMHbYPCndBE
bVh07zmPbZsihOw9w/vm5KbVX5CgxUv4Rhzh/20Faixf3P3bpWg0qgzHVVusNVR/
P50aKkpdK3hp+QLl56e+lWOddSAINIpmcuyDI1hyuzB+GJEASm9tNU/6rs8=
-----END CERTIFICATE-----
// Subject: EMAILADDRESS=info@diginotar.nl,
// CN=DigiNotar Root CA,
// O=DigiNotar, C=NL
// Issuer: CN=Entrust.net Secure Server Certification Authority
// OU=(c) 1999 Entrust.net Limited,
// OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
// O=Entrust.net,
// C=US,
// Serial: 1184644297 (46:9C:3C:C9)
-----BEGIN CERTIFICATE-----
MIIFSDCCBLGgAwIBAgIERpw8yTANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA0
MjYwNTAwMDBaFw0xMzA4MTQyMDEyMzZaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK
EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI
hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt
OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx
hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7
gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D
IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T
BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs
Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8
5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf
DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX
9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e
7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj
ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB
BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF
BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD
VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy
bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G
A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob
BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAI979rBep8tu3TeLunapgsZ0jtXp
GDFjKWSk87dj1jCyYi+q/GyDyZ6ZQZNRP0sF+6twscq05lClWNy3TROMp7QeuoLO
G7Utw3OJaswUtp4YglANMRTHEe3g9ltifUXRH5tSuy7u6yi4LD4WTm5ULP6r/g6l
0CnjXYb0+b1Fmz6U
-----END CERTIFICATE-----
// Subject: EMAILADDRESS=info@diginotar.nl,
// CN=DigiNotar Root CA,
// O=DigiNotar, C=NL
// Issuer: CN=Entrust.net Secure Server Certification Authority
// OU=(c) 1999 Entrust.net Limited,
// OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
// O=Entrust.net,
// C=US,
// Serial: 1184640175 (46:9C:2C:AF)
-----BEGIN CERTIFICATE-----
MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3
MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK
EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI
hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt
OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx
hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7
gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D
IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T
BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs
Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8
5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf
DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX
9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e
7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj
ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB
BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF
BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD
VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy
bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G
A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob
BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh
xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd
ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP
ZFdYf+hthc3m6IcJ
-----END CERTIFICATE-----
// Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2,
// O=DigiNotar B.V.,
// C=NL
// Issuer: CN=Staat der Nederlanden Organisatie CA - G2,
// O=Staat der Nederlanden,
// C=NL
// Serial: 20001983 (01:31:34:bf)
-----BEGIN CERTIFICATE-----
MIIGnDCCBISgAwIBAgIEATE0vzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJO
TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTIwMAYDVQQDDClTdGFh
dCBkZXIgTmVkZXJsYW5kZW4gT3JnYW5pc2F0aWUgQ0EgLSBHMjAeFw0xMDA1MTIw
ODUxMzhaFw0yMDAzMjMwOTUwMDRaMFoxCzAJBgNVBAYTAk5MMRcwFQYDVQQKDA5E
aWdpTm90YXIgQi5WLjEyMDAGA1UEAwwpRGlnaU5vdGFyIFBLSW92ZXJoZWlkIENB
IE9yZ2FuaXNhdGllIC0gRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
AQCxExkPJ+Zs1FWGS9DsiYpFkXisR71HK+T8RetPtCZzWzfTw3/2497Xo/gtaMUI
PkuU1uSHJTZrhLUYdPMoWHMvm2rPvAQe9t7dr/xLqvXbZmIlASWC3vKXWhBu3V2p
IrEEqSNzOvhxrR3PhETrR9Gvbch8KKvH8jd6dF9fxQIUiqNa4xtsAeNdjtlo1vQJ
GzLckbUs9SDrjANtJkm4k8SFXdjSm69WaswFM8ygQp40VUSca6DUEtArVM23iQ3l
9uvo+4UBM096a/GdcjOWDveyhKWlJ8Qn8VFzKXe6Z27+TNy04qGhgS85SY1DOBPO
0KVcwoc6AGdlQiPxNlkKHaNRyLyjlCox3+M88p0aPASw77EKMBNzttfzo0wBdRSF
eMDXijlYhVD6LubFvs+LP6+PNtQlCS3SD6xyk/K/i9RQs/kVUJuZ9RTZ+4uRozIm
JqD43ztggYaDeVsr6xM9KTrBbd29no6H1kquNJcF7hSm9tw4fkrpJFQHPZdoN0Zr
DceoIa8TVOQJavFNRgrJXfubT73e+7dUy7g4nKc5+2otwHuNq6WnV+xKkoozxeEg
XHPYkJIrgNUPhhhpfDlPhIa890xb89W0yqDC8DciynlSH1PmqvOQsDvd8ij9rOvF
BiSgydQvD1j9tZ7sD8+yWdCiBHo4aq5y+73wJWKUCacFCwIDAQABo4IBYTCCAV0w
SAYDVR0gBEEwPzA9BgRVHSAAMDUwMwYIKwYBBQUHAgEWJ2h0dHA6Ly93d3cuZGln
aW5vdGFyLm5sL2Nwcy9wa2lvdmVyaGVpZDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
DwEB/wQEAwIBBjCBhQYDVR0jBH4wfIAUORCLSZJc22ESIM1JnRqO2pxnQLmhXqRc
MFoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4x
KzApBgNVBAMMIlN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENBIC0gRzKCBACY
lvQwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5wa2lvdmVyaGVpZC5ubC9E
b21PcmdhbmlzYXRpZUxhdGVzdENSTC1HMi5jcmwwHQYDVR0OBBYEFLxdlDvZq3sD
JXNhwtst7vyrj2WhMA0GCSqGSIb3DQEBCwUAA4ICAQCP/C1Mt9kt1R+978v0t2gX
dZ1O1ffdnPEqJu2forYcA9VTs+wIzzTi48P0tRYvyMO+19NzqwA2+RpKftZj6V5G
uqW2jhW3oyrYQx3vXcgfgYWzi/f/PPTZ9EYIP5y8HaDZqEzNJVJOCrEg9x/pQ9lU
RoETmsBedGwqmDLq/He7DaWiMZgifnx859qkrey3LhoZcfhIUNpDjyyE3cFAJ+O1
8BVOltT4XOOGKUYr1zsH6zh/yIZXl9PvKjPEF1DVZGlrK2tFXl0vF8paTs/D1zk8
9TufRrmb5w5Jl53W1eMbD+qPAU6aE5RZCgIHSEsaYKt/T+0L2FUNaG9VnGllFULs
wNzdbKzDFs4LHVabpMTE0i7gD+JEJytQaaTcYuiKISlCbMwAOpZ2m+9AwKRed4Qy
bCYqOWauXeO5ubIsaB8empADOfCqs6TMSYsYNOk3yXspx4R8b0QVL+xhWQTJRcui
1lKifH8pktZKxYtCqNT+6tjHhyMY5J16fXNAUpigrm7jBT8FD+Clxm1N7YM3iJzH
89xCmmq21yFJNnfy7xhPxXDZnunetyuL9Lx+KN8NQMmFXK6dxTH/0FwOtah+8Okv
uq+IruW10Vilr5xxpykBkINpN4IFuvwJwQhujHg7wzMCgD9EhQgd31VWCK0shS1d
sQPhrqp0xaTzTro3mHuCuQ==
-----END CERTIFICATE-----
// Subject: CN=DigiNotar PKIoverheid CA Overheid en Bedrijven,
// O=DigiNotar B.V.,
// C=NL
// Issuer: CN=Staat der Nederlanden Overheid CA
// O=Staat der Nederlanden,
// C=NL
// Serial: 20015536 (01:31:69:b0)
-----BEGIN CERTIFICATE-----
MIIEiDCCA3CgAwIBAgIEATFpsDANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO
TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh
dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDcwNzA1MDg0MjA3WhcN
MTUwNzI3MDgzOTQ2WjBfMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy
IEIuVi4xNzA1BgNVBAMTLkRpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp
ZCBlbiBCZWRyaWp2ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDc
vdKnTmoKuzuiheF/AK2+tDBomAfNoHrElM9x+Yo35FPrV3bMi+Zs/u6HVcg+uwQ5
AKeAeKxbT370vbhUuHE7BzFJOZNUfCA7eSuPu2GQfbGs5h+QLp1FAalkLU3DL7nn
UNVOKlyrdnY3Rtd57EKZ96LspIlw3Dgrh6aqJOadkiQbvvb91C8ZF3rmMgeUVAVT
Q+lsvK9Hy7zL/b07RBKB8WtLu+20z6slTxjSzAL8o0+1QjPLWc0J3NNQ/aB2jKx+
ZopC9q0ckvO2+xRG603XLzDgbe5bNr5EdLcgBVeFTegAGaL2DOauocBC36esgl3H
aLcY5olLmmv6znn58yynAgMBAAGjggFQMIIBTDBIBgNVHSAEQTA/MD0GBFUdIAAw
NTAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5kaWdpbm90YXIubmwvY3BzL3BraW92
ZXJoZWlkMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMIGABgNVHSME
eTB3gBQLhtYPd6NosftkCcOIblwEHFfpPaFZpFcwVTELMAkGA1UEBhMCTkwxHjAc
BgNVBAoTFVN0YWF0IGRlciBOZWRlcmxhbmRlbjEmMCQGA1UEAxMdU3RhYXQgZGVy
IE5lZGVybGFuZGVuIFJvb3QgQ0GCBACYmnkwPQYDVR0fBDYwNDAyoDCgLoYsaHR0
cDovL2NybC5wa2lvdmVyaGVpZC5ubC9Eb21PdkxhdGVzdENSTC5jcmwwHQYDVR0O
BBYEFEwIyY128ZjHPt881y91DbF2eZfMMA0GCSqGSIb3DQEBBQUAA4IBAQAMlIca
v03jheLu19hjeQ5Q38aEW9K72fUxCho1l3TfFPoqDz7toOMI9tVOW6+mriXiRWsi
D7dUKH6S3o0UbNEc5W50BJy37zRERd/Jgx0ZH8Apad+J1T/CsFNt5U4X5HNhIxMm
cUP9TFnLw98iqiEr2b+VERqKpOKrp11Lbyn1UtHk0hWxi/7wA8+nfemZhzizDXMU
5HIs4c71rQZIZPrTKbmi2Lv01QulQERDjqC/zlqlUkxk0xcxYczopIro5Ij76eUv
BjMzm5RmZrGrUDqhCYF0U1onuabSJc/Tw6f/ltAv6uAejVLpGBwgCkegllYOQJBR
RKwa/fHuhR/3Qlpl
-----END CERTIFICATE-----
// Subject: CN=DigiNotar PKIoverheid CA Overheid
// O=DigiNotar B.V.,
// C=NL
// Issuer: CN=Staat der Nederlanden Overheid CA
// O=Staat der Nederlanden,
// C=NL
// Serial: 20006006 (01:31:44:76)
-----BEGIN CERTIFICATE-----
MIIEezCCA2OgAwIBAgIEATFEdjANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO
TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh
dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDQwNjI0MDgxOTMyWhcN
MTAwNjIzMDgxNzM2WjBSMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy
IEIuVi4xKjAoBgNVBAMTIURpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp
ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANSlrubta5tlOjVCi/gb
yLCvRqfBjxG8H594VcKHu0WAYc99SPZF9cycj5mw2GyfQvy/WIrGrL4iyNq1gSqR
0QA/mTXKZIaPqzpDhdm+VvrKkmjrbZfaQxgMSs3ChtBsjcP9Lc0X1zXZ4Q8nBe3k
BTp+zehINfmbjoEgXLxsMR5RQ6GxzKjuC04PQpbJQgTIakglKaqYcDDZbEscWgPV
Hgj/2aoHlj6leW/ThHZ+O41jUguEmBLZA3mu3HrCfrHntb5dPt0ihzSx7GtD/SaX
5HBLxnP189YuqMk5iRA95CtiSdKauvon/xRKRLNgG6XAz0ctSoY7xLDdiBVU5kJd
FScCAwEAAaOCAVAwggFMMEgGA1UdIARBMD8wPQYEVR0gADA1MDMGCCsGAQUFBwIB
FidodHRwOi8vd3d3LmRpZ2lub3Rhci5ubC9jcHMvcGtpb3ZlcmhlaWQwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgYAGA1UdIwR5MHeAFAuG1g93o2ix
+2QJw4huXAQcV+k9oVmkVzBVMQswCQYDVQQGEwJOTDEeMBwGA1UEChMVU3RhYXQg
ZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
Um9vdCBDQYIEAJiaeTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnBraW92
ZXJoZWlkLm5sL0RvbU92TGF0ZXN0Q1JMLmNybDAdBgNVHQ4EFgQUvRaYQh2+kdE9
wpcl4CjXWOC1f+IwDQYJKoZIhvcNAQEFBQADggEBAGhQsCWLiaN2EOhPAW+JQP6o
XBOrLv5w6joahzBFVn1BiefzmlMKjibqKYxURRvMAsMkh82/MfL8V0w6ugxl81lu
i42dcxl9cKSVXKMw4bbBzJ2VQI5HTIABwefeNuy/eX6idVwYdt3ajAH7fUA8Q9Cq
vr6H8B+8mwoEqTVTEVlCSsC/EXsokYEUr06PPzRudKjDmijgj7zFaIioZNc8hk7g
ufEgrs/tmcNGylrwRHgCXjCRBt2NHlZ08l7A1AGU8HcHlSbG9Un/2q9kVHUkps0D
gtUaEK+x6jpAu/R8Ojezu/+ZEcwwjI/KOhG+84+ejFmtyEkrUdsAdEdLf/2dKsw=
-----END CERTIFICATE-----
// Subject: EMAILADDRESS=info@diginotar.nl,
// CN=DigiNotar Services 1024 CA
// O=DigiNotar, C=NL
// Issuer: CN=Entrust.net Secure Server Certification Authority,
// OU=(c) 1999 Entrust.net Limited,
// OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
// O=Entrust.net,
// C=US
// Serial: 1184640176 (46:9c:2c:b0)
-----BEGIN CERTIFICATE-----
MIIDzTCCAzagAwIBAgIERpwssDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3
MjYxNTU5MDBaFw0xMzA4MjYxNjI5MDBaMGgxCzAJBgNVBAYTAk5MMRIwEAYDVQQK
EwlEaWdpTm90YXIxIzAhBgNVBAMTGkRpZ2lOb3RhciBTZXJ2aWNlcyAxMDI0IENB
MSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCBnzANBgkqhkiG9w0B
AQEFAAOBjQAwgYkCgYEA2ptNXTz50eKLxsYIIMXZHkjsZlhneWIrQWP0iY1o2q+4
lDaLGSSkoJPSmQ+yrS01Tc0vauH5mxkrvAQafi09UmTN8T5nD4ku6PJPrqYIoYX+
oakJ5sarPkP8r3oDkdqmOaZh7phPGKjTs69mgumfvN1y+QYEvRLZGCTnq5NTi1kC
AwEAAaOCASYwggEiMBIGA1UdEwEB/wQIMAYBAf8CAQAwJwYDVR0lBCAwHgYIKwYB
BQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDBDARBgNVHSAECjAIMAYGBFUdIAAwMwYI
KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0Lm5l
dDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmVudHJ1c3QubmV0L3NlcnZl
cjEuY3JsMB0GA1UdDgQWBBT+3JRJDG/vXH/G8RKZTxZJrfuCZTALBgNVHQ8EBAMC
AQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0BowGQYJKoZIhvZ9B0EA
BAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEFBQADgYEAY3RqN6k/lpxmyFisCcnv
9WWUf6MCxDgxvV0jh+zUVrLJsm7kBQb87PX6iHBZ1O7m3bV6oKNgLwIMq94SXa/w
NUuqikeRGvWFLELHHe+VQ7NeuJWTpdrFKKqtci0xrZlrbP+MISevrZqRK8fdWMNu
B8WfedLHjFW/TMcnXlEWKz4=
-----END CERTIFICATE-----
// Subject: CN=Buster Paper Comercial Ltda,
// O=Buster Paper Comercial Ltda,
// L=S?o Jos? Dos Campos,
// ST=S?o Paulo,
// C=BR
// Issuer: CN=DigiCert Assured ID Code Signing CA-1,
// OU=www.digicert.com,
// O=DigiCert Inc,
// C=US
// Serial: 07:b4:4c:db:ff:fb:78:de:05:f4:26:16:72:a6:73:12
-----BEGIN CERTIFICATE-----
MIIGwzCCBaugAwIBAgIQB7RM2//7eN4F9CYWcqZzEjANBgkqhkiG9w0BAQUFADBv
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv
ZGUgU2lnbmluZyBDQS0xMB4XDTEzMDExNzAwMDAwMFoXDTE0MDEyMjEyMDAwMFow
gY4xCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMR4wHAYDVQQHDBVT
w6NvIEpvc8OpIERvcyBDYW1wb3MxJDAiBgNVBAoTG0J1c3RlciBQYXBlciBDb21l
cmNpYWwgTHRkYTEkMCIGA1UEAxMbQnVzdGVyIFBhcGVyIENvbWVyY2lhbCBMdGRh
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzO0l6jWIpEfO2oUpVHpL
HETj5lzivNb0S9jKHgGJax917czh81PnGTxwxFXd6gLJuy/XFHvmiSi8g8jzlymn
2Ji5zQ3CPaz7nomJokSUDlMVJ2qYWtctw4jrdjuI4qtn+koXXUFkWjkf8h8251I4
tUs7S49HE2Go5owCYP3byajj7fsFAYR/Xb7TdVtndkZsUB/YgOjHovyACjouaNCi
mDiRyQ6zLLjZGiyeD65Yiseuhp5b8/BL5h1p7w76QYMYMVQNAdtDKut2R8MBpuWf
Ny7Eoi0x/gm1p9X5Rcl5aN7K0G4UtTAJKbkuUfXddsyFoM0Nx8uo8SgNQ8Y/X5Jx
BwIDAQABo4IDOTCCAzUwHwYDVR0jBBgwFoAUe2jOKarAF75JeuHlP9an90WPNTIw
HQYDVR0OBBYEFFLZ3n5nt/Eer7n1bvtOqMb1qKO5MA4GA1UdDwEB/wQEAwIHgDAT
BgNVHSUEDDAKBggrBgEFBQcDAzBzBgNVHR8EbDBqMDOgMaAvhi1odHRwOi8vY3Js
My5kaWdpY2VydC5jb20vYXNzdXJlZC1jcy0yMDExYS5jcmwwM6AxoC+GLWh0dHA6
Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9hc3N1cmVkLWNzLTIwMTFhLmNybDCCAcQGA1Ud
IASCAbswggG3MIIBswYJYIZIAYb9bAMBMIIBpDA6BggrBgEFBQcCARYuaHR0cDov
L3d3dy5kaWdpY2VydC5jb20vc3NsLWNwcy1yZXBvc2l0b3J5Lmh0bTCCAWQGCCsG
AQUFBwICMIIBVh6CAVIAQQBuAHkAIAB1AHMAZQAgAG8AZgAgAHQAaABpAHMAIABD
AGUAcgB0AGkAZgBpAGMAYQB0AGUAIABjAG8AbgBzAHQAaQB0AHUAdABlAHMAIABh
AGMAYwBlAHAAdABhAG4AYwBlACAAbwBmACAAdABoAGUAIABEAGkAZwBpAEMAZQBy
AHQAIABDAFAALwBDAFAAUwAgAGEAbgBkACAAdABoAGUAIABSAGUAbAB5AGkAbgBn
ACAAUABhAHIAdAB5ACAAQQBnAHIAZQBlAG0AZQBuAHQAIAB3AGgAaQBjAGgAIABs
AGkAbQBpAHQAIABsAGkAYQBiAGkAbABpAHQAeQAgAGEAbgBkACAAYQByAGUAIABp
AG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGgAZQByAGUAaQBuACAAYgB5ACAAcgBl
AGYAZQByAGUAbgBjAGUALjCBggYIKwYBBQUHAQEEdjB0MCQGCCsGAQUFBzABhhho
dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wTAYIKwYBBQUHMAKGQGh0dHA6Ly9jYWNl
cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENvZGVTaWduaW5nQ0Et
MS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOCAQEAPTTQvpOIikXI
hTLnNbajaFRR5GhQpTzUNgBfF9VYSlNw/wMjpGsrh5RxaJCip52jbehmTgjMRhft
jRYyml44PAVsCcR9uEoDpCZYpI1fHI1R+F8jd1C9rqprbSwwOG4xlg4SmvTHYs6e
gBItQ/1p9XY+Sf4Wv1qOuOFL1qvV/5VyR2zdlOQCmKCeMgxt6a/tHLBDiAA67D44
/vfdoNJl0CU2It0PO60jdCPFNWIRcxL+OSDqAoePeUC7xQ+JsTEIxuUE8+d6w6fc
BV2mYb1flh22t46GLjh4gyo7xw3aL6L0L0jzlTT6IcEw6NIbaPbIKj/npQnHobYj
XMuKLxbh7g==
-----END CERTIFICATE-----
// Subject: CN=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME,
// O=BUSTER ASSISTENCIA TECNICA ELETRONICA LTDA - ME,
// L=S?o Paulo,
// ST=S?o Paulo,
// C=BR
// Issuer: CN=DigiCert Assured ID Code Signing CA-1,
// OU=www.digicert.com,
// O=DigiCert Inc,
// C=US
// Serial: 0a:38:9b:95:ee:73:6d:d1:3b:c0:ed:74:3f:d7:4d:2f
-----BEGIN CERTIFICATE-----
MIIG4DCCBcigAwIBAgIQCjible5zbdE7wO10P9dNLzANBgkqhkiG9w0BAQUFADBv
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS4wLAYDVQQDEyVEaWdpQ2VydCBBc3N1cmVkIElEIENv
ZGUgU2lnbmluZyBDQS0xMB4XDTEyMTEwOTAwMDAwMFoXDTEzMTExNDEyMDAwMFow
gasxCzAJBgNVBAYTAkJSMRMwEQYDVQQIDApTw6NvIFBhdWxvMRMwEQYDVQQHDApT
w6NvIFBhdWxvMTgwNgYDVQQKEy9CVVNURVIgQVNTSVNURU5DSUEgVEVDTklDQSBF
TEVUUk9OSUNBIExUREEgLSBNRTE4MDYGA1UEAxMvQlVTVEVSIEFTU0lTVEVOQ0lB
IFRFQ05JQ0EgRUxFVFJPTklDQSBMVERBIC0gTUUwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDAqNeEs5/B2CTXGjTOkUIdu6jV6qulOZwdw4sefHWYj1UR
4z6zPk9kjpUgbnb402RFq88QtfInwddZ/wXn9OxMtDd/3TnC7HrhNS7ga79ZFL2V
JnmzKHum2Yvh0q82QEJ9tHBR2X9VdKpUIH08Zs3k6cWWM1H0YX0cxA/HohhesQJW
kwJ3urOIJiH/HeByDk8a1NS8safcCxk5vxvW4WvCg43iT09LeHY5Aa8abKw8lqVb
0tD5ZSIjdmdj3TT1U37iAHLLRM2DXbxfdbhouUX1c5U1ZHAMA67HwjKiseOiDaHj
NUGbC37C+cgbc9VVM/cURD8WvS0Kj6fQv7F2QtJDAgMBAAGjggM5MIIDNTAfBgNV
HSMEGDAWgBR7aM4pqsAXvkl64eU/1qf3RY81MjAdBgNVHQ4EFgQU88EXKAyDsh30
o9+Gu9a4xUy+FSMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMD
MHMGA1UdHwRsMGowM6AxoC+GLWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9hc3N1
cmVkLWNzLTIwMTFhLmNybDAzoDGgL4YtaHR0cDovL2NybDQuZGlnaWNlcnQuY29t
L2Fzc3VyZWQtY3MtMjAxMWEuY3JsMIIBxAYDVR0gBIIBuzCCAbcwggGzBglghkgB
hv1sAwEwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9z
c2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUHAgIwggFWHoIBUgBBAG4A
eQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQByAHQAaQBmAGkAYwBhAHQA
ZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBjAGUAcAB0AGEAbgBjAGUA
IABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAgAEMAUAAvAEMAUABTACAA
YQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQAGEAcgB0AHkAIABBAGcA
cgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBtAGkAdAAgAGwAaQBhAGIA
aQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBjAG8AcgBwAG8AcgBhAHQA
ZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBlAHIAZQBuAGMAZQAuMIGC
BggrBgEFBQcBAQR2MHQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0
LmNvbTBMBggrBgEFBQcwAoZAaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Rp
Z2lDZXJ0QXNzdXJlZElEQ29kZVNpZ25pbmdDQS0xLmNydDAMBgNVHRMBAf8EAjAA
MA0GCSqGSIb3DQEBBQUAA4IBAQAei1QmiXepje8OIfo/WonD4MIXgpPr2dfRaquQ
A8q63OpTRSveyqdQDCSPpDRF/nvO1Y30yksZvIH1tNBsW5LBdxAKN3lFdBlqBwtE
Q3jHc0KVVYRJ0FBaGE/PJHmRajscdAhYIcMPhTga0u0tDK+wOHEq3993dfl6yHjA
XHU2iW5pnk75ZoE39zALD5eKXT8ZXrET5c3XUFJKWA+XuGmdmyzqo0Au49PanBv9
UlZnabYfqoMArqMS0tGSX4cGgi9/2E+pHG9BX4sFW+ZDumroOA2pxyMWEKjxePEL
zCOfhbsRWdMLYepauaNZOIMZXmFwcrIl0TGMkTAtATz+XmZc
-----END CERTIFICATE-----
// Subject: CN=CLEARESULT CONSULTING INC., OU=Corporate IT,
// O=CLEARESULT CONSULTING INC., L=Austin, ST=TX, C=US
// Issuer: SERIALNUMBER=07969287,
// CN=Go Daddy Secure Certification Authority,
// OU=http://certificates.godaddy.com/repository,
// O="GoDaddy.com, Inc.",
// L=Scottsdale,
// ST=Arizona,
// C=US
// Serial: 2b:73:43:2a:a8:4f:44
-----BEGIN CERTIFICATE-----
MIIFYjCCBEqgAwIBAgIHK3NDKqhPRDANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm
aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5
IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky
ODcwHhcNMTIwMjE1MjEwOTA2WhcNMTQwMjE1MjEwOTA2WjCBjDELMAkGA1UEBgwC
VVMxCzAJBgNVBAgMAlRYMQ8wDQYDVQQHDAZBdXN0aW4xIzAhBgNVBAoMGkNMRUFS
RVNVTFQgQ09OU1VMVElORyBJTkMuMRUwEwYDVQQLDAxDb3Jwb3JhdGUgSVQxIzAh
BgNVBAMMGkNMRUFSRVNVTFQgQ09OU1VMVElORyBJTkMuMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAtIOjCKeAicull+7ZIzt0/4ya3IeXUFlfypqKMLkU
IbKjn0P5uMj6VE3rlbZr44RCegxvdnR6umBh1c0ZXoN3o+yc0JKcKcLiApmJJ277
p7IbLwYDhBXRQNoIJm187IOMRPIxsKN4hL91txn9jGBmW+9zKlJlNhR5R7vjwU2E
jrH/6oqsc9EM2yYpfjlNv6+3jSwAYZCkSWr+27PQOV+YHKmIxtJjX0upFz5FdIrV
9CCX+L2Kji1THOkSgG4QTbYxmEcHqGViWz8hXLeNXjcbEsPuIiAu3hknxRHfUTE/
U0Lh0Ug1e3LrJu+WnxM2SmUY4krsZ22c0yWUW9hzWITIjQIDAQABo4IBhzCCAYMw
DwYDVR0TAQH/BAUwAwEBADATBgNVHSUEDDAKBggrBgEFBQcDAzAOBgNVHQ8BAf8E
BAMCB4AwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nb2RhZGR5LmNvbS9n
ZHM1LTE2LmNybDBTBgNVHSAETDBKMEgGC2CGSAGG/W0BBxcCMDkwNwYIKwYBBQUH
AgEWK2h0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeS8w
gYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZ29kYWRk
eS5jb20vMEoGCCsGAQUFBzAChj5odHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHku
Y29tL3JlcG9zaXRvcnkvZ2RfaW50ZXJtZWRpYXRlLmNydDAfBgNVHSMEGDAWgBT9
rGEyk2xF1uLuhV+auud2mWjM5zAdBgNVHQ4EFgQUDtdeKqeN2QkcbEp1HovFieNB
XiowDQYJKoZIhvcNAQEFBQADggEBAD74Agw5tvi2aBl4/f/s7/VE/BClzDsKMb9K
v9qpeC45ZA/jelxV11HKbQnVF194gDb7D2H9OsAsRUy8HVKbXEcc/8dKvwOqb+BC
2i/EmfjLgmCfezNFtLq8xcPxF3zIRc44vPrK0z4YZsaHdH+yTEJ51p5EMdTqaLaP
4n5m8LX3RfqlQB9dYFe6dUoYZjKm9d/pIRww3VqfOzjl42Edi1w6dWmBVMx1NZuR
DBabJH1vJ9Gd+KwxMCmBZ6pQPl28JDimhJhI2LNqU349uADQVV0HJosddN/ARyyI
LSIQO7BnNVKVG9Iujf33bvPNeg0qNz5qw+rKKq97Pqeum+L5oKU=
-----END CERTIFICATE-----
// Subject: CN=eDellRoot
// Issuer: CN=eDellRoot
// Serial Number:
// 6b:c5:7b:95:18:93:aa:97:4b:62:4a:c0:88:fc:3b:b6
-----BEGIN CERTIFICATE-----
MIIC8zCCAd+gAwIBAgIQa8V7lRiTqpdLYkrAiPw7tjAJBgUrDgMCHQUAMBQxEjAQ
BgNVBAMTCWVEZWxsUm9vdDAeFw0xNTA0MDcxMDIzMjdaFw0zOTEyMzEyMzU5NTla
MBQxEjAQBgNVBAMTCWVEZWxsUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAL3RJg1uzVuEX0Hw4XWGzs6oI9W+o7HZdVdBMMVb4Gzb4uZjCTNjbPx4
b8LNFL1uArUt+5VVMQDsOTY3Lg/Xe/UNukY2b+0llUOzzBYYpbsFcco4n6SsTvDh
Ni5t+kPo7c23ZrYBPmOu82eEJ6cavs/t39u+wFOkXXwvRCiHA/lWyNWNEPh17+bC
EP3q5N+JrV+6Ho3zQPEv5QUJYdmXsMmD2CMQojeQUj68J91P5w5BKjurG0xjivzh
Soie9ym7VRwLFjWScRuw/9XV6CLqTyL5xrqiiDp1uTOuqNj3uxyts9ocbsoJXuxj
5iEYkSM1nvLupEv+lgy9WqzIEFMm1l8CAwEAAaNJMEcwRQYDVR0BBD4wPIAQYA/f
EzPwmaRcZuSaa/VZ1KEWMBQxEjAQBgNVBAMTCWVEZWxsUm9vdIIQa8V7lRiTqpdL
YkrAiPw7tjAJBgUrDgMCHQUAA4IBAQArfdcScsezj8ooJ92UwwnPgg36noOgiUs5
XzPLP4h0JpUYQVKB9hY1WTDwRUfTKGh7oNOowd027a/rVSb/TNeoiJIvMKn4gbvV
CWAiHhO8u2u0RkHCDVsa7e0i4ncpueWsihjn6jBrY8T+7eDYwiFT/F03A8NJ7mK5
lZA8SFd5CTDy3EBUU5UwzXUc5HoIRUxXSPycu3aIBWawg3sCdKiAoikScPAWj0bM
0vmsP/8QSlTOBqO+QFQ6R82BtTvBNU3qbVICV4QObsxib++FAFL56NApPqskg7Vz
LfNIAjKabHUcjbuZkmg6jr4BfYW7+oQDHCsYgADjjKGdKz/8U/fP
-----END CERTIFICATE-----

View File

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

View File

@@ -32,7 +32,7 @@ formatVersion=3
# Version of the currency code information in this class. # Version of the currency code information in this class.
# It is a serial number that accompanies with each amendment. # It is a serial number that accompanies with each amendment.
dataVersion=170 dataVersion=169
# List of all valid ISO 4217 currency codes. # List of all valid ISO 4217 currency codes.
# To ensure compatibility, do not remove codes. # To ensure compatibility, do not remove codes.
@@ -54,7 +54,7 @@ all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036
SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\ SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\
SRD968-SRG740-SSP728-STD678-STN930-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\ SRD968-SRG740-SSP728-STD678-STN930-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-UYI940-\ TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-UYI940-\
UYU858-UZS860-VEB862-VED926-VEF937-VES928-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\ UYU858-UZS860-VEB862-VEF937-VES928-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\
XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\ XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\
XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZMW967-ZWD716-ZWL932-\ XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZMW967-ZWD716-ZWL932-\
ZWN942-ZWR935 ZWN942-ZWR935

View File

@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any # or visit www.oracle.com if you need additional information or have any
# questions. # questions.
# #
tzdata2021e tzdata2021a

View File

@@ -53,6 +53,9 @@
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94. # Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
# https://www.jstor.org/stable/1774359 # https://www.jstor.org/stable/1774359
# #
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
# European-style abbreviations are commonly used along the Mediterranean. # European-style abbreviations are commonly used along the Mediterranean.
# For sub-Saharan Africa abbreviations were less standardized. # For sub-Saharan Africa abbreviations were less standardized.
# Previous editions of this database used WAT, CAT, SAT, and EAT # Previous editions of this database used WAT, CAT, SAT, and EAT
@@ -173,9 +176,8 @@ Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena
# Zone NAME STDOFF RULES FORMAT [UNTIL] # Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Africa/Abidjan -0:16:08 - LMT 1912 Zone Africa/Abidjan -0:16:08 - LMT 1912
0:00 - GMT 0:00 - GMT
Link Africa/Abidjan Africa/Accra # Ghana
Link Africa/Abidjan Africa/Bamako # Mali Link Africa/Abidjan Africa/Bamako # Mali
Link Africa/Abidjan Africa/Banjul # The Gambia Link Africa/Abidjan Africa/Banjul # Gambia
Link Africa/Abidjan Africa/Conakry # Guinea Link Africa/Abidjan Africa/Conakry # Guinea
Link Africa/Abidjan Africa/Dakar # Senegal Link Africa/Abidjan Africa/Dakar # Senegal
Link Africa/Abidjan Africa/Freetown # Sierra Leone Link Africa/Abidjan Africa/Freetown # Sierra Leone
@@ -402,8 +404,93 @@ Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
# Gabon # Gabon
# See Africa/Lagos. # See Africa/Lagos.
# The Gambia # Gambia
# See Africa/Abidjan.
# Ghana # Ghana
# From P Chan (2020-11-20):
# Interpretation Amendment Ordinance, 1915 (No.24 of 1915) [1915-11-02]
# Ordinances of the Gold Coast, Ashanti, Northern Territories 1915, p 69-71
# https://books.google.com/books?id=ErA-AQAAIAAJ&pg=PA70
# This Ordinance added "'Time' shall mean Greenwich Mean Time" to the
# Interpretation Ordinance, 1876.
#
# Determination of the Time Ordinance, 1919 (No. 18 of 1919) [1919-11-24]
# Ordinances of the Gold Coast, Ashanti, Northern Territories 1919, p 75-76
# https://books.google.com/books?id=MbA-AQAAIAAJ&pg=PA75
# This Ordinance removed the previous definition of time and introduced DST.
#
# Time Determination Ordinance (Cap. 214)
# The Laws of the Gold Coast (including Togoland Under British Mandate)
# Vol. II (1937), p 2328
# https://books.google.com/books?id=Z7M-AQAAIAAJ&pg=PA2328
# Revised edition of the 1919 Ordinance.
#
# Time Determination (Amendment) Ordinance, 1940 (No. 9 of 1940) [1940-04-06]
# Annual Volume of the Laws of the Gold Coast:
# Containing All Legislation Enacted During Year 1940, p 22
# https://books.google.com/books?id=1ao-AQAAIAAJ&pg=PA22
# This Ordinance changed the forward transition from September to May.
#
# Defence (Time Determination Ordinance Amendment) Regulations, 1942
# (Regulations No. 6 of 1942) [1942-01-31, commenced on 1942-02-08]
# Annual Volume of the Laws of the Gold Coast:
# Containing All Legislation Enacted During Year 1942, p 48
# https://books.google.com/books?id=Das-AQAAIAAJ&pg=PA48
# These regulations advanced the [standard] time by thirty minutes.
#
# Defence (Time Determination Ordinance Amendment (No.2)) Regulations,
# 1942 (Regulations No. 28 of 1942) [1942-04-25]
# Annual Volume of the Laws of the Gold Coast:
# Containing All Legislation Enacted During Year 1942, p 87
# https://books.google.com/books?id=Das-AQAAIAAJ&pg=PA87
# These regulations abolished DST and changed the time to GMT+0:30.
#
# Defence (Revocation) (No.4) Regulations, 1945 (Regulations No. 45 of
# 1945) [1945-10-24, commenced on 1946-01-06]
# Annual Volume of the Laws of the Gold Coast:
# Containing All Legislation Enacted During Year 1945, p 256
# https://books.google.com/books?id=9as-AQAAIAAJ&pg=PA256
# These regulations revoked the previous two sets of Regulations.
#
# Time Determination (Amendment) Ordinance, 1945 (No. 18 of 1945) [1946-01-06]
# Annual Volume of the Laws of the Gold Coast:
# Containing All Legislation Enacted During Year 1945, p 69
# https://books.google.com/books?id=9as-AQAAIAAJ&pg=PA69
# This Ordinance abolished DST.
#
# Time Determination (Amendment) Ordinance, 1950 (No. 26 of 1950) [1950-07-22]
# Annual Volume of the Laws of the Gold Coast:
# Containing All Legislation Enacted During Year 1950, p 35
# https://books.google.com/books?id=e60-AQAAIAAJ&pg=PA35
# This Ordinance restored DST but with thirty minutes offset.
#
# Time Determination Ordinance (Cap. 264)
# The Laws of the Gold Coast, Vol. V (1954), p 380
# https://books.google.com/books?id=Mqc-AQAAIAAJ&pg=PA380
# Revised edition of the Time Determination Ordinance.
#
# Time Determination (Amendment) Ordinance, 1956 (No. 21 of 1956) [1956-08-29]
# Annual Volume of the Ordinances of the Gold Coast Enacted During the
# Year 1956, p 83
# https://books.google.com/books?id=VLE-AQAAIAAJ&pg=PA83
# This Ordinance abolished DST.
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
Rule Ghana 1919 only - Nov 24 0:00 0:20 +0020
Rule Ghana 1920 1942 - Jan 1 2:00 0 GMT
Rule Ghana 1920 1939 - Sep 1 2:00 0:20 +0020
Rule Ghana 1940 1941 - May 1 2:00 0:20 +0020
Rule Ghana 1950 1955 - Sep 1 2:00 0:30 +0030
Rule Ghana 1951 1956 - Jan 1 2:00 0 GMT
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Africa/Accra -0:00:52 - LMT 1915 Nov 2
0:00 Ghana %s 1942 Feb 8
0:30 - +0030 1946 Jan 6
0:00 Ghana %s
# Guinea # Guinea
# See Africa/Abidjan. # See Africa/Abidjan.
@@ -668,7 +755,7 @@ Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
# See Africa/Nairobi. # See Africa/Nairobi.
# Morocco # Morocco
# See Africa/Ceuta for Spanish Morocco. # See the 'europe' file for Spanish Morocco (Africa/Ceuta).
# From Alex Krivenyshev (2008-05-09): # From Alex Krivenyshev (2008-05-09):
# Here is an article that Morocco plan to introduce Daylight Saving Time between # Here is an article that Morocco plan to introduce Daylight Saving Time between
@@ -1318,21 +1405,23 @@ Zone Africa/Lagos 0:13:35 - LMT 1905 Jul 1
0:13:35 - LMT 1914 Jan 1 0:13:35 - LMT 1914 Jan 1
0:30 - +0030 1919 Sep 1 0:30 - +0030 1919 Sep 1
1:00 - WAT 1:00 - WAT
Link Africa/Lagos Africa/Bangui # Central African Republic Link Africa/Lagos Africa/Bangui # Central African Republic
Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo
Link Africa/Lagos Africa/Douala # Cameroon Link Africa/Lagos Africa/Douala # Cameroon
Link Africa/Lagos Africa/Kinshasa # Dem. Rep. of the Congo (west) Link Africa/Lagos Africa/Kinshasa # Dem. Rep. of the Congo (west)
Link Africa/Lagos Africa/Libreville # Gabon Link Africa/Lagos Africa/Libreville # Gabon
Link Africa/Lagos Africa/Luanda # Angola Link Africa/Lagos Africa/Luanda # Angola
Link Africa/Lagos Africa/Malabo # Equatorial Guinea Link Africa/Lagos Africa/Malabo # Equatorial Guinea
Link Africa/Lagos Africa/Niamey # Niger Link Africa/Lagos Africa/Niamey # Niger
Link Africa/Lagos Africa/Porto-Novo # Benin Link Africa/Lagos Africa/Porto-Novo # Benin
# Réunion # Réunion
# Zone NAME STDOFF RULES FORMAT [UNTIL] # Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
4:00 - +04 4:00 - +04
# #
# Crozet Islands also observes Réunion time; see the 'antarctica' file.
#
# Scattered Islands (Îles Éparses) administered from Réunion are as follows. # Scattered Islands (Îles Éparses) administered from Réunion are as follows.
# The following information about them is taken from # The following information about them is taken from
# Îles Éparses (<http://www.outre-mer.gouv.fr/domtom/ile.htm>, 1997-07-22, # Îles Éparses (<http://www.outre-mer.gouv.fr/domtom/ile.htm>, 1997-07-22,
@@ -1424,8 +1513,8 @@ Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8 Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
1:30 - SAST 1903 Mar 1:30 - SAST 1903 Mar
2:00 SA SAST 2:00 SA SAST
Link Africa/Johannesburg Africa/Maseru # Lesotho Link Africa/Johannesburg Africa/Maseru # Lesotho
Link Africa/Johannesburg Africa/Mbabane # Eswatini Link Africa/Johannesburg Africa/Mbabane # Eswatini
# #
# Marion and Prince Edward Is # Marion and Prince Edward Is
# scientific station since 1947 # scientific station since 1947
@@ -1461,13 +1550,12 @@ Zone Africa/Khartoum 2:10:08 - LMT 1931
3:00 - EAT 2017 Nov 1 3:00 - EAT 2017 Nov 1
2:00 - CAT 2:00 - CAT
# South Sudan
# From Steffen Thorsen (2021-01-18): # From Steffen Thorsen (2021-01-18):
# "South Sudan will change its time zone by setting the clock back 1 # "South Sudan will change its time zone by setting the clock back 1
# hour on February 1, 2021...." # hour on February 1, 2021...."
# from https://eyeradio.org/south-sudan-adopts-new-time-zone-makuei/ # from https://eyeradio.org/south-sudan-adopts-new-time-zone-makuei/
# South Sudan
# Zone NAME STDOFF RULES FORMAT [UNTIL] # Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Africa/Juba 2:06:28 - LMT 1931 Zone Africa/Juba 2:06:28 - LMT 1931
2:00 Sudan CA%sT 2000 Jan 15 12:00 2:00 Sudan CA%sT 2000 Jan 15 12:00
@@ -1572,7 +1660,7 @@ Rule Tunisia 2005 only - Sep 30 1:00s 0 -
Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S
Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 - Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
# See Europe/Paris commentary for PMT-related transitions. # See Europe/Paris for PMT-related transitions.
# Zone NAME STDOFF RULES FORMAT [UNTIL] # Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Africa/Tunis 0:40:44 - LMT 1881 May 12 Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time

View File

@@ -171,7 +171,7 @@ Zone Antarctica/Mawson 0 - -00 1954 Feb 13
# #
# Alfred Faure, Possession Island, Crozet Islands, -462551+0515152, since 1964; # Alfred Faure, Possession Island, Crozet Islands, -462551+0515152, since 1964;
# sealing & whaling stations operated variously 1802/1911+; # sealing & whaling stations operated variously 1802/1911+;
# see Asia/Dubai. # see Indian/Reunion.
# #
# Martin-de-Viviès, Amsterdam Island, -374105+0773155, since 1950 # Martin-de-Viviès, Amsterdam Island, -374105+0773155, since 1950
# Port-aux-Français, Kerguelen Islands, -492110+0701303, since 1951; # Port-aux-Français, Kerguelen Islands, -492110+0701303, since 1951;
@@ -185,7 +185,17 @@ Zone Indian/Kerguelen 0 - -00 1950 # Port-aux-Français
5:00 - +05 5:00 - +05
# #
# year-round base in the main continent # year-round base in the main continent
# Dumont d'Urville - see Pacific/Port_Moresby. # Dumont d'Urville, Île des Pétrels, -6640+14001, since 1956-11
# <https://en.wikipedia.org/wiki/Dumont_d'Urville_Station> (2005-12-05)
#
# Another base at Port-Martin, 50km east, began operation in 1947.
# It was destroyed by fire on 1952-01-14.
#
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Antarctica/DumontDUrville 0 - -00 1947
10:00 - +10 1952 Jan 14
0 - -00 1956 Nov
10:00 - +10
# France & Italy - year-round base # France & Italy - year-round base
# Concordia, -750600+1232000, since 2005 # Concordia, -750600+1232000, since 2005
@@ -201,7 +211,20 @@ Zone Indian/Kerguelen 0 - -00 1950 # Port-aux-Français
# Zuchelli, Terra Nova Bay, -744140+1640647, since 1986 # Zuchelli, Terra Nova Bay, -744140+1640647, since 1986
# Japan - year-round bases # Japan - year-round bases
# See Asia/Riyadh. # Syowa (also known as Showa), -690022+0393524, since 1957
#
# From Hideyuki Suzuki (1999-02-06):
# In all Japanese stations, +0300 is used as the standard time.
#
# Syowa station, which is the first antarctic station of Japan,
# was established on 1957-01-29. Since Syowa station is still the main
# station of Japan, it's appropriate for the principal location.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Antarctica/Syowa 0 - -00 1957 Jan 29
3:00 - +03
# See:
# NIPR Antarctic Research Activities (1999-08-17)
# http://www.nipr.ac.jp/english/ara01.html
# S Korea - year-round base # S Korea - year-round base
# Jang Bogo, Terra Nova Bay, -743700+1641205 since 2014 # Jang Bogo, Terra Nova Bay, -743700+1641205 since 2014

View File

@@ -57,6 +57,9 @@
# Byalokoz EL. New Counting of Time in Russia since July 1, 1919. # Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
# (See the 'europe' file for a fuller citation.) # (See the 'europe' file for a fuller citation.)
# #
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
# The following alphabetic abbreviations appear in these tables # The following alphabetic abbreviations appear in these tables
# (corrections are welcome): # (corrections are welcome):
# std dst # std dst
@@ -2254,14 +2257,6 @@ Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
# From Paul Eggert (2013-12-11): # From Paul Eggert (2013-12-11):
# As Steffen suggested, consider the past 21-month experiment to be DST. # As Steffen suggested, consider the past 21-month experiment to be DST.
# From Steffen Thorsen (2021-09-24):
# The Jordanian Government announced yesterday that they will start DST
# in February instead of March:
# https://petra.gov.jo/Include/InnerPage.jsp?ID=37683&lang=en&name=en_news (English)
# https://petra.gov.jo/Include/InnerPage.jsp?ID=189969&lang=ar&name=news (Arabic)
# From the Arabic version, it seems to say it would be at midnight
# (assume 24:00) on the last Thursday in February, starting from 2022.
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # Rule NAME FROM TO - IN ON AT SAVE LETTER/S
Rule Jordan 1973 only - Jun 6 0:00 1:00 S Rule Jordan 1973 only - Jun 6 0:00 1:00 S
Rule Jordan 1973 1975 - Oct 1 0:00 0 - Rule Jordan 1973 1975 - Oct 1 0:00 0 -
@@ -2292,9 +2287,8 @@ Rule Jordan 2004 only - Oct 15 0:00s 0 -
Rule Jordan 2005 only - Sep lastFri 0:00s 0 - Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 - Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 -
Rule Jordan 2013 only - Dec 20 0:00 0 - Rule Jordan 2013 only - Dec 20 0:00 0 -
Rule Jordan 2014 2021 - Mar lastThu 24:00 1:00 S Rule Jordan 2014 max - Mar lastThu 24:00 1:00 S
Rule Jordan 2014 max - Oct lastFri 0:00s 0 - Rule Jordan 2014 max - Oct lastFri 0:00s 0 -
Rule Jordan 2022 max - Feb lastThu 24:00 1:00 S
# Zone NAME STDOFF RULES FORMAT [UNTIL] # Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Amman 2:23:44 - LMT 1931 Zone Asia/Amman 2:23:44 - LMT 1931
2:00 Jordan EE%sT 2:00 Jordan EE%sT
@@ -2769,8 +2763,7 @@ Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
# #
# peninsular Malaysia # peninsular Malaysia
# taken from Mok Ly Yng (2003-10-30) # taken from Mok Ly Yng (2003-10-30)
# https://web.archive.org/web/20190822231045/http://www.math.nus.edu.sg/~mathelmr/teaching/timezone.html # http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
# This agrees with Singapore since 1905-06-01.
# Zone NAME STDOFF RULES FORMAT [UNTIL] # Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1 Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
6:55:25 - SMT 1905 Jun 1 # Singapore M.T. 6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
@@ -3409,6 +3402,11 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# shall [end] on Oct 24th 2020 at 01:00AM by delaying the clock by 60 minutes. # shall [end] on Oct 24th 2020 at 01:00AM by delaying the clock by 60 minutes.
# http://www.palestinecabinet.gov.ps/portal/Meeting/Details/51584 # http://www.palestinecabinet.gov.ps/portal/Meeting/Details/51584
# From Tim Parenti (2020-10-20):
# Predict future fall transitions at 01:00 on the Saturday preceding October's
# last Sunday (i.e., Sat>=24). This is consistent with our predictions since
# 2016, although the time of the change differed slightly in 2019.
# From Pierre Cashon (2020-10-20): # From Pierre Cashon (2020-10-20):
# The summer time this year started on March 28 at 00:00. # The summer time this year started on March 28 at 00:00.
# https://wafa.ps/ar_page.aspx?id=GveQNZa872839351758aGveQNZ # https://wafa.ps/ar_page.aspx?id=GveQNZa872839351758aGveQNZ
@@ -3421,17 +3419,6 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# For now, guess spring-ahead transitions are at 00:00 on the Saturday # For now, guess spring-ahead transitions are at 00:00 on the Saturday
# preceding March's last Sunday (i.e., Sat>=24). # preceding March's last Sunday (i.e., Sat>=24).
# From P Chan (2021-10-18):
# http://wafa.ps/Pages/Details/34701
# Palestine winter time will start from midnight 2021-10-29 (Thursday-Friday).
#
# From Heba Hemad, Palestine Ministry of Telecom & IT (2021-10-20):
# ... winter time will begin in Palestine from Friday 10-29, 01:00 AM
# by 60 minutes backwards.
#
# From Paul Eggert (2021-10-20):
# Guess future fall transitions on October's last Friday at 01:00.
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # Rule NAME FROM TO - IN ON AT SAVE LETTER/S
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 - Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 -
@@ -3467,8 +3454,7 @@ Rule Palestine 2016 2018 - Oct Sat>=24 1:00 0 -
Rule Palestine 2019 only - Mar 29 0:00 1:00 S Rule Palestine 2019 only - Mar 29 0:00 1:00 S
Rule Palestine 2019 only - Oct Sat>=24 0:00 0 - Rule Palestine 2019 only - Oct Sat>=24 0:00 0 -
Rule Palestine 2020 max - Mar Sat>=24 0:00 1:00 S Rule Palestine 2020 max - Mar Sat>=24 0:00 1:00 S
Rule Palestine 2020 only - Oct 24 1:00 0 - Rule Palestine 2020 max - Oct Sat>=24 1:00 0 -
Rule Palestine 2021 max - Oct lastFri 1:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL] # Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
@@ -3537,12 +3523,6 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
# influence of the sources. There is no current abbreviation for DST, # influence of the sources. There is no current abbreviation for DST,
# so use "PDT", the usual American style. # so use "PDT", the usual American style.
# From P Chan (2021-05-10):
# Here's a fairly comprehensive article in Japanese:
# https://wiki.suikawiki.org/n/Philippine%20Time
# From Paul Eggert (2021-05-10):
# The info in the Japanese table has not been absorbed (yet) below.
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S # Rule NAME FROM TO - IN ON AT SAVE LETTER/S
Rule Phil 1936 only - Nov 1 0:00 1:00 D Rule Phil 1936 only - Nov 1 0:00 1:00 D
Rule Phil 1937 only - Feb 1 0:00 0 S Rule Phil 1937 only - Feb 1 0:00 0 S
@@ -3609,13 +3589,12 @@ Link Asia/Qatar Asia/Bahrain
# Zone NAME STDOFF RULES FORMAT [UNTIL] # Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14 Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
3:00 - +03 3:00 - +03
Link Asia/Riyadh Antarctica/Syowa
Link Asia/Riyadh Asia/Aden # Yemen Link Asia/Riyadh Asia/Aden # Yemen
Link Asia/Riyadh Asia/Kuwait Link Asia/Riyadh Asia/Kuwait
# Singapore # Singapore
# taken from Mok Ly Yng (2003-10-30) # taken from Mok Ly Yng (2003-10-30)
# https://web.archive.org/web/20190822231045/http://www.math.nus.edu.sg/~mathelmr/teaching/timezone.html # http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
# Zone NAME STDOFF RULES FORMAT [UNTIL] # Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1 Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
6:55:25 - SMT 1905 Jun 1 # Singapore M.T. 6:55:25 - SMT 1905 Jun 1 # Singapore M.T.

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