AArch64: Don't clobber argument for tail call to __sigjmp_save in sigsetjmp
This commit is contained in:
parent
6c14f68aab
commit
e39adf43c7
@ -1,3 +1,9 @@
|
||||
2013-05-21 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
[BZ #15493]
|
||||
* setjmp/Makefile (tests): Add tst-sigsetjmp.
|
||||
* setjmp/tst-sigsetjmp.c: New test.
|
||||
|
||||
2013-05-20 Ondřej Bílka <neleai@seznam.cz>
|
||||
|
||||
* sysdeps/x86_64/memset.S (memset): New implementation.
|
||||
|
2
NEWS
2
NEWS
@ -18,7 +18,7 @@ Version 2.18
|
||||
15305, 15307, 15309, 15327, 15330, 15335, 15336, 15337, 15342, 15346,
|
||||
15359, 15361, 15366, 15380, 15394, 15395, 15405, 15406, 15409, 15416,
|
||||
15418, 15419, 15423, 15424, 15426, 15429, 15442, 15448, 15480, 15485,
|
||||
15488, 15490, 15497.
|
||||
15488, 15490, 15493, 15497.
|
||||
|
||||
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
|
||||
#15078).
|
||||
|
@ -1,3 +1,10 @@
|
||||
2013-05-21 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
[BZ #15493]
|
||||
* sysdeps/aarch64/setjmp.S (__sigsetjmp): Don't clobber register
|
||||
x1.
|
||||
[NOT_IN_libc && IS_IN_rtld]: Don't call __sigjmp_save.
|
||||
|
||||
2013-05-21 Marcus Shawcroft <marcus.shawcroft@linaro.org>
|
||||
|
||||
* sysdeps/aarch64/libm-test-ulps: Regenerate.
|
||||
|
@ -44,8 +44,14 @@ ENTRY (__sigsetjmp)
|
||||
stp d10, d11, [x0, #JB_D10<<3]
|
||||
stp d12, d13, [x0, #JB_D12<<3]
|
||||
stp d14, d15, [x0, #JB_D14<<3]
|
||||
mov x1, sp
|
||||
str x1, [x0, #JB_SP<<3]
|
||||
mov x2, sp
|
||||
str x2, [x0, #JB_SP<<3]
|
||||
#if defined NOT_IN_libc && defined IS_IN_rtld
|
||||
/* In ld.so we never save the signal mask */
|
||||
mov w0, #0
|
||||
RET
|
||||
#else
|
||||
b C_SYMBOL_NAME(__sigjmp_save)
|
||||
#endif
|
||||
END (__sigsetjmp)
|
||||
hidden_def (__sigsetjmp)
|
||||
|
@ -25,7 +25,8 @@ headers := setjmp.h bits/setjmp.h bits/setjmp2.h
|
||||
routines := setjmp sigjmp bsd-setjmp bsd-_setjmp \
|
||||
longjmp __longjmp jmp-unwind
|
||||
|
||||
tests := tst-setjmp jmpbug bug269-setjmp tst-setjmp-fp
|
||||
tests := tst-setjmp jmpbug bug269-setjmp tst-setjmp-fp \
|
||||
tst-sigsetjmp
|
||||
|
||||
|
||||
include ../Rules
|
||||
|
44
setjmp/tst-sigsetjmp.c
Normal file
44
setjmp/tst-sigsetjmp.c
Normal file
@ -0,0 +1,44 @@
|
||||
/* Copyright (C) 2013 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/>. */
|
||||
|
||||
/* Test case for BZ #15493 */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <signal.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
sigjmp_buf sj;
|
||||
sigset_t m;
|
||||
|
||||
sigemptyset (&m);
|
||||
sigprocmask (SIG_SETMASK, &m, NULL);
|
||||
if (sigsetjmp (sj, 0) == 0)
|
||||
{
|
||||
sigaddset (&m, SIGUSR1);
|
||||
sigprocmask (SIG_SETMASK, &m, NULL);
|
||||
siglongjmp (sj, 1);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
sigprocmask (SIG_SETMASK, NULL, &m);
|
||||
return sigismember (&m, SIGUSR1) ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
||||
|
||||
#define TEST_FUNCTION do_test ()
|
||||
#include "../test-skeleton.c"
|
Loading…
x
Reference in New Issue
Block a user