# HG changeset patch # User Kartikaya Gupta # Date 1356843815 18000 # Node ID f9be5a3d9b3ce26ad94e31a4c0275fee19db7ca8 # Parent 414b431ad3fa831ecf5bf69abd3b5cb8670781db Bug 803601 - Prevent SIGILL crashes on ARMv6 builds built with the NDK r8c toolchain (gcc-4.6, gold). r=mjrosenb diff --git a/js/src/methodjit/MethodJIT.cpp b/js/src/methodjit/MethodJIT.cpp --- a/js/src/methodjit/MethodJIT.cpp +++ b/js/src/methodjit/MethodJIT.cpp @@ -671,8 +671,10 @@ ".align 2\n" \ ".thumb\n" \ ".thumb_func\n" +#define BRANCH_AND_LINK(x) "blx " x #else #define FUNCTION_HEADER_EXTRA +#define BRANCH_AND_LINK(x) "bl " x #endif asm ( @@ -731,9 +733,9 @@ " mov r10, r1" "\n" " mov r0, sp" "\n" -" blx " SYMBOL_STRING_VMFRAME(SetVMFrameRegs) "\n" +" " BRANCH_AND_LINK(SYMBOL_STRING_VMFRAME(SetVMFrameRegs)) "\n " " mov r0, sp" "\n" -" blx " SYMBOL_STRING_VMFRAME(PushActiveVMFrame)"\n" +" " BRANCH_AND_LINK(SYMBOL_STRING_VMFRAME(PushActiveVMFrame)) "\n" /* Call the compiled JavaScript function. */ " bx r4" "\n" @@ -748,7 +750,7 @@ /* Tidy up. */ " mov r0, sp" "\n" -" blx " SYMBOL_STRING_VMFRAME(PopActiveVMFrame) "\n" +" " BRANCH_AND_LINK(SYMBOL_STRING_VMFRAME(PopActiveVMFrame)) "\n" /* Skip past the parameters we pushed (such as cx and the like). */ " add sp, sp, #(4*7 + 4*6)" "\n" @@ -767,7 +769,7 @@ " mov r0, sp" "\n" /* Call the utility function that sets up the internal throw routine. */ -" blx " SYMBOL_STRING_RELOC(js_InternalThrow) "\n" +" " BRANCH_AND_LINK(SYMBOL_STRING_RELOC(js_InternalThrow)) "\n" /* If js_InternalThrow found a scripted handler, jump to it. Otherwise, tidy * up and return. */ @@ -777,7 +779,7 @@ /* Tidy up, then return '0' to represent an unhandled exception. */ " mov r0, sp" "\n" -" blx " SYMBOL_STRING_VMFRAME(PopActiveVMFrame) "\n" +" " BRANCH_AND_LINK(SYMBOL_STRING_VMFRAME(PopActiveVMFrame)) "\n" " add sp, sp, #(4*7 + 4*6)" "\n" " mov r0, #0" "\n" " pop {r4-r11,pc}" "\n" @@ -801,7 +803,7 @@ " mov r2, r0" "\n" /* returnReg */ " mov r1, r5" "\n" /* returnType */ " mov r0, r4" "\n" /* returnData */ -" blx " SYMBOL_STRING_RELOC(js_InternalInterpret) "\n" +" " BRANCH_AND_LINK(SYMBOL_STRING_RELOC(js_InternalInterpret)) "\n" " cmp r0, #0" "\n" " ldr r10, [sp, #(4*7)]" "\n" /* Load (StackFrame*)f->regs->fp_ */ " ldrd r4, r5, [r10, #(4*6)]" "\n" /* Load rval payload and type. */ @@ -810,7 +812,7 @@ " bxne r0" "\n" /* Tidy up, then return 0. */ " mov r0, sp" "\n" -" blx " SYMBOL_STRING_VMFRAME(PopActiveVMFrame) "\n" +" " BRANCH_AND_LINK(SYMBOL_STRING_VMFRAME(PopActiveVMFrame)) "\n" " add sp, sp, #(4*7 + 4*6)" "\n" " mov r0, #0" "\n" " pop {r4-r11,pc}" "\n"