19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef __stl_config__linux_h 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __stl_config__linux_h 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_PLATFORM "Linux" 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <features.h> 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* This is defined wether library in use is glibc or not. 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block This may be treated as presence of GNU libc compatible 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block header files (these define is not really intended to check 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for the presence of a particular library, but rather is used 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block to define an INTERFACE.) */ 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_USE_GLIBC 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_USE_GLIBC 1 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_USE_STDIO_IO 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_USE_UNIX_IO 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* #define _STLP_USE_STDIO_IO */ 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* If not explicitly specified otherwise, work with threads 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined(_STLP_NO_THREADS) && !defined(_REENTRANT) 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _REENTRANT 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_REENTRANT) && !defined(_PTHREADS) 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _PTHREADS 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef __UCLIBC__ /* uClibc 0.9.27 */ 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_USE_UCLIBC 1 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined(__UCLIBC_HAS_WCHAR__) 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_NO_WCHAR_T 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_NO_WCHAR_T 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_NO_NATIVE_MBSTATE_T 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_NO_NATIVE_MBSTATE_T 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_NO_NATIVE_WIDE_STREAMS 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_NO_NATIVE_WIDE_STREAMS 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif /* __UCLIBC_HAS_WCHAR__ */ 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block /* Hmm, bogus _GLIBCPP_USE_NAMESPACES seems undefined... */ 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_VENDOR_GLOBAL_CSTD 1 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_PTHREADS) 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_THREADS 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_PTHREADS 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef __USE_UNIX98 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define __USE_UNIX98 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block*/ 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* This feature exist at least since glibc 2.2.4 */ 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* # define __FIT_XSI_THR */ /* Unix 98 or X/Open System Interfaces Extention */ 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifdef __USE_XOPEN2K 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* The IEEE Std. 1003.1j-2000 introduces functions to implement spinlocks. */ 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef __UCLIBC__ /* There are no spinlocks in uClibc 0.9.27 */ 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_USE_PTHREAD_SPINLOCK 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_DONT_USE_PTHREAD_SPINLOCK 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block /* in uClibc (0.9.26) pthread_spinlock* declared in headers 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * but absent in library */ 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_DONT_USE_PTHREAD_SPINLOCK 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_DONT_USE_PTHREAD_SPINLOCK 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_USE_PTHREAD_SPINLOCK 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_STATIC_MUTEX _STLP_mutex 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* # define __FIT_PSHARED_MUTEX */ 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Endiannes */ 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <endian.h> 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined(__BYTE_ORDER) || !defined(__LITTLE_ENDIAN) || !defined(__BIG_ENDIAN) 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# error "One of __BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN undefined; Fix me!" 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if ( __BYTE_ORDER == __LITTLE_ENDIAN ) 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_LITTLE_ENDIAN 1 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#elif ( __BYTE_ORDER == __BIG_ENDIAN ) 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_BIG_ENDIAN 1 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# error "__BYTE_ORDER neither __BIG_ENDIAN nor __LITTLE_ENDIAN; Fix me!" 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(__GNUC__) && (__GNUC__ < 3) 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_NO_NATIVE_WIDE_FUNCTIONS 1 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifdef __GLIBC__ 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || (__GLIBC__ > 2) 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* From glibc 2.3.x default allocator is malloc_alloc, if was not defined other */ 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined(_STLP_USE_MALLOC) && !defined(_STLP_USE_NEWALLOC) && !defined(_STLP_USE_PERTHREAD_ALLOC) && !defined(_STLP_USE_NODE_ALLOC) 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_USE_MALLOC 1 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Following platforms has no long double: 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * - Alpha 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * - PowerPC 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * - SPARC, 32-bits (64-bits platform has long double) 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * - MIPS, 32-bits 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * - ARM 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * - SH4 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined(__alpha__) || \ 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott defined(__ppc__) || defined(PPC) || defined(__powerpc__) || \ 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ((defined(__sparc) || defined(__sparcv9) || defined(__sparcv8plus)) && !defined ( __WORD64 ) && !defined(__arch64__)) /* ? */ || \ 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott (defined(_MIPS_SIM) && (_MIPS_SIM == _ABIO32)) || \ 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott defined(__arm__) || \ 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott defined(__sh__) 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /* # if defined(__NO_LONG_DOUBLE_MATH) */ 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_NO_LONG_DOUBLE 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* __stl_config__linux_h */ 126