diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/linux_syscall_support.h b/toolkit/crashreporter/google-breakpad/src/common/linux/linux_syscall_support.h
index 1664c19bd247aa747fcd6d05b90f04b57e5b6379..92aa8b4c649e6816e7b6ca3b69b410814a970456 100644
--- a/toolkit/crashreporter/google-breakpad/src/common/linux/linux_syscall_support.h
+++ b/toolkit/crashreporter/google-breakpad/src/common/linux/linux_syscall_support.h
@@ -2183,8 +2183,24 @@ struct kernel_statfs {
                              /* In the child, now. Call "fn(arg)".
                               */
                              "ldr   r0,[sp, #4]\n"
+
+                             /* When compiling for Thumb-2 the "MOV LR,PC" here
+                              * won't work because it loads PC+4 into LR,
+                              * whereas the LDR is a 4-byte instruction.
+                              * This results in the child thread always
+                              * crashing with an "Illegal Instruction" when it
+                              * returned into the middle of the LDR instruction
+                              * The instruction sequence used instead was
+                              * recommended by
+                              * "https://wiki.edubuntu.org/ARM/Thumb2PortingHowto#Quick_Reference".
+                              */
+                           #ifdef __thumb2__
+                             "ldr   r7,[sp]\n"
+                             "blx   r7\n"
+                           #else
                              "mov   lr,pc\n"
                              "ldr   pc,[sp]\n"
+                           #endif
 
                              /* Call _exit(%r0).
                               */