1*287433edSSergey Makeev /* 2*287433edSSergey Makeev Copyright (c) 2016 Richard Maxwell 3*287433edSSergey Makeev 4*287433edSSergey Makeev Permission is hereby granted, free of charge, to any person obtaining a copy 5*287433edSSergey Makeev of this software and associated documentation files (the "Software"), to deal 6*287433edSSergey Makeev in the Software without restriction, including without limitation the rights 7*287433edSSergey Makeev to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8*287433edSSergey Makeev copies of the Software, and to permit persons to whom the Software is 9*287433edSSergey Makeev furnished to do so, subject to the following conditions: 10*287433edSSergey Makeev 11*287433edSSergey Makeev The above copyright notice and this permission notice shall be included in all 12*287433edSSergey Makeev copies or substantial portions of the Software. 13*287433edSSergey Makeev 14*287433edSSergey Makeev THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*287433edSSergey Makeev IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*287433edSSergey Makeev FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17*287433edSSergey Makeev AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18*287433edSSergey Makeev LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19*287433edSSergey Makeev OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20*287433edSSergey Makeev SOFTWARE. 21*287433edSSergey Makeev */ 22*287433edSSergey Makeev 23*287433edSSergey Makeev #ifndef FCONTEXT_H 24*287433edSSergey Makeev #define FCONTEXT_H 25*287433edSSergey Makeev 26*287433edSSergey Makeev #include <stdint.h> 27*287433edSSergey Makeev // intptr_t 28*287433edSSergey Makeev 29*287433edSSergey Makeev #include <stddef.h> 30*287433edSSergey Makeev // size_t 31*287433edSSergey Makeev 32*287433edSSergey Makeev // ----------------------------------------------------------------------------- 33*287433edSSergey Makeev #ifdef __cplusplus 34*287433edSSergey Makeev extern "C" { 35*287433edSSergey Makeev #endif 36*287433edSSergey Makeev // ----------------------------------------------------------------------------- 37*287433edSSergey Makeev 38*287433edSSergey Makeev typedef void* fcontext_t; 39*287433edSSergey Makeev 40*287433edSSergey Makeev intptr_t jump_fcontext 41*287433edSSergey Makeev ( 42*287433edSSergey Makeev fcontext_t* ofc 43*287433edSSergey Makeev , fcontext_t nfc 44*287433edSSergey Makeev , intptr_t vp 45*287433edSSergey Makeev , int preserve_fpu 46*287433edSSergey Makeev ); 47*287433edSSergey Makeev 48*287433edSSergey Makeev fcontext_t make_fcontext 49*287433edSSergey Makeev ( 50*287433edSSergey Makeev void* sp 51*287433edSSergey Makeev , size_t size 52*287433edSSergey Makeev , void (*fn)(intptr_t) 53*287433edSSergey Makeev ); 54*287433edSSergey Makeev // sp is the pointer to the _top_ of the stack (ie &stack_buffer[size]). 55*287433edSSergey Makeev 56*287433edSSergey Makeev // ----------------------------------------------------------------------------- 57*287433edSSergey Makeev #ifdef __cplusplus 58*287433edSSergey Makeev } 59*287433edSSergey Makeev #endif 60*287433edSSergey Makeev // ----------------------------------------------------------------------------- 61*287433edSSergey Makeev 62*287433edSSergey Makeev #endif 63