Skip to content
This repository has been archived by the owner. It is now read-only.

Merge jdk:master #131

Closed
wants to merge 34 commits into from
Closed
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
4c09525
8256108: Create implementation for NSAccessibilityElement protocol peer
Nov 20, 2020
fa240f2
8256594: Unexpected warning: SIGSEGV handler flags expected:SA_RESTAR…
Nov 20, 2020
02adaa5
8255885: Metaspace: freelist commit counter is not updated when purging
tstuefe Nov 20, 2020
5fedb69
8250888: nsk/jvmti/scenarios/general_functions/GF08/gf08t001/TestDriv…
lgxbslgx Nov 20, 2020
c45ab1a
8256393: Github Actions build on Linux should define OS and GCC versions
rwestberg Nov 20, 2020
8e7a855
8255526: Enable jcheck whitespace checking of build system files
magicus Nov 20, 2020
f576628
8256633: Fix product build on Windows+Arm64
lewurm Nov 20, 2020
a25fb03
8256406: G1 x86 C1/Interpreter post write barrier always uses 32 bit …
Nov 20, 2020
eb35ade
6232281: -XX:-UseLoopSafepoints causes assert(v_false,"Parse::remove_…
robcasloz Nov 20, 2020
10ba541
8256727: ZGC: Clean out dead code after JDK-8212879
stefank Nov 20, 2020
aeba925
8256416: ZGC: Lower ZMarkCompleteTimeout
pliden Nov 20, 2020
266dea0
8256688: Shenandoah: Lock rank inversion after JDK-8212879
zhengyu123 Nov 20, 2020
b99fd4c
8033441: print line numbers with -XX:+PrintOptoAssembly
Nov 20, 2020
98a5d5a
8256664: Shenandoah: Cleanup after JDK-8212879
zhengyu123 Nov 20, 2020
e7c7469
8246378: [Windows] assert on MethodHandle logging code
coleenp Nov 20, 2020
ff00c59
8256569: Add C2 compiler stress flags to CTW
iignatev Nov 20, 2020
2ae3e51
8229845: Decrease memory consumption of BigInteger.toString()
Nov 20, 2020
11bfdc5
8235304: JPackage Windows test should be added to set Publisher
Nov 20, 2020
2c3a2be
8211449: Correction to the spec of implicit negative subpattern in De…
naotoj Nov 20, 2020
4dd71ae
8256803: ProblemList runtime/ReservedStack/ReservedStackTestCompiler.…
Nov 20, 2020
19b2898
8256751: Incremental rebuild with precompiled header fails when touch…
erikj79 Nov 20, 2020
cc0ed40
8037384: Fix wording in Javadoc of java.io.Serializable
Nov 20, 2020
5ad1e22
8256658: Shenandoah: Deadlock between nmethod_entry_barrier and concu…
zhengyu123 Nov 20, 2020
8d9cf48
8255908: ExceptionInInitializerError due to UncheckedIOException whil…
Nov 20, 2020
b21b96d
8256507: Add a micro benchmark for JDK-8153005
wangweij Nov 20, 2020
be6c893
8256183: InputStream.skipNBytes is missing @since 12
c-cleary Nov 20, 2020
e6fa85b
8256058: Improve vector register handling in RegisterMap::pd_location…
Nov 20, 2020
503590f
8256056: Deoptimization stub doesn't save vector registers on x86
Nov 20, 2020
f79e9d4
8256061: RegisterSaver::save_live_registers() omits upper halves of Z…
Nov 20, 2020
41c0587
8255367: C2: Deoptimization during vector box construction is broken
Nov 20, 2020
57025e6
8256073: Improve vector rematerialization support
Nov 20, 2020
86f3602
8256806: Shenandoah: optimize shenandoah/jni/TestPinnedGarbage.java test
shipilev Nov 20, 2020
14de791
8255934: JConsole 14 and greater fails to connect to older JVM
Nov 20, 2020
f760929
Merge jdk:master
kevinrushforth Nov 21, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -14,7 +14,7 @@ on:
jobs:
prerequisites:
name: Prerequisites
runs-on: "ubuntu-latest"
runs-on: "ubuntu-20.04"
outputs:
should_run: ${{ steps.check_submit.outputs.should_run }}
bundle_id: ${{ steps.check_bundle_id.outputs.bundle_id }}
@@ -88,7 +88,7 @@ jobs:
if: steps.check_submit.outputs.should_run != 'false' && steps.jtreg.outputs.cache-hit != 'true'

- name: Build jtreg
run: sh make/build-all.sh ${JAVA_HOME}
run: sh make/build-all.sh ${JAVA_HOME_8_X64}
working-directory: jtreg
if: steps.check_submit.outputs.should_run != 'false' && steps.jtreg.outputs.cache-hit != 'true'

@@ -106,7 +106,7 @@ jobs:

linux_x64_build:
name: Linux x64
runs-on: "ubuntu-latest"
runs-on: "ubuntu-20.04"
needs: prerequisites
if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_linux_x64 != 'false'

@@ -189,7 +189,9 @@ jobs:
path: gtest

- name: Install dependencies
run: sudo apt-get install libxrandr-dev libxtst-dev libcups2-dev libasound2-dev
run: |
sudo apt-get install gcc-10=10.2.0-5ubuntu1~20.04 g++-10=10.2.0-5ubuntu1~20.04 libxrandr-dev libxtst-dev libcups2-dev libasound2-dev
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10
- name: Configure
run: >
@@ -221,7 +223,7 @@ jobs:

linux_x64_test:
name: Linux x64
runs-on: "ubuntu-latest"
runs-on: "ubuntu-20.04"
needs:
- prerequisites
- linux_x64_build
@@ -400,7 +402,7 @@ jobs:

linux_aarch64_build:
name: Linux aarch64
runs-on: "ubuntu-latest"
runs-on: "ubuntu-20.04"
needs:
- prerequisites
- linux_x64_build
@@ -536,7 +538,7 @@ jobs:

linux_arm_build:
name: Linux arm
runs-on: "ubuntu-latest"
runs-on: "ubuntu-20.04"
needs:
- prerequisites
- linux_x64_build
@@ -672,7 +674,7 @@ jobs:

linux_s390x_build:
name: Linux s390x
runs-on: "ubuntu-latest"
runs-on: "ubuntu-20.04"
needs:
- prerequisites
- linux_x64_build
@@ -808,7 +810,7 @@ jobs:

linux_ppc64le_build:
name: Linux ppc64le
runs-on: "ubuntu-latest"
runs-on: "ubuntu-20.04"
needs:
- prerequisites
- linux_x64_build
@@ -944,7 +946,7 @@ jobs:

linux_x86_build:
name: Linux x86
runs-on: "ubuntu-latest"
runs-on: "ubuntu-20.04"
needs: prerequisites
if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_linux_x86 != 'false'

@@ -1018,7 +1020,8 @@ jobs:
run: |
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install gcc-multilib g++-multilib libfreetype6-dev:i386 libxrandr-dev:i386 libxtst-dev:i386 libtiff-dev:i386 libcupsimage2-dev:i386 libcups2-dev:i386 libasound2-dev:i386
sudo apt-get install gcc-10-multilib g++-10-multilib libfreetype6-dev:i386 libxrandr-dev:i386 libxtst-dev:i386 libtiff-dev:i386 libcupsimage2-dev:i386 libcups2-dev:i386 libasound2-dev:i386
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10
- name: Configure
run: >
@@ -1051,7 +1054,7 @@ jobs:

linux_x86_test:
name: Linux x86
runs-on: "ubuntu-latest"
runs-on: "ubuntu-20.04"
needs:
- prerequisites
- linux_x86_build
@@ -1842,7 +1845,7 @@ jobs:

artifacts:
name: Post-process artifacts
runs-on: "ubuntu-latest"
runs-on: "ubuntu-20.04"
if: always()
continue-on-error: true
needs:
@@ -33,4 +33,5 @@ version=0
domain=openjdk.org

[checks "whitespace"]
files=.*\.cpp|.*\.hpp|.*\.c|.*\.h|.*\.java|.*\.cc|.*\.hh|.*\.m|.*\.mm
files=.*\.cpp|.*\.hpp|.*\.c|.*\.h|.*\.java|.*\.cc|.*\.hh|.*\.m|.*\.mm|.*\.gmk|.*\.m4|.*\.ac|Makefile
ignore-tabs=.*\.gmk|Makefile
@@ -159,7 +159,7 @@ AC_DEFUN_ONCE([JVM_FEATURES_PARSE_OPTIONS],
# Likewise, check for deprecated arguments.
m4_foreach(FEATURE, m4_split(jvm_features_deprecated), [
AC_ARG_ENABLE(jvm-feature-FEATURE, AS_HELP_STRING(
[--enable-jvm-feature-FEATURE],
[--enable-jvm-feature-FEATURE],
[Deprecated. Option is kept for backwards compatibility and is ignored]))
m4_define(FEATURE_SHELL, [enable_jvm_feature_]m4_translit(FEATURE, -, _))
@@ -805,13 +805,15 @@ define SetupNativeCompilationBody
-include $$($1_PCH_DEPS_TARGETS_FILE)

$1_PCH_COMMAND := $$($1_CC) $$($1_CFLAGS) $$($1_EXTRA_CFLAGS) $$($1_SYSROOT_CFLAGS) \
$$($1_OPT_CFLAGS) -x c++-header -c $(C_FLAG_DEPS) $$($1_PCH_DEPS_FILE)
$$($1_OPT_CFLAGS) -x c++-header -c $(C_FLAG_DEPS) \
$$(addsuffix .tmp, $$($1_PCH_DEPS_FILE))

$$($1_PCH_FILE): $$($1_PRECOMPILED_HEADER) $$($1_COMPILE_VARDEPS_FILE)
$$(call LogInfo, Generating precompiled header)
$$(call MakeDir, $$(@D))
$$(call ExecuteWithLog, $$@, $$(call MakeCommandRelative, \
$$($1_PCH_COMMAND) $$< -o $$@))
$$(call fix-deps-file, $$($1_PCH_DEPS_FILE))
$(SED) $(DEPENDENCY_TARGET_SED_PATTERN) $$($1_PCH_DEPS_FILE) \
> $$($1_PCH_DEPS_TARGETS_FILE)

@@ -27,7 +27,7 @@
# In pre-JDK9 releases, Oracle JDK has had a separately downloadable set
# of policy files which has been a nightmare for deployment.
#
# We now create 2 complete initial sets of policy files and package into
# We now create 2 complete initial sets of policy files and package into
# 2 different directories. The crypto.policy Security property will select
# the active policy.
#
@@ -39,7 +39,7 @@ RENDERPERFLCD_CLASSES = $(CLASSES)/renderperf/RenderPerfLCDTest.class
RENDERPERF_SOURCES = $(SOURCEPATH)/renderperf/RenderPerfTest.java
RENDERPERFLCD_SOURCES = $(SOURCEPATH)/renderperf/RenderPerfLCDTest.java

RENDERPERF_RESOURCES = $(CLASSES)/renderperf/images/duke.png
RENDERPERF_RESOURCES = $(CLASSES)/renderperf/images/duke.png

all: mkdirs $(DIST)/RenderPerfTest.jar $(DIST)/RenderPerfLCDTest.jar

@@ -504,8 +504,7 @@ class Address {
if (size == 0) // It's a byte
i->f(_ext.shift() >= 0, 12);
else {
if (_ext.shift() > 0)
assert(_ext.shift() == (int)size, "bad shift");
assert(_ext.shift() <= 0 || _ext.shift() == (int)size, "bad shift");
i->f(_ext.shift() > 0, 12);
}
i->f(0b10, 11, 10);
@@ -33,7 +33,6 @@
// Implementation of the platform-specific part of StubRoutines - for
// a description of how to extend it, see the stubRoutines.hpp file.

address StubRoutines::aarch64::_get_previous_fp_entry = NULL;
address StubRoutines::aarch64::_get_previous_sp_entry = NULL;

address StubRoutines::aarch64::_f2i_fixup = NULL;
@@ -43,7 +43,6 @@ class aarch64 {
friend class StubGenerator;

private:
static address _get_previous_fp_entry;
static address _get_previous_sp_entry;

static address _f2i_fixup;
@@ -77,11 +76,6 @@ class aarch64 {

public:

static address get_previous_fp_entry()
{
return _get_previous_fp_entry;
}

static address get_previous_sp_entry()
{
return _get_previous_sp_entry;
@@ -32,6 +32,7 @@
#include "gc/g1/heapRegion.hpp"
#include "interpreter/interp_masm.hpp"
#include "runtime/sharedRuntime.hpp"
#include "utilities/debug.hpp"
#include "utilities/macros.hpp"
#ifdef COMPILER1
#include "c1/c1_LIRAssembler.hpp"
@@ -264,6 +265,8 @@ void G1BarrierSetAssembler::g1_write_barrier_post(MacroAssembler* masm,
Register thread,
Register tmp,
Register tmp2) {
// Generated code assumes that buffer index is pointer sized.
STATIC_ASSERT(in_bytes(SATBMarkQueue::byte_width_of_index()) == sizeof(intptr_t));
#ifdef _LP64
assert(thread == r15_thread, "must be");
#endif // _LP64
@@ -314,18 +317,13 @@ void G1BarrierSetAssembler::g1_write_barrier_post(MacroAssembler* masm,

__ movb(Address(card_addr, 0), (int)G1CardTable::dirty_card_val());

__ cmpl(queue_index, 0);
__ jcc(Assembler::equal, runtime);
__ subl(queue_index, wordSize);
__ movptr(tmp2, buffer);
#ifdef _LP64
__ movslq(rscratch1, queue_index);
__ addq(tmp2, rscratch1);
__ movq(Address(tmp2, 0), card_addr);
#else
__ addl(tmp2, queue_index);
__ movl(Address(tmp2, 0), card_addr);
#endif
__ movptr(tmp2, queue_index);
__ testptr(tmp2, tmp2);
__ jcc(Assembler::zero, runtime);
__ subptr(tmp2, wordSize);
__ movptr(queue_index, tmp2);
__ addptr(tmp2, buffer);
__ movptr(Address(tmp2, 0), card_addr);
__ jmp(done);

__ bind(runtime);
@@ -453,6 +451,9 @@ void G1BarrierSetAssembler::gen_post_barrier_stub(LIR_Assembler* ce, G1PostBarri
#define __ sasm->

void G1BarrierSetAssembler::generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm) {
// Generated code assumes that buffer index is pointer sized.
STATIC_ASSERT(in_bytes(SATBMarkQueue::byte_width_of_index()) == sizeof(intptr_t));

__ prologue("g1_pre_barrier", false);
// arg0 : previous value of memory

@@ -528,6 +528,12 @@ void trace_method_handle_stub(const char* adaptername,
}
tty->cr();

// Note: We want to allow trace_method_handle from any call site.
// While trace_method_handle creates a frame, it may be entered
// without a PC on the stack top (e.g. not just after a call).
// Walking that frame could lead to failures due to that invalid PC.
// => carefully detect that frame when doing the stack walking

{
// dumping last frame with frame::describe

@@ -536,43 +542,38 @@ void trace_method_handle_stub(const char* adaptername,
PRESERVE_EXCEPTION_MARK; // may not be needed but safer and inexpensive here
FrameValues values;

// Note: We want to allow trace_method_handle from any call site.
// While trace_method_handle creates a frame, it may be entered
// without a PC on the stack top (e.g. not just after a call).
// Walking that frame could lead to failures due to that invalid PC.
// => carefully detect that frame when doing the stack walking

// Current C frame
frame cur_frame = os::current_frame();

// Robust search of trace_calling_frame (independant of inlining).
// Assumes saved_regs comes from a pusha in the trace_calling_frame.
assert(cur_frame.sp() < saved_regs, "registers not saved on stack ?");
frame trace_calling_frame = os::get_sender_for_C_frame(&cur_frame);
while (trace_calling_frame.fp() < saved_regs) {
trace_calling_frame = os::get_sender_for_C_frame(&trace_calling_frame);
}

// safely create a frame and call frame::describe
intptr_t *dump_sp = trace_calling_frame.sender_sp();
intptr_t *dump_fp = trace_calling_frame.link();

bool walkable = has_mh; // whether the traced frame shoud be walkable

if (walkable) {
// The previous definition of walkable may have to be refined
// if new call sites cause the next frame constructor to start
// failing. Alternatively, frame constructors could be
// modified to support the current or future non walkable
// frames (but this is more intrusive and is not considered as
// part of this RFE, which will instead use a simpler output).
frame dump_frame = frame(dump_sp, dump_fp);
dump_frame.describe(values, 1);
} else {
// Stack may not be walkable (invalid PC above FP):
// Add descriptions without building a Java frame to avoid issues
values.describe(-1, dump_fp, "fp for #1 <not parsed, cannot trust pc>");
values.describe(-1, dump_sp, "sp for #1");
if (cur_frame.fp() != 0) { // not walkable

// Robust search of trace_calling_frame (independent of inlining).
// Assumes saved_regs comes from a pusha in the trace_calling_frame.
assert(cur_frame.sp() < saved_regs, "registers not saved on stack ?");
frame trace_calling_frame = os::get_sender_for_C_frame(&cur_frame);
while (trace_calling_frame.fp() < saved_regs) {
trace_calling_frame = os::get_sender_for_C_frame(&trace_calling_frame);
}

// safely create a frame and call frame::describe
intptr_t *dump_sp = trace_calling_frame.sender_sp();
intptr_t *dump_fp = trace_calling_frame.link();

if (has_mh) {
// The previous definition of walkable may have to be refined
// if new call sites cause the next frame constructor to start
// failing. Alternatively, frame constructors could be
// modified to support the current or future non walkable
// frames (but this is more intrusive and is not considered as
// part of this RFE, which will instead use a simpler output).
frame dump_frame = frame(dump_sp, dump_fp);
dump_frame.describe(values, 1);
} else {
// Stack may not be walkable (invalid PC above FP):
// Add descriptions without building a Java frame to avoid issues
values.describe(-1, dump_fp, "fp for #1 <not parsed, cannot trust pc>");
values.describe(-1, dump_sp, "sp for #1");
}
}
values.describe(-1, entry_sp, "raw top of stack");

@@ -28,23 +28,35 @@

address RegisterMap::pd_location(VMReg reg) const {
if (reg->is_XMMRegister()) {
int regBase = reg->value() - ConcreteRegisterImpl::max_fpr;
if (regBase % 4 == 0) {
// Reads of the low and high 16 byte parts should be handled by location itself
// because they have separate callee saved entries.
// See RegisterSaver::save_live_registers().
return NULL;
int reg_base = reg->value() - ConcreteRegisterImpl::max_fpr;
int base_reg_enc = (reg_base / XMMRegisterImpl::max_slots_per_register);
assert(base_reg_enc >= 0 && base_reg_enc < XMMRegisterImpl::number_of_registers, "invalid XMMRegister: %d", base_reg_enc);
VMReg base_reg = as_XMMRegister(base_reg_enc)->as_VMReg();
intptr_t offset_in_bytes = (reg->value() - base_reg->value()) * VMRegImpl::stack_slot_size;
if (base_reg_enc > 15) {
if (offset_in_bytes == 0) {
return NULL; // ZMM16-31 are stored in full.
}
} else {
if (offset_in_bytes == 0 || offset_in_bytes == 16 || offset_in_bytes == 32) {
// Reads of the low and high 16 byte parts should be handled by location itself because
// they have separate callee saved entries (see RegisterSaver::save_live_registers()).
return NULL;
}
// The upper part of YMM0-15 and ZMM0-15 registers are saved separately in the frame.
if (offset_in_bytes > 32) {
base_reg = base_reg->next(8);
offset_in_bytes -= 32;
} else if (offset_in_bytes > 16) {
base_reg = base_reg->next(4);
offset_in_bytes -= 16;
} else {
// XMM0-15 case (0 < offset_in_bytes < 16). No need to adjust base register (or offset).
}
}
VMReg baseReg = as_XMMRegister(regBase / XMMRegisterImpl::max_slots_per_register)->as_VMReg();
intptr_t offset = (reg->value() - baseReg->value()) * VMRegImpl::stack_slot_size; // offset in bytes
if (offset >= 16) {
// The high part of YMM registers are saved in a their own area in the frame
baseReg = baseReg->next()->next()->next()->next();
offset -= 16;
}
address baseLocation = location(baseReg);
if (baseLocation != NULL) {
return baseLocation + offset;
address base_location = location(base_reg);
if (base_location != NULL) {
return base_location + offset_in_bytes;
}
}
return NULL;