diff --git a/bsps/shared/atomics/__atomic_test_and_set.c b/bsps/shared/atomics/__atomic_test_and_set.c new file mode 100644 index 0000000000..a1b6ddd758 --- /dev/null +++ b/bsps/shared/atomics/__atomic_test_and_set.c @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSBSPGCCAtomics + * + * @brief Implementation of GCC Atomic Helper + * + * This implementation is used on BSPs with older cores which do not + * have atomic instructions. If the CPU core has atomic instructions, + * GCC will do the right thing. + * + * https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html + * describes the interface for __atomic_test_and_set with the *mem + * being precisely one byte. + */ + +/* + * COPYRIGHT (c) 2025. On-Line Applications Research Corporation (OAR). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include + +bool __atomic_test_and_set( volatile void *mem, int access ) +{ + volatile uint8_t *lock = (volatile uint8_t *) mem; + rtems_interrupt_level level; + uint8_t value; + + rtems_interrupt_disable( level ); + + value = *lock; + *lock = 1; + + rtems_interrupt_enable( level ); + + return value; +} diff --git a/spec/build/bsps/arm/csb336/bspcsb336.yml b/spec/build/bsps/arm/csb336/bspcsb336.yml index 835f494157..826b44e7ff 100644 --- a/spec/build/bsps/arm/csb336/bspcsb336.yml +++ b/spec/build/bsps/arm/csb336/bspcsb336.yml @@ -57,4 +57,5 @@ source: - bsps/shared/start/bspreset-loop.c - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/arm/csb337/obj.yml b/spec/build/bsps/arm/csb337/obj.yml index 2d7e3d02ad..4fffe03425 100644 --- a/spec/build/bsps/arm/csb337/obj.yml +++ b/spec/build/bsps/arm/csb337/obj.yml @@ -51,4 +51,5 @@ source: - bsps/shared/irq/irq-default-handler.c - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/arm/edb7312/bspedb7312.yml b/spec/build/bsps/arm/edb7312/bspedb7312.yml index a2558ab02f..9af75eaaec 100644 --- a/spec/build/bsps/arm/edb7312/bspedb7312.yml +++ b/spec/build/bsps/arm/edb7312/bspedb7312.yml @@ -60,4 +60,5 @@ source: - bsps/shared/irq/irq-default-handler.c - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/arm/gumstix/bspgumstix.yml b/spec/build/bsps/arm/gumstix/bspgumstix.yml index 1548975dbd..041543515e 100644 --- a/spec/build/bsps/arm/gumstix/bspgumstix.yml +++ b/spec/build/bsps/arm/gumstix/bspgumstix.yml @@ -64,4 +64,5 @@ source: - bsps/shared/irq/irq-default-handler.c - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/arm/lpc24xx/obj.yml b/spec/build/bsps/arm/lpc24xx/obj.yml index 9a5c91fc51..b5281021a6 100644 --- a/spec/build/bsps/arm/lpc24xx/obj.yml +++ b/spec/build/bsps/arm/lpc24xx/obj.yml @@ -85,4 +85,5 @@ source: - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c - bsps/shared/start/stackalloc.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/arm/lpc32xx/obj.yml b/spec/build/bsps/arm/lpc32xx/obj.yml index 3b69804d46..748323d3ec 100644 --- a/spec/build/bsps/arm/lpc32xx/obj.yml +++ b/spec/build/bsps/arm/lpc32xx/obj.yml @@ -65,4 +65,5 @@ source: - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c - bsps/shared/start/stackalloc.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/arm/rtl22xx/obj.yml b/spec/build/bsps/arm/rtl22xx/obj.yml index 3ad68dbaa7..ca6a426ce7 100644 --- a/spec/build/bsps/arm/rtl22xx/obj.yml +++ b/spec/build/bsps/arm/rtl22xx/obj.yml @@ -36,4 +36,5 @@ source: - bsps/shared/irq/irq-default-handler.c - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/arm/smdk2410/bspsmdk2410.yml b/spec/build/bsps/arm/smdk2410/bspsmdk2410.yml index 6a28ae995e..53163bd45d 100644 --- a/spec/build/bsps/arm/smdk2410/bspsmdk2410.yml +++ b/spec/build/bsps/arm/smdk2410/bspsmdk2410.yml @@ -69,4 +69,5 @@ source: - bsps/shared/irq/irq-default-handler.c - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/m68k/av5282/bspav5282.yml b/spec/build/bsps/m68k/av5282/bspav5282.yml index d433f62e39..2e45843588 100644 --- a/spec/build/bsps/m68k/av5282/bspav5282.yml +++ b/spec/build/bsps/m68k/av5282/bspav5282.yml @@ -50,4 +50,5 @@ source: - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c - bsps/shared/start/setvec.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/m68k/mcf5329/bspmcf5329.yml b/spec/build/bsps/m68k/mcf5329/bspmcf5329.yml index aa44e104f8..8a31d898df 100644 --- a/spec/build/bsps/m68k/mcf5329/bspmcf5329.yml +++ b/spec/build/bsps/m68k/mcf5329/bspmcf5329.yml @@ -52,4 +52,5 @@ source: - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c - bsps/shared/start/setvec.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/m68k/tstcoldfireatomicbug.yml b/spec/build/bsps/m68k/tstcoldfireatomicbug.yml deleted file mode 100644 index de5a37e225..0000000000 --- a/spec/build/bsps/m68k/tstcoldfireatomicbug.yml +++ /dev/null @@ -1,15 +0,0 @@ -SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause -actions: -- set-test-state: - reason: "Coldfire ISA A atomics missing. See RTEMS Issue 5217" - state: exclude - tests: - - spcxx01 -build-type: option -copyrights: -- Copyright (C) 2025 OAR Corporation -default: [] -description: 'spcxx01 disable to avoid atomics issue. See 5217' -enabled-by: true -links: [] -type: build diff --git a/spec/build/bsps/m68k/uC5282/bspuc5282.yml b/spec/build/bsps/m68k/uC5282/bspuc5282.yml index 5e953d4799..6f74912c13 100644 --- a/spec/build/bsps/m68k/uC5282/bspuc5282.yml +++ b/spec/build/bsps/m68k/uC5282/bspuc5282.yml @@ -24,8 +24,6 @@ links: uid: ../grp - role: build-dependency uid: abi -- role: build-dependency - uid: ../tstcoldfireatomicbug - role: build-dependency uid: start - role: build-dependency @@ -52,4 +50,5 @@ source: - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c - bsps/shared/start/setvec.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/mips/jmr3904/bspjmr3904.yml b/spec/build/bsps/mips/jmr3904/bspjmr3904.yml index a13fda60ad..595111458c 100644 --- a/spec/build/bsps/mips/jmr3904/bspjmr3904.yml +++ b/spec/build/bsps/mips/jmr3904/bspjmr3904.yml @@ -54,4 +54,5 @@ source: - bsps/shared/dev/serial/console-polled.c - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/moxie/moxiesim/bspmoxiesim.yml b/spec/build/bsps/moxie/moxiesim/bspmoxiesim.yml index 207905bd06..a70587cc16 100644 --- a/spec/build/bsps/moxie/moxiesim/bspmoxiesim.yml +++ b/spec/build/bsps/moxie/moxiesim/bspmoxiesim.yml @@ -50,4 +50,5 @@ source: - bsps/shared/start/bspstart-empty.c - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/nios2/nios2_iss/bspnios2iss.yml b/spec/build/bsps/nios2/nios2_iss/bspnios2iss.yml index d4a3d23a23..1c8444be1b 100644 --- a/spec/build/bsps/nios2/nios2_iss/bspnios2iss.yml +++ b/spec/build/bsps/nios2/nios2_iss/bspnios2iss.yml @@ -46,4 +46,5 @@ source: - bsps/shared/start/bspreset-loop.c - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/riscv/griscv/bspgrv32i.yml b/spec/build/bsps/riscv/griscv/bspgrv32i.yml index 154113a492..847e8355e6 100644 --- a/spec/build/bsps/riscv/griscv/bspgrv32i.yml +++ b/spec/build/bsps/riscv/griscv/bspgrv32i.yml @@ -15,5 +15,6 @@ links: uid: ../../opto2 - role: build-dependency uid: grp -source: [] +source: +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/riscv/griscv/bspgrv32im.yml b/spec/build/bsps/riscv/griscv/bspgrv32im.yml index 2be6c589f2..21f487683b 100644 --- a/spec/build/bsps/riscv/griscv/bspgrv32im.yml +++ b/spec/build/bsps/riscv/griscv/bspgrv32im.yml @@ -15,5 +15,6 @@ links: uid: ../../opto2 - role: build-dependency uid: grp -source: [] +source: +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/riscv/niosv/objniosvc10lp.yml b/spec/build/bsps/riscv/niosv/objniosvc10lp.yml index ae0041481f..a79e304c46 100644 --- a/spec/build/bsps/riscv/niosv/objniosvc10lp.yml +++ b/spec/build/bsps/riscv/niosv/objniosvc10lp.yml @@ -26,4 +26,5 @@ source: - bsps/riscv/niosv/niosvc10lp/bspstart.c - bsps/riscv/niosv/niosvc10lp/status_led_device_driver.c - bsps/riscv/niosv/niosvc10lp/system_device_driver.c +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/riscv/noel/bspnoel32im.yml b/spec/build/bsps/riscv/noel/bspnoel32im.yml index 4741cadf56..6f56f30b3c 100644 --- a/spec/build/bsps/riscv/noel/bspnoel32im.yml +++ b/spec/build/bsps/riscv/noel/bspnoel32im.yml @@ -15,5 +15,6 @@ links: uid: ../../opto2 - role: build-dependency uid: grp -source: [] +source: +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/riscv/riscv/bsprv32i.yml b/spec/build/bsps/riscv/riscv/bsprv32i.yml index 8c35a4abaa..f9d16d3854 100644 --- a/spec/build/bsps/riscv/riscv/bsprv32i.yml +++ b/spec/build/bsps/riscv/riscv/bsprv32i.yml @@ -15,5 +15,6 @@ links: uid: ../../opto2 - role: build-dependency uid: grp -source: [] +source: +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/riscv/riscv/bsprv32im.yml b/spec/build/bsps/riscv/riscv/bsprv32im.yml index a7dab33e94..4e136853f8 100644 --- a/spec/build/bsps/riscv/riscv/bsprv32im.yml +++ b/spec/build/bsps/riscv/riscv/bsprv32im.yml @@ -15,5 +15,6 @@ links: uid: ../../opto2 - role: build-dependency uid: grp -source: [] +source: +- bsps/shared/atomics/__atomic_test_and_set.c type: build diff --git a/spec/build/bsps/sparc/leon3/bsput699.yml b/spec/build/bsps/sparc/leon3/bsput699.yml index 74349a2eed..4d3bc2d785 100644 --- a/spec/build/bsps/sparc/leon3/bsput699.yml +++ b/spec/build/bsps/sparc/leon3/bsput699.yml @@ -15,5 +15,6 @@ links: uid: ../../opto2 - role: build-dependency uid: grp -source: [] +source: +- bsps/shared/atomics/__atomic_test_and_set.c type: build