diff --git a/config/check_macroassembler_style.py b/config/check_macroassembler_style.py index 1cd0c71fb6a..19ddd09f595 100644 --- a/config/check_macroassembler_style.py +++ b/config/check_macroassembler_style.py @@ -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. diff --git a/js/src/jit/MacroAssembler.h b/js/src/jit/MacroAssembler.h index 5be1a77f1b5..ff05c1dd408 100644 --- a/js/src/jit/MacroAssembler.h +++ b/js/src/jit/MacroAssembler.h @@ -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 diff --git a/js/src/jit/arm/MacroAssembler-arm.cpp b/js/src/jit/arm/MacroAssembler-arm.cpp index 55501223a62..66b9bcc3ef0 100644 --- a/js/src/jit/arm/MacroAssembler-arm.cpp +++ b/js/src/jit/arm/MacroAssembler-arm.cpp @@ -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(code + u32Offset); + + uint32_t addOffset = u32Offset - 4; + MOZ_ASSERT(reinterpret_cast(code + addOffset)->is()); + + *u32 = (targetOffset - addOffset) - 8; +} + void MacroAssembler::pushReturnAddress() { diff --git a/js/src/jit/arm64/MacroAssembler-arm64.cpp b/js/src/jit/arm64/MacroAssembler-arm64.cpp index bc3ba76b87a..4ebfb2276b8 100644 --- a/js/src/jit/arm64/MacroAssembler-arm64.cpp +++ b/js/src/jit/arm64/MacroAssembler-arm64.cpp @@ -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() { diff --git a/js/src/jit/mips-shared/MacroAssembler-mips-shared.cpp b/js/src/jit/mips-shared/MacroAssembler-mips-shared.cpp index edcf400e8c0..151b854085d 100644 --- a/js/src/jit/mips-shared/MacroAssembler-mips-shared.cpp +++ b/js/src/jit/mips-shared/MacroAssembler-mips-shared.cpp @@ -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) { diff --git a/js/src/jit/x86-shared/Assembler-x86-shared.h b/js/src/jit/x86-shared/Assembler-x86-shared.h index 78effa036f8..03263b7d14b 100644 --- a/js/src/jit/x86-shared/Assembler-x86-shared.h +++ b/js/src/jit/x86-shared/Assembler-x86-shared.h @@ -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() { diff --git a/js/src/jit/x86-shared/MacroAssembler-x86-shared.cpp b/js/src/jit/x86-shared/MacroAssembler-x86-shared.cpp index 4044d1b54aa..7f27c9e3c72 100644 --- a/js/src/jit/x86-shared/MacroAssembler-x86-shared.cpp +++ b/js/src/jit/x86-shared/MacroAssembler-x86-shared.cpp @@ -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