Use unsigned comparison in ARM ____longjmp_chk.
[glibc-ports.git] / sysdeps / arm / ____longjmp_chk.S
blob16fc4cdebb9ddd7fd0c3c7678b81aad15bdedbec
1 /* Copyright (C) 2009 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
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.
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.
14    You should have received a copy of the GNU General Public License
15    along with GCC; see the file COPYING.  If not, write to the Free
16    Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
17    02110-1301, USA.  */
20         .section .rodata.str1.1,"aMS",%progbits,1
21         .type   longjmp_msg,%object
22 longjmp_msg:
23         .string "longjmp causes uninitialized stack frame"
24         .size   longjmp_msg, .-longjmp_msg
25         .text
27 #define __longjmp ____longjmp_chk
29 #ifdef PIC
30 # define CALL_FAIL                                              \
31         ldr     sl, .L_GOT;                                     \
32 .L_GOT_OFF:                                                     \
33         add     sl, pc, sl;                                     \
34         ldr     r0, .Lstr;                                      \
35         add     r0, sl, r0;                                     \
36         B       PLTJMP(HIDDEN_JUMPTARGET(__fortify_fail));      \
37 .L_GOT:                                                         \
38         .word   _GLOBAL_OFFSET_TABLE_-(.L_GOT_OFF+8);           \
39 .Lstr:                                                          \
40         .word   longjmp_msg(GOTOFF);
41 #else
42 # define CALL_FAIL                                      \
43         ldr     r0, .Lstr;                              \
44         B       HIDDEN_JUMPTARGET(__fortify_fail);      \
45 .Lstr:                                                  \
46         .word   longjmp_msg;
47 #endif
49 #define CHECK_SP(reg)                           \
50         cmp     sp, reg;                                \
51         bls     .Lok;                           \
52         CALL_FAIL                               \
53 .Lok:
55 #include <__longjmp.S>