mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Don't place a pool in the middle of a C call (bug 696748, r=dmandelin)
This commit is contained in:
parent
91d5935f7c
commit
3fbe921e5a
@ -560,6 +560,16 @@ static const JSC::MacroAssembler::RegisterID JSParamReg_Argc = JSC::SparcRegist
|
||||
//
|
||||
// After callWithABI(), the call state is reset, so a new call may begin.
|
||||
Call callWithABI(void *fun, bool canThrow) {
|
||||
#ifdef JS_CPU_ARM
|
||||
// the repatcher requires that these instructions are adjacent in
|
||||
// memory, make sure that they are in fact adjacent.
|
||||
// Theoretically, this requires only 12 bytes of space, however
|
||||
// there are at least a couple of off-by-one errors that I've noticed
|
||||
// that make 12 insufficent. In case 16 is also insufficent, I've bumped
|
||||
// it to 20.
|
||||
ensureSpace(20);
|
||||
int initFlushCount = flushCount();
|
||||
#endif
|
||||
// [Bug 614953]: This can only be made conditional once the ARM back-end
|
||||
// is able to distinguish and patch both call sequences. Other
|
||||
// architecutres are unaffected regardless.
|
||||
@ -574,7 +584,9 @@ static const JSC::MacroAssembler::RegisterID JSParamReg_Argc = JSC::SparcRegist
|
||||
|
||||
Call cl = call();
|
||||
callPatches.append(CallPatch(cl, fun));
|
||||
|
||||
#ifdef JS_CPU_ARM
|
||||
JS_ASSERT(initFlushCount == flushCount());
|
||||
#endif
|
||||
if (stackAdjust)
|
||||
addPtr(Imm32(stackAdjust), stackPointerRegister);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user