1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# HG changeset patch
# User Kartikaya Gupta <kgupta@mozilla.com>
# 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"
|