diff --git a/build/jam/board/beagle/BoardSetup b/build/jam/board/beagle/BoardSetup index 5ee0a11cab..ddf5442dc3 100644 --- a/build/jam/board/beagle/BoardSetup +++ b/build/jam/board/beagle/BoardSetup @@ -73,6 +73,6 @@ HAIKU_CCFLAGS_$(HAIKU_PACKAGING_ARCH) -DHAIKU_BOARD_LOADER_STACK_BASE=$(HAIKU_BOARD_LOADER_STACK_BASE) -DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ; HAIKU_C++FLAGS_$(HAIKU_PACKAGING_ARCH) - += -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard + += -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard -std=c++11 -DHAIKU_BOARD_LOADER_STACK_BASE=$(HAIKU_BOARD_LOADER_STACK_BASE) -DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ; diff --git a/src/system/kernel/lib/arch/arm/Jamfile b/src/system/kernel/lib/arch/arm/Jamfile index 1bdf0f1501..12b8c503b4 100644 --- a/src/system/kernel/lib/arch/arm/Jamfile +++ b/src/system/kernel/lib/arch/arm/Jamfile @@ -12,6 +12,7 @@ KernelMergeObject kernel_os_arch_$(TARGET_ARCH).o : atomic.S byteorder.S + generic_atomic.cpp generic_system_time_nsecs.cpp : $(TARGET_KERNEL_PIC_CCFLAGS) diff --git a/src/system/libroot/os/arch/arm/Jamfile b/src/system/libroot/os/arch/arm/Jamfile index bdfa8c6d7c..87acdeaf0f 100644 --- a/src/system/libroot/os/arch/arm/Jamfile +++ b/src/system/libroot/os/arch/arm/Jamfile @@ -20,6 +20,7 @@ for architectureObject in [ MultiArchSubDirSetup arm ] { time.c tls.c + generic_atomic.cpp generic_system_time_nsecs.cpp ; } diff --git a/src/system/libroot/os/arch/arm/atomic.S b/src/system/libroot/os/arch/arm/atomic.S index 5728e5cef1..56f1c2cd43 100644 --- a/src/system/libroot/os/arch/arm/atomic.S +++ b/src/system/libroot/os/arch/arm/atomic.S @@ -54,16 +54,6 @@ FUNCTION(atomic_set): bx lr FUNCTION_END(atomic_set) -/* int atomic_get_and_set(int *value, int setTo) - */ -FUNCTION(atomic_get_and_set): -miss4: ldrex r12, [r0] - strex r3, r1, [r0] - teq r3, #0 - bne miss4 - bx lr -FUNCTION_END(atomic_get_and_set) - /* int atomic_test_and_set(int *value, int setTo, int testValue) */ FUNCTION(atomic_test_and_set): diff --git a/src/system/libroot/os/arch/generic/generic_atomic.cpp b/src/system/libroot/os/arch/generic/generic_atomic.cpp new file mode 100644 index 0000000000..73b5c56697 --- /dev/null +++ b/src/system/libroot/os/arch/generic/generic_atomic.cpp @@ -0,0 +1,19 @@ +/* + * Copyright 2014, Haiku, Inc. + * Distributed under the terms of the MIT License. + * + */ + +#include +#include + +#ifndef ATOMIC_FUNCS_ARE_SYSCALLS + +extern "C" int32_t +atomic_get_and_set(int32_t* ptr, int32_t value) +{ + auto& obj = *reinterpret_cast*>(ptr); + return obj.exchange(value); +} + +#endif /* ATOMIC64_FUNCS_ARE_SYSCALLS */