mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 21:01:08 +00:00
Bug 1240583 - Odin: add MacroAssembler::repatchThunk (r=bbouvier)
MozReview-Commit-ID: Blj499Wb0Hb --HG-- extra : rebase_source : 27eddbc7d41beea7351610cfe2c02787952439be
This commit is contained in:
parent
15cdaba13f
commit
3562506a11
@ -41,6 +41,8 @@ reAfterArg = "(?=[,)])"
|
||||
reMatchArg = re.compile(reBeforeArg + reArgType + reArgName + reArgDefault + reAfterArg)
|
||||
|
||||
def get_normalized_signatures(signature, fileAnnot = None):
|
||||
# Remove static
|
||||
signature = signature.replace('static', '')
|
||||
# Remove semicolon.
|
||||
signature = signature.replace(';', ' ')
|
||||
# Normalize spaces.
|
||||
|
@ -509,6 +509,7 @@ class MacroAssembler : public MacroAssemblerSpecific
|
||||
// CodeOffset instead of a CodeOffsetJump).
|
||||
CodeOffset thunkWithPatch() PER_SHARED_ARCH;
|
||||
void patchThunk(uint32_t thunkOffset, uint32_t targetOffset) PER_SHARED_ARCH;
|
||||
static void repatchThunk(uint8_t* code, uint32_t thunkOffset, uint32_t targetOffset) PER_SHARED_ARCH;
|
||||
|
||||
// Push the return address and make a call. On platforms where this function
|
||||
// is not defined, push the link register (pushReturnAddress) at the entry
|
||||
|
@ -4996,6 +4996,17 @@ MacroAssembler::patchThunk(uint32_t u32Offset, uint32_t targetOffset)
|
||||
*u32 = (targetOffset - addOffset) - 8;
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::repatchThunk(uint8_t* code, uint32_t u32Offset, uint32_t targetOffset)
|
||||
{
|
||||
uint32_t* u32 = reinterpret_cast<uint32_t*>(code + u32Offset);
|
||||
|
||||
uint32_t addOffset = u32Offset - 4;
|
||||
MOZ_ASSERT(reinterpret_cast<Instruction*>(code + addOffset)->is<InstALU>());
|
||||
|
||||
*u32 = (targetOffset - addOffset) - 8;
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::pushReturnAddress()
|
||||
{
|
||||
|
@ -578,6 +578,12 @@ MacroAssembler::patchThunk(uint32_t thunkOffset, uint32_t targetOffset)
|
||||
MOZ_CRASH("NYI");
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::repatchThunk(uint8_t* code, uint32_t thunkOffset, uint32_t targetOffset)
|
||||
{
|
||||
MOZ_CRASH("NYI");
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::pushReturnAddress()
|
||||
{
|
||||
|
@ -1168,6 +1168,12 @@ MacroAssembler::patchThunk(uint32_t callerOffset, uint32_t calleeOffset)
|
||||
MOZ_CRASH("NYI");
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::repatchThunk(uint8_t* code, uint32_t callerOffset, uint32_t calleeOffset)
|
||||
{
|
||||
MOZ_CRASH("NYI");
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(wasm::SymbolicAddress target)
|
||||
{
|
||||
|
@ -1028,9 +1028,12 @@ class AssemblerX86Shared : public AssemblerShared
|
||||
CodeOffset thunkWithPatch() {
|
||||
return CodeOffset(masm.jmp().offset());
|
||||
}
|
||||
void patchThunk(uint32_t jumpOffset, uint32_t targetOffset) {
|
||||
void patchThunk(uint32_t thunkOffset, uint32_t targetOffset) {
|
||||
unsigned char* code = masm.data();
|
||||
X86Encoding::SetRel32(code + jumpOffset, code + targetOffset);
|
||||
X86Encoding::SetRel32(code + thunkOffset, code + targetOffset);
|
||||
}
|
||||
static void repatchThunk(uint8_t* code, uint32_t thunkOffset, uint32_t targetOffset) {
|
||||
X86Encoding::SetRel32(code + thunkOffset, code + targetOffset);
|
||||
}
|
||||
|
||||
void breakpoint() {
|
||||
|
@ -551,9 +551,15 @@ MacroAssembler::thunkWithPatch()
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::patchThunk(uint32_t jumpOffset, uint32_t targetOffset)
|
||||
MacroAssembler::patchThunk(uint32_t thunkOffset, uint32_t targetOffset)
|
||||
{
|
||||
Assembler::patchThunk(jumpOffset, targetOffset);
|
||||
Assembler::patchThunk(thunkOffset, targetOffset);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::repatchThunk(uint8_t* code, uint32_t thunkOffset, uint32_t targetOffset)
|
||||
{
|
||||
Assembler::repatchThunk(code, thunkOffset, targetOffset);
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user