Back to index

glibc  2.9
pt-longjmp.c
Go to the documentation of this file.
00001 /* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
00002    This file is part of the GNU C Library.
00003    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #include <setjmp.h>
00021 #include <stdlib.h>
00022 #include <bits/wordsize.h>
00023 #include "pthreadP.h"
00024 #include  <shlib-compat.h>
00025 #if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_3_4)
00026 
00027 /* These functions are not declared anywhere since they shouldn't be
00028    used at another place but here.  */
00029 extern void __novmx__libc_siglongjmp (sigjmp_buf env, int val)
00030      __attribute__ ((noreturn));
00031 extern void __novmx__libc_longjmp (sigjmp_buf env, int val)
00032      __attribute__ ((noreturn));
00033 
00034 
00035 void __novmx_siglongjmp (sigjmp_buf env, int val)
00036 {
00037   __novmx__libc_siglongjmp (env, val);
00038 }
00039 
00040 void __novmx_longjmp (jmp_buf env, int val)
00041 {
00042   __novmx__libc_longjmp (env, val);
00043 }
00044 
00045 # if __WORDSIZE == 64
00046 symbol_version (__novmx_longjmp,longjmp,GLIBC_2.3);
00047 symbol_version (__novmx_siglongjmp,siglongjmp,GLIBC_2.3);
00048 # else
00049 symbol_version (__novmx_longjmp,longjmp,GLIBC_2.0);
00050 symbol_version (__novmx_siglongjmp,siglongjmp,GLIBC_2.0);
00051 # endif
00052 #endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4))  */ 
00053 
00054 void
00055 __vmx_longjmp (jmp_buf env, int val)
00056 {
00057   __libc_longjmp (env, val);
00058 }
00059 
00060 void
00061 __vmx_siglongjmp (jmp_buf env, int val)
00062 {
00063   __libc_siglongjmp (env, val);
00064 }
00065 
00066 versioned_symbol (libc, __vmx_longjmp, longjmp, GLIBC_2_3_4);
00067 versioned_symbol (libc, __vmx_siglongjmp, siglongjmp, GLIBC_2_3_4);
00068