Release notes for SEGGER Toolchain
Compiler
Version 19.1.1
- 
                Improvements
                
- Merged with clang 19.1.6
 - ARM: Improved optimizations for code size and speed.
 
 
Version 18.1.6
- 
                Program corrections
                
- Minor bug fix in code generation.
 
 
Version 18.1.5
- 
                Program corrections
                
- In rare cases function frame setup code was generated wrong. Fixed.
 
 
Version 18.1.3
- 
                Program corrections
                
- Minor bug fix in code generation.
 
 
Version 18.1.2
- 
                Program corrections
                
- Fixed a compiler crash in rare cases.
 
 
Version 18.1.1
- 
                Improvements
                
- Merged with clang 18.1.6
 - ARM: Improved optimizations for code size and speed.
 
- Fixed some problems when using the Segger STOP feature.
 
 
Version 17.0.0
- 
                Improvements
                
- Merged with clang 17.0.6
 - ARM: Improved optimizations for code size and speed.
 
 
Version 16.0.9
- 
                Improvements
                
- Changed behavior of some warnings/errors to help correctly checking for ISO C standard
 
 
Version 16.0.7
- 
                Program corrections
                
- Fixed compiler crash that may happen in rare cases.
 
 
Version 16.0.6
- 
                Program corrections
                
- In rare cases the loop optimization may result in wrong loop counts. Fixed.
 
 
Version 16.0.5
- 
                Improvements
                
- Adjusted inlining behavior for -O1
 - Changed behavior of some warnings/errors to help correctly checking for ISO C standard
 
 - 
                Program corrections
                
- Stack overflow protection feature: Added missing checks in variadic functions.
 
 
Version 16.0.3
- 
                New features
                
- New option -mstack-overflow-check to generate code to check for stack overflow (ARM Thumb-2 code only).
 
 - 
                Improvements
                
- Merged with clang 16.0.3
 - ARM: Improved optimizations for code size and speed.
 
 
Version 15.2.5
- 
                Program corrections
                
- Illegal instruction could be generated for ARM v4 targets. Fixed.
 
 
Version 15.2.4
- 
                Program corrections
                
- Bug fix code generation.
 
 
Version 15.2.2
- 
                Program corrections
                
- Bug fix code generation for ARM v8.1 targets.
 
 
Version 15.2.1
- 
                Improvements
                
- Merged with clang 15.0.6
 - ARM: Improved optimizations for code size and speed.
 
 
Version 15.0.2
- 
                Program corrections
                
- Small bug fix in code generation.
 
 
Version 15.0.1
- 
                Program corrections
                
- Small bug fix in code generation.
 
 
Version 15.0.0
- 
                Improvements
                
- Merged with clang 15.0.0
 - ARM: Several optimizations improving code size and speed.
 
 
Version 14.2.1
- 
                Improvements
                
- ARM: Optimizations improving code size.
 
 - 
                Program corrections
                
- Code generation for Cortex-M23 was sometimes incorrect. Fixed.
 
 
Version 14.0.1
- 
                Improvements
                
- Merged with clang 14.0.0
 - ARM: Several optimizations improving code size and speed.
 
 
Version 13.2.2
- 
                Improvements
                
- RISCV: Removed 0-offset branches in optimization level 0.
 
 
Version 13.2.1
- 
                Improvements
                
- ARM: Several optimizations improving code size and speed.
 
 
Version 13.0.1
- 
                Improvements
                
- Minor improvement in code generation.
 
 
Version 13.0.0
- 
                Improvements
                
- Merged with clang 13.0.0
 - Minor optimizations improving speed for Thumb-1 targets.
 
 
Version 12.4.0
- 
                Improvements
                
- Optimize handling of constants and global variables (code size and speed).
 
 
Version 12.2.4
- 
                Program corrections
                
- Small bug fix in code generation.
 
 
Version 12.2.1
- 
                Improvements
                
- Several small optimizations improving code size and speed.
 
 
Version 12.0.3
- 
                Program corrections
                
- Small bug fixes in code generation.
 
 
Version 12.0.2
- 
                Improvements
                
- Adjust list of known builtin functions with SEGGER runtime library.
 
 - 
                Program corrections
                
- Under rare circumstances invalid code may be generated if optimizing for size. Fixed.
 
 
Version 12.0.0
- 
                Improvements
                
- Merged with clang 12.0.0
 - Several optimizations improving code size and speed.
 
 
Version 11.4.4
- 
                Program corrections
                
- Under rare circumstances a tail call could be malformed. Fixed.
 
 
Version 11.4.0
- 
                Improvements
                
- Merged with clang 11.0.1
 - Several optimizations improving code size for Cortex-M0, A9, A12, A15 and A17 devices.
 - Several small optimizations improving speed.
 
 - 
                Program corrections
                
- For some source code lines the debug line information was missing in the output file. Fixed.
 
 
Version 11.2.1
- 
                Program corrections
                
- Under certain circumstances incorrect code was generated for Cortex-M7 targets. Fixed.
 
 
Version 11.2.0
- 
                Improvements
                
- Improve inlining: All functions with large stack called in the same function are either all inlined or none of them are inlined.
 - Several small optimizations improving code size and speed.
 
 
Version 11.0.3
- 
                Improvements
                
- Functions with large stack requirement are not inlined any more.
 
 - 
                Program corrections
                
- Don't use indirect calls to weak functions to allow the linker to eliminate the call.
 - Under certain circumstances the spiller could take a wrong register. Fixed.
 
 
Version 11.0.0
- 
                New features
                
- Merged with clang-11
 - Activated function outliner when optimizing for size
 
 - 
                Improvements
                
- Error "anonymous bit-field cannot have qualifiers" was turned into a warning
 - Many improvements to the code generation and optimization
 
 
Version 10.6.6
- 
                New features
                
- Introduced compiler identification macro __SEGGER_CC__.
 
 - 
                Program corrections
                
- MUL instructions were not coded correctly if inside an IT block, which causes the assembler to break. Fixed.
 
 
Assembler
Version 2.10.0
Linker
Version 4.44.2
- 
                Corrections
                
- Preprocessor did not correctly handle '<' token. Fixed.
 - SEGGER disassembler would not disassemble some coprocessor instructions. Fixed.
 
 
Version 4.44.1
- 
                Improvements
                
- Error position is emitted for user-defined CRCs to enable double-click error location in Embedded Studio.
 - Relocation truncations are now diagnosed as errors rather than warnings.
 - Duplicate error messages are suppressed.
 
- Better parsing and validation of integer-based parameters in user-defined CRC algorithm specification, with error location.
 
 
Version 4.44.0
- 
                Improvements
                
- Additional pass in data section deduplication to identify additional deduplication possibilities.
 
 
Version 4.42.0
- 
                New features
                
- Added user-defined CRCs as an integrity check.
 
 - 
                Improvements
                
- Extended region literals to accept sizes of up to 1GB.
 
 
Version 4.40.0
- 
                New features
                
- 
                    Added 
----new-program-segment-thresholdand--program-segment-fillcommand-line options to control program headers and program segments. 
 - 
                    Added 
 
Version 4.38.14
- 
                Corrections
                
- Aligned with documentation, use 
--include(not-include) to add include directories. 
 - Aligned with documentation, use 
 
Version 4.38.13
- 
                Corrections
                
- Corrected disassembly of v8M long shift instructions in map file (Arm).
 
 
Version 4.38.12
- 
                Corrections
                
- Corrected AV when encountering symbols with excessively long names generated from C++ STL templates.
 - Corrected encoding of DWARF information in on-target C++ exception tables causing incorrect exception recovery (RISC-V).
 
 
Version 4.38.11
- 
                Improvements
                
- Tolerate ELF files that do not contain symbol name sections.
 
 
Version 4.38.10
- 
                Corrections
                
- Symbols that are encoded UTF-8 are now correctly column-aligned in map file.
 
 
Version 4.38.9
- 
                Corrections
                
- Corrected 
--includeto conform to documented syntax. 
 - Corrected 
 
Version 4.38.8
- 
                Improvements
                
- Added Ordering column to Block List section in map file.
 - Add support for 
R_RISCV_SETULEB128andR_RISCV_SUBULEB128relocations (RISC-V). - Added dissassembly of RVP 
BPICKinstruction (RISC-V). - Linker interprets additional new-format mapping symbols (RISC-V).
 
 
Version 4.38.6
- 
                Improvements
                
- Add support for 
R_RISCV_SET8relocation in non-debug sections (RISC-V). 
 - Add support for 
 
Version 4.38.5
- 
                Improvements
                
- Arm v8M.base, v8M.main, and v8.1M.main now have have distinct build attribute architecture tags identifying the particular architecture targeted (Arm).
 - The linker will correct any 
.dataand.data.*sections that are marked read-only to be writable, which matches the conventional use of such sections. 
 
Version 4.38.4
- 
                Corrections
                
- Bind symbol renames earlier to fix incorrect linkage issues.
 
 
Version 4.38.3
- 
                Improvements
                
- Disassembles additional v8.1M instructions (Arm).
 - Ensures SEGGER semihosting support functions are not subject to deduplication.
 
 
Version 4.38.2
- 
                Improvements
                
- Linker interprets newly introduced 
$xmapping symbols (RISC-V). 
 - Linker interprets newly introduced 
 
Version 4.38.1
- 
                Improvements
                
- Errors in linker expressions are reported with location information.
 
 - 
                Corrections
                
- Linker continued linking if preprocessing errors exist. Fixed, preprocessing errors will terminate linkage without trying to execute the preprocessed script.
 - Scripts using '
#include' ignored the included source file. Fixed. 
 
Version 4.38.0
- 
                New features
                
- Added 
--map-block-listand--no-map-block-listcommand-line options to include named block information in the map file. - Added 
--map-region-listand--no-map-region-listcommand-line options to include named region information in the map file. 
 - Added 
 - 
                Corrections
                
- Corrected calculation of symbol value when created using 
define symbolstatement with RISC-V relaxation enabled (RISC-V). - Pad linker-created initialization data section to a multiple of its alignment to avoid overlapping sections.
 
 - Corrected calculation of symbol value when created using 
 
Version 4.36.0
- 
                Improvements
                
- Add two-level Table of Contents for HTML map file output.
 - Use enhanced demangler to correctly demangle language-specific symbols.
 
 - 
                Corrections
                
- Show entire placement region for blocks placed using 
place at start. 
 - Show entire placement region for blocks placed using 
 
Version 4.34.2
- 
                Corrections
                
- Correct mis-relocated base register during relaxation.
 
 
Version 4.34.1
- 
                Improvements
                
- Process 
R_ARM_TLS_IE32relocations and creation of GOT sections. 
 - Process 
 
Version 4.34.0
- 
                New features
                
- Added 
--warn-tls-orderand--no-warn-tls-ordercommand-line options to diagnose potential TLS-related errors in linker scripts. - Added checks to detect if TLS data and regular data are mixed within a block.
 
 - Added 
 - 
                Program corrections
                
- Blocks placed with 
place atstatements usingautoalignment may have incorrect sizes leading to placement errors. Fixed. 
 - Blocks placed with 
 
Version 4.32.2
- 
                Improvements
                
- The linker now supports line endings in Windows (CR+LF), Unix (LF), and MacOS/OS-9 (CR) formats on all platforms.
 
 
Version 4.32.1
- 
                Improvements
                
- The linker now indicates both forced alignment and forced padding for sections, if enabled, in the absolute listing.
 
 - 
                Program corrections
                
- Linker did not respect set 
--pad-*options on late-included sections related to the initialization tables. Fixed. 
 - Linker did not respect set 
 
Version 4.32.0
- 
                New features
                
- Added 
basestatement to enable specification of region programming addresses. 
 - Added 
 
Version 4.30.2
- 
                Program corrections
                
- Remove debug output from log file.
 - Remove erroneous check of fixed-size blocks containing non-empty selectors.
 
 
Version 4.30.1
- 
                New features
                
- Enable conditional initialization of dynamic storage.
 
 
Version 4.24.2
- 
                Improvements
                
- Symbol list section in the map file now has a new subsection that lists symbols by decreasing size.
 
 
Version 4.24.1
- 
                New features
                
- Added warnings for unresolved weak symbols controlled by 
--warn-unresolved-weaksand--no-warn-unresolved-weaks. 
 - Added warnings for unresolved weak symbols controlled by 
 - 
                Program corrections
                
- Exception tables and conditionally-initialized data were incorrectly classed as redundant and evicted when deduplication or inlining were enabled (Arm).
 
 
Version 4.22.1
- 
                Improvements
                
- Linker enhanced with early detection of conditionally-included sections enabling SEGGER real-time heap to be selected from emRun 4.10.
 
 
Version 4.22.0
- 
                New features
                
- Added Optimization Report section to the map file controlled by 
--map-optimization-reportand--no-map-optimization-report. 
 - Added Optimization Report section to the map file controlled by 
 - 
                Improvements
                
- Section deduplication applied in more cases.
 
 
Version 4.20.0
- 
                New features
                
- Added jump-threading optimization controlled by 
--thread-jumpsand--no-thread-jumps(Arm). - Map file extended with per-section and per-instruction optimization reports.
 
 - Added jump-threading optimization controlled by 
 - 
                Improvements
                
- Section deduplication extended to cover sections with relocations.
 - Faster linking for applications with large quantities of initialized data.
 
 
Version 4.18.1
- 
                Program corrections
                
- Corrected relaxation of function calls in certain out-of-bounds cases (RISC-V).
 
 
Version 4.18.0
- 
                New features
                
- The linker script is now subject to preprocessing. A complete C-like preprocessor with 
#define,#if, and#includeprocessing is integrated into the linker. - Added 
-Icommand line option to add directories to the preprocessor include path lookup. - Added 
-Dcommand line option to define preprocessor symbols on the command line. 
 - The linker script is now subject to preprocessing. A complete C-like preprocessor with 
 - 
                Improvements
                
- Undefined symbol error messages now indicate the symbol, section, and file name of the source reference.
 
 
Version 4.16.1
- 
                Improvements
                
- Veneers were sometimes constructed even though unnecessary leading to suboptimal code; now veneers only constructed when absolutely required (Arm).
 
 
Version 4.16.0
- 
                Improvements
                
- Support relocation 
R_RISCV_SET16(RISC-V). - Support relocation 
R_RISCV_ADD16andR_RISCV_SUB16(RISC-V). - Support relocation 
R_RISCV_ADD8andR_RISCV_SUB8(RISC-V). 
 - Support relocation 
 
Version 4.14.0
- 
                Improvements
                
- Support relocation 
R_ARM_THM_ALU_PREL_11_0in Arm linker. - Support relocation 
R_RISCV_PCREL_LO12_Sin RISC-V linker. - Support Andes-specific relocations in RISC-V linker.
 
 - Support relocation 
 - 
                Program corrections
                
- Avoid crash in disassembler when listing some RVP instructions in RISC-V linker.
 - Initialization of data sections greater than 32k with LZSS compression could be wrong. Fixed.
 
 
Version 4.12.1
- 
                Program corrections
                
- Fix warning issued for veneered call to function in absolute section.
 
 
Version 4.12.0
- 
                Improvements
                
- Enable linking of functions declared to be absolute.
 
 
Version 4.10.1
- 
                Improvements
                
- Support architecture names 
8.1-M.mainand8.1-M.base. 
 - Support architecture names 
 
Version 4.10.0
- 
                New features
                
- Added 
define accessstatement. - Added support for keeping sections by name, controlled by 
--keep-sectionoption. - Added support for conditionally keeping initialization arrays, controlled by 
--keep-init-arrayoption. 
 - Added 
 - 
                Improvements
                
- Support 
R_RISCV_32_PCRELrelocation in RISC-V linker. 
 - Support 
 
Version 4.8.0
- 
                New features
                
- Added support for Andes Performance Extension controlled by 
--andes-performance-extensionand--no-andes-performance-extensionoptions. - Added support for Huawei custom extension by 
--huawei-extensionand--no-huawei-extensionoptions. 
 - Added support for Andes Performance Extension controlled by 
 - 
                Program corrections
                
- Fix missing end-table tag on HTML section detail output.
 - Fix generation of error message when calling undefined weak symbols in A32 code.
 
 
Version 4.6.0
- 
                New features
                
- Added support for AndeStar CoDense code compression controlled by 
--instruction-tablesand--no-instruction-tablesoptions. - Added "unused input file" map section controlled by 
--map-unused-inputsand--no-map-unused-inputsoptions. - Added "unused memory ranges" map section controlled by 
--map-unused-memoryand--no-map-unused-memoryoptions. 
 - Added support for AndeStar CoDense code compression controlled by 
 - 
                Program changes
                
- String merging is unavailable on Arm targets.
 
 
Version 4.4.1
- 
                New features
                
- Added code outlining parameterization controlled by 
--outline-strand-sizeoption. - Added 
optionstatement to linker script language. 
 - Added code outlining parameterization controlled by 
 - 
                Program corrections
                
- Prevent error if 
--keepcommand line switch specifies a non-existent symbol. 
 - Prevent error if 
 
Version 4.4.0
- 
                New features
                
- Added code outlining capability controlled by 
--outlineand--no-outlineoptions. - Added tail merging capability controlled by 
--tail-mergeand--no-tail-mergeoptions. 
 - Added code outlining capability controlled by 
 - 
                Improvements
                
- If the linker-created initialization table is not referenced in the startup code, it is not included in the linked application.
 
 - 
                Program corrections
                
- String merging could inadvertently evict required initialization array sections. Fixed.
 
 
Version 4.2.1
- 
                Improvements
                
- Required non-allocatable sections are silently converted to allocatable sections rather than eliciting a warning.
 
 
Version 4.2.0
- 
                New features
                
- Added section merging capability controlled by 
--merge-sectionsand--no-merge-sectionsoptions. 
 - Added section merging capability controlled by 
 - 
                Improvements
                
- Linker-created data is now itemized in the Module Summary section.
 
 
Version 4.0.1
- 
                New features
                
- Architecture mismatch detection and warning controlled by 
--warn-arch-mismatchand--no-warn-arch-mismatchoptions. 
 - Architecture mismatch detection and warning controlled by 
 
Version 4.0.0
- 
                New features
                
- Added support for RISC-V processors.
 
 
Version 3.20.5
- 
                Improvements
                
- Unconditionally generate region symbols when requested, rather than generating only the region symbols used by the linked application. This enables the Embedded Studio IDE to display firmware regions in the Output and Memory Use windows.
 
 
Version 3.20.4
- 
                New features
                
- Added 
--warn-deprecatedand--no-warn-deprecatedto advise of scheduled changes. 
 - Added 
 
Version 3.20.2
- 
                New features
                
- Added 
assertstatement. 
 - Added 
 
Version 3.20.0
- 
                New features
                
- Detection of unintended/any use of "double" AEABI functions controlled by 
--warn-all-double,--warn-unintended-double, and--no-warn-double. - Demand-load of appropriate archives controlled by 
--lazy-load-archivesand--no-lazy-load-archiveswhich can improve linker performance with very large archives (> 20 MB). - Optimization of C++ exception handling tables controlled by 
--optimize-exception-tableand--no-optimize-exception-table. - Demangling of C++ names in the map file and diagnostic messages controlled by 
--pretty-symbol-names,--no-pretty-symbol-names,--pretty-section-names, and--no-pretty-section-names. - Address and size formats in the map file controlled by 
--map-addr-formatand--map-size-format. - Wrapping or truncation of excessive-width columns in the map file controlled by 
--map-wrapand--no-map-wrap. - Inclusion of exception table section in map file controlled by 
--map-exception-tableand--no-map-exception-table. - Control of per-section cross reference in the map file absolute listing controlled by 
--map-listing-xrefand--no-map-listing-xref. - Added 
--big-endianand--little-endianwith support to link big-endian images. 
 - Detection of unintended/any use of "double" AEABI functions controlled by 
 - 
                Improvements
                
- Lists of sections and/or symbols are always ordered by symbol name or symbol address if only one one sort criterion makes sense.
 - Lists of sections and values are always ordered by symbol/section name and then value, or by value and then symbol/section name to enforce a consistent sort order.
 - Linker-created symbols are shown in symbol lists only if they are used in order to avoid clutter.
 - Initialization table section is expanded with a better presentation.
 - Module summary section now breaks out input object files and input object archives for a better summary presentation.
 - 
                    Linker modified to process 
R_ARM_TARGET2relocations identically to the GNU linker. This is in conflict with the handling ofR_ARM_TARGET2defined by the document "ELF for the Arm Architecture", ARM Limited, but is required to make C++ exception handling work with the existing GCC, clang, and libunwind framework. Only use with the GNU and clang toolsets is guaranteed and tested to work with this change. - Creation of synthetic output sections for fixed-size blocks created in the linker script that combine no sections (e.g. stack and heap blocks). This assists Embedded Studio to display memory usage after build, or in the Memory Usage window, accurately.
 
 
Runtime
Version 4.28.7
- 
              Improvements
              
- 
                  
exp2()andexp2f()use binary expansion for non-fractional arguments. 
 - 
                  
 
Version 4.28.6
- 
              Improvements
              
- 
                  Added 
imaxdiv()and associated type. 
 - 
                  Added 
 - 
              Corrections
              
- 
                  Corrected 
difftime()to correctly return the difference in times. 
 - 
                  Corrected 
 
Version 4.28.5
- 
              Corrections
              
- 
                  Corrected 
strncmp()when used with short misaligned strings. 
 - 
                  Corrected 
 
Version 4.28.4
- 
              Corrections
              
- 
                  Corrected rounding of (for example) 
0.95when printing in%4.1fformat. 
 - 
                  Corrected rounding of (for example) 
 
Version 4.28.3
- 
              Improvements
              
- 
                  Added implementations of 
__ctzsi2(),__ctzdi2(),__ctzti2(),__bswapsi2(), and__bswapdi2(). 
 - 
                  Added implementations of 
 
Version 4.28.2
- 
              Improvements
              
- 
                  Corrected 
strncmp()to respect alignment constraints on 64-bit targets. - Basic heap extended to correctly function with >2GB allocations on 64-bit targets.
 
 - 
                  Corrected 
 
Version 4.28.1
- 
              Corrections
              
- 
                  Corrected 
<setjmp.h>to determine floating-point environment using SEGGER RTL definitions and ensure consistency with the implementation (Arm). 
 - 
                  Corrected 
 
Version 4.28.0
- 
              Improvements
              
- Added an implementation of 
fdopen()along with low-level API to support it. 
 - Added an implementation of 
 
Version 4.26.1
- 
              Improvements
              
- The basic heap now has support for 
aligned_alloc(). 
 - The basic heap now has support for 
 - 
              Corrections
              
- Added missing definition of 
__SEGGER_RTL_PRI_PTR_PREFIX. 
 - Added missing definition of 
 
Version 4.26.0
- 
              New features
              
- Added 
__SEGGER_RTL_MINIMAL_LOCALEconfiguration for reduced-functionality, reduced-size minimal locale. 
 - Added 
 
Version 4.24.6
- 
              Corrections
              
- Corrected potential unaligned access in 
strncmp()when compiled speed-opimized with word-search instructions enabled. - Corrected parenthesiaztion of low-level floating point class inquiry to avoid potential source-level issues (RISC-V).
 
 - Corrected potential unaligned access in 
 
Version 4.24.5
- 
              Improvements
              
- Added pointer 
SCNxPTRmacros. 
 - Added pointer 
 - 
              Corrections
              
- Corrected 
strrchr()when compiled speed-opimized with word-search instructions enabled. 
 - Corrected 
 
Version 4.24.4
- 
              Improvements
              
- Smaller balanced 
strlen()in Thumb-2 instruction set (Arm). 
 - Smaller balanced 
 
Version 4.24.3
- 
              Corrections
              
- Corrected fast 
strlen()in big-endian mode (Arm). 
 - Corrected fast 
 
Version 4.24.2
- 
              Corrections
              
- Adjusted definition of PRI and SCN macros in 
<inttypes.h>to cater for differences of opinion between Clang and GCC compilers regarding the underlying types ofint32_tanduint32_t(Arm). 
 - Adjusted definition of PRI and SCN macros in 
 
Version 4.24.1
- 
              Corrections
              
- Corrected realtime heap aligned-allocation incorrectly computing some block sizes.
 
 
Version 4.24.0
- 
              New features
              
- Added 
ffs(),ffsl(), andffsll(). 
 - Added 
 - 
              Improvements
              
- Runtime takes advantage of new instructions introduced in v8.1-M architecture (Arm).
 
 
Version 4.22.0
- 
              New features
              
- Fully assembly-coded floating-point arithmetic for RV64 architecture.
 
 - 
              Corrections
              
- Corrected definition of 
carg(),cargf(), andcargl()in<complex.h>. 
 - Corrected definition of 
 
Version 4.20.0
- 
              Improvements
              
- Faster double-precision division in C for 32-bit processors.
 
 - 
              Corrections
              
- Corrected comparison of 128-bit floating point data (RISC-V).
 
 
Version 4.18.1
- 
              Corrections
              
- Corrected output using formatted control 
%hhdwhich was incorrect when plaincharis unsigned. 
 - Corrected output using formatted control 
 
Version 4.18.0
- 
              Improvements
              
- Improved complex division so it will not overflow at extreme values.
 
- Slight improvement in speed and code size for floating conversion.
 
offsetof()is configured through__SEGGER_RTL_OFFSETOF()and for GNU compilers reduces to__builtin_offsetof()(by default).
 - 
              Corrections
              
- Added missing definition of 
_Complex_IandIin<complex.h>. 
 - Added missing definition of 
 
Version 4.16.0
- 
              New features
              
- Added 
timeops_x.cwith default low-level time operations. - Added 
printf_l(),sprintf_l(),snprintf_l(),vprintf_l(),vsprintf_l(),vsnprintf_l(). - Added 
fprintf_l(),vfprintf_l(),asprintf_l(),vasprintf_l(). - Added 
scanf_l(),sscanf_l(),vscanf_l(),vsscanf_l(),fscanf_l(),vfscanf_l(). - Added 
memset_s(),memcpy_s(),memmove_s(). - Added 
strnlen_s(),strcpy_s(). abort_handler_s(),ignore_handler_s(),set_constraint_handler_s().
 - Added 
 - 
              Corrections
              
- Corrected 
modf()for arguments in range [1, 2). 
 - Corrected 
 
Version 4.14.1
- 
              Improvements
              
- Sample configurations updated to eliminate unused variable warnings when compiled with these warnings enabled.
 
 - 
              Corrections
              
- Definition of 
MB_CUR_MAXcorrected. 
 - Definition of 
 
Version 4.14.0
- 
              New features
              
- Added 
<signal.h>header file withsignal()andraise(). - Added 
__muldc3(),__multc3(),__divdc3(),__divtc3(). - Improved performance of C-coded 
memmove(),memcmp(), andstrcmp(). - Added option to use assembly-coded 
memcpy()andmemset(). 
 - Added 
 - 
              Improvements
              
- Added documentation relating to thread safety.
 - Locale functions made thread-safe.
 - Added stub functions to support free and aligned allocation in minimal and low-overhead heaps.
 - Added stream flush support across all example I/O implementations such that C++ applications using 
iostreamclasses link cleanly. - Removed undocumented 
__SEGGER_RTL_X_locale_name_buffer[]and added documentation for__SEGGER_RTL_set_locale_name_buffer(). 
 - 
              Corrections
              
- In some circumstances a misaligned store could occur with the C-coded 
memcpy(). Fixed. 
 - In some circumstances a misaligned store could occur with the C-coded 
 
Version 4.12.1
- 
              Corrections
              
- Corrected 
strcasestr(). 
 - Corrected 
 
Version 4.12.0
- 
              Improvements
              
- Faster C-coded 
strcpy(),memcpy(), andmemchr()using optional loop unrolling. 
 - Faster C-coded 
 - 
              Corrections
              
- Add 
<signal.h>to distribution. 
 - Add 
 
Version 4.10.0
- 
              New features
              
- Added real-time and minimal (alloc-only) dynamic storage managers.
 - Added 
__SEGGER_RTL_init_heap()and removed static heap size configuration. - Added 
aligned_alloc(). - Added 
uselocale(). - Added 
isascii(),isascii_l(). - Added 
wcstol(),wcstoll(),wcstoul(),wcstoull(),wcstof(),wcstod(),wcstold(). - Added 
mbsnrtowcs(),mbnsrtowcs_l(). - Added 
wcsnrtombs(),wcsnrtombs_l(). - Added 
strcoll(),wcscoll(). - Added 
strxfrm(),wcsxfrm(). 
 - 
              Improvements
              
- Faster C-coded 
memset()andmemcmp()for balanced and speed configurations. 
 - Faster C-coded 
 - 
              Corrections
              
- Fix incomplete I/O descriptor initialization in 
vsprintf(). 
 - Fix incomplete I/O descriptor initialization in 
 
Version 3.10.1
- 
              Improvements
              
- Better compatibility with assemblers that do not implement generic immediate handling (RISC-V).
 - Example implementation of low-level I/O return character count rather than 0 for success.
 - For internal emRun use, always call assembly-coded string functions if they are selected.
 
 - 
              Corrections
              
- Fix for incorrect register when Zbb architecture is selected (RISC-V).
 
 
Version 3.10.0
- 
              New features
              
- Added standard file system support.
 - Added support for RV64 architectures (RISC-V).
 - Added support for 128-bit integers (RISC-V).
 
 - 
              Improvements
              
- Faster C-based strlen(), strnlen(), strcmp(), strncmp(), strchr(), strnchr(), strrchr(), memchr().
 - Selection of float-only I/O does not force inclusion of double arithmetic.
 - Faster integer division algorithms for 64-bit types (RISC-V).
 - Faster double-floating division algorithms on 64-bit architectures (RISC-V).
 
 
Version 2.30.0
- 
              New features
              
- Added support for half-precision floating point.
 
 
Version 2.28.2
- 
              New features
              
- Added 
sincos(),sincosf(),sincosl(). - Added support for 
long doubleI/O of 128-bit floating values using '%Lf' and similar format specifiers (RISC-V). - Added 
__SEGGER_RTL_NO_BUILTINto poison certain compiler transformations that are invalid when compiling the runtime library at high optimization levels. 
 - Added 
 
Version 2.28.1
- 
              Corrections
              
- Align 
prinops.candwprinops.cselection of formatting features and avoid compilation error when floating output is excluded from the build. 
 - Align 
 
Version 2.28.0
- 
              New features
              
- Upgraded to emFloat 2.8.0.
 - Added implementation of 
__popcountsi2()and__popcountdi2(). - Added implementation of 
__paritysi2()and__paritydi2(). - Added balanced 
long longdivision algorithm for v4T and v7A (Arm). - Added size-optimized 
long longdivision algorithm for v4T and v7A (Arm). 
 - 
              Improvements
              
- Improved 64-bit multiplication speed for v6M/v8M (Arm).
 - Improved 64-bit division speed for v6M (Arm).
 - Improved 64-bit division speed for v4T and v5TE (Arm).
 - Improved 32-bit and 64-bit multiplication speed for cores that lack M extension (RISC-V).
 - Improved signed and unsigned 64-bit division speed for v8M.Baseline by utilizing integer divide instruction (Arm).
 - Improved integer division speed for cores that have M extension but lack a divider (RISC-V).
 - Improved 
long longtodoubleconversion for D extension (RISC-V). - Improved 
unsigned long longtodoubleconversion for D extension (RISC-V). - Improved 
__unordsf2()and__unorddf2()for F and D extensions (RISC-V). - Improved scaled-integer 
tanf()size and speed using Mller-Granlund division. - Improved generic floating divide using Mller-Granlund division.
 - Improved floating-point to integer conversions to use floating point instructions where possible for F and D extensions (RISC-V).
 - Improved floating-point to integer conversions to use fast and configurable integer normalization (RISC-V).
 - Sample configuration file no longer relies on builtins for 
fabs()andfabsf()(RISC-V). 
 
Version 2.26.1
- 
              Improvements
              
- Further simplified I/O implementation examples.
 
 - 
              Corrections
              
- Activated 
MLSinstruction for architectures v7 and later (Arm). - Corrected definition of 
strlen(x)macro in example configuration (RISC-V). 
 - Activated 
 
Version 2.26.0
- 
              New features
              
- Added 
<fenv.h>and corresponding floating-point environment functions. 
 - Added 
 - 
              Improvements
              
- Added detection and configuration for SIMD extension (RISC-V).
 - Added detection and configuration for bit manipulation extension (RISC-V).
 - Added detection and configuration for Andes Performance Extension (RISC-V).
 - All floating-point functions automatically adapt for balanced performance on typical RISC-V devices.
 - Faster floating-point arithmetic and conversions when SIMD extension present (RISC-V).
 - Faster floating-point arithmetic and conversions when bit manipulation extension present (RISC-V).
 - Faster floating-point arithmetic and conversions when Andes Performance extension present (RISC-V).
 - Faster floating-point arithmetic for base RISC-V ISA when multiplier is present (RV32E).
 - Faster 64-bit division for architectures lacking divide instructions (Arm).
 - Small revisions of floating-point functions leading to smaller and faster code (Arm).
 - Further optimized 
strlen(),strcmp(),strcpy(), andstrchr()when configured for more speed (Arm). - Further optimized 
strlen(),strcmp(),strcpy(), andstrchr()when configured for more speed (RISC-V). - Revision of I/O framework for easier customer configuration.
 
 - 
              Program corrections
              
- Corrected 
__aeabi_dcmpun()(Arm). 
 - Corrected 
 
Version 2.24.0
- 
              New features
              
- Added 
strtold(). 
 - Added 
 - 
              Improvements
              
- Faster double to integer conversion when FPU supports IEEE double.
 
 
Version 2.22.0
- 
              Improvements
              
- Optimized 
strlen(),strcmp(), andstrchr()when configured for more speed (Arm). - Optimized 
strlen(),strcmp(), andstrchr()when configured for more speed (RISC-V). 
 - Optimized 
 
Version 2.20.0
- 
              New features
              
- Supply full set of functions for emulated 128-bit 
longdoubleon RISC-V. - Use fast 
memcpy()and fastmemset()in balanced mode (Arm). - Use fast 
strcpy()and faststrcmp()in balanced mode (RISC-V). 
 - Supply full set of functions for emulated 128-bit 
 
Version 2.4.2
- 
              Program corrections
              
- Fix corruption of register 
r3for__aeabi_ldivmod()and__aeabi_uldivmod()on Thumb builds for v4T architecture. - Correct highly infrequent misrounding (by 1 ulp) of single-precision quotient on architectures that have no fast divide but do have fast multiply.
 
 - Fix corruption of register 
 
This document was first released with SEGGER Toolchain on 09. Oct 2020