Home
Developer Resources
Technical Articles

QNX Technical Articles

QNX® SDP 7.0 Kernel and libc (Build ID 7.0.991.S201809180259): Release Notes

Date of this edition: March 18, 2020


Note: Changes to these notes since October 24, 2018 are highlighted below with this icon: New:

QNX SDP is a cross-compiling and debugging environment, including an IDE and command-line tools, for building binary images and programs for ARM v7 and v8, and x86 and x86_64 targets running the QNX Neutrino RTOS 7.0. You can install QNX SDP on the following development hosts:

  • Microsoft Windows 10 Pro 64-bit, Windows 8.1 Pro 64-bit, or Windows 7 Professional 64-bit
  • macOS version 10.10, 10.11, 10.12
  • Linux Red Hat Enterprise Linux 7 64-bit, Ubuntu Desktop 18.04 LTS 64-bit, or Ubuntu Desktop 16.04 LTS 64-bit, on x86_64 processors (QNX SDP 7 isn't supported on Linux on ARM processors)

Note:
  • If you've already installed the QNX Hypervisor, install com.qnx.sdp.target.hypervisor.group: QNX Hypervisor (with Debug Symbols) 2.0 BuildID 900 - October 4, 2018 2.0.900.S201810041259 before you install the rest of this update.
  • You need to use the updated OS services with the updated kernel.
  • Make sure that Plug and Play OS is disabled in the BIOS before you run QNX Neutrino on your target.

To access the most up-to-date version of these release notes, go to the QNX Software Center, right-click on the package, choose Properties, click General Information, and then use the link provided.

Contents

Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our technical support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.

See also the release notes for the following:

What's in this package?

This package includes the following:

  • com.qnx.sdp.target.microkernel.core (7.0.991.S201809180259)
  • com.qnx.sdp.target.microkernel.core.dbg (7.0.991.S201809180259)
  • com.qnx.sdp.target.microkernel.kdumper (7.0.991.S201809180259)
  • com.qnx.sdp.target.microkernel.kdumper.dbg (7.0.991.S201809180259)
  • com.qnx.sdp.target.hypervisor.group (2.0.900.S201810041259)
  • com.qnx.sdp.target.hypervisor.kernel_module (2.0.991.S201809180259)
  • com.qnx.sdp.target.os_services.base (7.0.991.S201809180259)
  • com.qnx.sdp.target.os_services.base.dbg (7.0.991.S201809180259)

To see a list of the contents of a package, right-click it in the QNX Software Center, choose Properties, and then click Package Contents.

New features

The new features in the kernel include the following:

  • The version number of the kernel is now 7.0.3.
  • We've enhanced address space layout randomization (ASLR) by:
    • increasing the amount of entropy (Ref# J1674722, J2161459, J2372082)
    • reducing the impact of ASLR on page table allocations (Ref# J2573412)
    • improving stack randomization (Ref# J2525986)
  • It now takes less time to set up the physical memory allocator during boot time. (Ref# J2523438)
  • We've added the following procnto options:
    -fa, -~fa
    Preallocate (-fa) or don't preallocate (-~fa) an FPU context structure for every new thread. The default is not to preallocate a context.
    -fl, -~fl
    Specify the FPU context switch policy:
    • -fl — use the lazy scheme: a thread that starts to run on some processor can incur a fault when making an FPU operation, at which point the FPU register set is loaded. Note that this isn't limited to the first time the thread runs on that processor, but may occur throughout the life of the thread.
    • -~fl — use the eager scheme: when a thread that has an FPU context is scheduled, immediately load the context into the FPU and enable the FPU.

    The default is to use the lazy scheme.

    (Ref# J2518056)

Fixed issues

Kernel

  • Touching a PROT_NONE mapping once again results in a SIGSEGV or access error instead of SIGBUS. (Ref# J2542749)
  • We've corrected a bug that caused a kernel crash when a typed memory region was exhausted because of non-contiguous allocations. (Ref# J2541666)
  • We've corrected a bug that caused a kernel crash when a process exited with threads still waiting on a barrier. (Ref# J2538797)
  • The process manager now correctly handles invalid pointers that are passed to kernel calls. (Ref# J2520469, J2519554)
  • The virtual memory manager now leaves MAP_ELF | MAP_SHARED mappings as shared; if you set a breakpoint in the code, it's then marked as private. In a superlocked system, leaving these mappings as shared greatly reduces the amount of memory reserved for shared libraries. (Ref# J2224405)

libc

fread(), fwrite()
We've improved the performance of these functions for large I/O. (Ref# J2244726)
getsockopt(), setsockopt()
The following options are new:
  • SO_TXPRIO — the network driver's transmit priority level
  • SO_VLANPRIO — the VLAN priority

(Ref# J2549683)

<math.h>
This header file now defines double_t and float_t for every value of FLT_EVAL_METHOD, as required by C99 and C11. (Ref# J2537235)
mem_offset()
You can now use this function to get the physical address of the system page. (Ref# J2541737)
mmap()
  • We've improved this function's performance when:
    • it looks up virtual memory mappings within an address space (Ref# J2517891)
    • MAP_LAZY is specified (Ref# J2511011)
    • you use PROT_NONE to reserve a range in the address space (Ref# J2497438)
  • A kernel crash no longer occurs if you try to map a physical address that isn't supported by the platform. (Ref# J2499152)
mprotect()
We've improved this function's performance. (Ref# J2528516)
posix_typed_mem_get_info()
This function no longer returns a length of 0 when the system has less than the full zone of typed memory available. (Ref# J2246334)
pthread_barrier_destroy()
We've corrected a race condition that made it unsafe to destroy a barrier. (Ref# J2534050)
pthread_create()
Using memory mapped to the end of user memory and specifying it as thread stack no longer causes pthread_create() to return 1. (Ref# J2567228, J2569141)
realpath()
The resolved path that this function provides no longer includes the directory specified with chroot(). (Ref# J168583)
<yval.h>
We've corrected this header file so that it doesn't redefine tolower() and hence cause compilation errors if you're using the Intel compiler. (Ref# J2354708)

OS services

inflator
This manager no longer crashes when it tries to expand a corrupted compressed file. (Ref# J2472761)
pipe
Pipes now correctly handle writes of more than 2 GB on 64-bit architectures. (Ref# J2561570)
shutdown
New: This utility no longer gives a warning if a board-specific shutdown library isn't provided. (Ref# J2179961)

Experimental items


Caution: Experimental software is primarily provided for customers and the community to try out, and perhaps to get a glimpse of what might be in store for the future. For information about the use of experimental software, see the Commercial Software License Agreement (CSLA) or Partner Software License Agreement (PSLA) in the Licensing area of our website, http://www.qnx.com/legal/licensing/.

The experimental items in this release are:

  • QNX framework for integrity measurement (QFIM)
  • New: Trusted Platform Module (TPM)

    Note: The version of TPM that shipped with SDP 7.0 is deprecated and will be replaced with a different TPM service in a future release.

Known issues

  • New: The L memory configuration option for procnto is a superset of the l option. You can combine them, but they're processed in the order that you specify them, resulting in different combinations of locking and superlocking. The L~l combination is invalid because memory is superlocked but not locked; don't use it. (Ref# J2746113)
  • New: Specifying the ARM_SHMCTL_SO bit in the special argument to shm_ctl_special() should result in strongly ordered mappings but currently doesn't. (Ref# J2740401)

    Workaround: Also set ARM_SHMCTL_SH. Adding this bit results in strongly ordered mappings and doesn't remove functionality because non-cacheable mappings are always outer-shareable (i.e., you can't get a non-shareable non-cacheable mapping anyway).

  • If you use procnto's -mr option to enable ASLR on AArch64 targets, and you're running QNX Hypervisor 2.0, an immediate EL2 violation may occur when you start a guest. Please contact QNX Software Systems for details on available hypervisor updates to address this problem. (Ref# J2628219)
  • When you're using the hypervisor, virtual CPU thread stacks are marked as MAP_LAZY, so the OS allocates backing physical memory only when a new page is touched. If an AArch64 system is running in EL2 when the stack grows to a new page, a fault occurs. This is more likely to happen when ASLR is enabled for qvm. (Ref# J2628219)
  • On specific boards whose BSP was released before this update, the devc-ser8250 driver may crash when registers are mapped above 4 GB in memory. (Ref# J2533224)

    Workaround: Contact QNX Software Systems for an updated devc-ser8250 driver for your board.

  • New: In <time.h>, there's a macro named timespec2nsec(), which gets called instead of the C Library function with the same name and method signature. In this release, the macro implementation has unexpected behavior sometimes because it evaluates its argument twice. So, code that would be valid for calling the C function is not valid for calling the macro. (Ref# J2642295)

    Workaround: For the argument, avoid using code that may have a different meaning or become undefined when evaluated for the second time. An example would be using increment or decrement operators in an array index that references a timespec structure, as in the following statement:

    timespec2nsec((struct timespec*)attribList[i++]);
    
  • New: Some tc*() (terminal interface) functions are implemented as having cancellation points when according to POSIX, they must not or should not have them. This issue is being fixed in a newer version of QNX SDP.

    The terminal interface functions that incorrectly do have cancellation points include:

    • tcdrain()
    • tcgetsid()
    • tcsetsize()
    • tcgetsize()
    • tcinject()
    • tcischars()

    In the documentation, the safety table for each listed function has a No value in the Cancellation point column. This should be used as a guideline in writing programs that use these functions; they should not be used as cancellation points. (Ref# J2711220)

  • New: If you don't specify a leading slash in the name and you aren't in the root directory, posix_typed_mem_open() fails to open the typed memory object. (Ref# J1035253)

    Workaround: Start the name with a slash.

  • New: The definition of USHRT_MAX in <limits.h> is incorrect; it should be as follows:
    #if __INT_BITS__-0 <= 16
    #define USHRT_MAX   65535U       /*  maximum value of an unsigned short  */
    #else
    #define USHRT_MAX   65535      /*  maximum value of an unsigned short  */
    #endif
      

    (Ref# J2753844, J2753845)

See also the release notes for the following:

Getting started with the documentation

After you've installed QNX SDP, you'll find an extensive set of HTML documentation in the Integrated Development Environment's help system. To start the IDE:

  • on Windows, choose QNX > QNX Momentics IDE from the Start menu, or use the desktop icon
  • on Linux, run base_directory/qnxmomentics/qde, where base_directory is where you installed the software
  • on macOS, click the icon labelled QNX Momentics IDE from the launchpad

The roadmap page contains links to the various HTML booksets that accompany the OS. For a short tutorial that will help you get started, see the Quickstart Guide, then refer to the other documents (System Architecture, QNX Neutrino Programmer's Guide, C Library Reference, Utilities Reference, and so on).

You can install and work with multiple versions of QNX Neutrino. Whether you're using the command line or the IDE, you can choose which version of the OS to build programs for. For more information, see the IDE User's Guide or the QNX Neutrino Programmer's Guide.

Technical support

To obtain technical support for any QNX product, visit the Support area on our website (www.qnx.com). You'll find a wide range of support options, including community forums.