From 93a45ff1ca6d459618bb0cf93580c4b2809a4b61 Mon Sep 17 00:00:00 2001 From: Andreas Krebbel Date: Tue, 7 Jan 2014 09:36:31 +0100 Subject: S/390: Make jmp_buf extendible. --- nptl/sysdeps/unix/sysv/linux/s390/Versions | 5 ++ nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c | 63 ++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 nptl/sysdeps/unix/sysv/linux/s390/Versions create mode 100644 nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c (limited to 'nptl') diff --git a/nptl/sysdeps/unix/sysv/linux/s390/Versions b/nptl/sysdeps/unix/sysv/linux/s390/Versions new file mode 100644 index 0000000..58632f4 --- /dev/null +++ b/nptl/sysdeps/unix/sysv/linux/s390/Versions @@ -0,0 +1,5 @@ +libpthread { + GLIBC_2.19 { + longjmp; siglongjmp; + } +} diff --git a/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c b/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c new file mode 100644 index 0000000..801432c --- /dev/null +++ b/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c @@ -0,0 +1,63 @@ +/* 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 + . + + This is a copy of pthread/pt-longjmp.c made for extending the + jmpbuf structure on System z. */ + +#include +#include +#include +#include "pthreadP.h" +#include +#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19) + +/* The __v1 version prototypes are declared in v1-setjmp.h which + cannot be included together with setjmp.h. So we put the + prototypes here manually. */ +extern void __v1__libc_siglongjmp (sigjmp_buf env, int val) + __attribute__ ((noreturn)); +extern void __v1__libc_longjmp (sigjmp_buf env, int val) + __attribute__ ((noreturn)); + +void __v1_siglongjmp (sigjmp_buf env, int val) +{ + __v1__libc_siglongjmp (env, val); +} + +void __v1_longjmp (jmp_buf env, int val) +{ + __v1__libc_longjmp (env, val); +} + +compat_symbol (libpthread, __v1_longjmp, longjmp, GLIBC_2_0); +compat_symbol (libpthread, __v1_siglongjmp, siglongjmp, GLIBC_2_0); +#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19)) */ + +void +__v2_longjmp (jmp_buf env, int val) +{ + __libc_longjmp (env, val); +} + +void +__v2_siglongjmp (jmp_buf env, int val) +{ + __libc_siglongjmp (env, val); +} + +versioned_symbol (libpthread, __v2_longjmp, longjmp, GLIBC_2_19); +versioned_symbol (libpthread, __v2_siglongjmp, siglongjmp, GLIBC_2_19); -- cgit v1.1