diff --git a/src/libc/CMakeLists.txt b/src/libc/CMakeLists.txt index 43aa55e03..b41f8710b 100644 --- a/src/libc/CMakeLists.txt +++ b/src/libc/CMakeLists.txt @@ -61,6 +61,7 @@ add_subdirectory(nls) add_subdirectory(net) add_subdirectory(locale) add_subdirectory(threads) +add_subdirectory(platform) # The following generate libc-hwplat if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686") diff --git a/src/libc/include/libkern/OSAtomic.h b/src/libc/include/libkern/OSAtomic.h index 7cb7d6377..9bc4dbb23 100644 --- a/src/libc/include/libkern/OSAtomic.h +++ b/src/libc/include/libkern/OSAtomic.h @@ -105,9 +105,7 @@ int32_t OSAtomicAdd32Barrier( int32_t __theAmount, volatile int32_t *__theValue /*! @abstract Atomically increments a 32-bit value. */ -__inline static -int32_t OSAtomicIncrement32( volatile int32_t *__theValue ) - { return OSAtomicAdd32( 1, __theValue); } +int32_t OSAtomicIncrement32( volatile int32_t *__theValue ); /*! @abstract Atomically increments a 32-bit value with a barrier. @@ -116,14 +114,10 @@ int32_t OSAtomicIncrement32( volatile int32_t *__theValue ) except that it also introduces a barrier. @result Returns the new value. */ -__inline static -int32_t OSAtomicIncrement32Barrier( volatile int32_t *__theValue ) - { return OSAtomicAdd32Barrier( 1, __theValue); } +int32_t OSAtomicIncrement32Barrier( volatile int32_t *__theValue ); /*! @abstract Atomically decrements a 32-bit value. */ -__inline static -int32_t OSAtomicDecrement32( volatile int32_t *__theValue ) - { return OSAtomicAdd32( -1, __theValue); } +int32_t OSAtomicDecrement32( volatile int32_t *__theValue ); /*! @abstract Atomically increments a 32-bit value with a barrier. @discussion @@ -131,9 +125,7 @@ int32_t OSAtomicDecrement32( volatile int32_t *__theValue ) except that it also introduces a barrier. @result Returns the new value. */ -__inline static -int32_t OSAtomicDecrement32Barrier( volatile int32_t *__theValue ) - { return OSAtomicAdd32Barrier( -1, __theValue); } +int32_t OSAtomicDecrement32Barrier( volatile int32_t *__theValue ); /*! @abstract Atomically adds two 64-bit values. @@ -160,8 +152,7 @@ int64_t OSAtomicAdd64Barrier( int64_t __theAmount, volatile int64_t *__theValue /*! @abstract Atomically increments a 64-bit value. */ __inline static -int64_t OSAtomicIncrement64( volatile int64_t *__theValue ) - { return OSAtomicAdd64( 1, __theValue); } +int64_t OSAtomicIncrement64( volatile int64_t *__theValue ); /*! @abstract Atomically increments a 64-bit value with a barrier. @discussion @@ -170,8 +161,7 @@ int64_t OSAtomicIncrement64( volatile int64_t *__theValue ) @result Returns the new value. */ __inline static -int64_t OSAtomicIncrement64Barrier( volatile int64_t *__theValue ) - { return OSAtomicAdd64Barrier( 1, __theValue); } +int64_t OSAtomicIncrement64Barrier( volatile int64_t *__theValue ); /*! @abstract Atomically decrements a 64-bit value. @@ -181,8 +171,7 @@ int64_t OSAtomicIncrement64Barrier( volatile int64_t *__theValue ) @result Returns the new value. */ __inline static -int64_t OSAtomicDecrement64( volatile int64_t *__theValue ) - { return OSAtomicAdd64( -1, __theValue); } +int64_t OSAtomicDecrement64( volatile int64_t *__theValue ); /*! @abstract Atomically decrements a 64-bit value with a barrier. @@ -192,8 +181,7 @@ int64_t OSAtomicDecrement64( volatile int64_t *__theValue ) @result Returns the new value. */ __inline static -int64_t OSAtomicDecrement64Barrier( volatile int64_t *__theValue ) - { return OSAtomicAdd64Barrier( -1, __theValue); } +int64_t OSAtomicDecrement64Barrier( volatile int64_t *__theValue ); /*! @group Boolean functions (AND, OR, XOR) diff --git a/src/libc/platform/CMakeLists.txt b/src/libc/platform/CMakeLists.txt new file mode 100644 index 000000000..be0ee3d7f --- /dev/null +++ b/src/libc/platform/CMakeLists.txt @@ -0,0 +1,9 @@ +project(libc-platform) + +cmake_minimum_required(VERSION 2.4.0) + +set(platform_sources OSAtomic.c) + +add_library(libc-platform OBJECT ${platform_sources}) + + diff --git a/src/libc/platform/OSAtomic.c b/src/libc/platform/OSAtomic.c new file mode 100644 index 000000000..73c42ce0e --- /dev/null +++ b/src/libc/platform/OSAtomic.c @@ -0,0 +1,33 @@ +#include + +// In OS X 10.10 (or something) the following became full-fledged symbols +// provided in libsystem_platform (not released as open source). + +int32_t OSAtomicIncrement32( volatile int32_t *__theValue ) + { return OSAtomicAdd32( 1, __theValue); } + + +int32_t OSAtomicIncrement32Barrier( volatile int32_t *__theValue ) + { return OSAtomicAdd32Barrier( 1, __theValue); } + +int32_t OSAtomicDecrement32( volatile int32_t *__theValue ) + { return OSAtomicAdd32( -1, __theValue); } + +int32_t OSAtomicDecrement32Barrier( volatile int32_t *__theValue ) + { return OSAtomicAdd32Barrier( -1, __theValue); } + + +int64_t OSAtomicIncrement64( volatile int64_t *__theValue ) + { return OSAtomicAdd64( 1, __theValue); } + +int64_t OSAtomicIncrement64Barrier( volatile int64_t *__theValue ) + { return OSAtomicAdd64Barrier( 1, __theValue); } + + +int64_t OSAtomicDecrement64( volatile int64_t *__theValue ) + { return OSAtomicAdd64( -1, __theValue); } + + +int64_t OSAtomicDecrement64Barrier( volatile int64_t *__theValue ) + { return OSAtomicAdd64Barrier( -1, __theValue); } + diff --git a/src/libc/platform/TODO b/src/libc/platform/TODO new file mode 100644 index 000000000..23296b9cd --- /dev/null +++ b/src/libc/platform/TODO @@ -0,0 +1,4 @@ +A new library libsystem_platform, cotains all OSAtomic, setjmp/longjmp, ffs, swapcontext and other functions. + +They should all be moved here and built as a separate library. +