diff packages/compat/posix/current/include/sigsetjmp.h @ 130:eb9fd8c04db3 ecos-sw-2000-10-23

Merge from eCos master repository on 2000-10-23-17:01:37-BST
author jlarmour
date Mon, 23 Oct 2000 17:10:57 +0000
parents
children 4c750ce71ae3
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/compat/posix/current/include/sigsetjmp.h
@@ -0,0 +1,86 @@
+#ifndef CYGONCE_SIGSETJMP_H
+#define CYGONCE_SIGSETJMP_H
+//=============================================================================
+//
+//      sigsetjmp.h
+//
+//      POSIX sigsetjmp header
+//
+//=============================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):     nickg, jlarmour
+// Contributors:  
+// Date:          2000-03-17
+// Purpose:       POSIX sigsetjmp header
+// Description:   This header contains all the definitions needed to support
+//                the POSIX sigsetjmp/siglongjmp API under eCos.
+//              
+// Usage:         This file must be included indirectly via
+//                the C library setjmp.h header.
+//              
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+#include <pkgconf/hal.h>
+#include <pkgconf/kernel.h>
+#include <pkgconf/posix.h>
+
+#include <signal.h>
+
+//=============================================================================
+// sigjmp_buf structure
+// The API requires this to be an array type, but this array actually
+// contains three fields:
+// 0..sizeof(hal_jmp_buf)-1               HAL jump buffer
+// sizeof(hal_jmp_buf)                    savemask value (an int)
+// sizeof(hal_jmp_buf)+sizeof(int)...     sigset_t containing saved mask
+
+typedef cyg_uint8 sigjmp_buf[sizeof(hal_jmp_buf)+sizeof(int)+(sizeof(sigset_t))];
+
+//=============================================================================
+// sigsetjmp() macro
+
+#define sigsetjmp( _env_, _savemask_ )                                        \
+(                                                                             \
+ (*(int *)&((_env_)[sizeof(hal_jmp_buf)])=(_savemask_)),                      \
+ ((_savemask_)?pthread_sigmask(SIG_BLOCK,NULL,                                \
+                                  (sigset_t *)&(_env_)[sizeof(hal_jmp_buf)+   \
+                                                      sizeof(int)]):0),       \
+ hal_setjmp(*(hal_jmp_buf *)&_env_[0])                                        \
+)
+
+//=============================================================================
+// siglongjmp function
+
+__externC void siglongjmp( sigjmp_buf env, int val );
+
+//-----------------------------------------------------------------------------
+#endif // ifndef CYGONCE_SIGSETJMP_H
+// End of sigsetjmp.h