14906e5653c57d49f94940f28556009a88c42a583Elliott Hughes/*
24906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * Copyright (c) 2001 Wasabi Systems, Inc.
34906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * All rights reserved.
44906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *
54906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * Written by Frank van der Linden for Wasabi Systems, Inc.
64906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *
74906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * Redistribution and use in source and binary forms, with or without
84906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * modification, are permitted provided that the following conditions
94906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * are met:
104906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * 1. Redistributions of source code must retain the above copyright
114906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *    notice, this list of conditions and the following disclaimer.
124906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * 2. Redistributions in binary form must reproduce the above copyright
134906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *    notice, this list of conditions and the following disclaimer in the
144906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *    documentation and/or other materials provided with the distribution.
154906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * 3. All advertising materials mentioning features or use of this software
164906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *    must display the following acknowledgement:
174906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *      This product includes software developed for the NetBSD Project by
184906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *      Wasabi Systems, Inc.
194906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * 4. The name of Wasabi Systems, Inc. may not be used to endorse
204906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *    or promote products derived from this software without specific prior
214906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *    written permission.
224906e5653c57d49f94940f28556009a88c42a583Elliott Hughes *
234906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
244906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
254906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
264906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
274906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
284906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
294906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
304906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
314906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
324906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
334906e5653c57d49f94940f28556009a88c42a583Elliott Hughes * POSSIBILITY OF SUCH DAMAGE.
344906e5653c57d49f94940f28556009a88c42a583Elliott Hughes */
354906e5653c57d49f94940f28556009a88c42a583Elliott Hughes
36851e68a2402fa414544e66650e09dfdaac813e51Elliott Hughes#include <private/bionic_asm.h>
374906e5653c57d49f94940f28556009a88c42a583Elliott Hughes
38c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao
39c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// The internal structure of a jmp_buf is totally private.
40c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// Current layout (changes from release to release):
41c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao//
42c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// word   name            description
43c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// 0      rbx             registers
44c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// 1      rbp
45c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// 2      r12
46c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// 3      r13
47c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// 4      r14
48c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// 5      r15
49c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// 6      rsp
50c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// 7      pc
51c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// 8      sigflag/cookie  setjmp cookie in top 31 bits, signal mask flag in low bit
52c244fcb8a3396f94976a56379cce144c4451c3d4Josh Gao// 9      sigmask         signal mask (includes rt signals as well)
53686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao// 10     checksum        checksum of the core registers, to give better error messages.
548d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
558d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes#define _JB_RBX 0
568d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes#define _JB_RBP 1
578d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes#define _JB_R12 2
588d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes#define _JB_R13 3
598d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes#define _JB_R14 4
608d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes#define _JB_R15 5
618d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes#define _JB_RSP 6
628d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes#define _JB_PC 7
638d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes#define _JB_SIGFLAG 8
648d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes#define _JB_SIGMASK 9
65686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao#define _JB_CHECKSUM 10
664906e5653c57d49f94940f28556009a88c42a583Elliott Hughes
672342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao#define MANGLE_REGISTERS 1
68686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao
692342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao.macro m_mangle_registers reg
702342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao#if MANGLE_REGISTERS
712342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  xorq \reg,%rbx
722342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  xorq \reg,%rbp
732342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  xorq \reg,%r12
742342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  xorq \reg,%r13
752342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  xorq \reg,%r14
762342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  xorq \reg,%r15
772342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  xorq \reg,%rsp
782342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  xorq \reg,%r11
792342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao#endif
802342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao.endm
812342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao
822342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao.macro m_unmangle_registers reg
832342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  m_mangle_registers \reg
842342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao.endm
852342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao
86686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao.macro m_calculate_checksum dst, src
87686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao  movq $0, \dst
88686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao  .irp i,0,1,2,3,4,5,6,7
89686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao    xorq (\i*8)(\src), \dst
90686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao  .endr
91686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao.endm
922342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao
934906e5653c57d49f94940f28556009a88c42a583Elliott HughesENTRY(setjmp)
94fa432524a66e5797874ef50e4ede95ded4cee199dimitry__BIONIC_WEAK_ASM_FOR_NATIVE_BRIDGE(setjmp)
958d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movl $1,%esi
968d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  jmp PIC_PLT(sigsetjmp)
97507cfe2e10a6c4ad61b9638820ba10bfe881a18cChristopher FerrisEND(setjmp)
984906e5653c57d49f94940f28556009a88c42a583Elliott Hughes
998d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott HughesENTRY(_setjmp)
100fa432524a66e5797874ef50e4ede95ded4cee199dimitry__BIONIC_WEAK_ASM_FOR_NATIVE_BRIDGE(_setjmp)
1018d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movl $0,%esi
1028d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  jmp PIC_PLT(sigsetjmp)
1038d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott HughesEND(_setjmp)
1048d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
1058d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes// int sigsetjmp(sigjmp_buf env, int save_signal_mask);
1068d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott HughesENTRY(sigsetjmp)
107fa432524a66e5797874ef50e4ede95ded4cee199dimitry__BIONIC_WEAK_ASM_FOR_NATIVE_BRIDGE(sigsetjmp)
1082342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  pushq %rdi
1092342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  movq %rsi,%rdi
1102342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  call PIC_PLT(__bionic_setjmp_cookie_get)
1112342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  popq %rdi
1122342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao
1132342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  // Record setjmp cookie and whether or not we're saving the signal mask.
1142342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  movq %rax,(_JB_SIGFLAG * 8)(%rdi)
1152342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  pushq %rax
1168d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
1178d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  // Do we need to save the signal mask?
1182342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  testq $1,%rax
1198d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  jz 2f
1208d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
1211c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  // Save current signal mask.
1221c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  pushq %rdi // Push 'env'.
1231c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  // The 'how' argument is ignored if new_mask is NULL.
1241c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  xorq %rsi,%rsi // NULL.
1251c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  leaq (_JB_SIGMASK * 8)(%rdi),%rdx // old_mask.
1261c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  call PIC_PLT(sigprocmask)
1271c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  popq %rdi // Pop 'env'.
1288d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
1298d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes2:
1308d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  // Save the callee-save registers.
1312342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  popq %rax
1322342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  andq $-2,%rax
1338d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq (%rsp),%r11
1342342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  m_mangle_registers %rax
1358d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq %rbx,(_JB_RBX * 8)(%rdi)
1368d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq %rbp,(_JB_RBP * 8)(%rdi)
1378d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq %r12,(_JB_R12 * 8)(%rdi)
1388d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq %r13,(_JB_R13 * 8)(%rdi)
1398d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq %r14,(_JB_R14 * 8)(%rdi)
1408d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq %r15,(_JB_R15 * 8)(%rdi)
1418d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq %rsp,(_JB_RSP * 8)(%rdi)
1428d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq %r11,(_JB_PC  * 8)(%rdi)
1432342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  m_unmangle_registers %rax
1448d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
145686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao  m_calculate_checksum %rax, %rdi
146686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao  movq %rax, (_JB_CHECKSUM * 8)(%rdi)
147686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao
1488d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  xorl %eax,%eax
1498d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  ret
1508d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott HughesEND(sigsetjmp)
1518d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
1528d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes// void siglongjmp(sigjmp_buf env, int value);
1538d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott HughesENTRY(siglongjmp)
154fa432524a66e5797874ef50e4ede95ded4cee199dimitry__BIONIC_WEAK_ASM_FOR_NATIVE_BRIDGE(siglongjmp)
1558d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq %rdi,%r12
1568d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  pushq %rsi // Push 'value'.
1578d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
158686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao  m_calculate_checksum %rax, %rdi
159686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao  xorq (_JB_CHECKSUM * 8)(%rdi), %rax
160686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao  jnz 3f
161686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao
1628d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  // Do we need to restore the signal mask?
1632342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  movq (_JB_SIGFLAG * 8)(%rdi), %rdi
1642342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  pushq %rdi // Push cookie
1652342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  testq $1, %rdi
1668d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  jz 2f
1678d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
1688d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  // Restore the signal mask.
1691c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  movq $2,%rdi // SIG_SETMASK.
1701c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  leaq (_JB_SIGMASK * 8)(%r12),%rsi // new_mask.
1711c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  xorq %rdx,%rdx // NULL.
1721c0c0ede573e3caf86b6fc395ba933bfb7235afaElliott Hughes  call PIC_PLT(sigprocmask)
1738d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
1748d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes2:
1752342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  // Fetch the setjmp cookie and clear the signal flag bit.
1762342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  popq %rcx
1772342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  andq $-2, %rcx
1782342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao
1798d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  popq %rax // Pop 'value'.
1808d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
1818d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  // Restore the callee-save registers.
1828d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq (_JB_RBX * 8)(%r12),%rbx
1838d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq (_JB_RBP * 8)(%r12),%rbp
1848d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq (_JB_R13 * 8)(%r12),%r13
1858d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq (_JB_R14 * 8)(%r12),%r14
1868d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq (_JB_R15 * 8)(%r12),%r15
1878d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq (_JB_RSP * 8)(%r12),%rsp
1888d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq (_JB_PC  * 8)(%r12),%r11
1898d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq (_JB_R12 * 8)(%r12),%r12
1902342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  m_unmangle_registers %rcx
1912342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao
1922342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  // Check the cookie.
1932342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  pushq %rax
1948dbf02d76a245c102e11442305dd5393c4051dbbJosh Gao  pushq %r11
1952342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  movq %rcx, %rdi
1962342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  call PIC_PLT(__bionic_setjmp_cookie_check)
1978dbf02d76a245c102e11442305dd5393c4051dbbJosh Gao  popq %r11
1982342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  popq %rax
1998d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
2002342e643d4c998ae314d03d207f703c1cc5159e4Josh Gao  // Return 1 if value is 0.
2018d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  testl %eax,%eax
2028d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  jnz 1f
2038d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  incl %eax
2048d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes1:
2058d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  movq %r11,0(%rsp)
2068d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes  ret
207686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao
208686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao3:
209686e5f6f69c5c30a09d73e42657cb502a261ad6aJosh Gao  call PIC_PLT(__bionic_setjmp_checksum_mismatch)
2108d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott HughesEND(siglongjmp)
2118d4c55cc741c4107f8a0fba16e5c178c9feb5d81Elliott Hughes
21224958514b92c9b9e111223e4e4c56ef1a52b6403Christopher FerrisALIAS_SYMBOL(longjmp, siglongjmp)
213fa432524a66e5797874ef50e4ede95ded4cee199dimitry__BIONIC_WEAK_ASM_FOR_NATIVE_BRIDGE(longjmp)
21424958514b92c9b9e111223e4e4c56ef1a52b6403Christopher FerrisALIAS_SYMBOL(_longjmp, siglongjmp)
215fa432524a66e5797874ef50e4ede95ded4cee199dimitry__BIONIC_WEAK_ASM_FOR_NATIVE_BRIDGE(_longjmp)
216