8201597: AArch64: Update relocs for CompiledDirectStaticCall
Reviewed-by: adinn
This commit is contained in:
parent
32ed45bb1d
commit
07ded2e52d
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
|
* Copyright (c) 2014, 2018, Red Hat 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
|
||||||
@ -133,9 +133,29 @@ void NativeMovConstReg::set_data(intptr_t x) {
|
|||||||
address addr = MacroAssembler::target_addr_for_insn(instruction_address());
|
address addr = MacroAssembler::target_addr_for_insn(instruction_address());
|
||||||
*(intptr_t*)addr = x;
|
*(intptr_t*)addr = x;
|
||||||
} else {
|
} else {
|
||||||
|
// Store x into the instruction stream.
|
||||||
MacroAssembler::pd_patch_instruction(instruction_address(), (address)x);
|
MacroAssembler::pd_patch_instruction(instruction_address(), (address)x);
|
||||||
ICache::invalidate_range(instruction_address(), instruction_size);
|
ICache::invalidate_range(instruction_address(), instruction_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Find and replace the oop/metadata corresponding to this
|
||||||
|
// instruction in oops section.
|
||||||
|
CodeBlob* cb = CodeCache::find_blob(instruction_address());
|
||||||
|
nmethod* nm = cb->as_nmethod_or_null();
|
||||||
|
if (nm != NULL) {
|
||||||
|
RelocIterator iter(nm, instruction_address(), next_instruction_address());
|
||||||
|
while (iter.next()) {
|
||||||
|
if (iter.type() == relocInfo::oop_type) {
|
||||||
|
oop* oop_addr = iter.oop_reloc()->oop_addr();
|
||||||
|
*oop_addr = cast_to_oop(x);
|
||||||
|
break;
|
||||||
|
} else if (iter.type() == relocInfo::metadata_type) {
|
||||||
|
Metadata** metadata_addr = iter.metadata_reloc()->metadata_addr();
|
||||||
|
*metadata_addr = (Metadata*)x;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeMovConstReg::print() {
|
void NativeMovConstReg::print() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user