universalisos/docs-extracted/releasenotes/releasenotes-posix-5.0.3.md

54 KiB
Raw Permalink Blame History

title source category pages extracted
Releasenotes Posix 5.0.3 docs/releasenotes/releasenotes-posix-5.0.3.pdf releasenotes 16 2026-07-06T23:05:51.214209

Releasenotes Posix 5.0.3

Extracted from docs/releasenotes/releasenotes-posix-5.0.3.pdf (16 pages). Figures, diagrams, and tables may not render accurately in plain text.

                                                                                              Release Notes

1 Product Release Information Product Name: POSIX for UniversalisOS 5.0

Release and Build Number: 5.0.3/D5879

Release Date: 20.08.2019

2 Introduction This document contains the release notes for POSIX for UniversalisOS 5.0, build D5879. The following sections describe the release in detail and provide information that supplements the main documentation. Users of previous releases should check section 4.3 for instructions on how to use existing data with this new release.

3 Whats New? The POSIX operating system code was updated in several areas to adapt to changes made to the UniversalisOS kernel and PSSW. Feature deprecation note: In this release the UniversalisOS POSIX Personality still includes support for the Instrumon function which exports status information of the process to a shared memory object. Support for Instrumon and the Instrumon API for monitoring applications will be removed in future versions of the product.

4 Installation and Upgrade News 4.1 Installation

Please see the manual UniversalisOS Installation Guide for more details.

4.2 Release Features

This release consists of the following components:

  • POSIX Personality for UniversalisOS

  • UniversalisOS Personality Manual: POSIX

  • TCP/IP for UniversalisOS POSIX

  • C++ support for UniversalisOS POSIX

The contents of the UniversalisOS POSIX: SMP document are now included in UniversalisOS Personality Manual: POSIX .

4.3 Compatibility to Other Versions

Rebuild all application programs using the POSIX headers and libraries. Update application and integration projects with the new project configuration tools. Refer to section Project Migration Guidelines in the CODEO User Manual and the following section in this document for project migration information.

c Copyright 2019 1 All rights reserved. Portugal Futurista GmbH Release Notes

4.3.1 Notable Changes in the POSIX Process Component

The configuration parameter for the binary origin of a POSIX process was renamed from RFS_FILE to PIKFILE in order to match other components in the UniversalisOS product (P00101-17106). If parameter RFS_FILE was used in your integration project, change the parameter name to the new name or delete its use from project.xml and use the project configuration tools to set the parameter as needed. Changes made to the storage allocation for condition variables and synchronization objects made the corresponding config- uration parameters for object pre-allocation obsolete (P00101-17016). In the POSIX process configuration tuneable param- eters PARAMS_NOBJ_SYNC and PARAMS_NOBJ_CV have been removed. If your integration project used those parameters, delete their use from project.xml. Changes made to the storage allocation for condition variables and synchronization objects resulted in the removal of infor- mation on such objects from the Instrumon image. In the POSIX process component, Instrumon configuration parameters INSTR_SYNC and INSTR_CV have been removed (P00101-17015). If your integration project used those parameters, delete their use from project.xml. As a consequence of changes made to storage allocation for synchronization objects and the definition of the sem_t type, tuneable parameter PARAMS_NSEMAPHORE (field num_of_semaphores in struct _configurables) now controls the number of named semaphores (P00101-17011). The names of queuing ports used by the Instrumon data access driver are now derived from the process name (P00101- 16737). Adapt channel definitions in the integration project as needed. The names of queuing ports used by the Monitor device driver are now derived from the process name (P00101-15938). Adapt channel definitions in the integration project as needed.

4.3.2 Notable Changes to the API and Implementation Internals

The base type for the definition of time_t is now a signed 64-Bit integer (P00101-9818). Application code making assumptions on the nature of time_t should be checked for compatibility with the new base type. Changes made to the storage allocation for condition variables and synchronization objects made the corresponding config- uration parameters for object pre-allocation obsolete (P00101-17016). Structure fields init_sync_objects and init_cv_objects have been removed from struct _configurables (defined in <sys/posix_config.h>). Adapt application code accessing those fields as needed. Changes made to the storage allocation for condition variables and synchronization objects resulted in the removal of information on such objects from the Instrumon image and the Instrumon API for monitoring applications (P00101-17015). Applications making use of the Instrumon API should be adapted as needed. The lwip-build project can now be used to install a customized lwIP library in the custom pool (P00101-13278). Object file crt0.o is now part of libpse51.a (P00101-16767). If your application project is not using the standard UniversalisOS build process, adapt to the change as needed.

5 Recent User Visible Changes 5.1 Version Identifier

The version identifier __UniversalisOS_PSE51_version defined in <sys/param.h> for this release is set to 502000.

5.2 Enhancements introduced by this Release

None.

c Copyright 2019 2 All rights reserved. Portugal Futurista GmbH Release Notes

5.3 Problems fixed with this Release

Issue P00101-17569, Threads created do not start with POSIX_SMP A problem in POSIX_SMP where threads created with pthread_create() would fail to start when their thread affinity is set to cores other than the one executing the call to pthread_create() has been fixed.

Issue P00101-17629, pthread_join() returns normally when caller gets canceled Fixed a problem where a thread blocked in pthread_join() would return normally from that call even though a cancela- tion request was posted to the thread.

5.4 Known Problems

Issue P00101-1402, _exit() does not close all open file descriptors Functions _Exit() and exit() do not close open file descriptors. Note that file associations with PSSW resources or external file providers will be closed by the PSSW when the process partition is going to idle state.

Issue P00101-1759, Fatal exceptions when stepping through implementation with debugger Applications may run into unexpected exceptions in native UniversalisOS threads used internally in the implementation (e.g. ticker thread, device driver threads) when the debugger is instructed to step through API calls or step over complex function-like macros containing such calls (for example custom trace event macros). This mode of operating the debugger is currently not supported and should be avoided. Users should issue commands to step over subroutine calls (using GDBs next command) whenever an API call is reached.

Issue P00101-2015, close() is blocked by pending I/O When close() is called on a file descriptor and there are other ongoing I/O operations pending on that descriptor, the thread issuing the close() call will be blocked until all pending I/O operations finish before the close method of the underlying file system provider is called.

Issue P00101-3130, Layout of stack_t not standard conforming The definition of type stack_t in <signal.h> is currently not conforming to the POSIX standard.

Issue P00101-3234, Math is not IEEE-754 compliant on E500 platforms Quoting Freescale SPEPEM Rev.0 01/2008 Section 3.3.1.4 IEEE Std 754 Compliance The embedded floating-point categories require a floating-point system as defined in IEEE 754 but may rely on software support in order to conform fully with the standard. Thus, whenever an input operand of the embedded floating-point instruction has data values that are +infinity, -infinity, denormalized, NaN, or when the result of an operation produces an overflow or an underflow, an embedded floating-point data interrupt may be taken and the interrupt handler is responsible for delivering IEEE 754-compliant behavior if desired.

Issue P00101-7314, Message queue notifications could cause a memory leak Pending message queue notifications are not deleted when a message queue is deleted, for example some SIGEV_SIGNAL notifications are produced as a result of putting some messages into a message queue remain pending even if that message queue is closed and unlinked. Note that descriptors for message queue notifications are dynamically allocated from heap memory and are put on a free list after consumption but released back to the memory heap.

Issue P00101-8393, [lwIP] Socket API is not thread-safe The lwIP socket API is not thread-safe. Simultaneous operations on the same socket from multiple threads may lead to undefined behavior. Using multiple threads operating each on a separate socket is supported.

Issue P00101-10431, mktime() fails to indicate conversion errors For certain input data that is not representable in a time_t object, function mktime() fails to return (time_t)-1 to indicate the error.

c Copyright 2019 3 All rights reserved. Portugal Futurista GmbH Release Notes

Issue P00101-13658, accept() causes failed assertion when used on datagram socket With an lwIP network stack configured for TCP and UDP support (the default configuration), calling accept() with a datagram socket will cause a failed assertion (if enabled) in the lwIP network stack. If assertion checks are not enabled in the stack, accept() will fail to indicate an error to the caller when used on a datagram socket.

6 Frequently Asked Questions Answers to frequently asked questions (FAQ) and resolutions to known issues are updated on a regular basis. These are available online at http://www.portugalfuturista.org/support/

7 Updates and Support Updates will be provided on https://www.portugalfuturista.org/downloadserver/. Please login using your account as stated on the delivery document. Product support is available online at http://www.portugalfuturista.org/support/

c Copyright 2019 4 All rights reserved. Portugal Futurista GmbH Release Notes

A Previous Release 5.0.2 S5804 A.1 Enhancements introduced by this Release

Issue P00101-8655, <fenv.h> services with external linkage Services previously only defined as inline functions by <fenv.h> are now provided as functions with external linkage, so they can be used without including the associated header.

Issue P00101-9818, 64-bit time_t The time_t type is now a signed 64-bit integer. Refer to section Time and Timeouts in the UniversalisOS/POSIX personality manual for further details.

Issue P00101-12778, mmap() for ROM file system and generic UniversalisOS resource access The use of the MAP_FIXED flags in calls for mmap() is no longer required for files associated with the generic UniversalisOS file system provider (i.e /ssw/ pathname prefix). mmap() is now supported for the ROM file system provider (i.e. /rfs/ pathname prefix).

Issue P00101-13278, Customized lwIP library changes The lwip-build project has been modified to allow installation of the customized lwIP library to the custom pool. The build process of applications configured for lwIP network support will now search for lwIP components located in the custom pool before falling back to the components in the UniversalisOS pool. Application project options POSIX_LWIP_CUS- TOM and POSIX_LWIP_LIB_DIR can still be used to forcibly set the location of the lwIP library, in this case the custom pool is not taken into consideration during the build. Furthermore the lwip-build template now includes source code to the interface between lwIP and the POSIX file system layer and lwIP configuration property handling.

Issue P00101-13898, std::atexit added to C++98 The C++98 implementation for the POSIX personality now includes std::atexit.

Issue P00101-14286, Support for long double in formatted I/O functions The printf- and scanf-family of functions now support conversions for the long double data type. Furthermore functions strtold() and wcstold() have been added to the API.

Issue P00101-14381, Pathname length in trace events The length of filenames and pathnames in trace event attributes has been increased to 255 bytes. This change may affect the stack usage in trace-enabled configurations.

Issue P00101-14932, New signal handling trace events Leaving a signal handling function through normal return or non-local goto can now be observed through trace events.

Issue P00101-15504, Trace support for times(), clock(), and pthread_getcputime_np() Function times(), clock(), and pthread_getcputime_np() can now be observed in the CODEO trace tool.

Issue P00101-15738, Support EABI Adaptations have been made to allow UniversalisOS components to be EABI compatible.

Issue P00101-15938, Name of Monitor driver queuing ports changed The names of the queuing ports used by the Monitor driver are now derived from the process name allowing multiple processes in the same partition to use the Monitor driver with queuing ports as I/O channel. The input port name is -monrx, the output port name is -montx. Issue P00101-16162, Trace support for sysconf() Use of function sysconf() can now be observed in the CODEO trace tool.

Issue P00101-16185, Trace support for SMP API additions The following functions can now be observed in the CODEO trace tool.

        • pthread_attr_getaffinity_np()

c Copyright 2019 5 All rights reserved. Portugal Futurista GmbH Release Notes

        • pthread_attr_setaffinity_np()
        • pthread_getaffinity_np()
        • pthread_setaffinity_np()
        • pthread_getcpu_np()
        • pthread_getnumcpu_np()

    A trace event for observing thread CPU migration has been added to scheduling event group. the

Issue P00101-16297, Tracing of main() argument vector The contents of the argument vector passed to the main() function can now be observed in the CODEO trace tool.

Issue P00101-16553, PPC: set MSR.FE0 and FE1 when enabling FPU for a thread When creating a thread with P4_THREAD_ARG_FPU flag, or when calling p4_thread_fpu_on(), the FE0 and FE1 bits in MSR are now set by default. FPU exceptions remain disabled as FPSCR is initialized to zero. However, user space code can enable FPU excep- tions by modifying these bits in FPSCR directly.

Issue P00101-16737, Name of Instrumon data access queuing ports changed The names of the queuing ports used by the Instrumon data access driver are now derived from the process name allowing multiple processes in the same partition to use the data access driver. The input port name is -instr_rx, the output port name is -instr_tx.

Issue P00101-16767, Module crt0.o is now part of libpse51.a The object module containing the program entry point (crt0.o) is now part of libpse51.a. Application projects not using the standard UniversalisOS build environment to create executable programs might need to be adapted accordingly.

Issue P00101-16837, pthread_once() exit trace event The pthread_once() function exit trace event now also includes the address of the pthread_once_t object.

Issue P00101-16838, Trace event for thread-specific data key destructor function Trace events are now emitted for each invocation of a thread-specific data key destructor function. The envent attributes include the key value, function address, and function argument.

Issue P00101-16849, readdir_r() trace event enhancement The function exit trace events for readdir_r() now include the file name as event attribute.

Issue P00101-16884, Function strndup() added Function strndup() was added to the C library of the UniversalisOS POSIX Personality. The function is equivalent to strdup() but allows the caller to specify a maximum number of bytes in the source string to duplicate.

Issue P00101-16961, Storage for Pthread API attributes objects Storage space for attributes objects used in the Pthread API (i.e. pthread_attr_t, pthread_condattr_t, pthread_mutexattr_t, and pthread_rwlockattr_t) will now be explicitly allocated in the object definition instead of being allocated from dynamic memory during calls to the respective object initialization function. The data types for attributes objects were changed accordingly from object handles to data structures describing the object.

Issue P00101-16966, Thread CPU time accounting now a run-time configuration option Since per-thread CPU time accounting adds significant overhead, the feature is now a run-time configuration option. By default the feature is disabled. Refer to the UniversalisOS Personality Manual: POSIX for further details.

Issue P00101-17011, Semaphore descriptor type change Type sem_t is no longer defined as an object handle, it now defines a structure type. As a consequence of this change, storage for unnamed semaphores is explicitly allocated in the application program. Storage for named semaphores will still be allocated by the operating system when sem_open() is called. Tuneable parameter PARAMS_NSEMAPHORE (field num_of_semaphores in struct _configurables) now controls the number of named semaphores available to the application.

c Copyright 2019 6 All rights reserved. Portugal Futurista GmbH Release Notes

Issue P00101-17015, Instrumon API changes Changes made to the storage allocation for condition variables and synchronization objects resulted in the removal of information on such objects from the Instrumon image and the Instrumon API for monitoring applications. In the POSIX process definition, parameters INSTR_SYNC and INSTR_CV have been removed. In the Instrumon API for monitoring applications, functions accessing information on synchronization objects (instr_sync_XXX() and type instr_sync_t) or condition variables (instr_condvar_XXX() and type instr_condvar_t) have been removed. Types instr_proc_stat_t and instr_app_config_t were updated accordingly, fields for the number of allocated and in use synchronization objects and condition variables have been removed.

Issue P00101-17016, Storage for condition variables and synchronization objects Storage space for condition variables (pthread_cond_t) and synchronization objects (pthread_mutex_t and pthread_rwlock_t) will now be explicitly allocated in the object definition instead of being allocated from dynamic memory during calls to the respective object initialization function. The data types for such objects were changed ac- cordingly from object handles to data structures describing the object. Tuneable parameters PARAMS_NOBJ_SYNC (field init_sync_objects in struct _configurables) and PRAMS_NOBJ_CV (field init_cv_objects in struct _configurables) are obsolete with this change and have been removed.

Issue P00101-17106, Parameter name change in POSIX process component The name of the parameter specifying the UniversalisOS pathname of the process image was changed from RFS_FILE to PIKFILE to match the naming in other UniversalisOS components.

A.2 Problems fixed with this Release

Issue P00101-14817, x86_i686: Library code may invoke callbacks without properly aligned stack Library code (e.g. vm_fp_listen() in LIBVM) was compiled with the compiler option -mpreferred-stack-bounary=2 and might have invoked callbacks without ensuring the 16-byte stack alignment required by the ABI. The compiler option was removed and libraries now ensure 16-byte alignment of the stack when invoking callbacks.

Issue P00101-15467, Use of <stddef.h> in C++ triggers -Wundef warning Fixed an issue with a -Wundef warning being raised when including file <stddef.h> in C++ code. __UniversalisOS_PSE51_version has been set to 402003 to indicate the change.

Issue P00101-15644, Run queue corruption when changing priority of active thread on other core A problem that could lead to corruption of internal administrative data structures of the application thread sched- uler on POSIX_SMP when changing the scheduling priority of an active thread using pthread_setschedparam() or pthread_stetschedpriority() has been fixed. __UniversalisOS_PSE51_version has been set to 402003 to indicate the change.

Issue P00101-15648, Incorrect file type for shared memory objects A problem with an incorrect file type encoded in the st_mode field of the stat structure obtained from a call to fstat() on a file descriptor opened with shm_open() has been fixed. __UniversalisOS_PSE51_version has been set to 402003 to indicate the change.

Issue P00101-15797, dd_iomem_set_attr() fails with EIO In a process without VM_AB_CACHE_CHANGE ability attempts to modify cache attributes using dd_iomem_set_attr() will now fail with EPERM error indication.

Issue P00101-15802, Partition mode change with dd_os_control() fails with EIO In calls to dd_os_control() requesting partition mode change operations that lead to the underlying vm_part_set_mode() call to fail with P4_E_STATE, the corresponding dd_os_control() call will now indicate EIN- PROGRESS. __UniversalisOS_PSE51_version has been set to 402003 to indicate the change.

Issue P00101-15861, Failed assertion when creating a SOCK_RAW type socket Function socket() will not fail with ENOBUFS when attempting to create a socket for a disabled domain (for example a raw socket with a stack configured with LWIP_RAW=0).

c Copyright 2019 7 All rights reserved. Portugal Futurista GmbH Release Notes

Issue P00101-15981, Compile erorr with <sys/qport.h> Fixed a compile error with <sys/qport.h> when type size_t is not defined.

Issue P00101-15991, feholdexcept() saves incorrect floating-point environment data Fixed a problem with function feholdexcept() saving incorrect floating-point environment data on PowerPC architec- tures with classical FPU has been fixed.

Issue P00101-16120, lwIP: select() ignores the nfds parameter A problem with the select() implementation in the interface to the lwIP network stack ignoring the first argument passed in the call to the function (nfds) has been fixed.

Issue P00101-16131, timespec::tv_nsec values truncated in trace events on 64-bit architectures Fixed a problem with truncated values of the tv_nsec field of the timespec structure in trace events on 64-bit architec- tures.

Issue P00101-16634, Issues with strtod() Problems with strtod() not indicating range errors on exponent overflow and not indicating invalid input for empty strings have been fixed.

Issue P00101-16696, Health monitor error during exit processing A problem with programs raising n E17:static mutex health monitor error during exit() processing has been fixed.

Issue P00101-16825, Application errors lead to failed assertions in lwIP network stack A problem with application errors in calls to network API services leading to failed assertions in the lwIP network stack implementation instead of API services failing gracefully has been fixed.

Issue P00101-16853, Incorrect file names returned by readdir_r() A problem with readdir_r() returning incorrect file names in the dirent::d_name field when used on volume providers or on remote file systems accessed with the NFS client option has been fixed.

Issue P00101-16880, dd_create_thread_mc() does not inherit affinity mask Fixed a problem with function dd_create_thread_mc() causing a segmentation fault when called with the null pointer as cpu_mask argument. When called in SMP configurations, function dd_create_thread() will now create a device driver thread with CPU affinity mask inherited from the calling application thread.

Issue P00101-17078, Incorrect FLT_EVAL_METHOD value in arm_v7hf and x86_amd64 The definition of symbol FTL_EVAL_METHOD has been corrected to expands as 0 (zero) for arm_v7hf and x86_amd64.

Issue P00101-17290, Race condition in pthread_join() A problem with multiple simultaneous calls to pthread_join() on the same target thread leaving joiners suspended in JOIN_WAIT waiting for an already exited and detached thread has been fixed.

Issue P00101-17370, Unblocking of threads upon timeout of pthread_rwlock_timedwrlock() A problem with threads blocked on a read-write lock object not being unblocked after a previous attempt to lock the object for writing using pthread_rwlock_timedwrlock() failing with a timeout has been fixed.

A.3 Known Problems

Issue P00101-1402, _exit() does not close all open file descriptors Functions _Exit() and exit() do not close open file descriptors. Note that file associations with PSSW resources or external file providers will be closed by the PSSW when the process partition is going to idle state.

Issue P00101-1759, Fatal exceptions when stepping through implementation with debugger Applications may run into unexpected exceptions in native UniversalisOS threads used internally in the implementation (e.g. ticker thread, device driver threads) when the debugger is instructed to step through API calls or step over complex function-like macros containing such calls (for example custom trace event macros).

c Copyright 2019 8 All rights reserved. Portugal Futurista GmbH Release Notes

    This mode of operating the debugger is currently not supported and should be avoided. Users should issue commands
    to step over subroutine calls (using GDBs next command) whenever an API call is reached.

Issue P00101-2015, close() is blocked by pending I/O When close() is called on a file descriptor and there are other ongoing I/O operations pending on that descriptor, the thread issuing the close() call will be blocked until all pending I/O operations finish before the close method of the underlying file system provider is called.

Issue P00101-3130, Layout of stack_t not standard conforming The definition of type stack_t in <signal.h> is currently not conforming to the POSIX standard.

Issue P00101-3234, Math is not IEEE-754 compliant on E500 platforms Quoting Freescale SPEPEM Rev.0 01/2008 Section 3.3.1.4 IEEE Std 754 Compliance The embedded floating-point categories require a floating-point system as defined in IEEE 754 but may rely on software support in order to conform fully with the standard. Thus, whenever an input operand of the embedded floating-point instruction has data values that are +infinity, -infinity, denormalized, NaN, or when the result of an operation produces an overflow or an underflow, an embedded floating-point data interrupt may be taken and the interrupt handler is responsible for delivering IEEE 754-compliant behavior if desired.

Issue P00101-7314, Message queue notifications could cause a memory leak Pending message queue notifications are not deleted when a message queue is deleted, for example some SIGEV_SIGNAL notifications are produced as a result of putting some messages into a message queue remain pending even if that message queue is closed and unlinked. Note that descriptors for message queue notifications are dynamically allocated from heap memory and are put on a free list after consumption but released back to the memory heap.

Issue P00101-8393, [lwIP] Socket API is not thread-safe The lwIP socket API is not thread-safe. Simultaneous operations on the same socket from multiple threads may lead to undefined behavior. Using multiple threads operating each on a separate socket is supported.

Issue P00101-10431, mktime() fails to indicate conversion errors For certain input data that is not representable in a time_t object, function mktime() fails to return (time_t)-1 to indicate the error.

Issue P00101-13658, accept() causes failed assertion when used on datagram socket With an lwIP network stack configured for TCP and UDP support (the default configuration), calling accept() with a datagram socket will cause a failed assertion (if enabled) in the lwIP network stack. If assertion checks are not enabled in the stack, accept() will fail to indicate an error to the caller when used on a datagram socket.

Issue P00101-16821, Limited support of Support for atomic operations (in C++11) is based on compiler builtins, functions usually found in libatomic.a are currently not implemented. This may result in unresolved references in the link stage when using certain services from or when using std::atomic on larger compound types that are unsuitable for atomic operation compiler builtins.

c Copyright 2019 9 All rights reserved. Portugal Futurista GmbH Release Notes

B Previous Release 5.0.1.1 S5500 B.1 Enhancements introduced by this Release

None.

B.2 Problems fixed with this Release

None.

B.3 Known Problems

Issue P00101-1402, _exit() does not close all open file descriptors Functions _Exit() and exit() do not close open file descriptors. Note that file associations with PSSW resources or external file providers will be closed by the PSSW when the process partition is going to idle state.

Issue P00101-1759, Fatal exceptions when stepping through implementation with debugger Applications may run into unexpected exceptions in native UniversalisOS threads used internally in the implementation (e.g. ticker thread, device driver threads) when the debugger is instructed to step through API calls or step over complex function-like macros containing such calls (for example custom trace event macros). This mode of operating the debugger is currently not supported and should be avoided. Users should issue commands to step over subroutine calls (using GDBs next command) whenever an API call is reached.

Issue P00101-2015, close() is blocked by pending I/O When close() is called on a file descriptor and there are other ongoing I/O operations pending on that descriptor, the thread issuing the close() call will be blocked until all pending I/O operations finish before the close method of the underlying file system provider is called.

Issue P00101-3130, Layout of stack_t not standard conforming The definition of type stack_t in <signal.h> is currently not conforming to the POSIX standard.

Issue P00101-3234, Math is not IEEE-754 compliant on E500 platforms Quoting Freescale SPEPEM Rev.0 01/2008 Section 3.3.1.4 IEEE Std 754 Compliance The embedded floating-point categories require a floating-point system as defined in IEEE 754 but may rely on software support in order to conform fully with the standard. Thus, whenever an input operand of the embedded floating-point instruction has data values that are +infinity, -infinity, denormalized, NaN, or when the result of an operation produces an overflow or an underflow, an embedded floating-point data interrupt may be taken and the interrupt handler is responsible for delivering IEEE 754-compliant behavior if desired.

Issue P00101-7314, Message queue notifications could cause a memory leak Pending message queue notifications are not deleted when a message queue is deleted, for example some SIGEV_SIGNAL notifications are produced as a result of putting some messages into a message queue remain pending even if that message queue is closed and unlinked. Note that descriptors for message queue notifications are dynamically allocated from heap memory and are put on a free list after consumption but released back to the memory heap.

Issue P00101-8393, [lwIP] Socket API is not thread-safe The lwIP socket API is not thread-safe. Simultaneous operations on the same socket from multiple threads may lead to undefined behavior. Using multiple threads operating each on a separate socket is supported.

Issue P00101-10431, mktime() fails to indicate conversion errors For certain input data that is not representable in a time_t object, function mktime() fails to return (time_t)-1 to indicate the error.

c Copyright 2019 10 All rights reserved. Portugal Futurista GmbH Release Notes

Issue P00101-13658, accept() causes failed assertion when used on datagram socket With an lwIP network stack configured for TCP and UDP support (the default configuration), calling accept() with a datagram socket will cause a failed assertion (if enabled) in the lwIP network stack. If assertion checks are not enabled in the stack, accept() will fail to indicate an error to the caller when used on a datagram socket.

Issue P00101-14817, x86_i686: Library code may invoke callbacks without properly aligned stack Library code is compiled with the compiler option -mpreferred-stack-bounary=2 and may invoke callbacks without ensuring the 16-byte stack alignment required by the ABI.

Issue P00101-15644, Run queue corruption when changing priority of active thread on other core Changing the scheduling priority using pthread_setschedparam() or pthread_stetschedpriority() of an active thread currently running on another CPU in POSIX_SMP leads to corruption of internal administrative data structures of the application thread scheduler. The corruption may either cause application hangups or raising of POSIX operating system panic errors in subsequent service calls.

c Copyright 2019 11 All rights reserved. Portugal Futurista GmbH Release Notes

C Previous Release 5.0.1 S5440 C.1 Enhancements introduced by this Release

Issue P00101-12737, Introduce P4_HM_TYPE_PERSONALITY The P4_HM_TYPEs:

        • P4_HM_TYPE_POSIX
        • P4_HM_TYPE_APEX
        • P4_HM_TYPE_DDK

    has been substituted by a single type P4_HM_TYPE_PERSONALITY indicating that an HM event refers to a UniversalisOS-
    specific personality (e.g., APEX, POSIX).

Issue P00101-12782, CPU time accounting Application thread and process CPU time accounting has been added to the implementation. Function pthread_getcputime_np() can be used to retrieve the CPU time of an application thread. Furthermore clock identifiers CLOCK_THREAD_CPUTIME_ID and CLOCK_PROCESS_CPUTIME_ID have been added. When called with clock identifier CLOCK_THREAD_CPUTIME_ID function clock_gettime() can be used to retrieve the CPU consumption of the thread calling the thread. Similarly, clock identifier CLOCK_PROCESS_CPUTIME_ID can be used with clock_gettime() to retrieve CPU consumption of the process. Note that option _POSIX_THREAD_CPUTIME is not fully implemented, CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID cannot be used with timer API functions. The CPU time usage of application threads is also exported to the Instrumon image, if enabled.

Issue P00101-13616, Trace events for mount and unmount operations Trace events for file system mount (_fs_add_fs()) and unmount (_fs_remove_fs()) operations have been added, the events are located in the File System category.

Issue P00101-13701, times() function enhancement Function times() now returns information on CPU time spent in application threads in tms::tms_utime and CPU time spent in device driver threads and other internal threads of the implementation in tms::tms_stime. As the implementation is a single-process environment, the values tms::tms_cutime and tms::tms_cstime are set to zero. The return value of the times() function is the number of elapsed clock ticks since the start of the process. All times returned in the tms structure are measured in clock ticks. The number of clock ticks per second can be retrieved using sysconf(_SC_CLK_TCK). If any of the fields in the tms structure or the function return value would overflow, the function fails with errno set to EOVERFLOW.

Issue P00101-13736, Function clock() Function clock() has been added to the implementation. Symbol CLOCKS_PER_SEC is defined by <time.h> with a value of one million, a value that is aligned with other commonly used systems.

Issue P00101-13901, Functions dprintf() and vdprintf() added Functions dprintf() and vdprintf() from the POSIX_DEVICE_IO_EXT option group have been added. The functions are declared as follows:

    \#include <stdio.h>
    \#include <stdarg.h>

    int dprintf(int fildes, const char *restrict format, ...);
    int vdprintf(int fildes, const char *restrict format, va\_list ap);

c Copyright 2019 12 All rights reserved. Portugal Futurista GmbH Release Notes

    The dprintf() function is equivalent to the fprintf() function, except that dprintf() writes output to a file descriptor specified
    as function argument rather than place output on a stream. Function vdprintf() is equivalent to dprintf(), except that
    instead of being called with a variable number of arguments, it is called with an argument list as defined by <stdarg.h>.

Issue P00101-14246, Extension functions for formatted error messages Convenience functions to format error messages have been added to the implementation. Refer to the descrip- tion of functions err(), verr(), errc(), verrc(), errx(), verrx(), warn(), vwarn(), warnc(), vwarnc(), warnx(), vwarnx(), err_set_exit(), and err_set_file() in the personality manual for further details.

Issue P00101-14248, Functions stpcpy() and stpncpy() added The implementation now includes functions stpcpy() and stpncpy() that appeared in the POSIX_C_LIB_EXT option group in IEEE Std. 1003.1-2008.

Issue P00101-14679, Type change in configuration property Configuration tuneable parameters _configurables::heap_size (property path config/heap/heap_size) and _config- urables::heap_pool_chunk (property path config/heap/heap_pool_chunk) are now of type size_t (property type prop_size).

Issue P00101-15220, CPU mask fields in dd_os_part_info_t The dd_os_part_info_t type includes two new fields that contain resource and time partition CPU mask that are valid for the process. Command code DD_OS_PART_INFO of function dd_os_control() will return this data. Refer to the personality manual and the description of type vm_partition_stat_t in the system software reference manual for further details.

C.2 Problems fixed with this Release

Issue P00101-13505, Unsupported file creation flags for mount_vp() File creation flags O_CREAT and O_TRUNC have no meaning in calls to mount_vp(). File creation and truncation is controlled by permissions to write to the volume.

Issue P00101-14204, Base type of clock_t Type clock_t is now consistently defined as unsigned long for all architectures.

Issue P00101-14228, Incomplete decoding of memory requirement cache mode attributes Enumeration types prop_mem_cache_t and dd_vmit_cachemode_t as well as field cachemode in structure type dd_vmit_mem_flags_t have been extended to be able to represent memory requirement cache modes VM_MEM_CACHE_WC and VM_MEM_CACHE_DEV.

Issue P00101-14645, Size of administrative data in dynamic memory services A change in the size of of administrative data used by dynamic memory allocation services on 64-bit architectures may reduce the amount of memory available for applications. The change affects UniversalisOS native applications (regular, non-cert variant), volume providers, and applications using the POSIX personality.

Issue P00101-14709, Failure to resume suspended threads in message queue operations with POSIX_SMP A problem in the POSIX_SMP implementation that would prevent threads on one core blocked waiting for a message queue to be scheduled when a thread on another core changes the state of that message queue has been fixed.

Issue P00101-14735, Incorrect return value of large read() and write() on UniversalisOS resources A problem with read() and write() returning incorrect values for successful requests larger than 2GB on file descriptors associated with UniversalisOS volume providers or UniversalisOS resources accessed through the /rfs/ and /ssw/ pathname prefixes has been fixed.

Issue P00101-15249, C++98 not built with threads support A problem in the build configuration of the C++98 implementation for the UniversalisOS POSIX personality that effectively disabled multi-thread support has been fixed.

c Copyright 2019 13 All rights reserved. Portugal Futurista GmbH Release Notes

C.3 Known Problems

Issue P00101-1402, _exit() does not close all open file descriptors Functions _Exit() and exit() do not close open file descriptors. Note that file associations with PSSW resources or external file providers will be closed by the PSSW when the process partition is going to idle state.

Issue P00101-1759, Fatal exceptions when stepping through implementation with debugger Applications may run into unexpected exceptions in native UniversalisOS threads used internally in the implementation (e.g. ticker thread, device driver threads) when the debugger is instructed to step through API calls or step over complex function-like macros containing such calls (for example custom trace event macros). This mode of operating the debugger is currently not supported and should be avoided. Users should issue commands to step over subroutine calls (using GDBs next command) whenever an API call is reached.

Issue P00101-2015, close() is blocked by pending I/O When close() is called on a file descriptor and there are other ongoing I/O operations pending on that descriptor, the thread issuing the close() call will be blocked until all pending I/O operations finish before the close method of the underlying file system provider is called.

Issue P00101-3130, Layout of stack_t not standard conforming The definition of type stack_t in <signal.h> is currently not conforming to the POSIX standard.

Issue P00101-3234, Math is not IEEE-754 compliant on E500 platforms Quoting Freescale SPEPEM Rev.0 01/2008 Section 3.3.1.4 IEEE Std 754 Compliance The embedded floating-point categories require a floating-point system as defined in IEEE 754 but may rely on software support in order to conform fully with the standard. Thus, whenever an input operand of the embedded floating-point instruction has data values that are +infinity, -infinity, denormalized, NaN, or when the result of an operation produces an overflow or an underflow, an embedded floating-point data interrupt may be taken and the interrupt handler is responsible for delivering IEEE 754-compliant behavior if desired.

Issue P00101-7314, Message queue notifications could cause a memory leak Pending message queue notifications are not deleted when a message queue is deleted, for example some SIGEV_SIGNAL notifications are produced as a result of putting some messages into a message queue remain pending even if that message queue is closed and unlinked. Note that descriptors for message queue notifications are dynamically allocated from heap memory and are put on a free list after consumption but released back to the memory heap.

Issue P00101-8393, [lwIP] Socket API is not thread-safe The lwIP socket API is not thread-safe. Simultaneous operations on the same socket from multiple threads may lead to undefined behavior. Using multiple threads operating each on a separate socket is supported.

Issue P00101-10431, mktime() fails to indicate conversion errors For certain input data that is not representable in a time_t object, function mktime() fails to return (time_t)-1 to indicate the error.

Issue P00101-14817, x86_i686: Library code may invoke callbacks without properly aligned stack Library code is compiled with the compiler option -mpreferred-stack-bounary=2 and may invoke callbacks without ensuring the 16-byte stack alignment required by the ABI.

c Copyright 2019 14 All rights reserved. Portugal Futurista GmbH Release Notes

D Previous Release 5.0 S5319 D.1 Enhancements introduced by this release

None.

D.2 Problems fixed with this release

None.

D.3 Known Problems

Issue P00101-1402, _exit() does not close all open file descriptors Functions _Exit() and exit() do not close open file descriptors. Note that file associations with PSSW resources or external file providers will be closed by the PSSW when the process partition is going to idle state.

Issue P00101-1759, Fatal exceptions when stepping through implementation with debugger Applications may run into unexpected exceptions in native UniversalisOS threads used internally in the implementation (e.g. ticker thread, device driver threads) when the debugger is instructed to step through API calls or step over complex function-like macros containing such calls (for example custom trace event macros). This mode of operating the debugger is currently not supported and should be avoided. Users should issue commands to step over subroutine calls (using GDBs next command) whenever an API call is reached.

Issue P00101-1878, NFS client sends request from unprivileged ports Due to limitations of the lwIP stack NFS servers must accept client requests originating from unprivileged port numbers in PSE52 configurations. NFS servers on Linux usually need the insecure option specified in the exports(5) file to enable this mode of operation, on other systems it may be an explicit option which must be passed to mountd(8) during startup.

Issue P00101-2015, close() is blocked by pending I/O When close() is called on a file descriptor and there are other ongoing I/O operations pending on that descriptor, the thread issuing the close() call will be blocked until all pending I/O operations finish before the close method of the underlying file system provider is called.

Issue P00101-3130, Layout of stack_t not standard conforming The definition of type stack_t in <signal.h> is currently not conforming to the POSIX standard.

Issue P00101-3234, Math is not IEEE-754 compliant on E500 platforms Quoting Freescale SPEPEM Rev.0 01/2008 Section 3.3.1.4 IEEE Std 754 Compliance The embedded floating-point categories require a floating-point system as defined in IEEE 754 but may rely on software support in order to conform fully with the standard. Thus, whenever an input operand of the embedded floating-point instruction has data values that are +infinity, -infinity, denormalized, NaN, or when the result of an operation produces an overflow or an underflow, an embedded floating-point data interrupt may be taken and the interrupt handler is responsible for delivering IEEE 754-compliant behavior if desired.

Issue P00101-7314, Message queue notifications could cause a memory leak Pending message queue notifications are not deleted when a message queue is deleted, for example some SIGEV_SIGNAL notifications are produced as a result of putting some messages into a message queue remain pending even if that message queue is closed and unlinked. Note that descriptors for message queue notifications are dynamically allocated from heap memory and are put on a free list after consumption but released back to the memory heap.

c Copyright 2019 15 All rights reserved. Portugal Futurista GmbH Release Notes

Issue P00101-8393, [lwIP] Socket API is not thread-safe The lwIP socket API is not thread-safe. Simultaneous operations on the same socket from multiple threads may lead to undefined behavior. Using multiple threads operating each on a separate socket is supported.

Issue P00101-10431, mktime() fails to indicate conversion errors For certain input data that is not representable in a time_t object, function mktime() fails to return (time_t)-1 to indicate the error.

Issue P00101-11734, Missing declarations of API functions Declarations of some API services documented in the personality manual are missing from their respective header files. A possible workaround is to define preprocessor macro __BSD_VISIBLE to one, either prior to including a header or on the compiler command-line. Note however, that this workaround may expose more declarations than those that are actually supported by the implementation.

Issue P00101-12612, Failed assertions in device driver threads in debug configuration Device driver threads created with dd_create_thread() or dd_create_thread_mc() that call PSE51 operating system services that may trigger application thread re-scheduling may raise failed assertions leading to abnormal process termination if the application was built with debug support enabled (POSIX_DEBUG=true). From the set of system services that are allowed to be called from device driver context, the following services may lead to the error:

        • pthread_cond_signal()
        • pthread_cond_broadcast()
        • dd_process_clock()
        • dd_process_clockn()

    There is no workaround for the issue.
    Configuration not enabled for debugging (POSIX_DEBUG=false) are not affected. The conditions leading to the failed
    assertion checks do not negatively affect operation of the process.

Issue P00101-13658, accept() causes failed assertion when used on datagram socket With an lwIP network stack configured for TCP and UDP support (the default configuration), calling accept() with a datagram socket will cause a failed assertion (if enabled) in the lwIP network stack. If assertion checks are not enabled in the stack, accept() will fail to indicate an error to the caller when used on a datagram socket.

Issue P00101-13659, inet_addr() does not check the number range in all parts of the address Function inet_addr() does not check the number range for all parts of the address and fails to return INADDR_NONE for invalid input data.

Issue P00101-14328, Incorrect result of fabs(-0.0) on 32-bit ARM When called with -0.0 as argument, function fabs() returns -0.0 instead of 0.0 on 32-bit ARM.

c Copyright 2019 16 All rights reserved. Portugal Futurista GmbH