Architectures Changelog

Notation

A line prefixed by [] describes a change that only applies on a specific configuration: [Core Engine Capability/Instruction Set/C Compiler]:

  • Core Engine Capability
    • Mono: Mono-Sandbox (default)
    • Tiny: Tiny-Sandbox
    • Multi: Multi-Sandbox
  • Instruction Set
    • ARM9: ARM ARM9
    • Cortex-A: ARM Cortex-A
    • Cortex-M: ARM Cortex-M
    • ESP32: Espressif ESP32
    • RX: Renesas RX
    • x86: Intel x86
  • C Compilation Toolchain

[8.1.0] - 2023-12-22

This Architecture version update introduces the following main features:

  • Updated Feature installation flow to support Code chunks. A Feature can now be installed to ROM without the need of the Code size in RAM.

  • Support for debugging ASLR Executables

  • Support for debugging MCU targets

  • Support for debugging Multi-Sandbox Executables

  • Updated the options to select the Core Engine capability. See Migrate Core Engine Capability Configuration.

    • Added the VEE Port option com.microej.runtime.capability
    • Removed the Multi Applications module from the platform configuration file
    • Value of the BON constant com.microej.architecture.capability is now mono instead of single when the Core Engine capability is Mono-Sandbox.
  • Support of THALES Sentinel License Manager

  • Added a default application for early-stage VEE Port integration without the need of a SDK license.

If you plan to migrate a VEE Port from Architecture 8.0.0 to Architecture 8.1.0, consider the Architecture 8.0.0 Migration chapter.

Core Engine

  • Added option com.microej.runtime.core.gc.markstack.levels.max to configure the maximum number of elements of the Garbage Collector’s mark stack.
  • In sni.h, clarified the behavior of SNI_createVM(), SNI_startVM(), and SNI_destroyVM() when restarting the Core Engine. See also the Core Engine implementation section.
  • Fixed missing default initialization of the options core.memory.javaheap.size and core.memory.immortal.size.
  • [Multi] - Added a check when LLKERNEL_IMPL_getFeatureHandle() returns 0. Corresponding error code is LLKERNEL_FEATURE_INIT_ERROR_NULL_HANDLE.
  • [Multi] - Removed Feature installation in RAM (legacy In-Place Installation mode). See Migrate Your LLKERNEL Implementation.
  • [Multi] - Updated Feature installation boot sequence: all Feature handles are now retrieved prior to initializing them.
  • [Multi] - Updated check of Kernel UID at the beginning of Kernel.install(java.io.InputStream), before allocating Feature sections.
  • [Multi] - Updated the specification for LLKERNEL_IMPL_allocateFeature() function to return the handle 0 if the Feature could not be allocated.
  • [Multi] - Updated the specification for LLKERNEL_IMPL_getAllocatedFeaturesCount() function to ensure that it returns a valid result at any time, even if it is only called by the Core Engine during startup.
  • [Multi] - Updated the specifications for LLKERNEL_IMPL_getFeatureAddressRAM() and LLKERNEL_IMPL_getFeatureAddressROM() functions to return NULL when an incorrect index is provided. This change is only for LLKERNEL TCK purposes, as the Core Engine only invokes these methods with valid indices.
  • [Multi] - Added an option to enable RAM Control at VEE Port build (disabled by default).

Foundation Libraries

Integration

  • Updated Architecture End User License Agreement to version SDK 3.1-B.
  • Removed warning messages related to missing KF options when running the SOAR or the Simulator in Mono-Sandbox.

Simulator

  • Added compatibility with IntelliJ IDEA IDE to debug applications.
  • Added message when waiting for a connection in debug mode.
  • Fixed debugger verbose mode.
  • Removed bootstrap thread from the debugger vision.
  • Fixed debugger suspend count on threads handling.
  • Fixed stop issue on static method entry breakpoint.

SOAR

  • Fixed trimming of leading or trailing spaces in immutable strings
  • [Multi] - Fixed integration of the bytecode verifier in Feature mode.
  • [Multi] - Improved the error message thrown when no Feature definition file is found and displayed the classpath to better guide developers in identifying potential causes.

Tools

  • Updated SOAR and VM Model Readers

    • Added support to retrieve the Core Engine memory regions (used by the VEE Debugger Proxy to generate a memory dump script (see Generate VEE memory dump script))
    • Added an API to relink the SOAR Model objects, i.e. change their associated addresses (used by the VEE Debugger Proxy to support ASLR Executables debug)
    • Added new APIs to load Kernel and Features SOAR Model objects (used by the VEE Debugger Proxy to support Multi-Sandbox Executable debug)
  • [ARMCC5] - Fixed SOAR Debug Infos Post Linker tool to throw a dedicated error when the SOAR object file does not contain the debug section.

  • [Multi] - Fixed missing first null entry in the symbol table generated by the Firmware Stripper.

[8.0.0] - 2023-06-27

Note

This Architecture requires SDK version 5.7.0 or higher (see SDK Version).

This major Architecture version update introduces the following main features:

  • Added compatibility with dynamic linkers enabling Address Space Layout Randomization (ASLR).
  • Added Feature build on device. For that, the SOAR has been deeply redesigned and split into multiple phases. The most noticeable change is about the SOAR Information File that is now composed of 3 files.
  • Added Feature portability. The same .fo file can now be installed:
    • On any Executable built from the same Kernel Application (microejapp.o). The VEE Port C code can be modified and relinked without requiring to rebuild the .fo file anymore.
    • On different Kernel Applications provided some conditions are met. Basically, a .fo built on Kernel 1 can be installed on Kernel 2 if the exposed Kernel APIs are left unchanged. See Feature Portability Control for more details.
  • Redesigned Feature installation flow. A Feature can now be installed in any byte-addressable memory mapped to the CPU’s address space, including ROM. For that, LLKERNEL Low Level APIs have been fully rewritten. See Feature installation for more details. Former Feature installation in RAM is preserved and is now called In-Place Installation. Former static Feature installed by the SDK (using the Firmware Linker tool) is removed in favor of Feature persistency at boot.

If you plan to migrate a VEE Port from Architecture 7.x to Architecture 8.x, consider the Architecture 7.x Migration chapter.

Core Engine

  • Renamed Core Engine sections to fully respect the ELF standard naming convention.
  • Removed check when passing a non-immortal array in SNI if VEE Port option core.sni.nonimmortal.access was set to false.
  • Removed LLBSP_isInReadOnlyMemory in Core Engine Abstraction Layer (LLBSP.h file).
  • Clarified LLMJVM_IMPL_getCurrentTime API contract in Core Engine Abstraction Layer (LLMJVM_impl.h file).
  • Updated Trace C library from version 1.0.0 to 2.0.0. See Migrate Trace C Library Usage.
    • Renamed header file trace.h into LLTRACE.h to avoid filename conflicts.
    • Renamed C functions TRACE_xxx into LLTRACE_xxx.
  • Fixed potential crash when Core Engine is restarted after a call to System.exit(int).
  • [Multi] - Added option com.microej.runtime.kernel.dynamicfeatures.max to configure the maximum number of Features that can be dynamically installed.
  • [Multi] - Added option com.microej.runtime.kf.waitstop.delay to configure the maximum time allowed for a Feature to stop.
  • [Multi] - Fixed missing release of allocated Feature buffers after Core Engine exits (In-Place Installation mode).

Foundation Libraries

  • Updated KF to version 1.7:
  • Updated KF dynamic loader to support the new Feature installation flow.
  • Removed Foundation Libraries API Jars and Javadoc.
  • Removed Unknown product - Unknown version comment in auto-generated Low Level API header files.
  • Removed the Serial Communication modules group, including the Foundation Libraries ECOM and ECOM-COMM. See Migrate ECOM-COMM Module.
  • Removed the deprecated Device Information module group, including the Foundation Library Device. See Migrate Device Module.
  • Fixed Option(checkbox): Embed UTF-8 encoding defaults to true when building a Standalone Application using MMM.
  • Fixed KF to call the registered Thread.UncaughtExceptionHandler when an exception is thrown in FeatureEntryPoint.stop().
  • Fixed unexpected java.lang.NullPointerException thrown by the skip method of an InputStream returned by Class.getResourceAsStream(). This error only occurs with a resource loaded by the External Resource Loader.
  • Fixed the behavior of available, read, skip, mark, reset and close methods of an InputStream returned by Class.getResourceAsStream() and previously closed.
  • Fixed the LLEXT_RES_read() Low Level API specification (the buffer passed cannot be null).
  • [Mono] Fixed an unexpected FeatureFinalizer exception or infinite loop when a Standalone Application touches a KF API in some cases.
  • [Tiny] Fixed an unexpected SOAR error when a Standalone Application touches a KF API.
  • [Multi] Fixed exception thrown when calling Kernel.removeConverter().
  • [Multi] Fixed an unexpected NullPointerException thrown by ej.kf.Kernel.<clinit> method in some cases.
  • [Multi] Fixed KF watchdogs not triggered correctly when several expire at the same time.

Integration

  • Added support for resolving Front Panel in Workspace before the included Front Panel.
  • Added Memory Map Scripts for Eclasspath Math, Formatter and DateFormat.
  • Updated default value of VEE Port configuration option vendorURL.
  • Updated Memory Map Scripts for MicroVG library.
  • Updated Memory Map Scripts for Eclasspath Executor library.
  • Updated output Map file location to soar/[application_main_class].map (formerly named SOAR.map).
  • Removed unused SOAR.o file. It is available at bsp/microejapp.o.
  • Renamed MicroEJ launch Build dynamic Feature to Build Feature.
  • [Multi] Fixed the SOAR output files from being deleted when the Clean intermediate files option is enabled.

Simulator

  • Added Mock debug mode.
  • Added missing default values for the properties s3.slow, console.logs.period, and s3.hil.timeout when launching the Simulator from the command line.
  • Added a check for unsupported access to the Class instance of a primitive type (e.g. byte.class).
  • Added HIL Engine debug logs when verbose option is enabled.
  • Added log of the Mock classpath when verbose option is enabled.
  • Added log of Mock resolution errors (class or method not found).
  • Added support for mark/reset on an InputStream returned by Class.getResourceAsStream().
  • Fixed “Internal limits” error in HIL engine when too many array arguments are used at the same time by one or several native methods.
  • Fixed slow reading with an array of bytes of the input stream returned by Class.getResourceAsStream(String).
  • Fixed configuration of the Java heap size using Option(text): Java heap size (in bytes). The legacy core.memory.javaheapsum.size option is not more supported.
  • Fixed Option(text): Immortal heap size (in bytes) default value when running a Standalone Application using MMM.
  • Fixed stop of the HIL Engine if Simulator was terminated before the connection is established.
  • Fixed load of the Mock classes in the classpath order (left-to-right).
  • Fixed the missing error check when loading an immutable file referencing an external object id (the importObject directive is required).
  • Fixed initialization of transparent images in the Front Panel when the initial color is not fully opaque. (introduced in version 7.11.0)
  • [Multi] Fixed the computation of object sizes. The 4-byte KF header was missing.

SOAR

Tools

  • Updated the serial PC connector to JSSC 2.9.4, including support for macOS aarch64 (M1 chip).
  • Removed Test Suite Engine. If needed, the Test Suite Engine is available in the Build Kit.
  • Removed Immutables NLS library. Use Binary NLS add-on library instead.
  • Fixed an incorrect generation of a debug file beside the memory file when launching the Heap Dumper.
  • [Multi] Added Heap Dumper support for dynamically installed Features.

[maintenance/7.20.3] - 2024-02-28

Foundation Libraries

[7.20.1] - 2023-04-10

Foundation Libraries

[7.20.0] - 2023-04-04

Known Issues

Core Engine

  • Added the capability to customize implementation of the function that performs an atomic exchange operation.
  • [ESP32] - Remove default implementation of the function that performs an atomic exchange operation. The Core Engine abstraction layer implementation has to implement the C function int32_t LLBSP_IMPL_atomic_exchange(int32_t* ptr, int32_t value).

Foundation Libraries

  • Fixed uninitialized pointer access in the External Resources Loader, which can cause a system crash when reading data from a resource.

[7.19.0] - 2023-02-16

Known Issues

Core Engine

  • Added the capability to customize implementation of the functions that convert strings to float/double values and vice-versa.
  • [Cortex-A/Clang] - Fixed wrong float/double arguments passed to the SNI natives.

Tools

  • Removed dependency on GNU ar program to create microejruntime.a archive file.

[7.18.1] - 2022-10-26

Integration

  • Fixed License Manager issue with JDK 8u351 or higher ([M65] - License check failed [tampered (3)].).

[7.18.0] - 2022-09-14

Integration

  • Added support for Windows 11.
  • Added License Manager support for macOS aarch64 (M1 chip).
  • Removed warning when launching Applications or Tools with JDK 11 (Warning: Nashorn engine is planned to be removed from a future JDK release).

SOAR

  • Added grouping of all immutables objects in a single ELF section.

[7.17.0] - 2022-06-13

Core Engine

  • Fixed potential premature evaluation timeout when Core Engine is not started at the same time as the device.
  • Fixed potential crash during the call of LLMJVM_dump when printing information about the Garbage Collector.
  • Added new functions to Low Level API LLMJVM_MONITOR_impl.h (see Advanced Event Tracing):
    • void LLMJVM_MONITOR_IMPL_on_invoke_method(void* method): called by the Core Engine when an method is invoked.
    • void LLMJVM_MONITOR_IMPL_on_return_method(void* method): called by the Core Engine when a method returns.
  • [Cortex-M] - Added support for MCU configuration with unaligned access traps enabled (UNALIGN_TRP bit set in CCR register).

Foundation Libraries

Integration

  • Fixed some Architecture tools compatibility issues with SDKs running on JDK 11.
  • Fixed missing default value for ShieldedPlug server port when running it with MMM (10082).
  • Updated Memory Map Scripts for ej.microvg library.
  • Updated Architecture End User License Agreement to version SDK 3.1-A.

Simulator

  • Added class file major version check (<=51). Classes must be compiled for Java 7 or lower. Set the options property S3.DisableClassFileVersionCheck to false to disable this verification.
  • Added native method signature in the stack trace of the UnsatisfiedLinkError thrown when a native method is missing.
  • Fixed HIL engine method NativeInterface.getResourceContent() that generates a runtime error in the Simulator.
  • Fixed error “Internal limits reached … S3 internal heap is full” when repeatedly loading a resource that is available in the classpath but not referenced in a .resources.list file.
  • Fixed OutOfMemoryError when loading a large resource with Class.getResourceAsStream().
  • Fixed A[].class.isAssignableFrom(B[].class) returning false instead of true when B is a subclass of A.
  • Fixed potential “Internal limits reached” error when an OutOfMemoryError is thrown.
  • Fixed error “Cannot pin objects anymore” when passing repeatedly immutable objects to a native method.
  • Fixed properties not passed correctly to the mocks when the Virtual Device is executed from a path that contains spaces.
  • [Multi] - Fixed an unexpected error when kernel.kf file is missing and KF library is used: “Please specify a ‘kernel.kf’ file to enable Kernel & Features semantics.”
  • [Multi] - Fixed type double[] not recognized in kernel.api file.

SOAR

  • Fixed internal error when using a BON constant in an if statement at the end of a try block.
  • Fixed internal error when a try block ends with an assert expression while assertions are disabled.
  • [Multi] - Raise a warning instead of an error when duplicated .kf files are detected in the Kernel classpath. Usual classpath resolution order is used to load the file (see MicroEJ Classpath).
  • [Multi] - Fixed SOAR error when building a Feature that uses an array of basetypes that is not explicitly declared in the kernel.api file of the Kernel.
  • [Multi] - Optimized “Build Dynamic Feature” scripts speed by removing unnecessary steps.

[7.16.3] - 2022-04-06

Core Engine

  • [Cortex-M/IAR] Fix unaligned stack pointer when calling SNI native functions in ARM IAR architectures.

[7.16.2] - 2021-11-10

Core Engine

  • [Cortex-M/GCC/ARMCC5] Fix unaligned stack pointer when calling SNI native functions in ARM GCC and ARMCC architectures with non-ASM Core Engines.

[7.16.1] - 2021-07-16

Core Engine

  • [GCC] Fixed wrong inlined extern symbol access (affects only some GCC architectures until version 6.x). This produces an unexpected java.lang.OutOfMemoryError: Stacks space exception at boot time.

[7.16.0] - 2021-06-24

Known Issues

  • [Multi] - SOAR may fail to build a Feature with the following message:

    1 : KERNEL/FEATURE ERROR
        [M25] - Type double[] is expected to be owned by the Kernel but is not embedded.
    

    Workaround is to explicitly declare each array of basetypes in your kernel.api file:

    <type name="int[]"/>
    <type name="long[]"/>
    <type name="short[]"/>
    <type name="double[]"/>
    <type name="float[]"/>
    <type name="byte[]"/>
    <type name="char[]"/>
    <type name="boolean[]"/>
    

Notes

The Device module provided by the Architecture is deprecated and will be removed in a future version. It has been moved to the Device Pack. Please update your VEE Ports.

Core Engine

  • Added a dedicated error code LLMJVM_E_INITIALIZE_ERROR (-23) when LLMJVM_IMPL_initialize(), LLMJVM_IMPL_vmTaskStarted(), or LLMJVM_IMPL_shutdown() fails. Previously the generic error code LLMJVM_E_MAIN_THREAD_ALLOC (-5) was returned.
  • Added automatic heap consumption fing when option com.microej.runtime.debug.heap.monitoring.enabled is set to true
  • Fixed some parts of LLMJVM_checkIntegrity() code were embedded even if not called
  • [Multi] - Fixed potential crash during the call of LLMJVM_checkIntegrity() when analyzing a corrupted Java stack (make this function robust to object references with an invalid memory address)

Foundation Libraries

Integration

  • Added a new task in ELF Utils library allowing to update the content of an ELF section:

    • Declaration:

      <taskdef classpath="${platform.dir}/tools/elfutils.jar" classname="com.is2t.elf.utils.AddSectionTask" name="addSection" />
      
    • Usage:

      <addSection file="${executable.file}" sectionFile="${section.file}" sectionName="${section.name}" sectionAlignment="${section.alignment}" outputDir="${output.dir}" outputName="${output.name}" />
      
  • Updated Architecture End User License Agreement to version SDK 3.0-C

  • Updated copyright notice of Low Level APIs header files to latest SDK default license

  • Updated Architecture module with required files and configurations for correct publication in a module repository (README.md, LICENSE.txt, and CHANGELOG.md)

Simulator

  • Added an option (com.microej.simulator.hil.frame.size) to configure the HIL engine max frame size
  • Fixed load of an immutable byte field (sign extension)
  • Fixed java.lang.String constructors String(byte[] bytes, ...) when passing characters in the range [0x80,0xFF] using default ISO-8859-1 encoding
  • Fixed potential crash in debug mode when a breakpoint is set on a field access (introduced in version 7.13.0)
  • Fixed wrong garbage collection of an object only referenced by an immortal object

SOAR

  • Fixed the following compilation issues in if statement with BON constant:
    • too many code may be removed when the block contains a while loop
    • potential Stacks merging coherence error may be thrown when the block contains a nested try-catch statement
    • potential Stacks merging coherence error when declaring a ternary expression with Constants.getBoolean() in condition expression
  • Fixed assert statement removal when it is located at the end of a then block: the else block may be executed instead of jumping over
  • Removed names of arrays of basetype unless soar.generate.classnames option is set to true
  • [Multi] - Fixed potential link exception when a Feature use one of the ej_bon_ByteArray methods (e.g. ej.kf.InvalidFormatException: code=51:ON_ej_bon_ByteArray_method_readUnsignedByte_AB_I_I)
  • [Multi] - Fixed SOAR error (Invalid SNI method) when one of the ej.bon.Constants.getXXX() methods is declared in a kernel.api file. This issue was preventing from using BON Constants in Feature code.

Tools

  • Updated Code Coverage Analyzer report generation:
    • Automatically configure src/main/java source directory beside a /bin directory if available
    • Added an option (cc.src.folders) to specify the source directory (require SDK 5.4.1 or higher)
    • Removed the analysis of generated code for synchronized statements
    • Fixed crash when loading source code with annotations
  • Fixed Memory Map scripts: ClassNames group may contain duplicate sections with Types group
  • Fixed load of an ELF executable when a section overlaps a segment (updated ELF Utils, Kernel Packager and Firmware Linker)
  • Fixed Firmware Linker to generate output executable file at the same location than the input executable file

[7.15.1] - 2021-02-19

SOAR

  • [Multi] - Fixed potential VM crash when declaring a Proxy class which is abstract.

[7.15.0] - 2020-12-17

Core Engine

  • Added support for applying Feature relocations

Foundation Libraries

  • Updated KF implementation to apply Feature relocations using the Core Engine. The former Java implementation is deprecated but can still be enabled using the option com.microej.runtime.kf.link.relocations.java.enabled.

Integration

  • Updated the Architecture naming convention: the usage level is prod instead of dev .
  • Fixed generation of temporary properties file with a .properties.list extension instead of deprecated .system.properties extension.

SOAR

  • Fixed crash when declaring a clinit dependency rule on a class that is loaded but not embedded.

Tools

  • Fixed Memory Map Script All graph creation to prevent slow opening of large .map file in Memory Map Analyzer.

[7.14.1] - 2020-11-30

Core Engine

  • [Multi/x86/QNX7] - Fixed missing multi-sandbox version

Tools

  • Fixed categories for class names and SNI library in Memory Map Scripts

[7.14.0] - 2020-09-25

Notes

The following set of Architecture properties are automatically provided as BON constants:

  • com.microej.architecture.capability=[tiny|single|multi]
  • com.microej.architecture.name=[architecture_uid]
  • com.microej.architecture.level=[eval|prod]
  • com.microej.architecture.toolchain=[toolchain_uid]
  • com.microej.architecture.version=7.14.0

Note

Starting from Architecture 8.1.0, com.microej.architecture.capability constant is set to mono instead of single when the Core Engine capability is Mono-Sandbox.

The following set of VEE Port properties (customer defined) are automatically provided as BON constants:

  • com.microej.platform.hardwarePartNumber
  • com.microej.platform.name
  • com.microej.platform.provider
  • com.microej.platform.version
  • com.microej.platform.buildLabel

Foundation Libraries

Integration

  • Added all options starting with com.microej. prefix as BON constants
  • Added all properties defined in architecture.properties as options prefixed by com.microej.architecture.
  • Added all properties defined in release.properties as options prefixed by com.microej.platform.
  • Added all properties defined in script/mjvm.properties as options prefixed by com.microej.architecture.
  • Added an option (com.microej.library.edc.supplementarycharacter.enabled) to enable support for supplementary characters (enabled by default)
  • Updated Memory Map Scripts to extract Java static fields in a dedicated group named Statics
  • Updated Memory Map Scripts to extract Java types in a dedicated group named Types
  • Fixed generated Feature filename (unexpanded ${feature.output.basename} variable, introduced in version 7.13.0)
  • Fixed definition of missing default values for memory options (same values than launcher default ones)
  • [Tiny,Multi] - Added display of the Core Engine capability when launching SOAR

SOAR

  • [Multi] - Added a new attribute named api in Kernel soar.xml file indicating which types, methods and static fields are exposed as Kernel APIs
  • [Multi] - Fixed potential link error when calling Object.clone() method on an array in Feature mode

Tools

  • Updated the serial PC connector to JSSC 2.9.2 (COM port could not be open on Windows 10 using a JRE 8u261 or higher)

[7.13.3] - 2020-09-18

Core Engine

  • [QNX70] - Embed method names and line numbers information in the application
  • [Cortex-A/QNX70] - Fixed wrong float/double arguments passed to the SNI natives (introduced in version 7.12.0)

Simulator

  • Fixed unnecessary stacktrace dump on Long.parseLong(…) error
  • Fixed UTF-8 encoded Strings not correctly printed

Tools

  • Updated Memory Map Scripts for ej.library.runtime.basictool library

[7.13.2] - 2020-08-14

Core Engine

  • [ARM9/QNX65] - Fixed custom convention call
  • [x86/QNX70] - Fixed SIGFPE raised when overflow occurs on division
  • [x86/QNX70] - Fixed issue with NaN conversion to int or long

Tools

  • Fixed Feature build script for SDK 5.x (introduced in version 7.13.0)
  • Updated Memory Map Scripts for MicroUI 3 and Service libraries

[7.13.1] - 2020-07-20

Core Engine

[7.13.0] - 2020-07-03

Core Engine

  • Added SNI-1.4 support, with the following new LLSNI.h Low Level APIs:
    • Added function SNI_registerResource()
    • Added function SNI_unregisterResource()
    • Added function SNI_registerScopedResource()
    • Added function SNI_unregisterScopedResource()
    • Added function SNI_getScopedResource()
    • Added function SNI_retrieveArrayElements()
    • Added function SNI_flushArrayElements()
    • Added function SNI_isResumePending()
    • Added function SNI_clearCurrentJavaThreadPendingResumeFlag()
    • Added define SNI_VERSION
    • Added define SNI_IGNORED_RETURNED_VALUE
    • Added define SNI_ILLEGAL_ARGUMENT
    • Updated the documentation of some functions to clarify the behavior
  • Added a message to IllegalArgumentException thrown in an SNI call when passing a non-immortal array in SNI (only in case the VEE Port is configured to disallow the use of non-immortal arrays in SNI native calls)
  • Added function LLMJVM_CheckIntegrity() to LLMJVM.h Low Level API to perform heap and internal structures integrity check
  • Updated KF implementation to use SNI-1.4 to close native resources when the Feature is stopped (ej.lang.ResourceManager is now deprecated)
  • Updated LLMJVM_dump() output with the following new information related to SNI-1.4 native resource management:
    • Last native method called (per thread)
    • Current native method being invoked (per thread)
    • Last native resource close hook called (per thread)
    • Current native resource close hook being invoked (per thread)
    • Pending Native Exception (per thread)
    • Pending SNI Scoped Resource to close (per thread)
    • Current Garbage Collector state: (running or not, last scanned object address, last scanned object class)
    • LLMJVM schedule request (global and per thread)
  • Updated non-immortal array access from SNI default behavior (now allowed by default)
  • Fixed thread state displayed by LLMJVM_dump for threads in SLEEP state
  • Fixed sni.h header file function prototypes using the SNI_callback typedef
  • Fixed crash when an OutOfMemoryError is thrown while creating a native exception in SNI
  • [Multi] - Fixed runtime exceptions that can be implicitly thrown (such as NullPointerException) which were not automatically exposed by the Kernel
  • [Multi] - Fixed passing Kernel array parameters through a shared interface method call. These parameters were passed by copy instead of by reference as specified by KF specification
  • [Multi] - Fixed execution context when jumping in a catch block of a ej.kf.Proxy method (the catch block was executed in the Kernel context instead of the Feature context)
  • [ARMCC5] - Fixed link error Undefined symbol _java_Ljava_lang_OutOfMemoryError_field_OOMEMethodAddr_I with ARM Compiler 5 linker (introduced in version 7.12.0)

Foundation Libraries

  • Updated SNI to version 1.4
  • Updated internal library Resource-Manager-1.0 as deprecated. Use SNI-1.4 native resources instead
  • Updated Thread.getId() method implementation to return the same value than SNI_getCurrentJavaThreadID() function
  • Optimized SNI.toCString() method by removing a useless temporary buffer copy
  • Fixed EDC implementation of String(byte[],int,int) constructor which could allocate a too large temporary buffer
  • Fixed EDC implementation of Thread.interrupt() method to throw a java.lang.SecurityException when the interrupted thread cannot be modified by the the current thread
  • Fixed EDC implementation to remove remaining references to java.util.SecurityManager class when it is disabled
  • Fixed EDC implementation of Thread.interrupt() method that was declared final
  • Fixed EDC API of Thread.interrupt() to clarify the behavior of the method
  • Fixed EDC API of java.util.Calendar method to specify that non-lenient mode is not supported
  • Fixed EDC API of java.io.FilterInputStream.in field to be marked @Nullable

Integration

  • Updated Architecture End User License Agreement to version SDK 3.0-B

Simulator

  • Added SNI-1.4 support, with the following new HIL engine APIs:
    • Added methods NativeInterface.suspendStart() and NativeInterface.suspendStop() to notify the simulator that a native is suspended so that it can schedule a thread with a lower priority
  • Added KF support to dynamically install Features (.fs3 files)
  • Added the capability to specify the Kernel UID from an option (see options in Simulator > Kernel > Kernel UID)
  • Added object size in generated .heap dump files
  • Optimized file accesses from the Application
  • Fixed crash in debug mode when paused on a breakpoint in SDK and hovering a Java variable with the mouse
  • Fixed potential crash in debug mode when putting a breakpoint in the SDK on a line of code declared in an inner class
  • Fixed potential crash in debug mode (java.lang.NullPointerException) when a breakpoint set on a field access is hit
  • Fixed potential crash in debug mode (ArrayIndexOutOfBoundsException)
  • Added support for JDWP commands DisableCollection / EnableCollection in the debugger
  • Fixed invalid heap dump generation in debug mode.
  • Fixed crash when a Mockup implements com.is2t.hil.StartListener and this implementation throws an uncaught exception in the clinit
  • Fixed verbose of missing resource only when a resource is available in the classpath but not declared in a .resources.list file
  • Fixed heap consumption simulation for objects instances of classes declaring fields of type float or double
  • Fixed Device UID not displayed in the Front Panel window title (introduced in version 7.11.0)
  • Fixed loading of a resource from a JAR when the path starts with /
  • Fixed potential deadlock on Front Panel startup in some cases
  • Fixed Thread.getState() returning TERMINATED whereas the thread is running
  • Fixed Simulator which may not stop properly when closing the Front Panel window
  • Fixed Front Panel which stops sending widget events when dragging out of a widget
  • [Multi] - Fixed monitor that may not be released when an exception occurs in a synchronized block (introduced in version 7.10.0)
  • [Multi] - Fixed invalid heap dump generation that causes heap analyzer crash
  • [Multi] - Fixed potential crash (java.lang.NullPointerException) in debug mode when debugging an Application (introduced in version 7.10.0)
  • [Multi] - Fixed error when using KF library without defining a kernel.kf file in the Kernel (introduced in version 7.10.0)

SOAR

  • Added an option (soar.bytecode.verifier) to enable or disable the bytecode verifier (disabled by default)
  • Removed size related limits in Architecture Evaluation version

Tools

  • Added SNI-1.4 support to HIL engine
  • Updated Heap Dumper to verbose information about the memory section when an overlap is detected in the HEX file
  • Updated Memory Map Scripts (Security, DTLS, Device)
  • Fixed License Manager (Evaluation) random crash on Windows 10 when a VEE Port is built using Build Module button
  • Fixed License Manager (Evaluation) wrong UID computation after reboot when Windows 10 Hyper-V feature is enabled
  • Fixed HIL engine to exit as soon as the Simulator is disconnected (avoid remaining detached processes)
  • Fixed ELF to Map generating symbol addresses different from the ELF symbol addresses (introduced in version 7.11.0)
  • Fixed Heap Dumper crash when a wrong object header is encountered
  • Fixed Heap Dumper failure when a memory dump is larger than the heap section
  • Fixed Heap Dumper crash when loading an Intel HEX file that contains lines of type 02

[7.12.0] - 2019-10-16

Core Engine

  • Updated implementation of internal OutOfMemoryError thrown with the maximum number of frames that can be dumped
  • Updated LLMJVM_dump() output with the following new information:
    • Maximum number of alive threads
    • Total number of created threads
    • Maximum number of stack blocks used
    • Current number of stack blocks used
    • Objects referenced by each stack frame: address, type, length (in case of arrays), string content (in case of String objects)
    • [Multi] - Kernel stale references with the name of the Feature stopped

Foundation Libraries

Simulator

  • Updated implementation of internal OutOfMemoryError thrown with more than one frames dumped per thread
    • By default the 20 top frames per thread are dumped. This can be modified using S3.OutOfMemoryErrorNbFrames system property
  • Fixed wrong parsing of an array of long when an element is declared with only 2 digits (e.g. 25 was parsed as 2)
  • Fixed error parsing of an array of byte when an element is declared with the unsigned hexadecimal notation (e.g. 0xFF) (introduced in version 7.10.0)
  • Fixed crash when ResourceBuffer.readString() is called on a String greater than 63 characters (introduced in version 7.10.0)
  • Fixed code coverage .cc generation of classpath directories
  • Fixed crash during a GC when computing the references map of a complex method (an error message is dumped with the involved method name and suggest to increase the internal stack using S3.JavaMemory.ThreadStackSize system property)
  • [Multi] - Added validity check of Shared Interface declaration files (.si) according to KF specification
  • [Multi] - Fixed processing of Resource Buffers declared in Feature classpath

SOAR

  • Added a new option core.memory.oome.nb.frames to configure the maximum number of stack frames that can be dumped when an internal OutOfMemoryError is thrown by Core Engine

Tools

  • Updated Heap Dumper to verbose detected object references that are outside the heap
  • Updated Heap Dumper to throw a dedicated error when an object reference does not target the beginning of an object (most likely a corrupted heap)
  • Updated Heap Dumper to dump .heap.error partial file when a crash occurred during heap processing
  • Fixed Heap Dumper crash when processing an object owned by a Feature which type is also owned by the Feature (was working before only when the type is owned by the Kernel)
  • Fixed Firmware Linker potential negative offset generation when some sections do not appear in the same order in the ELF file than in their associated LOAD segment
  • Fixed Code Coverage Analyzer potential generated empty report (wrong load of classfiles from JAR files)

[7.11.0] - 2019-06-24

Important Notes

  • Java assertions execution is now disabled by default. If you experience any runtime trouble when migrating from a previous Architecture, please enable Java assertions execution both on Simulator and on Device (maybe the application code requires Java assertions to be executed).
  • Calls to Security Manager are now disabled by default. If you are using the Security Manager, it must be explicitly enabled using the option described below (likely the case when building a Multi-Sandbox Firmware and its associated Virtual Device).
  • Front Panel framework is now provided by the Architecture instead of the UI Pack. This allow to build a VEE Port with a Front Panel (splash screen, basic I/O, …), even if it does not provide a MicroUI port. Moreover, the Front Panel framework API has been redesigned and is now distributed using the ej.tool.frontpanel.framework module instead of the legacy Eclipse classpath variable.

Known Issues

  • SOAR Internal SOAR error or Stacks merging coherence error thrown when an if statement (being removed) is declared at the end of a try block:

    try {
       ...
       if (Constants.getBoolean(XXX)) { // constant resolved to false
          ... // code being removed
       }
    } catch (Exception e) {
            ...
    }
    

Core Engine

  • Added EDC-1.3 support for daemon threads
  • Added BON support for ej.bon.Util.newArray(T[],int)
  • [Multi/ARMCC5] - Fixed unused undefined symbol that prevent Keil MDK-ARM to link properly

Foundation Libraries

Integration

  • Added new options for Java assertions execution in category Runtime (core.assertions.sim.enabled and core.assertions.emb.enabled). By default, Java assertions execution is disabled both on Simulator and on Device.
  • Updated options categories (options property names left unchanged)
    • Added a new category named Runtime
    • Renamed Target to Device
    • Moved Embed All type names option from Core Engine to Runtime
    • Moved Core Engine under Device
    • Removed category Target > Debug and moved Trace options to Runtime
    • Removed category Debug and moved all sub categories under Simulator
    • Renamed category JDWP to Debug
  • Added an option (com.microej.library.edc.securitymanager.enabled) to enable Security Manager runtime checks (disabled by default)

Simulator

  • Added a cache to speed-up classfile loading in JARs
  • Added EDC-1.3 support for daemon threads
  • Added BON-1.4 support for compile-time constants (load of .constants.list resources)
  • Added BON-1.4 support for ej.bon.Util.newArray()
  • Added Front Panel framework
  • Updated error message when reaching Simulator limits
  • Removed the Bootstrapping a Smart Software Simulator message when verbose mode in enabled
  • Fixed Object.clone() on an immutable object to return a new (mutable) object instead of an immutable one
  • Fixed Object.clone() crash when an OutOfMemory occurs
  • Fixed potential crash when calling an abstract method (some interfaces of the hierarchy were not taken into account - introduced in version 7.10.0)
  • Fixed OutOfMemory errors even if the heap is not full (resources loaded from Class.getResourceAsStream() and ResourceBuffer creation were taken into account in simulated heap memory - introduced in version 7.10.0)
  • Fixed potential crash when a GC occurs while a ResourceBuffer is opened (introduced in version 7.10.0)
  • Fixed potential debugger hangs when an exception was thrown but not caught in the same method
  • [Multi] - Fixed wrong class loading in some cases
  • [Multi] - Fixed wrong immutable loading in some cases

SOAR

  • Added BON-1.4 support for compile-time constants (load of .constants.list resources)
  • Added bytecode removal for Java assertions (when option is disabled)
  • Added bytecode removal for if(ej.bon.Constants.getBoolean()) pattern
    • then or else block is removed depending on the boolean condition
    • WARNING: Current limitation: the ``if`` statement cannot wrap or be nested in a ``try-catch-finally`` statement
  • Added an option for grouping all the methods by type in a single ELF section
    • com.microej.soar.groupMethodsByType.enabled (false by default)
    • WARNING: this option avoids to reach the maximum number of ELF sections (65536) when building a large application, but affects the application code size (especially inline methods are embedded even if they are not used)
  • Added an error message when microejapp.o cannot be generated because the maximum number of ELF sections (65536) is reached

Tools

  • Updated License Manager (Production) to debug dongle recognition issues from command line (see Check Activation with the Command Line Tool).
  • Updated License Manager (Production) to support dongle recognition on macOS 10.14 (Mojave)
  • Fixed ELF To Map to produce correct sizes from an executable generated by IAR Embedded Workbench for ARM
  • Fixed Firmware Linker .ARM.exidx section generation (missing section link content)
  • Updated deployment files policy for VEE Ports in Workspace, in order to be more flexible depending on the C project layout. This also allows to deploy to the same C project different Applications built with different VEE Ports
    • VEE Port configuration: in bsp/bsp.properties, a new option output.dir indicates where the files are deployed by default
      • Application (microejapp.o) and Runtime library (microejruntime.a) are deployed to ${output.dir}/lib. Architecture header files (*.h) are deployed to ${output.dir}/inc/
      • When this option is not set, the legacy behavior is left unchanged (project.file option in collaboration with augmentCProject scripts)
    • Launch configuration: Device > Deploy options allow to override the default VEE Port configuration in order to deploy each file into a separate folder.
  • Fixed wrong ELF file generation when a section included in a LOAD segment was generated before one of the sections included in a LOAD segment declared before the first one (integrated in ELF Utils and Firmware Linker)
  • Fixed wrong ELF file generation when a section included in a LOAD segment had an address which was outside its LOAD segment virtual address space (integrated in ELF Utils and Firmware Linker)

[7.10.1] - 2019-04-03

Simulator

  • Fixed Object.getClass() may return a Class instance owned by a Feature for type owned by the Kernel

[7.10.0] - 2019-03-29

Core Engine

  • Added internal memories checks at startup: heaps and statics memories are not allowed to overlap with LLBSP_IMPL_isInReadOnlyMemory()
  • [Multi] - Updated Feature Kill implementation to prepare future RAM Control (fully managed by Core Engine)
  • [Multi] - Updated implementation of ej.kf.Kernel: all APIs taking a Feature argument now will throw a java.lang.IllegalStateException when the Feature is not started

Foundation Libraries

  • Updated KF library in sync with Core Engine Kill related fixes and Simulator with Kernel & Features semantic
  • Updated BON library on Simulator (now uses the same implementation than the one used by the Core Engine)

Integration

  • Added generation of architecture.properties file when building a VEE Port. (Used by SDK 5.x when manipulating VEE Ports & Virtual Devices)

Simulator

  • Added Embed all types names option for Simulation
  • Added memory size simulation for Java Heap and Immortal Heap (Enabling Use target characteristics option is no more required)
  • Added Kernel & Features semantic, as defined in the KF-1.4 specification
    • Fully implemented:
      • Ownership for types, object and thread execution context
      • Kernel mode
      • Context Local Static Field References
    • Partially implemented:
      • Kernel API (Type grained only)
      • Shared Interfaces are binded using direct reference links (no Proxy execution)
      • Feature.stop() does not perform the safe kill. The application cannot be stopped unless it has correctly removed all its shared references.
    • Not implemented:

Tools

  • Updated Memory Map Scripts (Bluetooth, MWT, NLS, Rcommand and AllJoyn libraries)
  • Fixed Kernel Packager internal limits error when the ELF executable does not contains a .debug.soar section
  • Fixed wrong ELF file generation when segment file size is different than the mem size (integrated in ELF Utils and Firmware Linker)
  • Fixed Simulator COM port mapping default value (set to disabled instead of UART<->UART in order to avoid an error when launch configuration is just created)
  • Fix ELF To Map: the total sections size were not equal to the segments size

[7.9.1] - 2019-01-08

Tools

  • Fixed ELF objcopy generation when ELF executable file contains 0 size segments
  • Fixed Stack Trace Reader error when ELF executable file contains relocation sections

[7.9.0] - 2018-09-20

Core Engine

  • Fixed OutOfMemoryError thrown when allocating an object of the size of free memory in immortals heap

SOAR

  • Optimized SOAR processing (up to 50% faster on applications with tens of classpath entries)

[7.8.0] - 2018-08-01

Tools

[7.7.0] - 2018-07-19

Core Engine

  • Added a permanent hook LLMJVM_on_Runtime_gc_done called after an explicit java.lang.Runtime.gc()
  • Updated internal heap header for memory dump

SOAR

  • Added check for the maximum number of allowed concrete types (avoids a Core Engine link error)

Tools

  • Added Heap Dumper tool

[7.6.0] - 2018-06-29

Foundation Libraries

  • [Multi] - Updated BON library: a Timer owned by the Kernel can execute a TimerTask owned by a Feature

[7.5.0] - 2018-06-15

Internal Release - COTS Architecture left unchanged.

[7.4.0] - 2018-06-13

Core Engine

  • Removed partial support of ej.bon.Util.throwExceptionInThread() (deprecated)
  • [Multi/Linux] - Updated default configuration to always embed method names
  • [Multi/Cortex-M] - Optimized KF checks execution for array & field accesses

Foundation Libraries

Simulator

SOAR

  • [GCC] - Fixed microejapp.o link with GCC 6.3

Tools

  • Added a retry mechanism in the Testsuite Engine
  • Added a message to suggest increasing the JVM heap when an OutOfMemoryError occurs in the Firmware Linker tool
  • Fixed generation of LL header files for all cross compilation toolchains (file separator for included paths is /)
  • [Cortex-A/ARMCC5] - Fixed SNI convention call issue
  • [ESP32,RX] - Fixed Firmware Linker tool internal limit

[7.3.0] - 2018-03-07

Simulator

  • Added an option for the IDE to customize the mockups classpath
  • Fixed Deadlock in Shielded Plug remote client when interrupting a thread that waits for block modification

[7.2.0] - 2018-03-02

Core Engine

  • [Multi] - Enabled quantum counter computation only when Feature quota is set
  • [Cortex-M/IAR] - Updated compilation flags to -Oh

Simulator

  • Added a hook in the mockup that is automatically called during the HIL engine startup
  • Added dump of loaded classes when verbose option is enabled
  • Fixed Runtime.freeMemory() call freeze when Emb Characteristics option is enabled
  • Fixed ShieldedPlug server error after interrupting a thread that is waiting for a database block
  • Fixed crash Access to a wrong reference in some cases
  • Fixed java.lang.NullPointerException when interrupting a thread that has not been started
  • Fixed crash when closing an HIL engine connection in some cases
  • [Multi] - Fixed KF & Watchdog library link when Emb Characteristics option is enabled
  • [Multi] - Fixed XML Parsing error when Emb Characteristics option is enabled

[7.1.2] - 2018-02-02

SOAR

  • Fixed SNI library was added in the classpath in some cases

[maintenance/6.18.0] - 2017-12-15

Core Engine

  • [Multi] - Enabled quantum counter computation only when Feature quota is set
  • [Cortex-M/IAR] - Updated compilation flags to -Oh

Simulator

  • Fixed Runtime.freeMemory() call freeze when Emb Characteristics option is enabled
  • [Multi] - Fixed KF & Watchdog library link when Emb Characteristics option is enabled
  • [Multi] - Fixed XML Parsing error when Emb Characteristics option is enabled

Tools

  • Updated Kernel API Generator tool with classes filtering

[7.1.1] - 2017-12-08

Tools

  • [Multi/RX] - Fixed Firmware Linker tool

[7.1.0] - 2017-12-08

Core Engine

  • [Multi/RX] - Added KF support

Integration

  • Fixed SNI-1.3 library name

SOAR

  • [RX] - Added support for ELF symbol prefix _

Tools

  • Updated Kernel API generator tool with classes filtering

[7.0.0] - 2017-11-07

Core Engine

  • Added SNI-1.3 support
  • SNI_suspendCurrentJavaThread() is not interruptible via Thread.interrupt() anymore

Foundation Libraries

  • Updated to SNI-1.3

[6.17.2] - 2017-10-26

Simulator

  • Fixed deadlock during bootstrap in some cases

[6.17.1] - 2017-10-25

Core Engine

  • Fixed conversion of -0.0 into a positive value

[6.17.0] - 2017-10-10

Tools

  • Updated Memory Map Scripts for TRACE library

[6.16.0] - 2017-09-27

Core Engine

  • Fixed External Resource Loader link error (introduced in version 6.13.0)

[6.15.0] - 2017-09-12

Core Engine

  • Added a new option to configure the maximum number of monitors that can be owned per thread (8 per thread by default, as it was fixed before)

Foundation Libraries

  • Fixed ECOM-COMM internal heap calibration

SOAR

  • Added log of the class loading cause

[6.14.2] - 2017-08-24

Tools

  • Fixed Firmware Linker tool script (load activity.xml from the wrong folder)
  • Fixed load of symbol _java_Ljava_io_EOFException that can be required by some linkers even if this symbol is not touched

[6.14.1] - 2017-08-02

Simulator

  • Fixed Device Mockup too long initialization that may block the Front Panel Mockup

Foundation Libraries

  • Fixed BON .types.list potential conflicts with KF

Tools

  • Modified Firmware Linker internal scripts structure for new Virtual Devices tools

[6.13.0] - 2017-07-21

Core Engine

Foundation Libraries

  • Updated to BON-1.3

SOAR

  • Added support for *.resourcesext.list (resources excluded from the firmware)

Tools

  • Added BON Resource Buffer generator

[6.12.0] - 2017-07-07

Core Engine

Tools

  • Added property skip.mergeLibraries for Platform Builder.
  • Updated the serial PC connector to JSSC 2.8.0.

Simulator

[6.11.0] - 2017-06-13

Integration

  • Fixed useless watchdog library copied in root folder

[6.11.0-beta1] - 2017-06-02

Core Engine

  • Added an option to enable execution traces
  • Added Low Level API LLMJVM_MONITOR_impl.h
  • Added Low Level API LLTRACE_impl.h

Foundation Libraries

  • Added TRACE-1.0

[6.10.0] - 2017-06-02

Core Engine

[6.9.2] - 2017-06-02

Integration

  • Fixed missing properties in release.properties (introduced in version v6.9.1)
  • Fixed artifacts build dependencies to private dependencies

[6.9.1] - 2017-05-29

SOAR

  • [Multi] - Fixed selected methods list in report generation (removed Kernel related method)

[6.9.0] - 2017-03-15

Base version, included into SDK 4.1.