1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/cpu/avr8_common
Marian Buschsieweke cee7cccfd0
cpu/avr8_common/flash_utils: use C and linker for aliases
`flash_<funcname>()` is implemented by `<funcname>_P()` provided by
the AVR libc on AVR targets. Previously, the preprocessor was used
to do the aliasing, but this causes issues with LLVM: The signatures of
e.g. `printf_P()` expects `const char *`, whereas flash utils expects
`FLASH_ATTR const char *`. For GCC this will just implicitly drop the
`FLASH_ATTR`, while it requires an explicit cast for LLVM.

To implement the explicit cast, `static inline` function wrappers
where used instead where possible. But for the variadic functions
(e.g. `printf(fmt, ...)`) the linker is used to provide the aliases,
as there is no way to pass the variadic functions throw in C. The
alternative would be to implement `flash_printf()` by calling
`vprintf_P()`, but that increased ROM size quite a bit.

Finally, a work around for a bug in Ubuntu's toolchain has been added:
An unused function that calls to `printf_P()`, `fprintf_P()` and
`snprintf_P()`. Since this function is garbage collected anyway, it
has no impact on the generated ELF file.
2023-11-10 14:54:22 +01:00
..
avr_libc_extra cpu/avr8_common: implement perror() 2023-04-26 10:31:09 +02:00
include cpu/avr8_common/flash_utils: use C and linker for aliases 2023-11-10 14:54:22 +01:00
ldscripts cpu/avr8_common: added avr4.ld script 2023-06-22 17:35:14 +02:00
avr8_cpu.c cpu/avr8_common: Rework avr8_state variable 2023-07-05 19:01:14 +02:00
doc.txt cpu: Refact atmega_common into avr8_common 2021-01-07 16:29:22 -03:00
Kconfig cpu/avr8_common: use tiny_strerror_as_strerror 2022-09-20 15:51:11 +02:00
Makefile cpu: Refact atmega_common into avr8_common 2021-01-07 16:29:22 -03:00
Makefile.dep cpu: always rely on stdio.inc.mk for default stdio selection 2022-11-09 10:42:47 +01:00
Makefile.features cpu: Refact atmega_common into avr8_common 2021-01-07 16:29:22 -03:00
Makefile.include cpu/avr8_common/flash_utils: use C and linker for aliases 2023-11-10 14:54:22 +01:00
startup.c cpu/avr8_common: supports CPUs with missing CALL and JMP instructions 2023-06-22 17:35:36 +02:00
thread_arch.c cpu/avr8_common: Drop useless ret instruction 2023-07-05 19:01:15 +02:00
work_around_for_shitty_ubuntu_toolchain.c cpu/avr8_common/flash_utils: use C and linker for aliases 2023-11-10 14:54:22 +01:00