8285303: riscv: Incorrect register mask in call_native_base
Co-authored-by: Dingli Zhang <dingli@iscas.ac.cn> Reviewed-by: fyang, yadongwang
This commit is contained in:
parent
ce8db2c403
commit
b10833bbf3
@ -569,24 +569,14 @@ void MacroAssembler::emit_static_call_stub() {
|
|||||||
void MacroAssembler::call_VM_leaf_base(address entry_point,
|
void MacroAssembler::call_VM_leaf_base(address entry_point,
|
||||||
int number_of_arguments,
|
int number_of_arguments,
|
||||||
Label *retaddr) {
|
Label *retaddr) {
|
||||||
call_native_base(entry_point, retaddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MacroAssembler::call_native(address entry_point, Register arg_0) {
|
|
||||||
pass_arg0(this, arg_0);
|
|
||||||
call_native_base(entry_point);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MacroAssembler::call_native_base(address entry_point, Label *retaddr) {
|
|
||||||
Label E, L;
|
|
||||||
int32_t offset = 0;
|
int32_t offset = 0;
|
||||||
push_reg(0x80000040, sp); // push << t0 & xmethod >> to sp
|
push_reg(RegSet::of(t0, xmethod), sp); // push << t0 & xmethod >> to sp
|
||||||
movptr_with_offset(t0, entry_point, offset);
|
movptr_with_offset(t0, entry_point, offset);
|
||||||
jalr(x1, t0, offset);
|
jalr(x1, t0, offset);
|
||||||
if (retaddr != NULL) {
|
if (retaddr != NULL) {
|
||||||
bind(*retaddr);
|
bind(*retaddr);
|
||||||
}
|
}
|
||||||
pop_reg(0x80000040, sp); // pop << t0 & xmethod >> from sp
|
pop_reg(RegSet::of(t0, xmethod), sp); // pop << t0 & xmethod >> from sp
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssembler::call_VM_leaf(address entry_point, int number_of_arguments) {
|
void MacroAssembler::call_VM_leaf(address entry_point, int number_of_arguments) {
|
||||||
|
@ -147,13 +147,6 @@ class MacroAssembler: public Assembler {
|
|||||||
// thread in the default location (xthread)
|
// thread in the default location (xthread)
|
||||||
void reset_last_Java_frame(bool clear_fp);
|
void reset_last_Java_frame(bool clear_fp);
|
||||||
|
|
||||||
void call_native(address entry_point,
|
|
||||||
Register arg_0);
|
|
||||||
void call_native_base(
|
|
||||||
address entry_point, // the entry point
|
|
||||||
Label* retaddr = NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
virtual void call_VM_leaf_base(
|
virtual void call_VM_leaf_base(
|
||||||
address entry_point, // the entry point
|
address entry_point, // the entry point
|
||||||
int number_of_arguments, // the number of arguments to pop after the call
|
int number_of_arguments, // the number of arguments to pop after the call
|
||||||
|
Loading…
x
Reference in New Issue
Block a user