1/* Copyright (C) 2009-2021 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, see 16 <https://www.gnu.org/licenses/>. */ 17 18 .section .rodata.str1.1,"aMS",@progbits,1 19 .type longjmp_msg,@object 20longjmp_msg: 21 .string "longjmp causes uninitialized stack frame" 22 .size longjmp_msg, .-longjmp_msg 23 .text 24 25#define __longjmp ____longjmp_chk 26 27#ifdef PIC 28# define CALL_FAIL \ 29 mov.l .Lfail, r1; \ 30 mov.l .Lstr, r4; \ 31 mov.l r12, @-r15; \ 32 cfi_remember_state; \ 33 cfi_adjust_cfa_offset (4); \ 34 cfi_rel_offset (r12, 0); \ 35 mova .Lgot, r0; \ 36 mov.l .Lgot, r12; \ 37 add r0, r12; \ 38 sts.l pr, @-r15; \ 39 cfi_adjust_cfa_offset (4); \ 40 cfi_rel_offset (pr, 0); \ 41 bsrf r1; \ 42 add r12, r4; \ 43 /* Unreachable. */ \ 44.Lfail0: \ 45 .align 2; \ 46.Lgot: \ 47 .long _GLOBAL_OFFSET_TABLE_; \ 48.Lstr: \ 49 .long longjmp_msg@GOTOFF; \ 50.Lfail: \ 51 .long __GI___fortify_fail@PLT-(.Lfail0-.); \ 52 cfi_restore_state; 53#else 54# define CALL_FAIL \ 55 mov.l .Lfail, r1; \ 56 mov.l .Lstr, r4; \ 57 sts.l pr, @-r15; \ 58 cfi_remember_state; \ 59 cfi_adjust_cfa_offset (4); \ 60 cfi_rel_offset (pr, 0); \ 61 jsr @r1; \ 62 nop; \ 63 /* Unreachable. */ \ 64 .align 2; \ 65.Lstr: \ 66 .long longjmp_msg; \ 67.Lfail: \ 68 .long __fortify_fail; \ 69 cfi_restore_state; 70#endif 71 72#define CHECK_SP(reg) \ 73 cmp/hs r15, reg; \ 74 bt .Lok; \ 75 CALL_FAIL \ 76.Lok: 77 78#include <__longjmp.S> 79