This structure is shared between cores which may have different type
widths. Use fixed width types when defining the structure. We can
also use struct resource_table to help as it is already defined with
fixed width types and removes the need to redefine these elements.
Signed-off-by: Andrew Davis <afd@ti.com>
Modify the SMF such that state transitions from parent states choose the
correct Least Common Ancestor based on the transition source rather than
the current state.
SMF set as experimental.
Signed-off-by: Glenn Andrews <glenn.andrews.42@gmail.com>
This is part one of several changes to add more methods to the bitarray api
so that it can be used for broader usecases, specifically LoRaWAN forward
error correction.
Signed-off-by: Lucas Romero <luqasn@gmail.com>
This is part one of several changes to add more methods to the bitarray api
so that it can be used for broader usecases, specifically LoRaWAN forward
error correction.
Signed-off-by: Lucas Romero <luqasn@gmail.com>
This is part one of several changes to add more methods to the bitarray api
so that it can be used for broader usecases, specifically LoRaWAN forward
error correction.
Signed-off-by: Lucas Romero <luqasn@gmail.com>
Zephyr minimal libc implements integer constant macros using internal
headers provided by GCC, for example INT64_C(x) is just a __INT64_C(x)
which is implemented by the GCC.
Clang compiler doesn't provide these definitions, so we define them
(__INT64_C() and INT64_C()) in zephyr/toolchain/llvm.h, but it looks
like INT64_C() definition doesn't come from llvm.h, but from stdlib.h
despite of checking if __GNUC__ is defined.
This is because Clang sometimes pretends to be GNU compiler:
$ x86_64-pc-linux-gnu-clang -dM -E - < /dev/null | grep "GNU"
#define __GNUC_MINOR__ 2
#define __GNUC_PATCHLEVEL__ 1
#define __GNUC_STDC_INLINE__ 1
#define __GNUC__ 4
Let's keep the integer constant macros in stdlib.h and their
actual implementation in llvm.h. Also define these macros if __clang__
is defined, just in case.
Signed-off-by: Patryk Duda <patrykd@google.com>
Call `getopt_init()` to reset `state->optind` instead of directly setting
`optind = 1`. The `getopt()` function uses `getopt_state` from
`getopt_state_get` for state handling, so `getopt_init()` should be called
to correctly run the command again.
Signed-off-by: Pisit Sawangvonganan <pisit@ndrsolution.com>
Fix 2 build warnings in posix/options/env:
The maximum length given to strncpy() matches the input
string length, which makes the call equivalent to strcpy().
As the destination buffer size has been ensured sufficient
(in the first case by chechking just before,
in the second case by allocating it big enough),
let's just use strcpy() instead.
lib/posix/options/env.c: In function 'getenv_r':
lib/posix/options/env.c:109:17: error: 'strncpy' specified bound
depends on the length of the source argument
[-Werror=stringop-truncation]
109 | strncpy(buf, val, vsize);
| ^~~~~~~~~~~~~~~~~~~~~~~~
lib/posix/options/env.c:104:25: note: length computed here
104 | vsize = strlen(val) + 1;
| ^~~~~~~~~~~
lib/posix/options/env.c: In function 'setenv':
lib/posix/options/env.c:191:17: error: 'strncpy' output truncated
before terminating nul copying as many bytes from a string as its
length [-Werror=stringop-truncation]
191 | strncpy(environ[ret], name, nsize);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/posix/options/env.c:128:51: note: length computed here
128 | const size_t nsize = (name == NULL) ? 0 : strlen(name);
| ^~~~~~~~~~~~
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
Allow Picolibc to get build from module, if the toolchain does not
include a bundled picolibc.
This should always be possible, except for native applications and
if libcpp is required.
Signed-off-by: David Schneider <david.schneider@chargepoint.com>
This aligns abort() and exit() definitions with other libc.
Without 'noreturn' attribute, compilers have to assume that we will
return from these functions which can lead to surprising errors like
'error: non-void function does not return a value'.
Signed-off-by: Patryk Duda <patrykd@google.com>
The function writes random data to the provided buffer. Maximum
permitted buffer size is 256 bytes. On success the function returns 0,
otherwise it returns -1 and sets errno to appropriate value.
Signed-off-by: Patryk Duda <patrykd@google.com>
Add stubs for POSIX asynchronous io that return -1 and set
errno to ENOTSUP.
The functions and structures in aio.h are required by the
_POSIX_ASYNCHRONOUS_IO Option as detailed in Section E.1 of
IEEE-1003.1-2017.
The _POSIX_ASYNCHRONOUS_IO interface is required for PSE51,
PSE52, PSE53, and PSE54 conformance, and is otherwise mandatory
for any POSIX conforming system as per Section A.2.1.3 of
IEEE-1003-1.2017.
Signed-off-by: Chris Friedt <cfriedt@tenstorrent.com>
Let's introduce a new option so components which cannot
be used with the native libC can select it.
And at this point let's already have POSIX_API select it
instead of being used in the libC choice default.
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
Based on Andy's talk at eoss 2024, use the sys/sem.h api instead
of the spinlock.h api to synchronize pooled elements since it
has minimal overhead like semaphores but also works from
userspace.
Signed-off-by: Chris Friedt <cfriedt@tenstorrent.com>
ftruncate should return -1 on errors and it needs to
set appropriate error values in errno
Signed-off-by: Karthikeyan Krishnasamy <karthikeyan@linumiz.com>
Commit e6eb0a705b ("posix: eventfd: revise locking, signaling, and
allocation") introduced a regression where the internal flags of an
event file descriptor would be erased when calling the F_SETFL ioctl
operation.
This includes the flag EFD_IN_USE_INTERNAL which determines whether
this file descriptor has been opened, thus effectively closing the
eventfd whenever one tries to change a flag.
Signed-off-by: Celina Sophie Kalus <hello@celinakalus.de>
The `BUILD_VERSION` can be defined but empty when built
without git, causing version to be missing from the uname
version string:
```
*** Booting Zephyr OS build 3.5.0 ***
Printing everything in utsname...
sysname[7]: Zephyr
nodename[7]: zephyr
release[13]: 3.5.0
version[61]: Apr 1 2024 23:48:30
machine[8]: riscv64
uart:~$
```
Let's check if it is empty before using it, so that
`KERNEL_VERSION_STRING`, which is generated independently
with cmake can be used as a fallback:
```
*** Booting Zephyr OS build 3.5.0 ***
Printing everything in utsname...
sysname[7]: Zephyr
nodename[7]: zephyr
release[13]: 3.5.0
version[61]: 3.5.0 Apr 1 2024 23:53:48
machine[8]: riscv64
uart:~$
```
Signed-off-by: Yong Cong Sin <ycsin@meta.com>
With CONFIG_NET_POSIX_NAMES being deprecated, convert static
inlines in headers to prototypes, and move implementations
to lib/posix/options/net.c .
Since select and poll should technically also operate on
non-socket file descriptors, these may be relocated in the
future.
Below are some reasons for this change.
1. So posix calls are regular symbols and not directly inlined
as syscalls. This is also the most portable linkage type.
2. Many posix calls are cancellation points and additional
checks are necessary within the implementation.
3. The more we add to an inline call, the less sense it makes
for that call to be inline.
4. When the implementation of a posix function changes, the
interface for it should still remain consistent.
Note: the same principles have been applied in Zephyr's
posix implementation already, e.g. clock_gettime(), so this
is nothing new.
Signed-off-by: Chris Friedt <cfriedt@tenstorrent.com>
Implement `pthread_attr_setinheritsched()` and
`pthread_attr_getinheritsched()`are required
as part of _POSIX_THREAD_PRIORITY_SCHEDULING Option Group.
signed-off-by: Gaetan Perrot <gaetanperrotpro@gmail.com>
Implement if_indextoname(), if_freenameindex(), if_nameindex(),
and if_nametoindex() by wrapping around networking subystem
calls.
Signed-off-by: Chris Friedt <chrisfriedt@gmail.com>
Implement pthread_rwlockattr_setpshared() and
pthread_rwlockattr_getpshared().
Both functions are required by the _POSIX_READER_WRITER_LOCKS
Option as detailed in Section E.1 of IEEE-1003.1-2017.
The _POSIX_READER_WRITER_LOCKS Option is required for PSE51,
PSE52, PSE53, and PSE54 conformance, and is otherwise mandatory
for any POSIX conforming system as per Section A.2.1.3 of
IEEE-1003-1.2017.
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
Move the implementation of the following functions into
the posix library rather than having themn as static
inline functions.
* pthread_rwlockattr_init()
* pthread_rwlockattr_destroy()
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
clock_getres() is required by the POSIX_TIMERS Option Group
as detailed in Section E.1 of IEEE-1003.1-2017.
The POSIX_TIMERS Option Group is required for PSE51, PSE52,
PSE53, and PSE54 conformance, and is otherwise mandatory for
any POSIX conforming system as per Section A.2.1.3 of
IEEE-1003-1.2017.
With this, we have complete support for the POSIX_TIMERS
Option Group.
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
Support querying POSIX string configuration values (similar to
sysconf()).
confstr() is required by the POSIX_SINGLE_PROCESS Option
Group as detailed in Section E.1 of IEEE-1003.1-2017 and has
been part of the specification since POSIX-2.
The POSIX_SINGLE_PROCESS Option Group is required for PSE51,
PSE52, PSE53, and PSE54 conformance, and is otherwise mandatory
for any POSIX conforming system as per Section A.2.1.3 of
IEEE-1003-1.2017.
With this, we have complete support for the POSIX_SINGLE_PROCESS
Option Group.
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
Implement `pthread_attr_setscope()` and `pthread_attr_getscope()`
are required as part of _POSIX_THREAD_PRIORITY_SCHEDULING Option Group.
signed-off-by: Gaetan Perrot <gaetanperrotpro@gmail.com>
This PR fixes the following compiler warning:
No SOURCES given to Zephyr library: lib__posix__shell
Signed-off-by: Matthias Alleman <matthias.alleman@basalte.be>
Previously, sysconf() was only available as a macro (i.e. the
"extra-small" option).
This has the advantage of being compile-time constant, and
optimized for both space and speed. One disadvantage is that
querying an `_SC_` value that was invalid or unsupported
would result in a compile error.
Provide a "small" implementation of sysconf() (via Kconfig
choice) as a normal addressable function.
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
Seen this in compiler
lib/posix/options/syslog.c: In function 'setlogmask':
lib/posix/options/syslog.c:66:16: error: 'oldpri' may be used uninitialized
66 | return oldpri;
| ^~~~~~
lib/posix/options/syslog.c:59:13: note: 'oldpri' was declared here
59 | int oldpri;
| ^~~~~~
lib/posix/options/syslog.c: In function 'vsyslog':
lib/posix/options/syslog.c:83:33: error: 'mask' may be used uninitialized
83 | if ((BIT(level) & mask) == 0) {
| ~~~~~~~~~~~~~~~~~~~~^~~~
lib/posix/options/syslog.c:71:17: note: 'mask' was declared here
71 | uint8_t mask;
| ^~~~
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
This PR adds declarations for the application conformance
feature test macro _POSIX_C_SOURCE.
It needs to be defined to value greater than or equal to 200112L
by the appplication.
However, Zephyr currently does not have a simple and consistent
means of specifying this value for POSIX samples, tests,
applications, and other libraries.
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
This service is used to get, set, and unset system
environment variables.
Note: shell parameter expansion is not supported
at this time.
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
Support getting and setting POSIX environment variables.
Additionally, the thread-safe BSD variant getenv_r() is
provided.
environ, getenv(), setenv(), and unsetenv() are required by
the POSIX_SINGLE_PROCESS Option Group as detailed in
Section E.1 of IEEE-1003.1-2017.
The POSIX_SINGLE_PROCESS Option Group is required for PSE51,
PSE52, PSE53, and PSE54 conformance, and is otherwise mandatory
for any POSIX conforming system as per Section A.2.1.3 of
IEEE-1003-1.2017.
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
Brings SMF framework closer into alignment with accepted Hierarchical State
Machine operation by:
1. Allowing 'programming by difference' by having some child states handle
events and prevent propagation up to the parent run actions while others
propagate events up to a common handler in a parent state.
2. Optionally allow initial transitions within a parent state to determine
the most nested child state to transition to.
3. Adding a test case for `CONFIG_SMF_INITIAL_TRANSITION` and
`smf_set_handled()`
4. Updating documentation for the new API (and fixing some references)
There was discussion in https://github.com/zephyrproject-rtos/zephyr/issues/55344
about not making the initial transition a Kconfig option, but I'm not sure
of any way else of doing it without permanently adding a pointer to each
`smf_state` entry, which is a problem for resource-constrained devices.
This does not fix https://github.com/zephyrproject-rtos/zephyr/issues/66341
but documentation has been updated to warn users of the issue.
Signed-off-by: Glenn Andrews <glenn.andrews.42@gmail.com>
It turns out that currently LTO is enabled only for the kernel.
This commit updates it to enable it for the whole application
and adds additional LTO exclusions required for the standard
C libraries to build and link properly.
Signed-off-by: Radosław Koppel <radoslaw.koppel@nordicsemi.no>
This is just a simple wrapper around Zephyr's native log api.
Note: the standard LOG_ERR syslog priority does conflict with
Zephyr's LOG_ERR() macro. This will need to be worked-around on
a case-by-case basis.
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
gmtime_r() has been in the minimal libc for years, however it was not
added to expcetions due to an overlook. In order to do this however, it
has to be moved first to the common libc area, so that it's available
to any libc that may not implement it.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>