]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / powerpc / powerpc64 / ____longjmp_chk.S
CommitLineData
b168057a 1/* Copyright (C) 2009-2015 Free Software Foundation, Inc.
0323b051
AS
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
59ba27a6
PE
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
0323b051
AS
17
18#include <sysdep.h>
19#include <rtld-global-offsets.h>
20
15efafdf
AS
21 .section .rodata.str1.8,"aMS",@progbits,1
22 .align 3
0323b051
AS
23.LC0:
24 .string "longjmp causes uninitialized stack frame"
25 .section .toc,"aw"
26.LC1:
27 .tc .LC0[TC],.LC0
28 .text
29
30#define __longjmp ____longjmp_chk
31
32#define CHECK_SP(reg) \
33 cmpld reg, r1; \
34 bge+ .Lok; \
15efafdf 35 mflr r0; \
8b8a692c 36 std r0,FRAME_LR_SAVE(r1); \
15efafdf
AS
37 mr r31,r3; \
38 mr r30,r4; \
8b8a692c 39 stdu r1,-FRAME_MIN_SIZE-32(r1); \
15efafdf 40 cfi_remember_state; \
8b8a692c
UW
41 cfi_adjust_cfa_offset (FRAME_MIN_SIZE+32); \
42 cfi_offset (lr, FRAME_LR_SAVE); \
15efafdf 43 li r3,0; \
8b8a692c 44 addi r4,r1,FRAME_MIN_SIZE; \
15efafdf
AS
45 li r0,__NR_sigaltstack; \
46 sc; \
47 /* Without working sigaltstack we cannot perform the test. */ \
48 bso .Lok2; \
8b8a692c 49 lwz r0,FRAME_MIN_SIZE+8(r1); \
15efafdf
AS
50 andi. r4,r0,1; \
51 beq .Lfail; \
8b8a692c
UW
52 ld r0,FRAME_MIN_SIZE+16(r1); \
53 ld r4,FRAME_MIN_SIZE(r1); \
15efafdf
AS
54 add r4,r4,r0; \
55 sub r3,r3,reg; \
56 cmpld r3,r0; \
57 bge+ .Lok2; \
58.Lfail: \
0323b051
AS
59 ld r3,.LC1@toc(2); \
60 bl HIDDEN_JUMPTARGET (__fortify_fail); \
15efafdf
AS
61 nop; \
62.Lok2: \
63 mr r3,r31; \
64 mr r4,r30; \
65 cfi_restore_state; \
0323b051
AS
66.Lok:
67
68#include <__longjmp-common.S>