Index: sandbox/linux/seccomp-bpf/syscall.cc |
diff --git a/sandbox/linux/seccomp-bpf/syscall.cc b/sandbox/linux/seccomp-bpf/syscall.cc |
index 3b3c8db5b86dc9ad55c8c4c4c7787418ba095feb..bc6461f11773b245919596162eb4230162be56a4 100644 |
--- a/sandbox/linux/seccomp-bpf/syscall.cc |
+++ b/sandbox/linux/seccomp-bpf/syscall.cc |
@@ -133,16 +133,21 @@ asm(// We need to be able to tell the kernel exactly where we made a |
#else |
".arm\n" |
#endif |
- "SyscallAsm:.fnstart\n" |
+ "SyscallAsm:\n" |
+#if !defined(__native_client_nonsfi__) |
+ // .fnstart and .fnend pseudo operations creates unwind table. |
+ // It also creates a reference to the symbol __aeabi_unwind_cpp_pr0, which |
+ // is not provided by PNaCl toolchain. Disable it. |
+ ".fnstart\n" |
+#endif |
"@ args = 0, pretend = 0, frame = 8\n" |
"@ frame_needed = 1, uses_anonymous_args = 0\n" |
#if defined(__thumb__) |
".cfi_startproc\n" |
"push {r7, lr}\n" |
+ ".save {r7, lr}\n" |
".cfi_offset 14, -4\n" |
".cfi_offset 7, -8\n" |
- "mov r7, sp\n" |
- ".cfi_def_cfa_register 7\n" |
".cfi_def_cfa_offset 8\n" |
#else |
"stmfd sp!, {fp, lr}\n" |
@@ -177,7 +182,11 @@ asm(// We need to be able to tell the kernel exactly where we made a |
#else |
"2:ldmfd sp!, {fp, pc}\n" |
#endif |
+#if !defined(__native_client_nonsfi__) |
+ // Do not use .fnstart and .fnend for PNaCl toolchain. See above comment, |
+ // for more details. |
".fnend\n" |
+#endif |
"9:.size SyscallAsm, 9b-SyscallAsm\n" |
#elif defined(__mips__) |
".text\n" |