Skip to content

Commit 966fc82

Browse files
committed
8276799: Implementation of JEP 422: Linux/RISC-V Port
8282306: os::is_first_C_frame(frame*) crashes on invalid link access 8282477: [x86, aarch64] vmassert(_last_Java_pc == NULL, "already walkable"); fails with async profiler 8283865: riscv: Break down -XX:+UseRVB into seperate options for each bitmanip extension 8284068: riscv: should call Atomic::release_store in JavaThread::set_thread_state 8284937: riscv: should not allocate special register for temp 8285303: riscv: Incorrect register mask in call_native_base 8287418: riscv: Fix correctness issue of MacroAssembler::movptr 8297644: RISC-V: Compilation error when shenandoah is disabled 8291952: riscv: Remove PRAGMA_NONNULL_IGNORED 8285437: riscv: Fix MachNode size mismatch for MacroAssembler::verify_oops* 8285699: riscv: Provide information when hitting a HaltNode 8285711: riscv: RVC: Support disassembler show-bytes option 8287425: Remove unnecessary register push for MacroAssembler::check_klass_subtype_slow_path 8287552: riscv: Fix comment typo in li64 8287970: riscv: jdk/incubator/vector/*VectorTests failing 8290137: riscv: small refactoring for add_memory_int32/64 8290164: compiler/runtime/TestConstantsInError.java fails on riscv 8290496: riscv: Fix build warnings-as-errors with GCC 11 8291893: riscv: remove fence.i used in user space 8291947: riscv: fail to build after JDK-8290840 8292867: RISC-V: Simplify weak CAS return value handling 8293050: RISC-V: Remove redundant non-null assertions about macro-assembler 8293100: RISC-V: Need to save and restore callee-saved FloatRegisters in StubGenerator::generate_call_stub 8293474: RISC-V: Unify the way of moving function pointer 8293524: RISC-V: Use macro-assembler functions as appropriate 8293566: RISC-V: Clean up push and pop registers 8294012: RISC-V: get/put_native_u8 missing the case when address&7 is 6 8294083: RISC-V: Minimal build failed with --disable-precompiled-headers 8294086: RISC-V: Cleanup InstructionMark usages in the backend 8294087: RISC-V: RVC: Fix a potential alignment issue and add more alignment assertions for the patchable calls/nops 8294187: RISC-V: Unify all relocations for the backend into AbstractAssembler::relocate() 8294366: RISC-V: Partially mark out incompressible regions 8294430: RISC-V: Small refactoring for movptr_with_offset 8294492: RISC-V: Use li instead of patchable movptr at non-patchable callsites 8294679: RISC-V: Misc crash dump improvements 8295110: RISC-V: Mark out relocations as incompressible 8295270: RISC-V: Clean up and refactoring for assembler functions 8295396: RISC-V: Cleanup useless CompressibleRegions 8295926: RISC-V: C1: Fix LIRGenerator::do_LibmIntrinsic 8295968: RISC-V: Rename some assembler intrinsic functions for RVV 1.0 8296435: RISC-V: Small refactoring for increment/decrement 8296447: RISC-V: Make the operands order of vrsub_vx/vrsub_vi consistent with RVV 1.0 spec 8296448: RISC-V: Fix temp usages of heapbase register killed by MacroAssembler::en/decode_klass_not_null 8296602: RISC-V: improve performance of copy_memory stub 8296771: RISC-V: C2: assert(false) failed: bad AD file 8296916: RISC-V: Move some small macro-assembler functions to header file 8297359: RISC-V: improve performance of floating Max Min intrinsics 8297697: RISC-V: Add support for SATP mode detection 8301067: RISC-V: better error message when reporting unsupported satp modes 8297715: RISC-V: C2: Use single-bit instructions from the Zbs extension 8299168: RISC-V: Fix MachNode size mismatch for MacroAssembler::_verify_oops* 8299847: RISC-V: Improve PrintOptoAssembly output of CMoveI/L nodes 8300109: RISC-V: Improve code generation for MinI/MaxI nodes 8301033: RISC-V: Handle special cases for MinI/MaxI nodes for Zbb 8301036: RISC-V: Factor out functions baseOffset & baseOffset32 from MacroAssembler 8301153: RISC-V: pipeline class for several instructions is not set correctly 8301313: RISC-V: C2: assert(false) failed: bad AD file due to missing match rule 8301628: RISC-V: c2 fix pipeline class for several instructions 8301818: RISC-V: Factor out function mvw from MacroAssembler 8302114: RISC-V: Several foreign jtreg tests fail with debug build after JDK-8301818 8301852: RISC-V: Optimize class atomic when order is memory_order_relaxed 8302289: RISC-V: Use bgez instruction in arraycopy_simple_check when possible 8302776: RISC-V: Fix typo CSR_INSTERT to CSR_INSTRET 8304293: RISC-V: JDK-8276799 missed atomic intrinsic support for C1 8305006: Use correct register in riscv_enc_fast_unlock() 8305008: RISC-V: Factor out immediate checking functions from assembler_riscv.inline.hpp 8305112: RISC-V: Typo fix for RVC description 8305512: RISC-V: Enable RVC extension by default on supported hardware 8305728: RISC-V: Use bexti instruction to do single-bit testing 8306667: RISC-V: Fix storeImmN0 matching rule by using zr register 8307150: RISC-V: Remove remaining StoreLoad barrier with UseCondCardMark for Serial/Parallel GC 8307446: RISC-V: Improve performance of floating point to integer conversion 8307651: RISC-V: stringL_indexof_char instruction has wrong format string 8308089: [riscv-port-jdk17u] Intrinsify Unsafe.storeStoreFence 8308277: RISC-V: Improve vectorization of Match.sqrt() on floats 8308997: RISC-V: Sign extend when comparing 32-bit value with zero instead of testing the sign bit 8309427: [riscv-port-jdk17u] Remove unused RoundDoubleModeV C2 node 8305236: Some LoadLoad barriers in the interpreter are unnecessary after JDK-8220051 8285630: Fix a configure error in RISC-V cross build 8277417: C1 LIR instruction for load-klass Reviewed-by: vkempik, goetz, shade, yadongwang, fjiang, luhenry Backport-of: 5905b02c0e2643ae8d097562f181953f6c88fc89
1 parent f02d019 commit 966fc82

File tree

188 files changed

+60258
-136
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

188 files changed

+60258
-136
lines changed

make/autoconf/build-aux/config.sub

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/sh
22
#
3-
# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
3+
# Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
44
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
55
#
66
# This code is free software; you can redistribute it and/or modify it
@@ -46,6 +46,13 @@ if echo $* | grep pc-msys >/dev/null ; then
4646
exit
4747
fi
4848

49+
# Canonicalize for riscv which autoconf-config.sub doesn't handle
50+
if echo $* | grep '^riscv\(32\|64\)-linux' >/dev/null ; then
51+
result=`echo $@ | sed 's/linux/unknown-linux/'`
52+
echo $result
53+
exit
54+
fi
55+
4956
# Filter out everything that doesn't begin with "aarch64-"
5057
if ! echo $* | grep '^aarch64-' >/dev/null ; then
5158
. $DIR/autoconf-config.sub "$@"
@@ -78,4 +85,3 @@ result=`echo $result | sed "s/^arm-/aarch64-/"`
7885

7986
echo $result
8087
exit $exitcode
81-

make/autoconf/jvm-features.m4

+4-2
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,8 @@ AC_DEFUN_ONCE([JVM_FEATURES_CHECK_SHENANDOAHGC],
311311
AC_MSG_CHECKING([if platform is supported by Shenandoah])
312312
if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86" || \
313313
test "x$OPENJDK_TARGET_CPU" = "xaarch64" || \
314-
test "x$OPENJDK_TARGET_CPU" = "xppc64le"; then
314+
test "x$OPENJDK_TARGET_CPU" = "xppc64le" || \
315+
test "x$OPENJDK_TARGET_CPU" = "xriscv64"; then
315316
AC_MSG_RESULT([yes])
316317
else
317318
AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
@@ -361,7 +362,8 @@ AC_DEFUN_ONCE([JVM_FEATURES_CHECK_ZGC],
361362
AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
362363
AVAILABLE=false
363364
fi
364-
elif test "x$OPENJDK_TARGET_CPU" = "xppc64le"; then
365+
elif test "x$OPENJDK_TARGET_CPU" = "xppc64le" || \
366+
test "x$OPENJDK_TARGET_CPU" = "xriscv64"; then
365367
if test "x$OPENJDK_TARGET_OS" = "xlinux"; then
366368
AC_MSG_RESULT([yes])
367369
else

make/autoconf/libraries.m4

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
2+
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
33
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
#
55
# This code is free software; you can redistribute it and/or modify it
@@ -146,6 +146,12 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBRARIES],
146146
fi
147147
fi
148148
149+
# Because RISC-V only has word-sized atomics, it requries libatomic where
150+
# other common architectures do not. So link libatomic by default.
151+
if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$OPENJDK_TARGET_CPU" = xriscv64; then
152+
BASIC_JVM_LIBS="$BASIC_JVM_LIBS -latomic"
153+
fi
154+
149155
# perfstat lib
150156
if test "x$OPENJDK_TARGET_OS" = xaix; then
151157
BASIC_JVM_LIBS="$BASIC_JVM_LIBS -lperfstat"

make/autoconf/platform.m4

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
2+
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
33
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
#
55
# This code is free software; you can redistribute it and/or modify it
@@ -561,6 +561,8 @@ AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS_HELPER],
561561
HOTSPOT_$1_CPU_DEFINE=PPC64
562562
elif test "x$OPENJDK_$1_CPU" = xppc64le; then
563563
HOTSPOT_$1_CPU_DEFINE=PPC64
564+
elif test "x$OPENJDK_$1_CPU" = xriscv64; then
565+
HOTSPOT_$1_CPU_DEFINE=RISCV64
564566
565567
# The cpu defines below are for zero, we don't support them directly.
566568
elif test "x$OPENJDK_$1_CPU" = xsparc; then
@@ -571,8 +573,6 @@ AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS_HELPER],
571573
HOTSPOT_$1_CPU_DEFINE=S390
572574
elif test "x$OPENJDK_$1_CPU" = xs390x; then
573575
HOTSPOT_$1_CPU_DEFINE=S390
574-
elif test "x$OPENJDK_$1_CPU" = xriscv64; then
575-
HOTSPOT_$1_CPU_DEFINE=RISCV
576576
elif test "x$OPENJDK_$1_CPU" != x; then
577577
HOTSPOT_$1_CPU_DEFINE=$(echo $OPENJDK_$1_CPU | tr a-z A-Z)
578578
fi

make/hotspot/gensrc/GensrcAdlc.gmk

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# Copyright (c) 2013, 2021, Oracle and/or its affiliates. All rights reserved.
2+
# Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved.
33
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
#
55
# This code is free software; you can redistribute it and/or modify it
@@ -149,6 +149,13 @@ ifeq ($(call check-jvm-feature, compiler2), true)
149149
)))
150150
endif
151151

152+
ifeq ($(HOTSPOT_TARGET_CPU_ARCH), riscv)
153+
AD_SRC_FILES += $(call uniq, $(wildcard $(foreach d, $(AD_SRC_ROOTS), \
154+
$d/cpu/$(HOTSPOT_TARGET_CPU_ARCH)/$(HOTSPOT_TARGET_CPU_ARCH)_v.ad \
155+
$d/cpu/$(HOTSPOT_TARGET_CPU_ARCH)/$(HOTSPOT_TARGET_CPU_ARCH)_b.ad \
156+
)))
157+
endif
158+
152159
ifeq ($(call check-jvm-feature, shenandoahgc), true)
153160
AD_SRC_FILES += $(call uniq, $(wildcard $(foreach d, $(AD_SRC_ROOTS), \
154161
$d/cpu/$(HOTSPOT_TARGET_CPU_ARCH)/gc/shenandoah/shenandoah_$(HOTSPOT_TARGET_CPU).ad \
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
/*
2+
* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
3+
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
4+
* Copyright (c) 2020, 2022, Huawei Technologies Co., Ltd. All rights reserved.
5+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6+
*
7+
* This code is free software; you can redistribute it and/or modify it
8+
* under the terms of the GNU General Public License version 2 only, as
9+
* published by the Free Software Foundation.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*
25+
*/
26+
27+
#include "precompiled.hpp"
28+
#include "interpreter/interpreter.hpp"
29+
#include "oops/constMethod.hpp"
30+
#include "oops/klass.inline.hpp"
31+
#include "oops/method.hpp"
32+
#include "runtime/frame.inline.hpp"
33+
#include "utilities/align.hpp"
34+
#include "utilities/debug.hpp"
35+
#include "utilities/macros.hpp"
36+
37+
int AbstractInterpreter::BasicType_as_index(BasicType type) {
38+
int i = 0;
39+
switch (type) {
40+
case T_BOOLEAN: i = 0; break;
41+
case T_CHAR : i = 1; break;
42+
case T_BYTE : i = 2; break;
43+
case T_SHORT : i = 3; break;
44+
case T_INT : i = 4; break;
45+
case T_LONG : i = 5; break;
46+
case T_VOID : i = 6; break;
47+
case T_FLOAT : i = 7; break;
48+
case T_DOUBLE : i = 8; break;
49+
case T_OBJECT : i = 9; break;
50+
case T_ARRAY : i = 9; break;
51+
default : ShouldNotReachHere();
52+
}
53+
assert(0 <= i && i < AbstractInterpreter::number_of_result_handlers,
54+
"index out of bounds");
55+
return i;
56+
}
57+
58+
// How much stack a method activation needs in words.
59+
int AbstractInterpreter::size_top_interpreter_activation(Method* method) {
60+
const int entry_size = frame::interpreter_frame_monitor_size();
61+
62+
// total overhead size: entry_size + (saved fp thru expr stack
63+
// bottom). be sure to change this if you add/subtract anything
64+
// to/from the overhead area
65+
const int overhead_size =
66+
-(frame::interpreter_frame_initial_sp_offset) + entry_size;
67+
68+
const int stub_code = frame::entry_frame_after_call_words;
69+
assert_cond(method != NULL);
70+
const int method_stack = (method->max_locals() + method->max_stack()) *
71+
Interpreter::stackElementWords;
72+
return (overhead_size + method_stack + stub_code);
73+
}
74+
75+
// asm based interpreter deoptimization helpers
76+
int AbstractInterpreter::size_activation(int max_stack,
77+
int temps,
78+
int extra_args,
79+
int monitors,
80+
int callee_params,
81+
int callee_locals,
82+
bool is_top_frame) {
83+
// Note: This calculation must exactly parallel the frame setup
84+
// in TemplateInterpreterGenerator::generate_method_entry.
85+
86+
// fixed size of an interpreter frame:
87+
int overhead = frame::sender_sp_offset -
88+
frame::interpreter_frame_initial_sp_offset;
89+
// Our locals were accounted for by the caller (or last_frame_adjust
90+
// on the transistion) Since the callee parameters already account
91+
// for the callee's params we only need to account for the extra
92+
// locals.
93+
int size = overhead +
94+
(callee_locals - callee_params) +
95+
monitors * frame::interpreter_frame_monitor_size() +
96+
// On the top frame, at all times SP <= ESP, and SP is
97+
// 16-aligned. We ensure this by adjusting SP on method
98+
// entry and re-entry to allow room for the maximum size of
99+
// the expression stack. When we call another method we bump
100+
// SP so that no stack space is wasted. So, only on the top
101+
// frame do we need to allow max_stack words.
102+
(is_top_frame ? max_stack : temps + extra_args);
103+
104+
// On riscv we always keep the stack pointer 16-aligned, so we
105+
// must round up here.
106+
size = align_up(size, 2);
107+
108+
return size;
109+
}
110+
111+
void AbstractInterpreter::layout_activation(Method* method,
112+
int tempcount,
113+
int popframe_extra_args,
114+
int moncount,
115+
int caller_actual_parameters,
116+
int callee_param_count,
117+
int callee_locals,
118+
frame* caller,
119+
frame* interpreter_frame,
120+
bool is_top_frame,
121+
bool is_bottom_frame) {
122+
// The frame interpreter_frame is guaranteed to be the right size,
123+
// as determined by a previous call to the size_activation() method.
124+
// It is also guaranteed to be walkable even though it is in a
125+
// skeletal state
126+
assert_cond(method != NULL && caller != NULL && interpreter_frame != NULL);
127+
int max_locals = method->max_locals() * Interpreter::stackElementWords;
128+
int extra_locals = (method->max_locals() - method->size_of_parameters()) *
129+
Interpreter::stackElementWords;
130+
131+
#ifdef ASSERT
132+
assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable");
133+
#endif
134+
135+
interpreter_frame->interpreter_frame_set_method(method);
136+
// NOTE the difference in using sender_sp and interpreter_frame_sender_sp
137+
// interpreter_frame_sender_sp is the original sp of the caller (the unextended_sp)
138+
// and sender_sp is fp
139+
intptr_t* locals = NULL;
140+
if (caller->is_interpreted_frame()) {
141+
locals = caller->interpreter_frame_last_sp() + caller_actual_parameters - 1;
142+
} else {
143+
locals = interpreter_frame->sender_sp() + max_locals - 1;
144+
}
145+
146+
#ifdef ASSERT
147+
if (caller->is_interpreted_frame()) {
148+
assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement");
149+
}
150+
#endif
151+
152+
interpreter_frame->interpreter_frame_set_locals(locals);
153+
BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin();
154+
BasicObjectLock* monbot = montop - moncount;
155+
interpreter_frame->interpreter_frame_set_monitor_end(monbot);
156+
157+
// Set last_sp
158+
intptr_t* last_sp = (intptr_t*) monbot -
159+
tempcount*Interpreter::stackElementWords -
160+
popframe_extra_args;
161+
interpreter_frame->interpreter_frame_set_last_sp(last_sp);
162+
163+
// All frames but the initial (oldest) interpreter frame we fill in have
164+
// a value for sender_sp that allows walking the stack but isn't
165+
// truly correct. Correct the value here.
166+
if (extra_locals != 0 &&
167+
interpreter_frame->sender_sp() ==
168+
interpreter_frame->interpreter_frame_sender_sp()) {
169+
interpreter_frame->set_interpreter_frame_sender_sp(caller->sp() +
170+
extra_locals);
171+
}
172+
173+
*interpreter_frame->interpreter_frame_cache_addr() =
174+
method->constants()->cache();
175+
*interpreter_frame->interpreter_frame_mirror_addr() =
176+
method->method_holder()->java_mirror();
177+
}
+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3+
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
4+
* Copyright (c) 2020, 2022, Huawei Technologies Co., Ltd. All rights reserved.
5+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6+
*
7+
* This code is free software; you can redistribute it and/or modify it
8+
* under the terms of the GNU General Public License version 2 only, as
9+
* published by the Free Software Foundation.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*
25+
*/
26+
27+
#include <stdio.h>
28+
#include <sys/types.h>
29+
30+
#include "precompiled.hpp"
31+
#include "asm/assembler.hpp"
32+
#include "asm/assembler.inline.hpp"
33+
#include "compiler/disassembler.hpp"
34+
#include "interpreter/interpreter.hpp"
35+
#include "memory/resourceArea.hpp"
36+
#include "runtime/interfaceSupport.inline.hpp"
37+
#include "runtime/sharedRuntime.hpp"
38+
39+
int AbstractAssembler::code_fill_byte() {
40+
return 0;
41+
}
42+
43+
Address::Address(address target, relocInfo::relocType rtype) : _base(noreg), _offset(0), _mode(literal) {
44+
_target = target;
45+
switch (rtype) {
46+
case relocInfo::oop_type:
47+
case relocInfo::metadata_type:
48+
// Oops are a special case. Normally they would be their own section
49+
// but in cases like icBuffer they are literals in the code stream that
50+
// we don't have a section for. We use none so that we get a literal address
51+
// which is always patchable.
52+
break;
53+
case relocInfo::external_word_type:
54+
_rspec = external_word_Relocation::spec(target);
55+
break;
56+
case relocInfo::internal_word_type:
57+
_rspec = internal_word_Relocation::spec(target);
58+
break;
59+
case relocInfo::opt_virtual_call_type:
60+
_rspec = opt_virtual_call_Relocation::spec();
61+
break;
62+
case relocInfo::static_call_type:
63+
_rspec = static_call_Relocation::spec();
64+
break;
65+
case relocInfo::runtime_call_type:
66+
_rspec = runtime_call_Relocation::spec();
67+
break;
68+
case relocInfo::poll_type:
69+
case relocInfo::poll_return_type:
70+
_rspec = Relocation::spec_simple(rtype);
71+
break;
72+
case relocInfo::none:
73+
_rspec = RelocationHolder::none;
74+
break;
75+
default:
76+
ShouldNotReachHere();
77+
}
78+
}

0 commit comments

Comments
 (0)