Skip to content

Commit 7c73fff

Browse files
committedNov 25, 2020
8256486: Linux/Windows-x86 builds broken after JDK-8254231
Reviewed-by: shade
1 parent 461c5fc commit 7c73fff

12 files changed

+120
-40
lines changed
 

‎src/hotspot/cpu/x86/assembler_x86.cpp

+19-19
Original file line numberDiff line numberDiff line change
@@ -8040,6 +8040,25 @@ void Assembler::vzeroupper_uncached() {
80408040
}
80418041
}
80428042

8043+
void Assembler::fld_x(Address adr) {
8044+
InstructionMark im(this);
8045+
emit_int8((unsigned char)0xDB);
8046+
emit_operand32(rbp, adr);
8047+
}
8048+
8049+
void Assembler::fstp_x(Address adr) {
8050+
InstructionMark im(this);
8051+
emit_int8((unsigned char)0xDB);
8052+
emit_operand32(rdi, adr);
8053+
}
8054+
8055+
void Assembler::emit_operand32(Register reg, Address adr) {
8056+
assert(reg->encoding() < 8, "no extended registers");
8057+
assert(!adr.base_needs_rex() && !adr.index_needs_rex(), "no extended registers");
8058+
emit_operand(reg, adr._base, adr._index, adr._scale, adr._disp,
8059+
adr._rspec);
8060+
}
8061+
80438062
#ifndef _LP64
80448063
// 32bit only pieces of the assembler
80458064

@@ -9860,25 +9879,6 @@ void Assembler::decq(Address dst) {
98609879
emit_operand(rcx, dst);
98619880
}
98629881

9863-
void Assembler::fld_x(Address adr) {
9864-
InstructionMark im(this);
9865-
emit_int8((unsigned char)0xDB);
9866-
emit_operand32(rbp, adr);
9867-
}
9868-
9869-
void Assembler::fstp_x(Address adr) {
9870-
InstructionMark im(this);
9871-
emit_int8((unsigned char)0xDB);
9872-
emit_operand32(rdi, adr);
9873-
}
9874-
9875-
void Assembler::emit_operand32(Register reg, Address adr) {
9876-
assert(reg->encoding() < 8, "no extended registers");
9877-
assert(!adr.base_needs_rex() && !adr.index_needs_rex(), "no extended registers");
9878-
emit_operand(reg, adr._base, adr._index, adr._scale, adr._disp,
9879-
adr._rspec);
9880-
}
9881-
98829882
void Assembler::fxrstor(Address src) {
98839883
emit_int24(get_prefixq(src), 0x0F, (unsigned char)0xAE);
98849884
emit_operand(as_Register(1), src);

‎src/hotspot/cpu/x86/macroAssembler_x86.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,10 @@ void MacroAssembler::pushptr(AddressLiteral src) {
745745
}
746746
}
747747

748+
void MacroAssembler::reset_last_Java_frame(bool clear_fp) {
749+
reset_last_Java_frame(r15_thread, clear_fp);
750+
}
751+
748752
void MacroAssembler::set_last_Java_frame(Register last_java_sp,
749753
Register last_java_fp,
750754
address last_java_pc) {
@@ -2713,25 +2717,21 @@ void MacroAssembler::push_IU_state() {
27132717
pusha();
27142718
}
27152719

2716-
void MacroAssembler::reset_last_Java_frame(bool clear_fp) {
2717-
reset_last_Java_frame(r15_thread, clear_fp);
2718-
}
2719-
27202720
void MacroAssembler::reset_last_Java_frame(Register java_thread, bool clear_fp) { // determine java_thread register
27212721
if (!java_thread->is_valid()) {
27222722
java_thread = rdi;
27232723
get_thread(java_thread);
27242724
}
27252725
// we must set sp to zero to clear frame
2726-
movslq(Address(java_thread, JavaThread::last_Java_sp_offset()), NULL_WORD);
2726+
movptr(Address(java_thread, JavaThread::last_Java_sp_offset()), NULL_WORD);
27272727
// must clear fp, so that compiled frames are not confused; it is
27282728
// possible that we need it only for debugging
27292729
if (clear_fp) {
2730-
movslq(Address(java_thread, JavaThread::last_Java_fp_offset()), NULL_WORD);
2730+
movptr(Address(java_thread, JavaThread::last_Java_fp_offset()), NULL_WORD);
27312731
}
27322732
// Always clear the pc because it could have been set by make_walkable()
2733-
movslq(Address(java_thread, JavaThread::last_Java_pc_offset()), NULL_WORD);
2734-
movslq(Address(java_thread, JavaThread::saved_rbp_address_offset()), NULL_WORD);
2733+
movptr(Address(java_thread, JavaThread::last_Java_pc_offset()), NULL_WORD);
2734+
movptr(Address(java_thread, JavaThread::saved_rbp_address_offset()), NULL_WORD);
27352735
vzeroupper();
27362736
}
27372737

‎src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -2985,3 +2985,11 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(address destination, const cha
29852985
// frame_size_words or bytes??
29862986
return RuntimeStub::new_runtime_stub(name, &buffer, frame_complete, frame_size_words, oop_maps, true);
29872987
}
2988+
2989+
BufferBlob* SharedRuntime::make_native_invoker(address call_target,
2990+
int shadow_space_bytes,
2991+
const GrowableArray<VMReg>& input_registers,
2992+
const GrowableArray<VMReg>& output_registers) {
2993+
ShouldNotCallThis();
2994+
return nullptr;
2995+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
24+
#include "precompiled.hpp"
25+
#include "prims/universalNativeInvoker.hpp"
26+
27+
void ProgrammableInvoker::Generator::generate() {
28+
Unimplemented();
29+
}
30+
31+
address ProgrammableInvoker::generate_adapter(jobject jabi, jobject jlayout) {
32+
Unimplemented();
33+
return nullptr;
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
24+
#include "precompiled.hpp"
25+
#include "prims/universalUpcallHandler.hpp"
26+
27+
address ProgrammableUpcallHandler::generate_upcall_stub(jobject rec, jobject jabi, jobject jlayout) {
28+
Unimplemented();
29+
return nullptr;
30+
}

‎src/hotspot/cpu/x86/x86_32.ad

+5
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,11 @@ int MachCallRuntimeNode::ret_addr_offset() {
311311
return sizeof_FFree_Float_Stack_All + 5 + pre_call_resets_size();
312312
}
313313

314+
int MachCallNativeNode::ret_addr_offset() {
315+
ShouldNotCallThis();
316+
return -1;
317+
}
318+
314319
//
315320
// Compute padding required for nodes which need alignment
316321
//

‎src/hotspot/share/prims/universalUpcallHandler.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -33,34 +33,34 @@
3333

3434
extern struct JavaVM_ main_vm;
3535

36-
JNI_ENTRY(void, ProgrammableUpcallHandler::upcall_helper(JNIEnv* env, jobject rec, address buff))
36+
void ProgrammableUpcallHandler::upcall_helper(JavaThread* thread, jobject rec, address buff) {
37+
JavaThread* THREAD = thread;
38+
ThreadInVMfromNative tiv(THREAD);
3739
const UpcallMethod& upcall_method = instance().upcall_method;
3840

39-
ResourceMark rm(thread);
41+
ResourceMark rm(THREAD);
4042
JavaValue result(T_VOID);
4143
JavaCallArguments args(2); // long = 2 slots
4244

4345
args.push_jobject(rec);
4446
args.push_long((jlong) buff);
4547

46-
JavaCalls::call_static(&result, upcall_method.klass, upcall_method.name, upcall_method.sig, &args, thread);
47-
JNI_END
48+
JavaCalls::call_static(&result, upcall_method.klass, upcall_method.name, upcall_method.sig, &args, CATCH);
49+
}
4850

4951
void ProgrammableUpcallHandler::attach_thread_and_do_upcall(jobject rec, address buff) {
5052
Thread* thread = Thread::current_or_null();
5153
bool should_detach = false;
52-
JNIEnv* p_env = nullptr;
5354
if (thread == nullptr) {
5455
JavaVM_ *vm = (JavaVM *)(&main_vm);
56+
JNIEnv* p_env = nullptr; // unused
5557
jint result = vm->functions->AttachCurrentThread(vm, (void**) &p_env, nullptr);
5658
guarantee(result == JNI_OK, "Could not attach thread for upcall. JNI error code: %d", result);
5759
should_detach = true;
5860
thread = Thread::current();
59-
} else {
60-
p_env = thread->as_Java_thread()->jni_environment();
6161
}
6262

63-
upcall_helper(p_env, rec, buff);
63+
upcall_helper(thread->as_Java_thread(), rec, buff);
6464

6565
if (should_detach) {
6666
JavaVM_ *vm = (JavaVM *)(&main_vm);

‎src/hotspot/share/prims/universalUpcallHandler.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
#include "asm/codeBuffer.hpp"
2828
#include "prims/foreign_globals.hpp"
2929

30+
class JavaThread;
31+
3032
class ProgrammableUpcallHandler {
3133
private:
3234
static constexpr CodeBuffer::csize_t upcall_stub_size = 1024;
@@ -41,7 +43,7 @@ class ProgrammableUpcallHandler {
4143

4244
static const ProgrammableUpcallHandler& instance();
4345

44-
static void upcall_helper(JNIEnv* env, jobject rec, address buff);
46+
static void upcall_helper(JavaThread* thread, jobject rec, address buff);
4547
static void attach_thread_and_do_upcall(jobject rec, address buff);
4648
public:
4749
static address generate_upcall_stub(jobject rec, jobject abi, jobject buffer_layout);

‎src/java.base/windows/native/libjava/jni_util_md.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ void* findEntryInProcess(const char* name) {
4949

5050
// first come, first served
5151
if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) {
52-
for (int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) {
52+
for (size_t i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) {
5353
HMODULE mod = hMods[i];
5454
FARPROC proc = GetProcAddress(mod, name);
5555
if(proc != NULL) {

‎test/micro/org/openjdk/bench/jdk/incubator/foreign/libUpcallsJNI.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
*/
2323
#include <jni.h>
2424
#include <stdlib.h>
25+
#include "jlong.h"
2526

2627
void blank(void (*cb)(void)) {
2728
cb();
@@ -67,17 +68,17 @@ JNIEXPORT jlong JNICALL Java_org_openjdk_bench_jdk_incubator_foreign_Upcalls_mak
6768
(*env)->ReleaseStringUTFChars(env, methodName, methodNameC);
6869
(*env)->ReleaseStringUTFChars(env, descriptor, descriptorC);
6970

70-
return (jlong) cb;
71+
return ptr_to_jlong(cb);
7172
}
7273

7374
JNIEXPORT void JNICALL Java_org_openjdk_bench_jdk_incubator_foreign_Upcalls_blank
7475
(JNIEnv *env, jclass cls, jlong cb) {
75-
JNICB jniCb = (JNICB) cb;
76+
JNICB jniCb = jlong_to_ptr(cb);
7677
(*env)->CallStaticVoidMethod(env, jniCb->holder, jniCb->mid);
7778
}
7879

7980
JNIEXPORT jint JNICALL Java_org_openjdk_bench_jdk_incubator_foreign_Upcalls_identity
8081
(JNIEnv *env, jclass cls, jint x, jlong cb) {
81-
JNICB jniCb = (JNICB) cb;
82+
JNICB jniCb = jlong_to_ptr(cb);
8283
return (*env)->CallStaticIntMethod(env, jniCb->holder, jniCb->mid, x);
8384
}

0 commit comments

Comments
 (0)
Please sign in to comment.