The code we give is platform independent, except as noted.
The code all lives in directory rtl, the run time library support directory. The symbols are defined in namespace flx::rtl, except as noted.
1: #line 18 "./lpsrc/flx_rtl.pak" 2: pkg_requires = ['flx_compiler','flx_drivers','flx_rtl','flx_gc','flx_pthread','demux','faio','flx_stdlib']
1: #line 22 "./lpsrc/flx_rtl.pak" 2: cpp_cpps = ['rtl/flx_async'] 3: provides_lib = "libflx_async" 4: pkg_requires = ['faio','demux','flx_pthread','flx_rtl','flx_gc'] 5: lib_requires = ['libfaio','libdemux','libflx_pthread','libflx','libflx_gc'] 6: iscr_source = ['lpsrc/flx_rtl.pak'] 7: build_macro = "ASYNC"
1: #line 31 "./lpsrc/flx_rtl.pak" 2: RTL_CPPS = [ 3: "rtl/flx_rtl", 4: "rtl/flx_dynlink", 5: "rtl/flx_sync", 6: "rtl/flx_eh", 7: "rtl/flx_i18n", 8: "rtl/flx_ioutil", 9: "rtl/flx_strutil", 10: "rtl/flx_executil", 11: "rtl/flx_main", 12: ] 13: 14: cpp_cpps = RTL_CPPS 15: provides_lib = "libflx" 16: lib_requires = ['libflx_gc'] 17: pkg_requires = ['flx_gc'] 18: iscr_source = ['lpsrc/flx_rtl.pak'] 19: build_macro = "RTL" 20: weaver_directory = 'doc/rtl/flx_rtl/'
1: #line 53 "./lpsrc/flx_rtl.pak" 2: DRIVERS = [ 3: ('static','rtl/flx_run','',[]), 4: ('dynamic','rtl/flx_run','bin/flx_run',[]), 5: ('static','test/drivers/flx_perf_drv1','',[]), 6: ('dynamic','test/drivers/flx_perf_drv1','test/drivers/flx_perf_drv1',[]), 7: ('static','test/drivers/mickey_mouse','',[]), 8: ('dynamic','test/drivers/mickey_mouse','bin/mickey_mouse',[]), 9: ] 10: 11: DRLIBS = [ 12: 'libflx_pthread', 13: 'libflx', 14: 'libflx_gc', 15: ] 16: 17: drivers = DRIVERS 18: drivers_require_libs = DRLIBS 19: pkg_requires = ['flx_rtl','flx_pthread','flx_gc'] 20: lib_requires = ['libdemux','libflx_pthread','libflx'] 21: iscr_source = ['lpsrc/flx_rtl.pak']
1: #line 76 "./lpsrc/flx_rtl.pak" 2: DRIVERS = [ 3: ('static','rtl/flx_arun','',[]), 4: ('dynamic','rtl/flx_arun','bin/flx_arun',[]), 5: ] 6: 7: DRLIBS = [ 8: 'libflx_async', 9: 'libfaio', 10: 'libdemux', 11: 'libflx_pthread', 12: 'libflx', 13: 'libflx_gc', 14: ] 15: 16: drivers = DRIVERS 17: drivers_require_libs = DRLIBS 18: pkg_requires = ['flx_gc','flx_rtl','flx_pthread','flx_async','demux','faio'] 19: iscr_source = ['lpsrc/flx_rtl.pak']
1: Name: flx 2: Description: Felix core runtime support 3: Version: $Id: flx_rtl.pak 1356 2007-04-10 18:25:53Z skaller $ 4: provides_dlib: -lflx_dynamic 5: provides_slib: -lflx_static 6: Requires: flx_gc
1: Name: flx_arun 2: Description: Felix standard driver, async support 3: Version: $Id: flx_rtl.pak 1356 2007-04-10 18:25:53Z skaller $ 4: Requires: flx_async faio demux flx_pthread flx flx_gc
1: Name: flx_run 2: Description: Felix standard driver, no async support 3: Version: $Id: flx_rtl.pak 1356 2007-04-10 18:25:53Z skaller $ 4: Requires: flx_pthread flx flx_gc
1: Name: flx_async 2: Description: Async hook 3: Version: $Id: flx_rtl.pak 1356 2007-04-10 18:25:53Z skaller $ 4: provides_dlib: -lflx_async_dynamic 5: provides_slib: -lflx_async_static 6: Requires: faio demux flx_pthread flx flx_gc
1: #line 138 "./lpsrc/flx_rtl.pak" 2: #ifndef __FLX_META_H__ 3: #define __FLX_META_H__ 4: // taken from BOOST 5: #line 146 "./lpsrc/flx_rtl.pak" 6: #define FLX_HAVE_INCLASS_MEMBER_INITIALIZATION 1 7: #line 146 "./lpsrc/flx_rtl.pak" 8: #if FLX_HAVE_INCLASS_MEMBER_INITIALIZATION 9: # define FLX_STATIC_CONSTANT(type, assignment) static const type assignment 10: #else 11: # define FLX_STATIC_CONSTANT(type, assignment) enum { assignment } 12: #endif 13: 14: #include <cstddef> 15: 16: template <std::size_t> struct type_with_alignment; 17: #line 159 "./lpsrc/flx_rtl.pak" 18: template <> struct type_with_alignment<1>{ typedef char type; }; 19: #line 159 "./lpsrc/flx_rtl.pak" 20: template <> struct type_with_alignment<2>{ typedef short type; }; 21: #line 159 "./lpsrc/flx_rtl.pak" 22: template <> struct type_with_alignment<4>{ typedef void* type; }; 23: #line 159 "./lpsrc/flx_rtl.pak" 24: template <typename T> struct alignment_of; 25: 26: template <typename T> 27: struct alignment_of_hack 28: { 29: char c; 30: T t; 31: alignment_of_hack(); 32: }; 33: 34: template <unsigned A, unsigned S> 35: struct alignment_logic 36: { 37: FLX_STATIC_CONSTANT(std::size_t, value = A < S ? A : S); 38: }; 39: 40: template< typename T > 41: struct alignment_of 42: { 43: FLX_STATIC_CONSTANT(std::size_t, value = 44: (alignment_logic< 45: sizeof(alignment_of_hack<T>) - sizeof(T), 46: sizeof(T) 47: >::value)); 48: }; 49: 50: template<std::size_t L, std::size_t A> 51: struct aligned_storage 52: { 53: union type 54: { 55: unsigned char data_[ L ]; 56: typename type_with_alignment<A>::type align_; 57: }; 58: }; 59: 60: template<typename T> 61: struct store_of 62: { 63: typedef typename aligned_storage<sizeof(T), alignment_of<T>::value>::type type; 64: }; 65: 66: // convert an rvalue to an lvalue 67: template<typename T> 68: T const &lvalue(T const &x) 69: { 70: return x; 71: } 72: 73: // this reinterpret cast works with rvalues too 74: template<typename T, typename U> 75: T &reinterpret(U const &x) { 76: return reinterpret_cast<T&>(const_cast<U&>(x)); 77: } 78: #endif
1: #line 217 "./lpsrc/flx_rtl.pak" 2: #ifndef __FLX_HOST_CONFIG_H__ 3: #define __FLX_HOST_CONFIG_H__ 4: 5: #line 225 "./lpsrc/flx_rtl.pak" 6: #define FLX_WIN32 0 7: #line 230 "./lpsrc/flx_rtl.pak" 8: #define FLX_HAVE_BOOL 1 9: #line 235 "./lpsrc/flx_rtl.pak" 10: #define FLX_HAVE_LONGLONG 1 11: #line 240 "./lpsrc/flx_rtl.pak" 12: #define FLX_HAVE_LONGDOUBLE 1 13: #line 240 "./lpsrc/flx_rtl.pak" 14: #if !defined(FLX_STATIC_LINK) && FLX_WIN32 15: #define FLX_EXPORT __declspec(dllexport) 16: #define FLX_IMPORT __declspec(dllimport) 17: #else 18: #define FLX_EXPORT 19: #define FLX_IMPORT 20: #endif 21: 22: 23: #line 255 "./lpsrc/flx_rtl.pak" 24: #define FLX_RAWADDRESS unsigned 25: #define FLX_MAX_ALIGN 4 26: 27: #if FLX_WIN32 28: #define _WIN32_WINNT 0x500 // Require Windows NT5 (2K, XP, 2K3) 29: #endif 30: 31: 32: #endif 33:
1: #line 266 "./lpsrc/flx_rtl.pak" 2: #ifndef __FLX_RTL_CONFIG_H__ 3: #define __FLX_RTL_CONFIG_H__ 4: 5: #line 274 "./lpsrc/flx_rtl.pak" 6: #define FLX_HAVE_VSNPRINTF 1 7: #line 279 "./lpsrc/flx_rtl.pak" 8: #define FLX_HAVE_BOOL 1 9: #line 284 "./lpsrc/flx_rtl.pak" 10: #define FLX_HAVE_LONGLONG 1 11: #line 289 "./lpsrc/flx_rtl.pak" 12: #define FLX_HAVE_LONGDOUBLE 1 13: #line 294 "./lpsrc/flx_rtl.pak" 14: #define FLX_HAVE_ISNAN_IN_IEEEFP 0 15: #line 299 "./lpsrc/flx_rtl.pak" 16: #define FLX_HAVE_GNU 1 17: #line 304 "./lpsrc/flx_rtl.pak" 18: #define FLX_HAVE_GNU_X86 0 19: #line 309 "./lpsrc/flx_rtl.pak" 20: #define FLX_HAVE_GNU_X86_64 1 21: #line 317 "./lpsrc/flx_rtl.pak" 22: #define FLX_UNLIKELY(x) __builtin_expect(long(x),0) 23: #line 317 "./lpsrc/flx_rtl.pak" 24: #define FLX_LIKELY(x) !__builtin_expect(!long(x),0) 25: #line 322 "./lpsrc/flx_rtl.pak" 26: #define FLX_HAVE_CGOTO 1 27: #line 327 "./lpsrc/flx_rtl.pak" 28: #define FLX_USE_REGPARM3 0 29: #line 332 "./lpsrc/flx_rtl.pak" 30: #define FLX_HAVE_ASM_LABELS 1 31: #line 337 "./lpsrc/flx_rtl.pak" 32: #define FLX_HAVE_DLOPEN 1 33: #line 342 "./lpsrc/flx_rtl.pak" 34: #define FLX_WIN32 0 35: #line 347 "./lpsrc/flx_rtl.pak" 36: #define FLX_MACOSX 0 37: #line 352 "./lpsrc/flx_rtl.pak" 38: #define FLX_LINUX 1 39: #line 357 "./lpsrc/flx_rtl.pak" 40: #define FLX_WIN32 0 41: #line 362 "./lpsrc/flx_rtl.pak" 42: #define FLX_WIN64 0 43: #line 367 "./lpsrc/flx_rtl.pak" 44: #define FLX_CYGWIN 0 45: #line 372 "./lpsrc/flx_rtl.pak" 46: #define FLX_POSIX 1 47: #line 377 "./lpsrc/flx_rtl.pak" 48: #define FLX_SOLARIS 0 49: #line 382 "./lpsrc/flx_rtl.pak" 50: #define FLX_HAVE_MSVC 0 51: #line 387 "./lpsrc/flx_rtl.pak" 52: #define FLX_HAVE_KQUEUE_DEMUXER 0 53: #line 392 "./lpsrc/flx_rtl.pak" 54: #define FLX_HAVE_POLL 1 55: #line 397 "./lpsrc/flx_rtl.pak" 56: #define FLX_HAVE_EPOLL 1 57: #line 402 "./lpsrc/flx_rtl.pak" 58: #define FLX_HAVE_EVTPORTS 0 59: #line 402 "./lpsrc/flx_rtl.pak" 60: // 61: #if FLX_HAVE_CGOTO && FLX_HAVE_ASM_LABELS 62: #define FLX_CGOTO 1 63: #else 64: #define FLX_CGOTO 0 65: #endif 66: 67: #if FLX_WIN32 68: #define _WIN32_WINNT 0x0600 // Require Windows NT5 (2K, XP, 2K3) 69: #define WINVER 0x0600 // Require Windows NT5 (2K, XP, 2K3) 70: // vs windows.h just LOVES to include winsock version 1 headers by default. 71: // that's bad for everyone, so quit it. 72: #define _WINSOCKAPI_ 73: #endif 74: 75: 76: #if !defined(FLX_STATIC_LINK) && FLX_WIN32 77: #define FLX_EXPORT __declspec(dllexport) 78: #define FLX_IMPORT __declspec(dllimport) 79: #else 80: #define FLX_EXPORT 81: #define FLX_IMPORT 82: #endif 83: 84: 85: #ifdef BUILD_RTL 86: #define RTL_EXTERN FLX_EXPORT 87: #else 88: #define RTL_EXTERN FLX_IMPORT 89: #endif 90: 91: #if FLX_MACOSX && !FLX_HAVE_DLOPEN 92: #define FLX_MACOSX_NODLCOMPAT 1 93: #else 94: #define FLX_MACOSX_NODLCOMPAT 0 95: #endif 96: 97: #if FLX_HAVE_GNU 98: #define FLX_ALWAYS_INLINE __attribute__ ((always_inline)) 99: #define FLX_NOINLINE __attribute__ ((noinline)) 100: #define FLX_CONST __attribute__ ((const)) 101: #define FLX_PURE __attribute__ ((pure)) 102: #define FLX_GXX_PARSER_HACK (void)0, 103: #define FLX_UNUSED __attribute__((unused)) 104: #else 105: #define FLX_ALWAYS_INLINE 106: #define FLX_NOINLINE 107: #define FLX_CONST 108: #define FLX_PURE 109: #define FLX_GXX_PARSER_HACK 110: #define FLX_UNUSED 111: #endif 112: 113: #line 461 "./lpsrc/flx_rtl.pak" 114: #define FLX_RAWADDRESS unsigned 115: #define FLX_MAX_ALIGN 4 116: #endif
1.1. Procedure Continuation Abstraction
1.2. Unix Dynamic linker
1.3. Universal Program Driver