diff options
Diffstat (limited to 'sysdeps/aarch64/__longjmp.S')
-rw-r--r-- | sysdeps/aarch64/__longjmp.S | 118 |
1 files changed, 0 insertions, 118 deletions
diff --git a/sysdeps/aarch64/__longjmp.S b/sysdeps/aarch64/__longjmp.S deleted file mode 100644 index c9056e63e7..0000000000 --- a/sysdeps/aarch64/__longjmp.S +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> -#include <jmpbuf-offsets.h> -#include <stap-probe.h> - -/* __longjmp(jmpbuf, val) */ - -ENTRY (__longjmp) - cfi_def_cfa(x0, 0) - cfi_offset(x19, JB_X19<<3) - cfi_offset(x20, JB_X20<<3) - cfi_offset(x21, JB_X21<<3) - cfi_offset(x22, JB_X22<<3) - cfi_offset(x23, JB_X23<<3) - cfi_offset(x24, JB_X24<<3) - cfi_offset(x25, JB_X25<<3) - cfi_offset(x26, JB_X26<<3) - cfi_offset(x27, JB_X27<<3) - cfi_offset(x28, JB_X28<<3) - cfi_offset(x29, JB_X29<<3) - cfi_offset(x30, JB_LR<<3) - - cfi_offset( d8, JB_D8<<3) - cfi_offset( d9, JB_D9<<3) - cfi_offset(d10, JB_D10<<3) - cfi_offset(d11, JB_D11<<3) - cfi_offset(d12, JB_D12<<3) - cfi_offset(d13, JB_D13<<3) - cfi_offset(d14, JB_D14<<3) - cfi_offset(d15, JB_D15<<3) - - DELOUSE (0) - - ldp x19, x20, [x0, #JB_X19<<3] - ldp x21, x22, [x0, #JB_X21<<3] - ldp x23, x24, [x0, #JB_X23<<3] - ldp x25, x26, [x0, #JB_X25<<3] - ldp x27, x28, [x0, #JB_X27<<3] -#ifdef PTR_DEMANGLE - ldp x29, x4, [x0, #JB_X29<<3] - PTR_DEMANGLE (30, 4, 3, 2) -#else - ldp x29, x30, [x0, #JB_X29<<3] -#endif - /* longjmp probe takes 3 arguments, address of jump buffer as - first argument (8@x0), return value as second argument (-4@x1), - and target address (8@x30), respectively. */ - LIBC_PROBE (longjmp, 3, 8@x0, -4@x1, 8@x30) - ldp d8, d9, [x0, #JB_D8<<3] - ldp d10, d11, [x0, #JB_D10<<3] - ldp d12, d13, [x0, #JB_D12<<3] - ldp d14, d15, [x0, #JB_D14<<3] - - /* Originally this was implemented with a series of - .cfi_restore() directives. - - The theory was that cfi_restore should revert to previous - frame value is the same as the current value. In practice - this doesn't work, even after cfi_restore() gdb continues - to try to recover a previous frame value offset from x0, - which gets stuffed after a few more instructions. The - cfi_same_value() mechanism appears to work fine. */ - - cfi_same_value(x19) - cfi_same_value(x20) - cfi_same_value(x21) - cfi_same_value(x22) - cfi_same_value(x23) - cfi_same_value(x24) - cfi_same_value(x25) - cfi_same_value(x26) - cfi_same_value(x27) - cfi_same_value(x28) - cfi_same_value(x29) - cfi_same_value(x30) - cfi_same_value(d8) - cfi_same_value(d9) - cfi_same_value(d10) - cfi_same_value(d11) - cfi_same_value(d12) - cfi_same_value(d13) - cfi_same_value(d14) - cfi_same_value(d15) -#ifdef PTR_DEMANGLE - ldr x4, [x0, #JB_SP<<3] - PTR_DEMANGLE (5, 4, 3, 2) -#else - ldr x5, [x0, #JB_SP<<3] -#endif - mov sp, x5 - - /* longjmp_target probe takes 3 arguments, address of jump buffer - as first argument (8@x0), return value as second argument (-4@x1), - and target address (8@x30), respectively. */ - LIBC_PROBE (longjmp_target, 3, 8@x0, -4@x1, 8@x30) - cmp x1, #0 - mov x0, #1 - csel x0, x1, x0, ne - /* Use br instead of ret because ret is guaranteed to mispredict */ - br x30 -END (__longjmp) |