Skip to content

Two collab sdk dev fixes #90073

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: collab-sdk-dev
Choose a base branch
from

Conversation

keith-packard
Copy link
Collaborator

  • Align iterable objects to 8 bytes when using 64 bit timeouts
  • Increase test stack size when using c++ exceptions

keith-packard and others added 12 commits May 12, 2025 14:09
The compiler may want to know the desired optimization level during
linking, as when the compiler multilib configuration includes -Os as a
selector.

Do this by adding a new (optional) linker function,
toolchain_linker_add_compiler_options, which maps compiler options to
equivalent linker options, discarding any that aren't applicable.

Linker configurations which use the compiler driver (ld, lld, and xt-ld)
apply all provided compiler options. Linkers which don't provide this
function fall back to an implementation which simply discards all options.

Signed-off-by: Keith Packard <[email protected]>
With inclusion of the optimization flag into the multilib selection
process, we cannot compute the compiler library path when the compiler's
target.cmake is processed as OPTIMIZATION_FLAG is not computed until much
later.

Instead, add a function (compiler_file_path) which can be used to locate
the appropriate crtbegin.o and crtend.o files.

Delay computation of lib_include_dir and rt_library until after all
compiler flags have been computed by adding compiler_set_linker_properties
and calling that just before toolchain_linker_finalize is invoked.

Place default implementations of both of these functions in a new file,
cmake/compiler/target_template.cmake, where we assume the compiler works
like gcc or clang and handlers the --print-file-name and
--print-libgcc-file-name options. Compilers needing alternate
implementations can override these functions in their target.cmake files.

These implementations require that no generator expressions are necessary
for the compiler to compute the right library paths.

This mechanism is also used to take any additional compiler options and
pass them to the linker using toolchain_linker_add_compiler_options.

Signed-off-by: Keith Packard <[email protected]>
Switch to latest picolib release, version 1.8.10

Signed-off-by: Keith Packard <[email protected]>
When building POSIX code, we need to use picolibc's limits.h instead of
manually defining the POSIX values. This avoids duplicate definitions of
these symbols.

Signed-off-by: Keith Packard <[email protected]>
Picolibc changed things like _WANT_MINIMAL_IO_LONG_LONG to
__IO_MINIMAL_LONG_LONG in an attempt to regularize the exposed names and
eliminate names that weren't prefixed with even a single underscore.

Adapt to this change by looking for both old and new symbols.

Signed-off-by: Keith Packard <[email protected]>
Handling for RX architecture.

Signed-off-by: Anas Nashif <[email protected]>
This test only works for 64-bit values. On targets which use 32 bits for
double, skip this version. The float test will check the 32-bit math for
that.

Signed-off-by: Keith Packard <[email protected]>
Signed-off-by: Anas Nashif <[email protected]>
Many tests failing for RX, exclude those until the arch stablizes.

See zephyrproject-rtos#89839

Signed-off-by: Anas Nashif <[email protected]>
This file is explicitly included by the espressif hal module. It's an
internal file provided by picolibc and newlib. Provide a stub to let
code designed for those to work with the minimal C library.

Signed-off-by: Keith Packard <[email protected]>
These two tests are validating that deprecated APIs still work
correctly. Which means they will definitely generate compile warnings.

To disable -Werror while letting it be enabled for other tests, create a new
Kconfig variable, DEPRECATION_TEST and make COMPILER_WARNINGS_AS_ERRORS depend
on that option being unselected. Add this option to the two tests so that
the resulting configuration disables -Werror.

Signed-off-by: Keith Packard <[email protected]>
_static_thread_data contains a ktimeout_t; if that is 64 bits, we should
align them to 8 bytes to follow C alignment requirements, which means
adjusting the iterable alignment value.

Signed-off-by: Keith Packard <[email protected]>
Initializing the C++ stack unwinding data structures takes quite a bit
of stack space. Increase the TEST_EXTRA_STACK_SIZE when using these.

Signed-off-by: Keith Packard <[email protected]>
@nashif
Copy link
Member

nashif commented May 16, 2025

@keith-packard had to cherry-pick one of the patches for now, this same branch is being used for the 12.2 gcc and is failing with the _static_thread_data patch. Need another branch for gcc-14 changes. It is getting messy and with too many things happening at the same time

@keith-packard
Copy link
Collaborator Author

keith-packard commented May 16, 2025

I'm surprised the _static_thread_data patch isn't required on other hosts, but I guess they can all load 64-bit values on 32-bit boundaries. sparc appears to be special in requiring 64-bit alignment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: Kconfig area: RISCV RISCV Architecture (32-bit & 64-bit)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants