Skip to content

Conversation

@maribu
Copy link
Member

@maribu maribu commented Nov 16, 2025

Contribution description

This adds a previously missing library implementation for __atomic_test_and_set().

Testing procedure

In master:

undefined reference to `__atomic_test_and_set'
 make BOARD=arduino-mega2560 -C tests/bench/msg_pingpong
make: Entering directory '/home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong'
Building application "tests_msg_pingpong" for "arduino-mega2560" with CPU "atmega2560".

"make" -C /home/maribu/Repos/software/RIOT/master/boards
"make" -C /home/maribu/Repos/software/RIOT/master/boards/common/init
"make" -C /home/maribu/Repos/software/RIOT/master/boards/arduino-mega2560
"make" -C /home/maribu/Repos/software/RIOT/master/boards/common/arduino-atmega
"make" -C /home/maribu/Repos/software/RIOT/master/boards/common/atmega
"make" -C /home/maribu/Repos/software/RIOT/master/core
"make" -C /home/maribu/Repos/software/RIOT/master/core/lib
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/atmega2560
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/atmega_common
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/atmega_common/periph
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/avr8_common
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/avr8_common/avr_libc_extra
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/avr8_common/periph
"make" -C /home/maribu/Repos/software/RIOT/master/drivers
"make" -C /home/maribu/Repos/software/RIOT/master/drivers/periph_common
"make" -C /home/maribu/Repos/software/RIOT/master/sys
"make" -C /home/maribu/Repos/software/RIOT/master/sys/auto_init
"make" -C /home/maribu/Repos/software/RIOT/master/sys/div
"make" -C /home/maribu/Repos/software/RIOT/master/sys/frac
"make" -C /home/maribu/Repos/software/RIOT/master/sys/isrpipe
"make" -C /home/maribu/Repos/software/RIOT/master/sys/libc
"make" -C /home/maribu/Repos/software/RIOT/master/sys/malloc_thread_safe
"make" -C /home/maribu/Repos/software/RIOT/master/sys/pm_layered
"make" -C /home/maribu/Repos/software/RIOT/master/sys/preprocessor
"make" -C /home/maribu/Repos/software/RIOT/master/sys/stdio
"make" -C /home/maribu/Repos/software/RIOT/master/sys/stdio_uart
"make" -C /home/maribu/Repos/software/RIOT/master/sys/test_utils/interactive_sync
"make" -C /home/maribu/Repos/software/RIOT/master/sys/test_utils/print_stack_usage
"make" -C /home/maribu/Repos/software/RIOT/master/sys/tiny_strerror
"make" -C /home/maribu/Repos/software/RIOT/master/sys/tsrb
"make" -C /home/maribu/Repos/software/RIOT/master/sys/ztimer
/usr/lib/gcc/avr/15.2.0/../../../../avr/bin/ld: /home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong/bin/arduino-mega2560/application_tests_msg_pingpong/main.o: in function `main':
/home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong/main.c:75:(.text.startup.main+0x68): undefined reference to `__atomic_test_and_set'
/usr/lib/gcc/avr/15.2.0/../../../../avr/bin/ld: /home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong/main.c:78:(.text.startup.main+0x8e): undefined reference to `__atomic_test_and_set'
collect2: error: ld returned 1 exit status
make: *** [/home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong/../../../Makefile.include:734: /home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong/bin/arduino-mega2560/tests_msg_pingpong.elf] Error 1
make: Leaving directory '/home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong'

In this PR

{ "result" : 12302, "ticks" : 1300 }
make BOARD=arduino-mega2560 -C tests/bench/msg_pingpong flash test       
make: Entering directory '/home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong'
Building application "tests_msg_pingpong" for "arduino-mega2560" with CPU "atmega2560".

"make" -C /home/maribu/Repos/software/RIOT/master/boards
"make" -C /home/maribu/Repos/software/RIOT/master/boards/common/init
"make" -C /home/maribu/Repos/software/RIOT/master/boards/arduino-mega2560
"make" -C /home/maribu/Repos/software/RIOT/master/boards/common/arduino-atmega
"make" -C /home/maribu/Repos/software/RIOT/master/boards/common/atmega
"make" -C /home/maribu/Repos/software/RIOT/master/core
"make" -C /home/maribu/Repos/software/RIOT/master/core/lib
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/atmega2560
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/atmega_common
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/atmega_common/periph
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/avr8_common
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/avr8_common/avr_libc_extra
"make" -C /home/maribu/Repos/software/RIOT/master/cpu/avr8_common/periph
"make" -C /home/maribu/Repos/software/RIOT/master/drivers
"make" -C /home/maribu/Repos/software/RIOT/master/drivers/periph_common
"make" -C /home/maribu/Repos/software/RIOT/master/sys
"make" -C /home/maribu/Repos/software/RIOT/master/sys/auto_init
"make" -C /home/maribu/Repos/software/RIOT/master/sys/div
"make" -C /home/maribu/Repos/software/RIOT/master/sys/frac
"make" -C /home/maribu/Repos/software/RIOT/master/sys/isrpipe
"make" -C /home/maribu/Repos/software/RIOT/master/sys/libc
"make" -C /home/maribu/Repos/software/RIOT/master/sys/malloc_thread_safe
"make" -C /home/maribu/Repos/software/RIOT/master/sys/pm_layered
"make" -C /home/maribu/Repos/software/RIOT/master/sys/preprocessor
"make" -C /home/maribu/Repos/software/RIOT/master/sys/stdio
"make" -C /home/maribu/Repos/software/RIOT/master/sys/stdio_uart
"make" -C /home/maribu/Repos/software/RIOT/master/sys/test_utils/interactive_sync
"make" -C /home/maribu/Repos/software/RIOT/master/sys/test_utils/print_stack_usage
"make" -C /home/maribu/Repos/software/RIOT/master/sys/tiny_strerror
"make" -C /home/maribu/Repos/software/RIOT/master/sys/tsrb
"make" -C /home/maribu/Repos/software/RIOT/master/sys/ztimer
   text	   data	    bss	    dec	    hex	filename
  12020	    208	   1719	  13947	   367b	/home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong/bin/arduino-mega2560/tests_msg_pingpong.elf
avrdude -c stk500v2 -p m2560 -P /dev/ttyACM0 -D -U flash:w:/home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong/bin/arduino-mega2560/tests_msg_pingpong.hex
Reading 12228 bytes for flash from input file tests_msg_pingpong.hex
Writing 12228 bytes to flash
Writing | ################################################## | 100% 1.99 s 
Reading | ################################################## | 100% 1.51 s 
12228 bytes of flash verified

Avrdude done.  Thank you.
r
/home/maribu/Repos/software/RIOT/master/dist/tools/pyterm/pyterm -p "/dev/ttyACM0" -b "9600" -ln "/tmp/pyterm-maribu" -rn "2025-11-16_20.56.20-tests_msg_pingpong-arduino-mega2560" --no-reconnect --noprefix --no-repeat-command-on-empty-line 
Twisted not available, please install it if you want to use pyterm's JSON capabilities
Connect to serial port /dev/ttyACM0


Welcome to pyterm!
Type '/exit' to exit.
Help: Press s to start test, r to print it is ready
READY
s
START
main(): This is RIOT! (Version: 2026.01-devel-128-g2dfdf-core/lib/atomics)
main starting
{ "result" : 12302, "ticks" : 1300 }

make: Leaving directory '/home/maribu/Repos/software/RIOT/master/tests/bench/msg_pingpong'

Issues/PRs references

None

This adds a previously missing library implementation for
`__atomic_test_and_set()`.
@maribu maribu requested a review from kaspar030 as a code owner November 16, 2025 19:57
@github-actions github-actions bot added the Area: core Area: RIOT kernel. Handle PRs marked with this with care! label Nov 16, 2025
@maribu
Copy link
Member Author

maribu commented Nov 16, 2025

For reference: Test output in master with BUILD_IN_DOCKER=1:

Help: Press s to start test, r to print it is ready
READY
s
START
main(): This is RIOT! (Version: 2026.01-devel-126-gdcf4a)
main starting
{ "result" : 13034, "ticks" : 1227 }

@crasbe crasbe added Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR labels Nov 16, 2025
Copy link
Contributor

@crasbe crasbe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't really comment about the changes themselves, sorry 😅

@riot-ci
Copy link

riot-ci commented Nov 16, 2025

Murdock results

✔️ PASSED

a32e108 core/lib/atomic_c11: Fix compatibility with GCC

Success Failures Total Runtime
10932 0 10932 12m:59s

Artifacts

Copy link
Contributor

@mguetschow mguetschow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Straightforward addition, thanks! Just a question below.

GCC requires symbols to first be declared before they can be renamed.
So we move the `#pragma redefine_extname` just to the bottom of the
compilation unit.

Co-authored-by: crasbe <crasbe@gmail.com>
Co-authored-by: Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
Copy link
Contributor

@mguetschow mguetschow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks! Trusting your testing :)

@crasbe
Copy link
Contributor

crasbe commented Nov 18, 2025

Is this a 2 ACK kind of PR? 🤔

@benpicco benpicco added this pull request to the merge queue Nov 19, 2025
Merged via the queue into RIOT-OS:master with commit 250758c Nov 19, 2025
27 checks passed
@maribu maribu deleted the core/lib/atomics branch November 19, 2025 16:13
@maribu
Copy link
Member Author

maribu commented Nov 19, 2025

Thx a lot ❤️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area: core Area: RIOT kernel. Handle PRs marked with this with care! CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants