The following is a list of changes since the initial Simics 7.0.0 release.
The described changes are the changes done to the package Simics Base
(package number 1000). Changes to other packages are
described in the release notes accompanying a particular package.
- The
bank_instrumentation_subscribe interface was restricted to
disallow calls to remove_connection_callbacks, and bp.bank.break -once
was updated to respect this restriction. This helps resolving some
use-after-free violations detected by address sanitizers.
- Incorrect deprecation warnings for command-line options were fixed (fixes SIMICS-23756).
- Warn if
simics_start.py was loaded for a different module than the one that was ultimately loaded.
Fixes part of SIMICS-23143.
- Make the recently added command
list-low-level-breakpoints unsupported under internals.
- Version 1.16.27 stopped leaking host PKRU state into the simulation while the same state is managed by XSAVE.
- Version 1.16.27 is now compatible with Linux 7.2. SIMICS-23753
- Fixed a rare deadlock where a simulation with multiple cells could hang indefinitely.
- The
transaction-tracer tool is now officially released. Do
help new-transaction-tracer for more information.
- Fix PCIe ports such that they now use the SERR# Enable bit in the
Bridge Control register rather than the Command register when deciding to
forward messages received on the secondary interface to the primary interface.
- Legacy INTx interrupt signaling is now deasserted in the AER
implementation when a Root Error Status register is cleared.
- The
pcie_register_write_action template now invokes the
pcie_write_action() method before the field writing dispatching has taken
place. A new template, pcie_register_write_action_post has been introduced
which has the previous behavior of the pcie_register_write_action template.
The method name in that template has a new name.
- Added FPB Routing support for PCIe Memory transactions.
- Parameters listed in
provides can now be set to NIL by
the providing script, even if not declared with allow_empty.
- Version 1.16.26 corrected step accounting on Efficient-cores. SIMICSTS-1760
- Version 1.16.26 addressed several cases of truncation and underflow of user-provided inputs. SIMICS-23681
- Fixed an issue where functions would not be added if a an error
with opening a symbol file had occurred prior to adding a path map. This
problem would expose itself as no functions in the report.
- Trying to load a checkpoint with string attributes that are not valid utf-8 now causes a parse error instead of printing an internal error and proceeding with the parse and load of the checkpoint.
This fixes part of SIMICS-11105.
- Added the command
list-low-level-breakpoints which lists some of
the available breakpoints not directly handled by the <bp-manager>.
Notice that of some <bp-manager> breakpoint types are implemented using
the breakpoints listed by list-low-level-breakpoints, so the set of
breakpoints <bp-manager>.list and list-low-level-breakpoints could
overlap.
- Simics now reports proper errors when you try to run scripts that are not valid utf-8 files.
This fixes part of SIMICS-11105.
- The
memory-map command now clearly displays if an address range has multiple conflicting mappings,
referred to as ambiguous mappings in Simics. Previously the memory-map command just displayed those ranges as
empty.
- Changes in the reports generated by the
html-report and
html-diff-report commands:
- Graphs are now arranged in optional groups, such as Performance
Overview, Workload Analysis, VMP, Scheduling, Host, Platform Model
Activity, Module Profile, Instructions and JIT. Only the most
important groups are shown by default, which roughly halves the
number of graphs a user initially sees.
- A new “Graphs” menu at the top of the Graphs section shows how many
graphs are visible and lets the user choose which groups to show.
Groups with more detailed graphs (VMP, Host and JIT) have a
Details sub-group. Checking a group turns on all its sub-groups,
while each sub-group can also be shown on its own. “Show all” and
“Defaults” buttons are available, and the choice is remembered
between reports.
- Each group has its own colour, shown as a border and a tag on the
graph headers, so it is easy to see which group a graph belongs to.
- The CPU class and cell pages use the same groups as the main page.
- The separate
vmp.html page has been removed. Its graphs are now
in the VMP and VMP Details groups on the main page.
- New host graphs: Simics execution thread CPU time and scheduler
events, host CPU work time, host CPU frequency over time, host CPU
frequency limits, and host temperature at the end of the run.
- “Show internals” no longer hides or shows graphs. It now affects
only probe tables and analysis findings, and is shown only on the
main page.
- Added the
Probe_Key_Histogram_Options property for configuring
histogram presentation, including displaying values without percentages or
aggregation of omitted values.
- The probes framework has been refactored. Many probe classes are now
registered only after the
enable-probes command has been run, directly or
implicitly by another command.
- The
virtual_data_breakpoint and virtual_instruction_breakpoint
interfaces have a new optional method, list, which lists the breakpoints
added through the interface. It is only present in modules with build-id 7204
or later.
- Fixed a problem when using host Python, where
addon-manager always created a virtual environment in the project,
even when project-setup was run with --no-venv.
- The
lcov-output command will now count call sites as executable
lines in a similar way as html-report does. Pass the
-call-sites-not-as-executable-lines flag for previous behavior.
- The
lcov-output command will now include inlined functions
in the reports. Inlined functions can optionally be excluded with the
-no-inlined-functions flag.
- Fixed a bug where PE files would report zero functions unless
-functions-from-symbol-table flag was provided (fixes HSD-16031744858).
- Fixed a bug in
html-report output where functions obtained from
the symbol table were not counted in the main page summary.
- When functions are parsed from debug information for use with
code coverage tool, functions outside of executable sections are now left out.
- Improve error message when a file exists as both
.md and .html.
- Fixed a bug where disconnected PCIe devices could leave stale
message space mappings behind.
- Fixed Peer to Peer routing to not mistakenly route PCIe messages downstream
that belong to a different PCIe segment.
- Added FPB Routing ID support for PCIe config and message transactions.
- Added register and field definitions for the
Flattening Portal Bridge (FPB) capability.
- Upstream PCIe message transactions routed by ID are now automatically appended
with the
pcie_device_id atom based on the incoming address. This behavior is already
present for Downstream PCIe message transactions.
- The
--python parameter, and not only the SIMICS_PYTHON
environment variable, can now be used to choose the Python that
project-setup itself is run with.
- The
print-target-info and list-target-info commands now
only show blueprint-namespace objects that have machine information
set, and omit properties with zero-like values (no disks, no memory,
no storage, and so on), since this data cannot yet be reliably
extracted for blueprints. A new -include-empty-info-blueprints flag
restores the previous behavior of showing all blueprint-namespace
objects and properties.
- Removed a shared state that could cause corrupt data with multiple real network connections. Only affects Linux.
- Initial release of a sample PCIe Switch with Flattened Portal Bridge Capability
- The
system-perfmeter and system-perfmeter-summary commands are now deprecated in favor of new-system-perfmeter, which is built on the probes framework. A warning is printed when system-perfmeter is activated.
- Fixed checkpoint bug where the the switch could end up
in a broken state after a checkpoint load.
- Added
simics_generate_cc_interface CMake helper to generate a C++ wrapper from a C interface header. The generated header is placed under c++/ in the build directory, automatically wired as a dependency of the module target, and exposed via the ::headers interface target.
- The API reference documentation is now better cross-linked and the format in
api-help has been updated.
The document has also changed name and structure so old links to it will be broken.
- Fixed a problem in the Windows named pipe server, where data
that the client had not yet read was discarded when the server closed
the connection.
- The
os-awareness-interfaces module and headers were removed. The
os-awareness headers under simics/simulator-iface should be used.
- Fixed bug where it was previously not possible to have virtual functions on the
same bus number as physical functions within a device (SIMICS-23607).
- The
pcie-downstream-port class now performs type1-to-type0 configuration and
message conversions when the request’s bus and device numbers match those of the directly
connected PCIe device below. This is more in line with the PCIe specification and the
Flattening Portal Bridge capability.
Previously all type1 requests were converted to type0 if the bus number
matches the secondary bus number of the pcie-downstream-port.
- Reduced the number of VMP-related graphs on the main page generated
by the
html-report and html-diff-report commands. A new vmp.html page
contains all VMP graphs for advanced analysis.
- Simics no longer replaces
sys.stdout with a non-standard
Python object (fixes SIMICS-23542).
- Ensure that only the user that starts the daemon can actually connect
to it.
- The VNC server now supports mouse wheel input.
- Added documentation about the
setup-venv script.
- Version 1.16.25 adds support for virtualization of Intel® Flexible
Return and Event Delivery (Intel® FRED).
- Marked status and error code returning functions in the bank modeling API as
[[nodiscard]] to let the compiler diagnose callers that accidentally ignore failures or validation results. Callers that intentionally discard a result can explicitly cast it to void.
- Changes in the generated reports in
html-report and html-diff-report commands:
- Bar charts now render horizontally by default
- A toggle button lets you flip bar charts between horizontal and vertical in the report
- A “Copy Data” button on bar and pie charts copies the data as CSV to the clipboard
- Each bar shows its percentage as inline text (hidden below 2% to avoid clutter)
- Histogram-over-time graphs are limited to 20 legends by default, remaining keys are grouped into an “Other” bucket to keep the chart readable
- The Console accordion now sorts the consoles by amount of output. Consoles without any output are now hidden.
- Fixed a memory leak in EHCI no-data control transfer.
- Fixed a memory leak on object deletion in uhci.dml.
- Added a time unit argument to the time breakpoint commands (fixes SIMICS-16515)
- The source pages of a HTML report will now include a summary of
functions in that source file.
- Added a
sym-from-address command that allows you too look which symbol (function or global variable) a given address is part of.
Fixes SIMICS-12149.
- The
gfx_break interface now uses uint32 instead of
int where appropriate.
- The
gfx_break interface now includes two new methods:
match_bytes and store_bytes, for facilitating having in-memory
breakpoint data.
- The
store and remove methods in the gfx_break
interface now log error messages on failure as well as returning
false.
- The execution context requirement of the method
match in
the gfx_break interface has been relaxed to Cell Context.
- Added support for peer-to-peer routing for functions within a PCIe
device, and downstream ports within a PCIe switch. This change also brings a
breaking change in
method add_map() and in template pcie_upstream_ingress_handling which now requires a device id to additionally
be passed.
- Version 1.16.24 checks that host OS has enabled support for XSAVE at driver loading.
- Version 1.16.24 fixes capability VMXMON_CAPABILITY_CET_SHSTK on Windows. SIMICS-23634
- Version 1.16.24 switches Windows build to use WDK10, SIMICS-22419, SIMICS-17110.
- Improved performance for address to source lookup when adding
source info.
- Link blocking conditions that are true from the start were not being
respected unless some other link blocking condition would trigger
update_link_blocking(). This is now fixed.
- Made
get_target_link_speed() a default implementation to allow for
overrides.
- Error messages from blueprints referenced by target scripts
are now displayed if target loading fails.
- Now bank modeling can be turned off in CMake by setting
SIMICS_CC_API_ENABLE_BANK_MODELING to OFF.
- Moved
finalize and objects_finalized methods to protected scope in ConfObject class.
- Fixed a bug where HTML index page was no properly output when source
only raw data was used (fixes HSD-15019734260). This was a regression caused
by recent
html-report updates.
- Update reference for further reading about Multicore Accelerator (fixes (fixes SIMICS-23666).
- Added ARM atom
arm_axi_id for the AXI transaction identifier (AXI ID).
- Class
Param now accepts an integer type constructor argument advanced which defines the advanced setting for the given parameter (SIMICS-23128).
- Added support for the XTGETTCAP (request termcap/terminfo string)
DCS sequence; the number of supported colors and terminal name are reported.
- Extended component adapter to handle tuple parameter values
correctly.
- Improved error messages from
project-setup when no Python
installation can be found.
- Parameters received via OSC 3008 (shell integration) escape
sequences are now stored and shown, in key-value form under the
“Operating System Command” section, by the
status command. They are also
available via the osc_parameters attribute.
- Ignore commands with invalid
doc or short when searching for commands with help-search (fixes HSD-21044785734).
- The
map_target template from utility.dml now frees the internally
created map target upon device deletion.
- Fixed an issue where a CPU attempting to fill their page-cache when
the link of a root/downstream port device was blocked would result in an error.
- The
max_clients attribute, as well as the max-clients
argument to the start-simicsfs-server command, now has default
value 32 (fixes HSD-14028263990).
- Version 1.16.22 adds a workaround to hide VMXMON_CAPABILITY_CET_SHSTK capability on Windows. SIMICS-23634
- Added support for Simics Events to
confclass. See Model Builder User's Guide in the Modelling with Python (confclass) section (fixes SIMICS-22831).
- Fixed a problem where data was not processed if the
associated recorder was not yet set up (fixes HSD-14028187071).
- Fixed a segfault in upstream transaction routing which could occur in
certain transaction chaining scenarios.
- All Python package dependencies of Simics now have strict versions.
- Fixed a problem where SimicsFS Client could crash when
there was an error in the communication with the server (fixes
HSD-14028187071).
- Added
SANITIZE_ALL_MODULES option to build all modules
with ASAN and UBSAN regardless of simics_add_sanitizers
annotations. Useful for CI-level sanitizer validation.
- Definitions for
arm_smmu_qtw_access_type atom have been added. See the header file simics/arch/arm.h.
- Generated device skeletons will now feature the current year in the copyright string instead of a fixed past year.
- Added basic OSC sequences handling
- Added the commands
ai-mode, ? and list-ai-sessions, that allow interaction with a GitHub Copilot AI agent from the Simics CLI. To launch Simics with CLI in ai-mode, use the --ai-mode flag.
- PCIe config reads over a disabled link now return all 1s.
- Version 1.16.21 is tested to build against Linux version 7.1.
- Version 1.16.21 speeds up target address handling using host EPT.
- Version 1.16.21 fixes objtool build errors on Ubuntu 24.04 with Linux kernel 6.17 (fixes HSD-21044554748).
- Version 1.16.20 introduces support for Intel® Control-Flow Enforcement Technology (Intel® CET) shadow stack.
- Fixed a memory leak in the event queue handling.
- Fixed a problem where Simics could crash if the graphics
console did not have a connected mouse device.
- Reduced log level (from info 1 to info 2) for PM state transitions (“
New function power state: %s”) and hot reset (“Hot reset triggered on %s”), and rephrased the former log statement slightly.
- Fixed a problem that prevented loading checkpoints which
included large disks.
- Added the L1 PM Substates capability.
- When removing data during
html-report, all overlapping "info"
entries are now properly removed.
- Readded
html_report.py for compatibility reasons when generating
reports directly from Python. Scripts that use the .py file should be adapted
to use html_report package instead.
- Fixed an issue for
html-report when mappings for sections are
used.
- Fixed a bug where
html-report could fail if there were overlapping
mappings and conditions.
- Changes to the Error Signaling implementation and AER to make it more
overridable. This included adding an additional parameter to some of the
handler methods that are invoked when a root port receives an PCIe Error
Signaling message.
- When running Simics from a project where host Python is
used, the environment variable
SIMICS_PYTHON is now set to the
path of the Python binary in the generated virtual environment.
- When host Python is used,
project-setup will no longer
override the PyPI server used to install pip packages from. The
user/system default will be used instead.
- Updated the HTML report (fixes HSD-18044012273).
- Functions now include inlined functions.
- Functions page was totally remade to enable search and inline hierarchy.
- Call sites of inlined functions are now considered executable lines, this can be opted out using the
-call-sites-not-as-executable-lines flag.
- Conditional branches are now summarized as conditions, this can be excluded using the
-exclude-conditions flag.
- Plus many more small updates.
- Added the attribute
max_clients used to configure the
maximum number of connected SimicsFS clients.
- The lwIP network stack code has been updated from version
1.0.0 to 2.2.1.
- Added PCI-PM L1 Substates support. While in one of these states CLKREQ will now be deasserted.
- Added method
hotplug_event(int type) that generates an MSI if the
hot plug event conditions are met. The method is overridable to allow users
to provide an alternative event mechanism.
- Changed the default value of has_links in the PCI Express Capability to better match the specification.
Link registers are now by default enabled on all device types that have links.
- Commands
pcie-memory-read, pcie-memory-write, pcie-io-read,
pcie-io-write, pcie-config-read, and pcie-config-write now have a new
argument pcie-downstream-port which can point to any object of class
pcie-downstream-port or pcie-downstream-port-legacy. The access will then
be issued to this downstream port. This argument is mutually exclusive with
hierarchy. Refer to the respective command’s help for details.
- In the
confclass library, it is no longer allowed to use a container type instance (for example []) as attribute default value. The reason this is not allowed is that the default value would otherwise be shared between all instances of this class. For example, if an attribute abc is declared with cls.attr.abc("[i*]", default=[]), update by changing the default value from [], to either list, or lambda: []. That is, a callable that takes no argument and returns a new instance of the default value. The callable will be called each time the class is instantiated (fixes SIMICS-23520).
- Updated suspend reason to differentiate between breakpoint and watchpoint (fixes SIMICS-23573, DBG-23226).
- Added CLKREQ output signal to PCIe Devices.
This implements the specification prescribed behavior of the Enable Clock Power Management bit in the Link Control register, which applies to Upstream Ports.
CLKREQ in Upstream Ports is currently controlled by the PM Capability Device Power Management States, asserting the signal in D0 and deasserting it in D1/D2/D3.
The signal is also added to Downstream Ports, but there is currently no mechanism implemented for controlling it in those.
L1 sub-states are not yet implemented.
- Added missing fields to the Precision Time Measurement extended capability.
- Fix a problem where pressing CTRL+C in a Simics session stops the
VirtioFS Daemon, preventing any further communication with the daemon in that
session.
- The
libgcc_s library have been updated to match gcc 16.1.
- The
list-objects max-depth=N command now works without -tree; the depth limit is applied to the flat object list as well as the tree view.
- Bumped the C++ library shipped with Simics to version 6.0.35.
- Fixed a problem which could lead to a crash when saving a
checkpoint (fixes SIMINT-1710).
- Updated arm64 handling to work with kernel 5.10 and more recent
(fixes SIMINT-1696).
- Repaired parsing of “vabits_actual” symbol for arm64 when available.
- arm64 handling now checks “set_ns_bit_in_pa” attribute of cpu to
determine if physical address should be modified for non-secure accesses or
not. Prior to this fix unmapped physical memory could be accessed when in
non-secure mode.
- Make the link width and link speed for all ports (up- and downstream) configurable. Each port’s
pcie_config bank now has attributes pcie_gen_speed and pcie_link_width to configure the maximum link speed (based on the supplied PCIe generation number) and maximum width for the port. Refer to the help text of these attributes for details.
- Function data is now obtained using debug information instead of
symbol table, when possible. To get old behavior use
-functions-from-symbol-table flag to <code-coverage>.html-report or
similar flag for other command.
- Added support in Flit Performance Measurement capability to LTSSM tracking events to be zero.
- Added missing fields in the PCIe Virtual Channel Extended capability that were
added in the PCIe 6.0 revision.
- Fixed the ACS extended capability register set.
Fields related to enhanced ACS were added. Register
egress_control is now an array
of 32-bit registers that can be of size 0 up to 8, parameter egress_vector_size controls
the vector size. Previously the egress_control register was always a single 32-bit register.
- On transitions to device power state D3 the framebuffer is now cleared to simulate screen blanking.
- Improved
clean-<module> target, now using Ninja’s built-in clean tool.
- Updated with the latest changes from the TCF open source project.
- Added the
objects_finalized template, which is in the vein of
init and post_init, representing the stage after the device has been
created. Once Simics has successfully configured both the device and any
other configuration objects created at the same time, it will then ensure
that the objects_finalized() method is called of every DML object that
instantiates the objects_finalized template.
The device object always instantiates this template.
- Fixed a crash in the
info command for i2c-link-endpoint objects when a slave device’s addresses() method returns Nil (meaning the device may respond to unspecified addresses). The address is now displayed as Some other addresses (fixes SIMICS-22297).
- Added bounds checking for method
lower(uint8 i) in the MSI capability.
- Added hooks
pm_enter_d0() and pm_enter_d3() in the PM capability which are called on device power state transitions.
- The
bin/create-modcache script now correctly runs Simics
from the project and not from the Simics-Base installation.
- The
html-report and html-diff-report commands now include a new
Analysis section: automated rule-based findings that score and highlight
potential performance concerns (execution engine mix, VMP usage/blocking
reasons, interpreter hotspots, and more). Detects performance phases via
region detection and runs analysis per phase, showing where in the workload
problems occur. Findings are scored and filterable by severity.
- Simics now supports Python 3.14.
- Version 1.16.19 reduces number of objtool warnings when compiling on Linux
- Added the PCI Express capability and PM capability to the device configuration space.
- The
from_obj method now throws std::runtime_error for null pointers instead of relying on debug-only assertions.
- Added a new mix-in class
simics::InterfaceLookup that can be used to improve the performance of interface method calls. This, however, impacts binary compatibility and needs an opt-in via the CMake variable SIMICS_CC_API_ENABLE_INTERFACE_LOOKUP. It also requires compilation with the C++ 17 standard.
- Updated Python lock handling to work more like in 6. This prevents
getting fatal errors when accessing a shared library that is using the
CPython API (fixes SIMICS-23544).
- Enabled the
Core_Log_Message_Always hap for all modules. Previously,
it was only available manually by defining
SIMICS_API_USE_LOG_ALWAYS_HAP when compiling the module.
- Removed inaccurate module load warning messages on the form
“+++ Two modules named in the same directory”.
- In command
list-pcie-hierarchies added support for devices with multiple
pcie-downstream-ports as subobjects.
- Removed
snapshotsChanged event from the Simulation service (now only in SimUtils service).
- Added a preview of new service named
SimUtils with commands for controlling simulation (fixes SIMICS-23451, HSD-18044235798, HSD-18044025540 and DEBGGR-24566).
- The output from
info os processes format is now more aligned with
how gdbserver formats it, this allows tools such as cppdbg to parse the
output.
- Added support in Root Ports for the
Configuration RRS Software Visibility
feature. This enables software to determine when a PCIe Function is ready for configuration
requests after Hot/Cold/FLR reset.
- Fixes to the ability to override the reported max link speed and max
link width.
- Added helper method
send_frs_msg in template exp_dev to send
VDM Function Readiness Status messages.
- Inverted (bottom-up) view improvements:
- The inverted view now renders as an icicle graph (top-down): hot functions
at the top with callers growing downward. When zoomed, ancestors appear
above the zoomed subtree.
- The inverted view uses a cool blue color palette to visually distinguish
it from the normal warm-colored flame view.
- Fixed a rendering issue where tiny frames at the bottom of the inverted
view could leave a visible gap on the right side of the canvas.
- The depth slider value is now preserved when toggling between normal and
inverted views (previously it reset to the computed default).
- Version 1.16.18 fixes compilation problems in modpost phase when the module is built against Linux versions 6.19 and newer.
- The
pcie_gen_speed and pcie_link_width attributes now properly
work.
- Implemented handling of PM and PME messages. Switches by default
pass PME_Turn_Off messages downstream and collect PME_TO_Ack responses sent
upstream. Endpoints by default respond immediately to PME_Turn_Off with
PME_TO_Ack. Root ports terminate PM_PME messages and set the appropriate
register flags in the PCI Express Capability. Helper methods for sending PM
messages from Endpoints have been added to the library. PME from D3_cold
is not yet supported in Endpoints.
- Allow custom ATS disable conditions.
- For upstream switch ports, upstream messages destined for these types
of ports will now actually be processed even when the port’s link is down.
- For root ports and switch downstream ports, ensure that if their link
is disabled, incoming downstream transactions trying to access an internal
resource rather than a downstream resource are not blocked.
- Reverted the SimicsFS Client build rules to dynamic linking.
- Version 1.16.17 adds support for tracing target instruction pointers in VMX non-root mode.
- Version 1.16.17 fixes performance degradation introduced in 1.16.16.
os_awareness type breakpoint no longer require an object if there
is only a single object of os_awareness class in the target system.
- Use checksums instead of DML source paths when creating metadata
files that will be used to generate dml_compile_commands.json file. This
resolves an issue where the metadata creation would sometimes try to generate
files with paths that became too long.
- Added option
-only-connects to command list-attributes to
only show attributes that correspond to what was defined as a connect
in DML. This employs a simple heuristic so it might misinterpret some
attributes as connects or miss connects if they are defined in very
peculiar ways.
- The
x (examine-memory), disassemble, and
address-profile-data commands can now be gracefully interrupted by
pressing Ctrl-C once. The partial output produced so far is kept and a
message is printed to indicate that the command was interrupted.
- Added a new flag
-r to the devs command that will make
devs recurse over all children of the object passed to devs.
- Commands
wait-for-read/write can now also operate on objects
implementing the transaction_translator interface. With this change
the commands now use SIM_issue_transaction to send the transaction
and no longer use a fixed interface. The interface used by the commands
is selected by the rules defined by SIM_new_map_target.
Fixes SIMICS-23458.
- The default implementation of
get() and set() of banks will now log an
error and do nothing if passed an invalid access size. This may impact poorly
made inquiry reads and writes to banks.
- The documentation of
connect objects now lists the set of
optional interfaces, in addition to the set of required interfaces.
- Added tech preview
video-export which enables commands
video-export-start and video-export-stop, for exporting the
console contents to a video file, using ffmpeg as encoder.
- Add
-print-engine argument to pc-tracer-tool which displays
the execution engine for each traced instruction.
- Fixed bug where the AER Header Log Overflow Correctable Error
could be triggered by AER errors that did not consume a TLP log entry.
- Fixed register
root_error_status, previously the whole register was marked
as RW1C. Now only the applicable fields are marked as RW1C.
Previously the AER interrupt MSI number could be unexpectedly cleared.
- Root ports and downstream ports now generate the uncorrectable and fatal
AER Surprise link down event when appropriate.
- Removed parameters
rbar_capabilities and vf_rbar_capabilities
Sizing capabilities can be directly set through field init_val instead.
- Dynamic resizing of a BAR through the Resizable BAR Capability or
through VF Resizable BAR Capability now follows the PCIe spec.
A resize can only be done while the BAR is disabled.
A resize will also clear the address bits that change from RW to read-only.
- Root ports and downstream ports now correctly fails link training and
set negotiated speed and negotiated width to undefined when the upstream port returns
an error to the link training transaction.
- Device models can now add one or more blockers to that group by inheriting template
upstream_ingress_blocker in a subgroup. It can for instance be used to model error injection,
link down or power states. The blocking can be fine-tuned
to only trigger on specific PCIe TLP patterns.
- Added the ability for both Downstream Components and Upstream
Components on a link to block link training and tearing down the negotiated
link. Both peers are notified if the other peer has torn down the link,
resulting in the negotiated link values being reset.
- Added the ability for a Downstream Component on a Link (PCIe Endpoint
or Switch Upstream Port for example) to request a link re-training. Note that
it’s still the Upstream Component that is the initiator of the link training
(as in the sender of link training transaction).
- Deprecated the
trigger function in the pcie_link_training
interface since it takes an obsolete device_id parameter. The new function
invoke should be used instead.
- Added
reset.dml with templates for conditional reset.
- Fixed the
status command to “look through” downstream ingress handlers and show
the mapped resources instead of only the ingress handlers.
- The
project-packager script now uses /bin/bash on Linux.
- The generated project trampoline scripts no longer honor
the runtime
SIMICS_PYTHON environment variable; they always use
the Python selected when the project was set up (fixes HSD-14027625285).
- Fixed a problem where parameters set on the command line
were incorrectly parsed.
- The
SIM_load_target API function now accepts preset names
(as returned by list-presets) in the presets argument, in addition
to file paths (fixes SIMICS-23468).
- Added tech preview
asciicast-export which enables commands
asciicast-export-start and asciicast-export-stop, for exporting the
console contents in asciicast format.
- Version 1.16.16 fixes compilation problems in modpost phase when the module is built against Linux versions 6.19 and 7.0.
- Version 1.16.16 adds support for Intel® Control-Flow Enforcement Technology (Intel® CET) indirect branch tracking.
- Fixed a bug where
print-device-regs, when issued on a device with multiple banks, showed registers
of a previously printed bank again in the next bank (SIMICS-23265).
- Fixed broken dependency when wrapping interfaces to python
- Minor adjustments to
cmake-wrapper.mk to match GNU Make’s D=0 build.
- The signing certificate on Simics packages has been updated.
- Using device register meta-data, for example through the
write-device-reg command, will no longer cause constant memory growth.
Fixes SIMICS-23455.
- Added the
pcie-memory-probe command to all banks which are PCIe
functions implemented with the new PCIe library. This command probes an
upstream PCIe memory transaction.
- Added new global commands
pcie-memory-read,
pcie-memory-write, pcie-io-read, and pcie-io-write for
performing PCIe memory and I/O space accesses through the PCIe
hierarchy.
-
Addressed an issue stemming from an upstream bug that would commonly
cause the reported column number in warning and error messages to be
incorrect (fixes SIMICS-23466). This issue also affected the reported line
number in rare situations.
This issue had always been present in DML, and most notably affected error
messages surrounding methods, as well as object declarations since
Simics Base version 7.78.
- Template
vf_base_address for SR-IOV BARs now expose method increment_map_info.
By default, it increments the base address by the VF BAR length and keeps the start address at 0.
With this change the PCIe device model can customize the base and start address per VF
to handle custom address translations for SR-IOV BARs.
- Fixed a bug in ATS where extra atoms were hidden behind end atom in
case of PASID is not present.
- Added support for PCIe 7 link training.
- Remove unnecessary parts of link sanity check.
- Make method
get_virtual_functions in template
sriov_capability shared.
- When host Python is used,
project-setup will now install
all requirements.txt files in Simics add-on packages together, to
facilitate pip resolving intra-package dependencies.
- Fixed an issue which caused the service node to not handle TCP connection resets properly.
- Added an additional register to write the selected GOP mode from within target SW.
- Fixed a bug. A system reset now clears the list of detected video modes as well.
- Allow enabling tracker without parameters. If the tracker lacks parameters, the
<uefi_fw_tracker_comp>.detect-parameters -load will be performed automatically before enabling, which means that the tracker will get the default parameters before enabling.
- Version 1.16.15 adds support for Split-Lock Disable.
As this functionality affects the whole memory subsystem and cannot be
limited to single guest, it can only be used if the operating system VMXMON
is running on top of has enabled Split-Lock Disable.
- Adjust remap behavior to account for PCIe ingress handling. Unmapping a resource now only removes the object at the specified address.
- Fixed an issue where the Simics NVMe component could not be
instantiated without the Crypto-Engine package (1030) being added to the Simics
project.
- The commands
get-memory, set-memory on processor
objects, as well as the global commands get and set now
automatically appends the processor architectural atoms with the
values representing the processor internal state, to the
transaction, before forwarding the transaction to physical memory.
- Added PCIe atom
pcie_msg_vdm_frs_reason for VDM message
Function Readiness Status message.
- Allow IDE capabilities with 0 link streams or 0 selective streams.
- Made it possible to override the DOE implementation properly.
- The
param pcie_obj in template config_bank is now used
when mapping and demapping functions over the pcie_map interface.
Previously it was hard coded to bank.obj.
Default behavior has not changed, param pcie_obj defaults to
bank.obj.
- Fixed a problem on Windows when using host Python, where
project-setup failed to update the virtual environment.
- SimicsFS Client now requires
libfuse3 instead of libfuse2.
- Adjust the Accel VGA V2 device to work with the newly added PCIe upstream ingress ports.
- When
run-until and wait-for commands are interrupted,
the corresponding breakpoint ID is now displayed.
- Fixed tab completion of flag arguments when a named integer argument (e.g.,
max=1)
appeared earlier on the command line.
- Added new commands
get-memory, set-memory on processor objects.
- Adjust PCIe commands to work with the newly added PCIe upstream ingress
ports.
- Added an
offset argument to the print-device-reg-info
command, and offset and size arguments to the print-device-regs
command, allowing print-device-regs to display information about an
arbitrary address range in a device.
- Improved error messages on incorrect usage of format
strings in the CLI.
- The
list-packages command now uses the same column order
as the version command.
- The
version command now by default displays the same data
as the --version command line argument.
- The
log-filter command now allows adding regular
expression filters via the -regexp flag.
- Minor internal improvements in
pcie_commands.py
- The
list-preferences command now also lists and returns
module-local preferences.
- The
help command now shows information also for not yet
loaded modules.
- A SIGINT signal will now be raised when the terminal frontend
receives ascii character 0x03. This character is sent from a telnet client
when ctrl-c is pressed (fixes SIMICS-23434).
- Adjust PCI/PCIe access functions in
pci_access.py to work with PCIe devices that use the newly added upstream_ingress port.
- DMLC no longer emits warnings saying
top-level '#if' body with unsupported statements. These warnings were
often triggered in common code, causing excessive polution in build logs unless --no-warn=WEXPERIMENTAL was passed to DMLC.
The same rules as before apply to #if statements: Statements such as
param and template are forbidden inside #if, but a special exception
allows forbidden statements to appear specifically inside an #if (dml_1_2)
block. The warning message was meant to highlight this irregularity, but
caused more harm than good; error messages surrounding the special case have been improved instead.
- Move
io_apic interface headers into Simics Base package (SIMICS-23443).
- A new instrumentation tool,
pc-tracer-tool, is now available for
recording executed program counter (PC) values. The tool supports
both virtual and physical addresses, an optional cyclic trace buffer,
and per-processor name output. Recorded PCs can be printed, saved to
a file, or disassembled. This tool is significantly faster than the
instrumentation-tracer-tool when only PC tracing is needed. See
the new-pc-tracer-tool command for details.
- Root Ports and Root Complex Event Collectors now by default have
root port registers in their PCI Express Capability registers.
- Added a new template
pcie_upstream_ingress_handling that creates
a port upstream_ingress implementing the transaction_translator interface.
This template is used by template pcie_device (which is also used by
template pcie_port) and hence almost all elements of a PCIe hierarchy
will now have such an upstream ingress port. All transactions (memory, io,
config, and message) coming from upstream into a device will pass through it.
This allows for centralized handling of all incoming traffic before and after
they take effect in the device. The template pcie_downstream_translators,
which only existed in type 1 devices has hence been removed and
is replaced by the more general template pcie_upstream_ingress_handling.
- Fixed a bug where Hot-Plug Controller Command Completion software
notifications (interrupts) would be caused even if they were not enabled
in the Slot Control Register of the PCI Express Capability.
- Adjust the PCIe Downstream Port device to work with the newly added PCIe upstream ingress ports.
- Fixing a bug where the device id atom was not added in a case where it should have.
-
New html-diff-report command added, which produces one report comparing two runs.
Features:
- Both the baseline and the comparison run are shown side by side.
- Found differences under accordions are marked with a badge.
- Lines with differences are marked with a different color and individual characters on the line are highlighted.
- Probe values are sorted based on the absolute percentage difference
- Flamegraphs are shown with a diff-mode.
- Graphs either contains both baseline and comparison or drawn in the same graph with overlay.
- Graph width scaling — separate graphs are proportionally scaled by session duration so visual comparison is fair.
-
The html-report command has been improved:
- The report now contains sticky sections so header and last opened accordion stays visible.
- Added help text under new menu with includes links to other pages.
- Generated HTML is now reduced in size and renders more lazily
- Added splash-screen when loading the report
- Internal probes are now hidden by default but can be shown with the “show internals” checkbox.
- Tool-tips on probes added.
-
The html-report command and its generated graphs now includes new features:
- Mean value display - graphs can now optionally show the mean line.
- Multiple x-axes - graphs can define multiple a-axis types (e.g. wall clock vs. virtual time) selectable at runtime.
- Logarithmic y-axis - graphs can now support a log scale on the y-axis, also selectable at runtime.
- Many changes to the flamegraph’s diff-mode (now used in the diff-report):
- Changed color for the “Unchanged” stack segments to make it less noisy.
- Each stack-element is now of 5 different types: unchanged, new frame, grown, reduced and deleted frame.
- New frame and grown are regressions, shown in a red colors. While reduced and deleted frame are improvements, shown in green colors.
- Different layout depending if the diff is a general regression or improvement.
- An improved run, will scale down the flamegraph according to the reduced samples and put these on the left hand side.
A scaled down flamegraph can then be filled via the “Scale to max” checkbox
- The improvements done can also be visualized by selecting the “Show improvements” checkbox.
- Fixed a bug where listing or loading a target would crash if the
project contained a directory that is inaccessible.
- Bank breakpoint messages now include the program counter if
the memory transaction initiator is a processor.
- Event breakpoints now set the CLI frontend object to the
object in the event.
- Notifier breakpoints now set the CLI frontend object to the
object triggering the notifier.
- The
print-image-memory-stats command now displays the
sizes of the image objects. When used in an expression, the returned
table now includes an additional column with the image size.
- The
set-time-quantum command now shows which cell each
clock belongs to.
- The argument
root_of_search of the list-device-regs
command has been renamed to root-of-search.
- The
sim object will now trigger notifiers with names
swap-read-start/swap-read-stop or
swap-write-start/swap-write-stop when the swap is read or
written, respectively.
- Fixed a problem where a crash could occur when OpenSSL
libraries were not located.
- The memory-map command now adheres to the
max-regions argument.
Previously the contiguous regions were counted as a single region and could unexpectedly
make the command very slow.
- Added support for index map file output when saving (
SimicsExecTraces) execution trace files (fixes HSD-18044167557).
- Object-level
#if now has full support for in each declarations
(fixes SIMICS-23427.)
Previously, any in each declaration appearing directly within an #if would
be rejected by the compiler unless leveraging the experimental and heavily
limited feature of top-level #ifs containing unsupported declarations.
- The instruction-histogram tool has a new
show_zero_entries
attribute and a corresponding -show-zero-entries flag on the
histogram command. When enabled, histogram entries with a count
of zero are included in the output. This is useful for views that
have a fixed set of categories, such as size and the xed-based
views. The feature is not supported for the mnemonic and
x86-normalized views, which only track instructions that have
been observed during execution. Fixes HSD-18044263119
- Documented the deprecated attribute
sim->env, and replacements (fixes SIMINT-1704)
- Converted Simics Migration Guide to Markdown.
- Added constant
pcie_lib_simics_main_version to the PCIe library to
identify the main Simics version that the library was shipped with.
- Remove the
device_id argument from the do_link_training() method.
Link training is only applicable for links, and it doesn’t make sense to select
a certain device on a link when doing link training since there should only be
one device anyway. This is a breaking change for anyone that may be calling this
method or overriding it.
- If link training fails, the two peers of the link will now clear the
the negotiated link speeds and widths.
- Link training is now also triggered on devices that don’t support
hot-plug.
- Add support for the link disable field in the Link Control register
of the PCI Express Capability Structure. Trying to access devices behind a
disabled link will now fail and be logged.
- Add support for l0p negotiation in link training.
- The
html-report command now produces an improved performance report:
- The summary section now includes a pie chart of the execution modes
used for the entire workload.
- Accordion elements now clearly show whether they are opened or
closed.
- The structure has been improved, introducing grouping of elements
under sub‑sections (accordions).
- Graphs can now be moved, making comparison of interesting graphs
easier.
- Graphs can be collectively zoomed in when they are based on the same
x-axis title
- A new Console section has been added, showing the contents of the
final serial consoles and allowing each sampled frame to be viewed.
- The report now includes a search window that finds text beneath
closed accordions. (Text inside graphs is not detected.)
- The width of the flame graphs auto-scales to the width of the web
browser.
- Flame graphs are now generated by our own module, which generates
interactive HTML5 Canvas flame graphs, replacing the previous SVG
output that required the external
flamegraph.pl tool. The new
flame graphs support zooming into sub-trees, regex search with
hit-count highlighting, an inverted (bottom-up) view, a minimap for
navigation, and an adjustable depth slider with a smart default
based on sample distribution. The new flame graphs also adjust the
width corresponding to the width of the web browser.
- Added interface
processor_memory_inspection which
contains methods logical_inspection_port and physical_inspection_port.
The methods return a port that can be used to access
the physical memory attached to the processor. Transactions through
these ports will have the same access rights as the processor
in its current state.
- First version of the Simics internal flamegraph Python package.
Generates self-contained interactive HTML5 flamegraphs from folded-stack profile data, replacing the external
flamegraph.pl Perl script which produced static SVG files.
This is an internal package; the Python API and generated HTML format may change without backward compatibility guarantees. Used by other Simics modules such as vtune-measurement.
Key features:
- Canvas-based rendering with click-to-zoom navigation and ancestor breadcrumb trail.
- Diff mode: compare two profiles side-by-side in a single flamegraph, showing new, removed, and changed frames with a color-coded legend and summary statistics.
- Inverted (bottom-up) view: toggle to see functions by total cost with callers stacked above, making it easy to spot functions that are expensive in aggregate but spread across many call sites.
- Regex search with match highlighting, sample counts, and percentage of view and total.
- Depth slider with percentile display: limits visible stack depth and shows what fraction of samples are covered, with a smart default (99.9th percentile) that crops rare deep recursive outliers.
- Minimap: a thumbnail overview showing the zoomed region within the full flamegraph.
- Right-click to copy frame name to clipboard.
- Deterministic color assignment: each unique frame name gets a consistent color across regenerations.
- Configurable theme colors, frame height, font size, and explicit per-frame color overrides.
- No external dependencies — all CSS, JavaScript, and data are inlined into a single HTML file suitable for sharing or embedding.
- The parameter description is now included in the main error
message, when a parameter value cannot be set.
- Fixed a problem where corrupt terminal output was generated
when the client side window was resized.
- Version 1.16.13 can be built against vanilla Linux 6.19. Dropped obsolete method of reporting driver operation statistics, which was deprecated since 1.16.0.
- The
<vtune_measurement>.flamegraph command now generates an
interactive HTML5 Canvas flamegraph instead of requiring the external
flamegraph.pl tool and producing a static SVG file. The new
flamegraph supports zooming into sub-trees, regex search with
hit-count highlighting, an inverted (bottom-up) view, a minimap for
navigation, and an adjustable depth slider with a smart default based
on sample distribution.
The old SVG output can still be generated with the -svg switch, but
still depends on having flamegraph.pl in the path.
- Refactored
find_file usage to properly handle absolute and relative SIMICS_PROJECT_DIR paths.
- The
branches sections in raw reports will now include branch
instructions that have not been executed, the data is added when disassembly
is added.
- Ensure namespace uuid assignments are deterministic
- AER Capabilities and Control Register bits 11:9 are now
defined if
pcie_version >= 2.1 as per the specification. Previously they
were defined if pcie_version >= 2.0.
- Fixed a compile error for
pcie_version 1.0 devices that have
the AER capability. The tlp_prefix_log_or_header_log_ctd_len param,
controlling whether the AER TLP Prefix Log registers are defined, now
defaults to 0 if pcie_version < 2.1 as these registers don’t exist in older
PCIe versions.
- Fixed a compile error for devices where
pcie_version is 1.0 and
has_links is true.
- Updated the
sim.interface.lookup* probes to correctly include
interface lookups that were previously omitted.
- Added
original_linear_address to the x86_memory_transaction_t.
- Fixed a problem where checkpoints created when a
telnet-frontend object has active connections could not be loaded.
- The oldest supported GCC version that can be used to build VMXMON kernel driver is set to 9.0. GCC version 4.8.4 (and older) is known to be incompatible and will be rejected at the build configuration stage.
- Fixed a crash that happened when trying to restore a checkpoint of a blueprint adapter component.
- Fixed how
dodoc handle indented simics test blocks (fixes SIMICS-23364).
- Not connecting an upstream_target is now a warning. Previously it
was only reported at the info level.
- The project is now by default set up with a Python virtual
environment also when a host Python is auto detected and not only
when the
--python parameter is used.
- Fixed a problem on Windows when
project-setup could crash
when using a host Python.
- Added the global notifiers
snapshot-created and snapshot-deleted.
- Added a
snapshotsChanged event to the Simulation service which will be sent when a snapshot is created or deleted (fixes HSD-18044025540).
- The
<vtune_measurement>.save_folded_stack and <vtune_measurement>.flamegraph commands now handle VTune™ Profiler errors more gracefully.
- Fixed the
SIMICS_BUILD_ID validation logic
- Fixed a problem where
start-playback would crash when used with forward slashes (fixes HSD 18044179024).
- The device now implements the
transaction interface.
- Added support for PCI-PM software controlled device function power
states in Endpoints. BARs now get unmapped when a function enters D1-D3 and
remapped when it returns to D0. There is not yet any support for PCI-PM in
Type 1 devices such as bridges, ASPM, external signaling of power management
state changes, or for Power Management Events.
- The device now implements the
transaction interface.
- Consolidated the generated C++ interface headers for the Simics C API into a single version for both 6 and 7, instead of distributing them as duplicated headers. Also wrapped the
obsolete/6.h header so end-users can migrate models from 6 to 7.
- Added new command
list-pcie-memory-hierarchies to list
PCIe memory hierarchies in platforms (fixes SIMICS-23352).
- Command
memory-map now merges continuous regions into one block.
- Command
memory-map now correctly treats a region with ambiguous mapping
as an unmapped region. Ambiguous mappings happens when two or more objects overlap
within the same memory-space and share the same mapping priority.
- Fixed a problem where the VNC server incorrectly signaled
an error and closed the connection.
- Added support for system error handling and an overridable method
trigger_system_error() method in the handling_error_message template.
- Use the correct #SERR value to determine if PCIe Error Signaling
messages should be forwarded from the secondary to the primary interface in root
port and switch port devices.
- Added templates
memory_base_address_split_low and memory_base_address_split_high
to support BARs split into two 32-bit registers where access control is individual per register.
- Moved
LogStream class from SystemC Library to C++ API. The class is now available in simics/log.h.
- Moved event info type aliases inside
EventInfo struct.
- Moved enum
CallbackType into simics::BankIssueCallbacksInterface to narrow its scope.
- Moved internal
systemc.cmake to the 1013 add-on package, reducing the amount of SystemC exposure in the Base package.
- The SystemC support is not yet fully supported on Windows; disabled until fully supported
- Fixed bug with
<code-coverage>.html-report command when using
–tree-summary, paths in the middle of the tree could get excluded even
though there were source files at that location.
- The fallback to use disassemble module was removed,
class_disassembly interface should be present for all supported cpus.
-
Map generation is now updated when a memory-space breakpoint is
planted or removed. This is needed in order for cpus to handle page-crossing
breakpoints (fixes HSD-15017812702).
-
Added type hints and reference documentation for simics.confclass (fixes SIMICS-20150).
-
Added a function SIM_call_python_module_function to call a Python function
from C. It obsoletes the functions SIM_call_python_function and SIM_eval_python,
by providing an easier way to pass arguments and simpler error handling.
The SIM_call_python_module_function function requires Global Context. Also added three additional functions, SIM_pyfunref_import, SIM_pyfunref_call, and SIM_pyfunref_free, which allow Python functions to be called from other execution contexts.
This fixes SIMICS-22852.
-
Added hooks to the pyobj library for the objects_finalized object initialization phase. All Python classes of pyobj now have an _objects_finalized method.
-
Added two methods get_state and set_state to the
break_strings_v2 interface. These are used to support
serialization of console breakpoints.
Any objects that currently implement this interface need to also
implement these methods henceforth. This is however expected to have
limited impact since all known implementations of this interface
reside within the Simics Base package.
- Multicore support was added. Multiple cpus can now be provided to
new-gdb-remote with the cpus argument. Then on the client side use
target extended-remote <ip>:<port> followed by adding new inferiors for
processors and then attach a process id for the cpu to that inferior.
The process ID for each cpu can be found using info os processes in the
client or by running the info command of the gdb-remote object.
- Moved the module to Simics Base, eliminating the SystemC module’s runtime dependency on the SystemC Library package.
- The
stop command now freezes any delta or session values
until the start command is issued. The probe increments
while the sampler is stopped, is now discarded in
the samples and the summary (fixes SIMICS-23258).
- The
plot command now emits JSON compatible with Plotly 3.x,
where the titles are defined inside dicts, and not
directly as strings.
- Fix multiple warnings on disconnect in serial-link (fixes SIMINT-1693).
- The top-level Python module
modules has now been moved to
a sub-module simics._modules (fixes HSD-18044053367).
- VMXMON was updated to compile against SLES 15 SP7 kernel version 6.4.0-150700.53.25-default.
- The oldest supported Linux kernel version that can be used to build VMXMON kernel driver is set to 4.12.0.
- Version 1.16.12 removes unused handling of target PAUSE inside the driver. All PAUSE instructions are returned back to userspace, which is already expected by all supported x86 CPU models.
- Fix return code for PCIe upstream messages
- Added support for the Format NVM admin command.
- Fixed an issue with PRP list processing in cases where the last
element in a PRP list points to another PRP list. This is applicable in cases
where the host issues NVMe commands that have very large data sizes.
- Marked
AfterCallInterface’s methods get_value and make_copy as const.
- Updated
AfterEvent::destroy which now frees event data when an after event is cancelled before invocation.
- Improved SystemC support
- Renamed the doc target prefix from
doc_ to doc- to match other prefixes.
- C++ symbols in stack traces will now be demangled.
- C++ symbols are now demangled when using list methods in the
debug_symbol interface. This also affects the sym-list command and the
code coverage tool (fixes HSD-14026068255).
- The
cmake-wrapper.mk file is only created in hybrid projects with both GNU Make and CMake enabled
- Upgrading the project, e.g. from
addon-manager, does not create GNU Makefiles in CMake-only projects anymore (fixes SIMICS-23343).
- Fixed a regression w.r.t. CMake dependencies. Added back the explicit dependency from
Simics::C++ target to Simics::Simics needed in some build setups.
- Fixed a bug in
project-setup --sc-device. The generated config file for the skeleton device contained invalid syntax.
- Error message was improved for some cases when attempting to
disassemble a file of unhandled type.
- Added commands (see
new-tcf-exec-tracer) for managing tracing with the TCF service SimicsExecTraces (fixes HSD-18043615514).
- Added a new flag
--breaking-change which replaces the
--no-compat flag. This flag is easier to understand, and aligns better with
terminology used by Simics. Existing --no-compat flags continue to work
like before.
- The listing of namespaces for applicable CNS values of the Identify
command now properly lists namespaces when namespaces with lower valued NSID
have been removed.
- The NVMe now correctly responds to the request for Identify Namespace
Data Structure, NVM Command Set for NSID values of 0xFFFFFFFF.
- Use a random number instead of current time when choosing Unix Domain
Socket Path for communication with the virtiofs-daemon.
- Added SystemC support through a new
simics_add_systemc_module function and two new variables; SIMICS_1013_ADDON_DIR and SIMICS_7213_ADDON_DIR.
- Correct the listed order of interfaces in the documentation of the
SIM_new_map_target API function.
- Improve error message when attempting array accesses on non-existing name spaces (fixes SIMICS-23112).
- Various changes in Simics C++ API modelling extensions (SME):
- Added
SME_DISABLE_UNIMPLEMENTED_LOGGING compiler directive to turn off unimplemented write messages
- Enhanced support for save/restore of nested expressions and updated unit tests
- Fixed potential memleak in register expressions
- Support for Microsoft Visual Studio compilation
- Support Intel’s Dellinger model for 3rd party libraries
- Code cleanup
- Unit test restructuring and CMake updates
- When executing
simics.SIM_init_command_line(); simics.SIM_main_loop() after importing simics into a plain Python session Simics now attempts to detect if the Python session was interactive and if so, initialize the CLI for interactive mode (fixes SIMICS-23230).
- Fixed a bug with identifying x86-64 PE binaries. The bug would
result in code coverage not properly working when disassembling such files
and an error would be output.
- Add a new class
intel-io-apic has been added, which is a DML 1.4 rewrite of the original io-apic class and at the same time it merges all features of various other io-apic model variants into one place.
- Documented how to use POSIX shared memory for co-simulation over PCIe.
See chapter
Connecting external Simulators, Emulators or Hardware in the PCIe modeling library
documentation.
- Ensure that the default value of the Multi-Function Device field in
the Header Type register is properly set in multi-function endpoints.
- Ensure that the VMP driver can be built against Linux 5.14.0-570.el9 used in Red Hat Enterprise Linux 9.6 and against vanilla Linux 6.18.
- Now correctly convert upstream PCIe messages to legacy format.
- Fixed a bug in the blueprint adapter component that caused a crash when accessing an attribute of a child port object using
set.
- Updated the method
std_to_attr to catch exceptions during C++ type to Simics attribute conversion. When failed to convert, it reports a Simics attribute error, and return an Invalid attribute.
- The
hostfs functionality is now deprecated. Use SimicsFS
or the Simics Agent instead.
- Hotplug condition checks are no longer logged as
spec-viol.
- The concept of probe-collection has been enhanced. The
system-perfmeter automatically loads a JSON file:
targets/common/benchmark/system_perfmeter.probe_collection.json
This file defines collections that can be used directly
when creating the tool. The add-probe command can now
also accept a probe-collection argument. Users can create
similar JSON files and load them using the
load-probe-collection command. Loaded probe-collections
can be inspected with the list-probe-collection command.
- Fixed a problem on Windows where the files in the generated
project had CR/LF line endings instead of LF only.
- The NVMe now indicates support for PCIe 10-bit Completion tags.
- Added parameters
pcie_gen_speed and pcie_link_width to the
creating commands of the NVMe component. The first parameter sets the link
speed to the highest supported link speed given a PCIe generation of the I/O
controller. The second parameter sets the maximum link speed that will be
supported by the I/O controller.
- The NVMe I/O controller is now a PCIe gen 6 device rather than a gen
5 device.
- Implemented the Namespace Management capability. This allows a host
to create and delete namespaces dynamically as well as attaching and detaching
allocated namespaces.
- Added a new component
nvm_subsystem_comp which has support for
multiple controllers and multiple PCIe connectors. The number of (I/O)
controllers that will be present in the NVM subsystem is controlled by the
n_io_controllers parameter when creating the NVM subsystem using
new/create-nvm-subsystem-comp. They will have controller IDS values in the
range 0…63. All controllers will have the same NVM Subsystem Qualified Name,
but their serial number will be the provided SN parameter appended with
-<controlled-id>.
- The
add-namespace command now also works after the NVMe components
have been instantiated.
- Added a new command
list-allocated-namespace-images which lists all
the allocated namespaces, their UUID, which controllers they are active in as
well as the namespace size and the image object which represents the
namespace.
- The use of
hostfs has been removed.
- Made the
name argument to the bp_legacy_comp decorator optional. If not provided, the component name will be the same as the decorated function name.
- Added support for setting class attributes (such as
_class_desc) on blueprint adapter classes by passing the class_attributes argument to the bp_legacy_comp decorator. Each key-value pair in the dictionary will be set verbatim on the generated class.
- Updated with the latest changes from the TCF open source project.
- The method implementations that may be incurred by instantiating the
read_field, write_field, read, or write templates have all been made
overridable. See the documentation of these templates for more details.
- This module sets up
ram class objects in Simics to use
shared memory as backing storage. For simulation scenarios where Simics
co-exists with an external simulator direct access to the other side’s
memory can greatly improve performance.
- The highest bit is now also cleared when setting screen
data explicitly using the
screen_data attribute.
-
“_” can no longer be used as the name for arbitrary declarations.
Instead, it is now only permitted in particular contexts, and in these
contexts, _ will affect the declaration in a way suitable for when the
declaration is unused in some particular way. This feature is referred to
as the discard identifier, and the contexts where it may be used are:
-
Method-local bindings (e.g. variables and input parameters.)
When a method-local binding is given the name “_”, it will not be added
to scope. This is useful for e.g. unused method parameters.
-
Index variables for object arrays
When _ is specified as an index variable, a parameter will not be
created for it, meaning it cannot conflict with any other definition, and
it cannot be referenced in the code in order to get the value of the index
in question. It also isn’t considered to conflict with any other
definition that gives the index variable a different name. This is useful
when defining an object array specification which does not depend on the
index.
-
Layout member names
When a layout member is given the name “_”, that member will not be
referencable within DML code, but will still affect the memory
representation of the layout. This is useful to represent e.g. reserved
or padding bytes.
Note that as a consequence of these semantics, any reference to _ in code
will always resolve to the discard reference.
-
Added the discard reference “_” — a non-value expression
which may be used as an assign target in order to explictly discard the result
of an evaluated expression or return value of a method call (fixes
SIMICS-21584.)
Example usage:
_ = any_expression;
_ = throwing_method();
(_, x, _) = method_with_multiple_return_values();
- The exported json format now includes git information
and performance scaling governors used.
This new information is now also included in the
html-report.
- Fixed empty –prefix argument crash (fixes SIMINT-1690).
- Added some checks to make sure that Python lock handling functions
are called with correct lock state.
- Fixed a memory leak that occurred when a script-branch exits.
- Fixed a bug where the simulator could crash after cleaning up Python
thread state (fixes HSD-18043277998).
- Fixed a bug that could prevent using the blueprint component adapter if the blueprint had object arrays larger than 10 elements.
- Added the method
create_default_register to the Bank class, allowing customization of the default register type created during bank initialization.
- Improve the
SimicsCpuBuild CMake package. Depends on Simics add-on package 7201.
- The top-level
CMakeLists.txt template now shows how to configure a CMake project without having a Simics project in the same root, by providing the SIMICS_PROJECT_DIR cache variable.
- A bug was fixed where the simulator could crash in
VT_thread_cell_association_begin and VT_thread_cell_association_end functions.
- Reading registers based on DWARF register ID will no longer fail
for cpu models with architectures not explicitly said to be handled by TCF.
- Some instrumentation tools are now be deleted more efficiently,
especially in large systems or when connected to many providers.
The following tools have been changed:
instruction-count, exception-histogram, tracer-tool,
instruction-histogram, memory-profiler, x86-mode-histogram,
x86-branch-profiler, simple-cache-tool, event-histogram,
ram-tracer, and the more internal sr-histogram and sr-tick.
The documentation of the new fast_delete argument in the
instrumentation.make_tool_commands() method explains more details.
Additionally, minor memory leaks observed during tool deletion have
been resolved (fixes bug HSD-14026138730).
- The unique bit-value (1–63) assigned to each instrumentation-filter is
now returned when the filter is removed, allowing it to be reused by
a new filter.
Previously, repeated creation and deletion of filters could exhaust
the available bit-values, leading to allocation failures.
(related to HSD-14026137831).
- Fix an off-by-one error in the memory-profiler which otherwise could
lead to a crash when accessing an element beyond the allocated array.
- Initial release of NVM Subsystem Manager
- Messages with routing set to
PCIE_Msg_Route_Terminate
can now be forwarded downstream. This is to comply with messages
such as PCIE_PM_Active_State_Nak and PCIE_Optimized_Buffer_Flush_Fill.
- Fixed a problem when
project-setup could not find the
Python package and no explicit host Python was specified.
- The namespace value in blueprint imports can now be set
from another parameter defined at the same level as the blueprint
import node. The syntax is the same as for parameter references,
i.e. use the
^ prefix.
- Now the unmapped write access is ignored when using the
MissPatternBank template (fixes HSD-22021721281).
- Now the name of register/field is printed on failure adding it to the bank register hierarchy (fixes HSD-22021719019).
- Behavior change to align with DML: The
Bank::transaction_access method now returns Sim_PE_Inquiry_Outside_Memory for inquiry mode accesses to unmapped memory, instead of Sim_PE_No_Exception (fixes HSD-22021701887).
- Fixed an issue where
after_read callbacks were not invoked if a before_read callback converted the access into an inquiry access. Now, after_read is always called in this case as documented in bank_before_read interface.
- The
libstdc++ library shipped with Simics has been
updated to match gcc 15.2.
- The simulator prints a stack trace when it crashes. Now the printed stack trace includes also stack trace of Python code executed by the simulator at the moment of the crash.
- Added the log setup state (see the
log-setup command) to preferences (fixes SIMICS-17177).
- The
libgcc_s library have been updated to match gcc 15.2.
- Added deprecation warning for
-no-gui (fixes SIMINT-1686).
- Map targets created with
SIM_new_map_target() now becomes
translator, transaction_translator or transaction map targets (in that
order) if they are implemented on an object that also implements the
io_memory interface, rather than becoming io_memory map targets.
This can lead to a change in observed behavior, for example when being
mapped into a memory space, such objects will no longer see the io_memory interface calls.
- Restoring snapshots now avoids some unnecessary work.
This decreases the snapshot restore time by up to 25% in some cases.
- objects of class
tcf-serial-tee will now be created as child
objects of the npk trace object.
- Fixed a bug where very particular hierarchies of
shared and non-shared method overrides together would lead to an internal compiler error (fixes SIMICS-23289).
- The
write method now has a similar semantics as the
read method if the blocking flag to accept is set to
false. In that case it may return -2 instead of blocking.
- Added support for more recent 32-bit ARM kernels
(fixes HSD-22021615804).
For this to work the symbols will need to include
__entry_task symbol, which
is normally included in kallsyms when it contains per-cpu data or in
vmlinux symbols.
- Methods
soft_reset and hard_reset in template hwinit
are now declared shared.
- Added helper methods for issuing PCIe messages downstream
- Added
NEEDS_C23 to modules that needs C23 and at least GCC 13 to build correctly.
- Individual connections is now created as sub-objects of the
telnet-frontend object.
- Implemented the RPMB (Replay Protected Memory Block) feature. This
means that the Crypto package (package 1030) is now required to build the NVMe
device. When using the NVMe device, package 1030 is required for the RPMB
feature to be present in the NVMe device.
- Fixed the UUID reported for the namespaces in the NVMe namespace
descriptors command.
- Fixed the temperature threshold command
- The NVMe now reports an “Atomic Write Unit Normal” value of 0xFFFF in
the Identify Controller Data Structure.
- There is now support for the fused operations Compare/Write.
- There is now support for the I/O compare command.
- The NVMe now supports the sanitization command, particularly the
block erase and crypto erase operations. This includes support for the Sanitize
Status log page as well for sending an asynchronous event when the sanitize
operation is completed. The sanitize operation time can be controlled with the
sanitize_op_time_s attribute (fixes HSD-14026112783).
- The NVMe now captures more reset paths and sets additional fields
appropriately during reset.
- The NVMe now properly handles shutdown notifications. (fixes
HSD-14026112783).
- Added the
nqn_uuid attribute that controls the uuid used in the
reported SUBNQN. This is to support cases where multiple instances of an NVMe
device of the same class can be connected to the same system.
- Added the argument
SN to the component creation commands which sets
the serial number of the NVMe device. The SN is also used to generate a UUID
that will be set as the SUBNQN UUID in the NVMe device.
- The
iface argument to the print-blueprint-state command
was renamed to state.
- A new type
DataAttr has been added that can be used to wrap a tuple of integers. When wrapped this way it will be passed as an attribute of type “d” to objects. Otherwise it would be converted into a list of integers.
- When filtering
bp.list with action or provider the returned
value will now also be filtered.
- Changed
bp.memory commands to be stricter when handling address prefixes to better report combinations that make no sense. It is now an error to plant a breakpoint with a linear address prefix (l:) if the current processor does not support it. It is also an error to use the virtual (v:) or linear (l:) address prefixes if the object argument is a memory-space object.
- The type of the constructor argument for
ObjectFactoryWithArg template is now fully determined by the user-supplied template parameter, allowing both value and pointer types. Users who previously used simics::RegisterClassWithSimics with the second template argument as a type (e.g., MyType) and expected pointer semantics must now explicitly specify a pointer type (e.g., MyType*) to retain the same behavior.
- Fixed a problem using the
cli_mode() function to exit
Python mode in CLI.
- Added arguments to
list-notifier-subscribers to allow filtering on notifier name and subscriber object (fixes SIMICS-17640).
- The
echo device is now included in the Simics-Base
package, as an example of how to use the external-connection
module.
info and status CLI commands were improved.
- Added a functional implementation to the AER capability template. The
error signaling APIs also set appropriate fields in AER registers.
- Added an implementation of PCIe Error Signaling to the PCIe library.
This is interacted with through the
emit_errors group which now exists for
every function (pcie_config bank).
- Added missing log groups for reset and exec tracker.
- Discover UEFI modules on each CPU that can be determined to run in UEFI. With this change, there no longer a requirement that the list of CPUs to be tracked must be ordered with the BSP CPU first (fixes SIMICS-17221).
- The blueprint
usb_hs_keyboard_blueprint has been added to create an USB connectable instance of a USB HS keyboard. Hot-plug connectors are created as well.
- Version 1.16.11 adds detailed report of no-progress and no-action-needed exit reasons for SIMICSTS-1636.
- The blueprint
simics_nvme_blueprint has been added to create an instance of a PCIe connectable Simics NVMe controller with multiple namespaces. Hot-plug connectors are created as well.
- The blueprints
virtio_pcie_net_blueprint and virtio_pcie_blk_blueprint have been added. The former creates a PCIe connectable VirtIO NIC while the latter creates a PCIe connectable VirtIO block device (disk). Both contain their associated hot-plug connectors.
- Added a constant,
Register::NO_OFFSET, to represent invalid return value of the Register::offset method. This constant is also used as the offset of unmapped registers instead of the hard-coded std::numeric_limits<std::size_t>::max() value. The value remains the same.
- The register memory array in the
UnmappedRegister class is now zero-initialized by default (fixes SIMICS-23269).
- Register value initialization now sets the internal value directly, without calling Register::set, to prevent unintended side effects.
- Added documentation in-line with what is founds in the Simics
reference manual for applicable Simics API functions.
- Added types to the
__init__ of the transaction_t class as well as
class member that are always part of a transaction_t instantiation.
- Added values to emums and made these classes subclasses to
enum.Enum.
- Added type hints to function declarations
- Added arguments
provider and action to bp.list to allow filtering on breakpoint provider and action of the break command (fixes SIMICS-17585).
- Show type of break (provider name and command type) in
bp.list and bp.show, and also hide/empty Oneshot and Hit count for wait-for breakpoints (fixes SIMICS-23241).
- Improved the error message to display register offset in hex format for unmapped access.
- Removed deprecated
nocopy class. It still exists in the C++ API v1 sources if needed, but please use the =delete construct instead.
- Improved the log messages that are output by default for partial register accesses.
- Clear/clean the
logs subdir of the test sandbox.
- Updated the Simics project template so it only sets
CMAKE_CXX_STANDARD and CMAKE_C_STANDARD variables if they are undefined. If already defined, they will keep their defined values; giving the user more control of the project setup without modifying the template.
- It is now an error to change the cell attribute of a port object to a value different from its parent’s cell attribute.
- A bug in how script branches start and stop simulation was introduced in Simics Base package 7.58.0. It was fixed now.
- Fixed a problem in the Windows named pipe server, where it
could freeze the process when the named pipe connection was closed
by the client.
- Add feature to communicate to the BIOS what additional memory regions shall be marked reserved.
- Added more unit tests and fixed a bug found by said unit tests.
- A new technology preview feature called
benchmark-monitor has
been added. This introduces a new framework for running and measuring
benchmarks. The framework is implemented as a singleton object
named sim.benchmark. This object will be further improved in
future updates.
SIM_set_thread_name and SIM_get_thread_name Simics API function were added. They can be used to set/get the name of a thread to facilitate debugging when multiple threads are used for simulation.
- Allow MSI-X tables to be located in an external Simics device
and not only as a local bank.
- The
html-report command now emits Java-script code that makes
use of Plotly version 3.0.1, (previously version 2.25.2 was used).
- The
html-report command is also quieter by default. Information
about why certain graphs were not produced can now be seen by
increasing the log-level on the system-perfmeter object to 2 or
higher.
- The
add-probe command is now quieter by default. The new -verbose
flag can be used to get more information about which probes were
added.
- Fixed a problem where an invalid parameter value was not
marked correctly for targets using array parameters.
- The virtio FS device now instantiates the
virtio_fs_fuse as a
subobject, ridding the need to manually connect an instance of it to the chan
connect. This also means that there are new pseudo attributes added to the
Virtio FS device (set in the virtio_fs_fuse subobject), with share being
mandatory to set during instantiation.
- The virtioFS PCIe component now doesn’t instantiate the
virtio_fs_fuse class as this is no longer needed when using the
virtio_pcie_fs class.
- Moved the c++-api code from src/devices to src/extensions.
- Updated with the latest changes from the TCF open source project.
- Added automatic smart punctuation handling when parsing Markdown documents.
This will convert
' and " to proper quotation marks and apostrophes,
... to an ellipsis (…), -- to –, and --- to —.
You can avoid smart punctuation by escaping the punctuation.
This implements SIMICS-23250.
- The
explore probe-collection now captures console output. When this
feature is enabled, the html-report command will display a graph
showing the volume of console output (in bytes) over time. Each data
point on the graph is annotated with the corresponding console
content at the time of sampling, offering deeper insight into workload
progression and helping in bottleneck analysis.
- Improved documentation and
info and status commands.
- Updated PC register handling for x86.
- Version 1.16.10 fixes incorrect string expansion during invocation of
sudo in scripts. This fixes HSD-18042884016.
- Added missing PCIe link registers to the PCI Express Capability
structure in the PCIe config bank.
- The class
EventInfo now enforces that get_value and set_value must be NULL when Sim_EC_Notsaved flag is set.
- Added a new preference attribute
cli_table_maximum_width that can be used to limit the width of CLI tables in batch mode and independent of terminal width in interactive CLI. A value of 0 means that table width is unlimited in batch mode and set to the terminal width in interactive CLI.
- Fixed a problem using
project-setup with host Python,
where the project ended up using the wrong Python path.
- Fixed a bug where the
desc argument of blueprint Param instances would not appear in the table printed by params.help.
- Resolved an issue in the
Field class where the by data approach caused the parent() method to return nullptr for user-defined fields.
- Python wrapping has been improved so that
Path objects are accepted in
function arguments of char * or const char *.
- Python wrapping has been improved so that
Path and bytes objects are
accepted in function arguments of attr_value_t type. They are interpreted as
attributes of types string and data, respectively.
- Added additional XED views: xed-isa-set, xed-extension, xed-iclass, and xed-category
for classifying executed instruction in to different groups.
- Three probes have been added to the
textcon: dev.console.content
provides the console content as a string, dev.console.output_bytes
counts the number of bytes written to the console, and
dev.console.input_bytes counts the number of user input bytes.
- On Linux, when a host serial connection is set up on the
console, it is now possible to switch the host terminal running the
Simics CLI to and from the serial console by pressing
Ctrl+g. To
use this, the tech preview console-switch must be enabled. The
serial console being switched to can be selected using the command
set-console-switch.
- Simplified the construction of
Register and Field classes by not using the constructors that accepted BankInterface* and RegisterInterface* pointers, respectively. The BankRegister class now uses only the Register(MappableConfObject*, std::string_view) constructor, and the RegisterField class uses only the Field(RegisterInterface*, std::string_view) constructor. This change eliminates the need for separate constructors for “by data” and “by code” approaches, reducing template complexity and improving maintainability.
- Updated the API to consistently use the
Description type instead of std::string_view for all parameters and members representing register and field descriptions.
- Updated the interface of
simics::MapNameToInterface::get_iface to accept a std::string_view instead of a const std::string& for the name parameter. This change improves performance and flexibility by allowing callers to pass string literals, substrings, or other string-like objects without requiring conversion to std::string. Existing code passing a std::string will continue to work without modification.
- Optimized the
instantiate command to improve performance when executed repeatedly during virtual platform creation (fixes SIMICS-23237).
- To facilitate debugging of infinite or recursive loops occurring in the transaction paths in the simulated system, logging was added to report a few last intermediate stops on the transaction path. The logging is done with the log level 4.
- Added support for I3C HDR traffic over the
link,
see interfaces i3c_hdr_master and i3c_hdr_slave.
- Removed the default constructor of
simics::Name. Creating an object name with an empty string is now disallowed. All Name instances must be explicitly constructed with a valid, non-empty name.
- Added optional P2SB/NCU connection.
- Added optional IO-APIC connection.
- Changed the behavior of the
ConfClass method ConfClass *add(const iface::InterfaceInfo &iface). Instead of performing the registration immediately, this method now stores the provided InterfaceInfo for deferred registration at a later stage. This allows the user to replace the default InterfaceInfo for BankPort objects.
- The
uefi-module-added notifier will now only be sent out when a
new module is added, previously it could be sent out even without any new
module being added (fixes SIMICS-21367).
- Improved the performance when using Simics
register_view interface to get/set register value.
- Added a type alias
ParentType to the Port template class which refers to the parent type.
- Fixed a problem when setting the
host_pools attribute to
an empty list.
- Fixed a problem where Simics could crash when taking the Python lock.
- The log output of GDB remote has been improved.
- Fixed leaks associated with deleting objects of class
pcie-downstream-port-legacy.
- The
SIM_init_command_line function was fixed not to throw an exception when a simics Python module is executed not from the main thread of a Python interpreter (which may happen when embedding Simics into a Python application). The change fixes HSD-14024457770.
- Fixed the AttributeError that was raised when an invocation of
pcie-config-probe did not find anything.
- Added size-overflow checks for containers during conversion to Simics attributes to enhance robustness.
- The static class member
event_cls is no longer required for user event classes, and the event name can now be passed as a constructor parameter instead.
- Two default log groups,
Register_Read_Exception and Register_Write_Exception, have been added to the BankPort class. These log groups can be used to manage log output when exceptions occur during transaction read/write access.
- Updated the GRML image used in the
qsp-x86/firststeps target and in the Getting Started manual to the 2025.5 release.
- Ported the DML 1.4 version of e1000 to the new PCIe modeling library. Backwards-incompatible change: The
connect phy is renamed to eth_phy to avoid a name collision with the port phy in the new PCIe library referring to the PCIe PHY. e1000 can still use the legacy PCI library for transitional purposes by setting the parameter e1000_use_legacy_pci_library in the device file.
- Auto generated module ID source files now contain
directives that exclude them from ccache (fixes SIMICS-23167).
- Fixed a problem running
project-setup where it failed to
detect a host Python.
- Initial release of the i210 model ported to DML 1.4 and the new PCIe modeling library.
- New component using i210-v2 (i210 ported to the new PCIe library).
- If using
confclass to define a Simics class that has a port class, where the port class lacks a Python class, an exception will be raised if attributes with the same name exist both in the parent and in the port class. This change prevents situations where the value for conflicting attributes is silently overwritten (fixes SIMICS-23132).
- Added two new tracer properties to the
SimicsExecTraces service, "ReadContinuously" and "TracesCountLimit".
If "ReadContinuously" is set to false (which is the default), only the latest "TracesCountLimit" traces are sent when the simulation stops.
When stopping, the client is expected to read all available traces including the final TRACE_LINE_STOP.
If "ReadContinuously" is set to true, the service works as before (fixes HSD-18042581630).
- The rarely used
_warning statement has been deprecated, through
the introduction of a new compatibility feature warning_statement.
Warning statements will be illegal when Simics API 8 or newer is used.
- A new compatibility feature
simics_util_vect_without_provisional has been
created. In files without a provisional simics_util_vect; declaration, the vect
syntax is only permitted when this feature is enabled. This feature will be
disabled in Simics API versions > 7, where all uses of vect instead require
explicit provisional declarations.
- A new provisional feature
simics_util_vect has been added. When
provisional simics_util_vect; appears in the top of a DML file, DMLC will
no longer print warnings when the vect syntax is used in that file.
- Added documentation that describes how the object data works for port classes when using
confclass (related to SIMICS-23132).
- Remove faulty information about
cls being a pre-defined property of the Python class when using confclass.
- When
sloop is used with Python 3.11 or newer, sloop.TaskGroup
now redirects to asyncio.TaskGroup. When older Python versions are used,
the class remains as a local best-effort implementation. The implementation
is necessarily incomplete because of inherent limitations in the Python 3.10
API, although these limitations should rarely show up in normal usage.
- Rewrote how sloop interacts with
asyncio. This does not affect the
API, but the integration with asyncio is now tighter which allows native
coroutines like asyncio.delay to be used directly in sloop coroutines.
The tighter integration improves asyncio ability to detect uncaught exceptions
in orphaned tasks, which can uncover previously hidden errors in existing code.
There is still a possibility that exceptions in orphaned tasks are delayed or even
suppressed; the best is generally to rewrite them using a TaskGroup.
For instance, consider the following:
async def reset_value_guard():
while True:
await wait_reset()
assert dev.some_state == expected_reset_value
async def smoke_test()
t = sloop.create_task(reset_value_guard())
await sloop.wait(snoop.Seconds(cpu, 10))
sloop.run_until_complete(smoke_test())
Before this change, an assertion failure in the reset_value_guard coroutine
would remain unnoticed. After this change, the error will be detected and captured
as an exception, but not until the task object is garbage collected, which will
happen after the delay. The proper solution is to use a TaskGroup in
the smoke_test function, which ensures all exceptions are immediately
propagated:
async def smoke_test()
async with TaskGroup() as tg:
tg.create_task(reset_value_guard())
await sloop.wait(snoop.Seconds(cpu, 10))
- Call correct disconnect function on reconnect failure after reading a checkpoint (fixes SIMICS-23161)
- Added an attribute
dynamic_size that allows the disk to grow with every added namespace.
- Exceptions caused by errors in the arguments to a function wrapping a CLI command now use the variant of the argument names that are valid Python identifiers.
In some cases the CLI command argument names must be adapted to make them valid Python identifiers when wrapping the CLI command as a Python function.
This fixes SIMICS-23156.
Before the change the adapted names were not used in exceptions raised when the wrapping detects errors in the arguments passed to the wrapped function.
- Fixed a problem with
image where an out of bounds access would cause an Abort (fixes HSD-14025235661).
- Warnings for deprecated command line options were improved.
- Added new command
check-overlaps for finding overlaps in memory-spaces (fixes SIMINT-1474).
- Fixed a bug where error logs and broken script branches in YAML
target scripts with Python code did not result in errors when using
--stop-on-error and batch mode (fixes SIMICS-22686).
- The
sim.status command now reports the maximum number of simulation threads that can be used by the simulator. This number is determined by the loaded configuration and multicore- and multimachine-accelerator settings. The number of threads that are actually used for simulation may be less than this maximum. The number of threads that are used for simulation is also reported by the sim.status command.
- Added a port of the module to DML 1.4. The existing DML 1.2 version of the library is kept for backwards compatibility. DML 1.2 devices that include the library will use the DML 1.2 variant while DML 1.4 devices will use the DML 1.4 variant.
- Fixed compile error when
cap_version was set to 1 in
exp_capability.
- Added param
tlp_prefix_log_or_header_log_ctd_len in
aer_capability to allow removal of the TLP Prefix Log registers. This is
needed for some devices where the next capability starts immediately after the
AER capability and would otherwise alias with the nonexistent TLP Prefix Log.
- Raised the log level of Power Indicator related logs from 1 to 2.
- Reworked link training implementation. This means a breaking change
for the
do_link_training method of the exp_link template if that has been
overridden. The link training implementation is now more intuitive to extend,
and includes native support for Flit Mode negotiation.
- The
project-packager script now accepts all valid
semantic version strings as package versions.
- Duplicate keys in YAML files are now no longer allowed
(fixes HSD-14025356606).
- Adjustments to support more target operating system than Linux.
- Added
clean-<module> target for cleaning build files and forcing a rebuild of the given module.
- A bug with
SIM_break_message was fixed where the same dynamically allocated memory could in rare cases be freed multiple times.
- Added a Notifier chapter to the reference manual.
Fixes SIMICS-23144.
- Added support for NAT handling in port forwarding by setting the attribute to preserve IP (fixes SIMICS-23005).
- The rare cases where
SIM_transaction_wait is executed while the callback passed to VT_cross_cell_call is in progress are handled correctly now. Previously, the simulation could hang in such cases.
- The
libgcc_s library have been updated to match gcc 15.1.
- Bumped the C++ library shipped with Simics to libstdc++.so.6.0.34.
- A new
Sim_EC_No_Serialize event flag as been added.
See the documentation for the SIM_register_event function for more information, bug SIMICS-21783.
- Fixed incorrect memory accesses in
pcie-downstream-port-legacy when
the invoker of the io_memory or the pci_upstream interfaces is not a PCI
device.
- At reset, the tracker will now first attempt to access memory using
the cpu that triggered the reset. Previously it would use the cpu first
that had been added from OSA framework, which could lead to issues if that
cpu did not have any virtual to physical translation set up
(fixes HSD-18042427500).
- The classes
Param and ParamGroup now accept : characters in their names.
If a : is used, the parts between two colons (or start of name and the first colon) will be used as layers in the parameter hierarchy.
- A
ParamGroup can now also be created with only a name and a list of Param or ParamGroup elements. The name will become a layer in the hierarchy of parameters, and all elements of the list will be grouped underneath this layer.
- Added breakpoint type for Model-Specific Registers (MSRs).
All x86 processor models, starting from Pentium®, use MSRs
- Fixed a bug in the
AFTER_CALL macro that caused a memory leak when the passed arguments included a string.
- Simics now logs a message when a module which has libasan or libubsan
dynamically linked has been loaded. This will only happen if the environment
variable
USING_SANITIZED_SIMICS_MODULES is set, which is done when starting
Simics using the simics-asan build target added in Simics cmake projects.
- Added PCIe function level commands
pcie-dma-read and
pcie-dma-write that are added to all PCIe functions (configuration banks)
implemented with the newer PCIe library pcie/common.dml". These commands
issues upstream PCIe memory requests.
- Added global commands
pcie-config-read, pcie-config-write,
pcie-config-probe that can read/write/probe PCIe hierarchies by passing a
BDF.
- Renamed
"AddressPreferences" to "AddressTypes" and changed the value type to a number with specific bits for different address types. Also provided the supported "AddressTypes" in the tracer status reply.
- Improved stepping performance when using a remote symbols proxy
(fixes SIMICS-22836).
- Added tutorials on how to monitor Ethernet traffic and how to set network breakpoints.
- Fixed memory leaks related to map targets when objects of classes
pcie-downstream-port and pcie-downstream-port-legacy are deleted.
- Fixed memory leaks related to retrieving certain attribute values
(fixes HSD-22021270675)
- The
pcie-downstream-port-legacy now correctly adds a requester id
for generic_transaction_t mem-ops that are issued by legacy PCIe functions
to the io_memory and pci_upstream interfaces of its pci-bus.
- Fixed a bug in
sloop.TaskGroup: When a subtask raised an exception
immediately, this would sometimes be propagated as a CancelledError
exception (fixes HSD-15016545944)
- Improved the performance of the
RegisterValue snooper when waiting
for a long time on a register in a bank implemented using the C++ API v2.
- Fixed a problem where some parameters were missing when
several nested layers of array parameters were used (fixes
SIMICS-23141).
- Fixed a problem where invalid UTF-8 data could appear in checkpoints.
- The instrumentation tracer tool has a new option,
trace-history-size
to allow a cyclic buffer in memory to be recorded instead of printing
to the console or write to a file. This can speed up situations when
only the last instructions in a run should be traced. The buffer can
be written to file with the <tracer_tool>.save-trace-buffer command,
or printed to the console with <tracer_tool>.print-trace-buffer
command.
- Version 1.16.9 performs a fast return from system call if the IRQ no-progress situation is detected. This addresses SIMICS-23084.
- Fix the NVMe identify command for CNS value 8 (I/O Command Set
Independent Identify Namespace data structure). This resolves a problem with
NVMe drivers trying to leverage mandatory NVMe 2.0 features.
- Set Subsystem ID and revision ID fields for virtio PCIe devices to the values given as “SHOULD have” in the virtio specification.
- The
generate_dml_compile_commands_json() function now instead adds
a build target for generating the dml_compile_commands.json file rather than
doing it during configuration. This is necessary in order to capture transitive
dependencies of the Simics modules. When using the Simics Modeling VS Code
extension,
the extension will automatically build this target if CMake configuration has
been done within VS Code using the CMake Tools extension. It also no longer
needs to be called at the end of configuration as that is handled internally in
the function.
- Command
list-pcie-hierarchies now shows if a PCIe function has
been disabled which makes it inaccessible.
- Added -r to list sub-component connectors and -w to walk connected ones for command
get-connector-list (fixes SIMINT-1674).
- Added a new service
SimicsExecTraces which collects execution traces and sends the traces to a TCF virtual stream, and optionally saves it to a file. The traces contains data similar to the output of the new-tracer-tool command (fixes HSD-18040970198).
- Added support for Github Flavored Markdown-style alerts and CommonMark-HS-style definition lists.
- ARM aarch64 register layout will now be sent in XML format to gdb
and FPU/SIMD registers will be included.
- x86 MSR accesses that go through the
osa_machine_query interface
will now use the x86_msr interface to access registers instead of the
int_register interface (fixes SIMICS-23113). As a fallback if this
would break something a user can set the enforce_int_register_use
attribute to enforce the earlier behavior.
- The file
requirements.txt in the project is now only used
to add extra Python packages by the user.
- When a host Python is used and
--no-venv is not used,
project-setup will now automatically install Python packages
defined by any requirements.txt file that is located in the root
of any Simics package added to the project.
- When a host Python is used,
project-setup will now
automatically create a Python virtual environment and install the
Simics Python distribution package and all its dependencies into it,
unless the --no-venv command line parameter is used.
- Added a parameter
--python to project-setup which can
be used to specify the host Python to use when launching Simics from
the project. The system PATH is used to resolve the specified
path.
- Added
regex parameter to expect_exception_mgr() to set an
expected pattern in the string representation of the expected raised
exception.
- Version 1.16.8 adds support for SEAMCALL exiting, fixes corruption of target IA32_TSC_AUX, removes support for obsolete MPX, removes slow deprecated entry path for REQ_VM_ENTER.
-
Added porting rules to automatically convert event objects in DML 1.2 into simple_cycle_event or simple_time_event when applicable.
-
Added support for the templates simple_cycle_event, simple_time_event, uint64_cycle_event and uint64_time_event in the forward compatibility layer provided by dml12-compatibility.dml.
With this change, DML 1.4 code for events will normally work out of the box also from DML 1.2 devices.
If you have previously worked around the 1.2/1.4 discrepancy with code like #if (dml_1_2) { template simple_time_event { ... } }, then this change will give name clashes and you may need to remove all such workarounds from your code.
It seems fairly common that this change causes compile errors for event code that is branched on #if (dml_1_2), where branches differ only on method signatures.
In such cases, it is usually safe to remove the #if and only keep the 1.4 branch unmodified. For instance:
#if (dml_1_2) {
post(t, NULL);
} #else {
post(t);
}
can be collapsed into post(t);, and likewise:
#if (dml_1_2) {
method event(void *null_data) {
do_stuff();
}
} #else {
method event() {
do_stuff();
}
}
can be collapsed into:
method event() {
do_stuff();
}
-
Fixed a regression where e.g. cast(0x400000000, uint64) would not
be considered a constant value (fixes SIMINT-1675).
- Transaction going downstream in PCIe hierarchy now by default goes
through a
transaction_translator implemented within PCIe root and switch
ports. This simplifies adding atoms to downstream transactions, applying
access restrictions from a PCIe port and re-direct the transaction to a
different target dynamically.
- Added support of repeated start (HSD-14024926364).
- Fixed a bug where recursively nested states could lead to a Python
RecursionError being raised.
- Commands
interrupt-script-branch and break-script-branch will now terminate immediately even those script branches that use try/except commands for exceptions handling. Previously, except handler was mistakenly invoked when a Simics script branch was interrupted with the interrupt-script-branch or break-script-branch command (fixes SIMICS-16499).
- Now
print-device-regs command prints the output in table format (fixes SIMICS-22430).
- Replaced the search with a simple sub-string search instead.
This is simpler, the index is smaller, and there are less confusing edge cases.
As part of this we have also added toggles to do Match Case and do Whole Words search.
Fixes SIMICS-22097.
- Added
read_custom() and write_custom methods to the memory
group of configuration banks to streamline adding additional atoms to upstream
memory requests. Also added memory_read_custom(), memory_write_custom()
and translation_request_custom() to the ats_capability template for the
same reasons.
- Fixed a problem on Windows, where a project could not be
created using a vanilla host Python.
- Fixed a problem when an exception was raised when exiting Simics when
running with Python 3.13.
- Blueprint expansion logging now also shows nested substates and identifies aliased states.
- Command
print-blueprint-state now has a flag -show-unbound which shows unbound states in the output.
- To improve code expressiveness and readability, the connection blueprints
uart, sata, usb, and eth in std-bp/state.py have been renamed to uart_connection, sata_connection, usb_connection, and eth_connection, respectively. The original names have been kept as aliases for backwards compatibility.
- The
GFXConnectionState state was split into two separate states: GFXInputConnectionState and GFXConsoleConnectionState because it turned out to be simpler to model if the input and output directions are handled separately. This change breaks backwards compatibility.
- Added support for
pcie-downstream-port-legacy connections to the pcie_slot and pcie_device_slot blueprints. Now, by default the pcie_slot blueprint assumes that it connects to a pcie-downstream-port-legacy. If this is not the case (when connecting to a legacy pcie-bus or a new pcie-downstream-port) set the is_downstream_port_legacy argument of the blueprint to False. The pcie_device_slot blueprint now has an optional is_new argument (defaults to False). If this is True a pcie-downstream-port-legacy will connect this device as a new-style end point. If it is False it will be connected as a legacy end point. Since all other buses (pcie-bus or pcie-downstream-port) can only handle one kind of connection anyway, they will ignore this.
- Fixed two bugs that prevented proper function of legacy connectors for UART connections.
- Parameter
id was added to list-script-branches command. The parameter can be used to show information only about script branches with specified IDs (fixes HSD-14016166353).
- Converted the guide to Markdown.
- When
impl.cfg_to_conf bridges are mapped in cfg_space due to
mappings that have been placed in conf_space, they are now mapped with the
same priority as the corresponding mapping in conf_space.
- The
explore probe-collection now include additional probes, and
there are graph-specification generating additional graphs for these
probes.
- The report generated through the
html-report command now includes
filters to show or hide plots dedicated to a specific objects,
classes or modules.
- The
html-report command can now distribute graphs across multiple
html-files. Each graph can specify an alternate file location;
currently cpu.html and cell.html are used. The command now has a
one-page switch to consolidate all contents into a single file, as
before.
- New API function,
SIM_event_class_flags to get the registered event flags for an event class.
- New API function,
SIM_get_event_class to get hold of the event class registered on a configuration class.
- Improved the log messages that are output by default for partial register accesses (fixes #356).
- Adding import clarification to documentation (fixes SIMINT-1673).
- The
summary command has a new argument, histogram_max_lines, where the maximum
lines in a histogram can be set, otherwise the max number of lines are taken from the
table settings as given by the table-setting command in the monitor.
- Add port object handling to blueprint component wrappers (SIMICS-23038).
- The attribute setter now provides an informative message to the user, rather than logging an error message on the device object.
- The class method
set_bank_as_initialized in MappableConfObject has been renamed and its functionality updated to write_protect_iface_maps. This change is designed to offer a clearer and more intuitive approach to managing the write protection status of iface_maps.
- A bug was fixed where the
cli.sb_create Python function sometimes failed to start a script branch.
- The
set-min-latency and set-time-quantum commands now
have the same count and unit arguments as the run command.
- The generated project trampolines now use the value of the
SIMICS_PYTHON environment variable that was set when
project-setup was run.
- Fixed a problem in clock breakpoints when floating point
numbers were used.
- The clock breakpoint description now respects the settings
done using the
output-radix command.
- Updates in Simics C++ API modelling extensions (SME):
- Cleanup of build dirs
- Added force flag for deletion
- Added include for std::sort in unittest
- Added the
SimpleBankPort class to make it easier to register a bank port.
- The
sync-info command has been renamed to print-sync-info.
- When the
set-time-quantum command is used for inspection,
i.e. without any arguments, it will now print its output also when
run from a script.
- Make
list-modules handle paths with embedded .. better.
- The
help command can now show information about
interfaces defined on loaded classes.
- The
module, -show-port-classes and substr arguments of the
list-classes command now work correctly when used together.
- When running Simics and providing multiple scripts on the
command line, if there is an error from one script then the
following scripts are now ignored.
- Fixed a problem in
list-failed-modules where some failed
modules were not included.
- The
tcf object is now marked as permanent and cannot be deleted
once it has been created (fixes SIMICS-23082).
- Fixed a problem in substring matching in the
print-device-regs command, where certain strings were not matched
correctly.
- The
html-report now emits tooltips that appear when hovering over
graphs with a defined description property, describing what the
graph(s) show.
- The
new-system-perfmeter explore probe-collection now includes
the new cpu.vmp.disabled_reason probe, along with a graph in the
html-report command.
- The probe-monitors’
.status now includes more information
on how each probe has been added.
- Reduced output when
new-system-perfmeter is run;
added probes are no longer printed.
- Fixed a problem where a process-histogram could be created
without a software tracker (fixes SIMICS-21872).
- Fixed a problem where the host Python setting was not
reflected to the Simics launch.
- Make package detection work regardless of use of “..” in package and module paths.
- Added support for launching simics through
python -m runsimics ....
This only works in a Python virtual environment set up with the Simics-Base distribution package and its dependencies.
new-tracer-tool flags -print-opcode, -print-memory-type and
-print-access-type will now work properly after being mixed up.
- Fixed a bug in the
RegisterField class that prevented fields from being registered in an array with names like f[0].
- Resolved an issue with
RegisterClassWithSimics class where an unspecified dependency existed between its static constructor and the static variable cached_group_id. This dependency could lead to initialization order problems.
- When running Simics with
--verbose, the message about
reading module capabilities is now printed on both Linux and Windows
host.
- Removed obsolete tutorials.
- Fixed a bug in
set-prioritized-packages, which caused the command to not affect the Simics module load order.
- Calling
SIM_process_work without a callback is no longer allowed.
- When using
pip install to install the Simics Python
distribution package, e.g. in a Python virtual environment,
intermediate build directories are now created in a temporary
directory, given by Python’s tempfile.gettempdir(), instead of in
the directory where the Simics-Base package was installed.
- A dangling memory reference when demapping an object inside an ongoing transaction has been fixed, 18041575398.
- Added a new member function
dev in the Connect class. This function returns the Simics device object that contains the Connect class instance (fixes HSD-14024355119).
- Added support for a two-argument version of the GROUP_ID macro, allowing users to specify both an object and a name (GROUP_ID(OBJ, NAME))(fixes SIMICS-23056).
- The default way to install the Simics Python module no
longer uses editable mode.
- The Simics Python module location in the Simics-Base
package has been moved from
<host>/bin/py3 to <host>.
- A bug where the simulator could crash after threading mode was changed was fixed. The respective commands, e.g.
set-threading-mode, now print an error message and do no changes if they are called while there are uncompleted calls to the SIM_transaction_wait function. Unfortunately, the simulator cannot update threading mode while there are ongoing calls to SIM_transaction_wait function (fixes HSD-18040613289).
- Command
list-pcie-hierarchies now shows if a PCIe function has
been disabled which makes it inaccessible.
- The
api-help command now pulls in reference documentation from add-on packages that include such documentation.
- The
print-image-memory-stats command no longer truncates output after 40 rows.
- The memory-map command now accepts
substr = <substring> that can be used to filter the output from the command (fixes HSD-22020823986).
- Added support for platform breakpoint type
VMClear
(fixes HSD-13012732428).
- Updated aarch64 register handling to support updated register names
in cpu models.
- Added two new
I3C interfaces: i3c_hdr_master and i3c_hdr_slave.
This is to support modelling of the HDR transfers modes in I3C (fixes HSD-22020865351).
- Python bindings for the the following interfaces have been added:
alg,
arm_cpu_group_event,
arm_cpu_group_exclusive,
arm_cpu_group_tlb,
bank_after_read,
bank_after_write,
bank_before_read,
bank_before_write,
class_disassembly,
dist_control_node,
dummy_memory_page,
gbic_transceiver,
icode,
instrum_registration,
mips_exception_query,
nios_cache,
nios_custom,
pcie_link_training,
pool_protect,
sparc_v8,
tcp_connection_info,
vga_update,
x86_exception,
x86_memory_access,
x86_pkg_cstate,
x86_smm,
x86_tlb_v2
- The commands
print-device-reg-info will no longer truncate output after 40 lines (fixes HSD-22020938608).
- Updated ARM register handling to support updated register names
in
arm-v8 cpu models.
- Added common functions
disable_function and enable_function to template config_bank
to temporarily make a function and its resources inaccessible over PCIe (fixes HSD-22020936945).
- A PCIe message that cannot be delivered to legacy endpoints because
they are missing interface
pci_express is now treated as a warning instead of an error.
It is allowed in Simics to directly connect PCI endpoints to PCIe hierarchies,
so these scenarios will happen by design.
- The
html-report command has been slightly improved. Values are not truncated
as much (which we do to reduce the size of the html). Generated class probes
are now displayed in its own section.
- Improved escaping of non-ASCII characters when echoing console
output to the Simics command line: Bytes >= 0x80 are now escaped as
\xNN,
unless they are part of well-formed UTF-8 characters.
- Added support for customizing TX bandwidth when using ETG (fixes SIMICS-23028).
- The RISC-V blueprints have been moved to a separate
risc-v-simple-bp module.
- The QSP-x86 blueprints have been moved to a separate
qsp-x86-bp module.
- The standard blueprints have been moved to a separate
std-bp module.
- Added network breakpoints type (fixes SIMICS-22782).
- Reintroduced deprecated functions, variables and classes to maintain ABI compatibility with Simics Base version 6.0.215.
- Updates in Simics C++ API modelling extensions (SME):
- Additional checkpoint testing.
- Minor documentation update.
- Allow specialization of functions
get and set in sme::field.
- The implementation of methods for the following classes has been moved to their respective .cc files:
Bank, Field, HierarchicalObject and Register.
- Fixed a regression on Windows, where Simics would crash on startup on systems with 8.3 filenames enabled (fixes HSD-14024450791).
- Fixed the
release-notes command to print the right version for each package release it lists.
- The simulator now reports an error if a snapshot of the simulation state is taken while there are uncompleted calls to the
SIM_transaction_wait function. Previously, no errors were reported and an invalid snapshot was created. Unfortunately, the simulator cannot save simulation state in such cases so an error is now reported.
- New
transaction-wait-all-completed notifier was added to Simics. It helps with saving simulation state when SIM_transaction_wait is used. One can advance simulation - e.g., with the bp.notifier run-until name = transaction-wait-all-completed command - to the point where it is allowed to save simulation state with the write-configuration command.
- The
list-transactions command now accepts new flag -show-only-waited. See list-transactions’s documentation for the description of the new flag.
- When using Simics as a Python module, the default of
sim->batch_mode is now TRUE.
- Added network breakpoints using new network breakpoints interface (fixes SIMICS-22782).
- x86-64 register layout will now be sent as XML to the gdb client.
To fall back to earlier behavior without register layout as XML, set the
no_xml_registers attribute to TRUE.
- x86-64 targets are now accessed using describe_registers interface,
this allows accessing registers larger than 8 bytes, such as floating-point
registers (fixes SIMICS-22966).
- Registers larger than 8 bytes can now be properly accessed for
Xtensa models.
- Updated error handling. Some error logs and asserts that depended on
the gdb client were replaced by warnings.
- Fixed an issue with
i3c_link_endpoint where checkpointing would
fail if done while the delivery of any I3C message is still pending (fixes
SIMICS-23031).
- The Linux tracker now properly handles threads for kernel versions
6.7 and more recent. Earlier there used to be a lot of error logs output for
such kernels and process threads were not found (fixes SIMICS-22771).
- If
project-setup detects a location of Simics package 1033,
it will now automatically create a package list file in the new
project with the path to that package.
- The memory size calculation now by default returns the sum
of
ram image sizes, unless the target hierarchy top object has
memory_megs or memory_size attributes.
- Version 1.16.7 removes deprecated and unused driver feature of Intel® AVX. The more generalized driver functionality for all XSAVE-enabled ISA extensions has been available for the last 8 years.
- Added WP pin functionality to
generic-flash-memory (fixes SIMINT-1644).
- Added an attribute
dynamic_size that allows the disk to grow with every added namespace.
- Moved the implementation of
Event methods to event.cc to adhere to the Simics C++ Style Guide.
- Deprecated the
simics::get_interface template function in favor of simics::detail::get_interface.
- To avoid name collisions, the C++ API code has been moved from the
simics::iface namespace to the simics namespace. For backward compatibility, the files in simics/iface/ still include the corresponding headers in simics/.
- Added rvalue assignment operator to
simics::AttrValue for automatic memory management of attr_value_t.
- Added
crc.dml for DML 1.4 to Simics-Base. The file existed previously but was not packaged (fixes HSD-16023042081).
- Elements of compile-time list expressions are now allowed to be
non-constant expressions (fixes SIMICS-13113).
- Added chapter
Connecting External Simulators, Emulators and Hardware and corresponding sample code.
- The
json-merge command now gives an error if the number of samples
for the probes differ. The new -truncate-samples flag can
circumvent the error and truncate the sample lists to the lowest
number. Previously, an inconsistent number of samples caused Python
errors when later generating a html-report on the merged run.
- Added support of deletion of etg object (fixes SIMICS-22958).
- Fixed out of bounds address read (SIMICS-22864).
- Added breakpoint type for Model-Specific Registers (MSRs).
All x86 processor models, starting from Pentium®, use MSRs
- Fixed a bug about pointer casting in the
from_obj function. In the
from_obj utility function, the direct cast from void* to T* could lead to incorrect behavior when T is derived from ConfObject but ConfObject is not the first base class. This could result in incorrect pointer arithmetic and potentially undefined behavior.
- Deprecated method
group_id of the ConfObjectRef class. If there is a need to get the id of a log group, use the macro GROUP_ID(NAME) or ConfClass::getGroupId instead.
-
Allow nesting SIM_process_work calls that have done callbacks (fixes SIMICS-16444).
-
Fixed a problem with Python wrapping of negative
enumeration values (fixes SIMICS-22917)
-
Simics will now issue a warning if two modules with the
same name are detected in the same directory. It is undefined which
module will take precedence over the other.
-
The search order for Simics modules has been changed: If
multiple modules with the same name are available on the search
path, then Simics will select one based only on which directory it
resides in. Most properties of the module search order remain the
same as before; in particular, modules built in the project or added
with add-module-directory still have higher priority than modules
from any package, and modules from prioritized packages still have
higher priority than modules from non-prioritized packages.
However, when choosing among conflicting modules e.g. among
non-prioritized packages, Simics previously preferred the module
with the newest build date; this property is no longer significant.
Technically, the new search order is based on Python’s sys.path:
Simics adds entries in sys.path for all module directories, and
then searches for modules based on the order they appear there. If
the Simics-managed sys.path entries are tampered with, some
commands (set-prioritized-package, add-module-directory) will
report an error and refuse to work. A new CLI command
reset-sys-path has also been added to restore these sys.path
entries to a consistent state.
- The number of proxy suspend and resume events have been reduced and
will no longer be sent when evaluating symbols as part of stepping
(fixes HSD-18040837875).
- Updated internal lock handling after fixes to SIM_process_work.
- Added support for PTTT breakpoint handling (fixes HSD-18040154494).
- A planted breakpoint will now be reported as Software type unless
explicitly requested to be of Hardware type.
- Fixed a problem with the Python bindings of
generic_transaction_t in the case where it is included as a value
in another struct in a Simics module.
- Added
.name members to the hierarchy of registers and fields
returned by dev_util.bank_regs (fixes HSD-13012531007).
- The Blueprint framework is now no longer a technology
preview but a supported product feature.
- Added support for registering class attribute (fixes SIMICS-22826).
- Removed the semicolon at the end of the definition of the
SIM_LOG_XXX_STR macros. User should add the semicolon to complete the statement.
- Added support for the
SIM_LOG_WARNING_STR macro.
- Moved the equality and inequality check for
ConfObjectRef to non-member functions to maintain the symmetry of the operators.
- Fixed a bug where a
ConfObjectRef object returned an incorrect name after being moved. Due to the change in the function signature of the name method inside the ConfObjectRef class, all dependent code needs to be rebuilt.
- Moved the
array_index and expand_names functions to utility.h.
- Fixed a bug in the inequality check for
ConfObjectRef objects.
- Fixed a bug in function coverage handling where the HTML reporter
could assert if there where overlapping mappings in the raw report.
- When using instruction level branch coverage and a conditional branch
instruction that does not belong to any mapping executes, the branch
information will now be stored under
unknown_branches in the raw report.
- The
sim.status command now reports the total wall-clock time when the simulation was running.
- Fixed clearing previous checkpoint paths when doing
write-configuration -independent-checkpoint (fixes SIMICS-22928).
- The
check-cell-partitioning now ignores the sim.transactions object.
With this change deferred transactions from different cells will no longer tie the cells together (fixes HSD-18040888679).
- Added support for info and status commands to
confclass (fixes SIMICS-22924). Example of usage is in the Model Builder User's Guide.
- Fixed so that early deletion of a cell will not crash.
- The
check-cell-partitioning changed to also check that ports are in the same cell as their parent (fixes SIMICS-10221).
- Added a section that describes how to migrate
pyobj classes to confclass in the Model Builder User's Guide manual (fixes SIMICS-20255).
- The bundled Python distribution has now been removed from
package 1000 and is only distributed in package 1033. It is
typically necessary to install both these packages for a functioning
setup.
- Improved crash handling when a fatal error occurs while simulation
is running, user can now exit Simics properly (fixes HSD-22016266435).
- Using GDB now requires package 1033 to be installed and linked in the
Simics project.
- Fixed an issue where a memory corruption could occur if the TCF
channel was closed in the middle of a step.
- The triggering context ID in
containerSuspended events was better
selected under some circumstances when stepping.
- Fixed an issue where simulation could not be stopped through TCF
protocol, if the TCF object was created while simulation was already
runnining.
- Added support for 16-bit access in VMCS memory contexts 16-bit access (fixes 18040970189).
- Fixed a bug where PDB-handling could crash when host Python was used.
- Added the
COVERITY pragma, which allows for the manual suppression
of defects reported by Synopsys® Coverity® for particular DML lines, as long
as Coverity support is enabled by passing --coverity to DMLC.
- Added a system and syntax for DMLC pragmas. Every supported pragma is
named and documented within the Pragmas subsection of the DML 1.4 Reference
Manual.
- Added checks that cause DMLC to reject the use of any log level but
1 for log statements of kind warning, error, or critical; and reject
the use of any subsequent log level for these logging kinds but 1 or 5
(fixes SIMICS-22401). For compatibility reasons, these checks are not
performed with Simics API version 7 or below unless
--no-compat=meaningless_log_levels is passed to DMLC.
- Log statements of kind
warning, error, or criticial now
support the use of 5 as a subsequent log level, meaning the log will only
happen once. Any other value of the subsequent log level but 1 will be
treated as 5 for these logging kinds.
- The DML files wrapping the Simics API now expose every type and
(for
enums) associated symbols by default, addressing the issue where
several useful types provided by the Simics API were not made available
(fixes SIMICS-19133).
- Fixed an issue where initializing a
local variable via a method
call was not properly type-checked, which could result in invalid code being
accepted, as well as incorrect semantics, invalid generated C, or undefined
behaviour (fixes SIMICS-22874).
- Fixed an issue with debugging Xtensa models with registers larger
than 8 bytes, which would crash Simics when accessing the register.
Such large registers will now be ignored (fixes HSD-22020761198).
- Fixed handling of early dealloc to prevent device from crashing.
- Fixed so that early deletion of a link will not crash.
- Failure to read physical memory will now be logged as a warning
instead of an error.
- Fixed handling of early dealloc to prevent device from crashing.
- Functions will not be able to issue PCIe Memory Requests if the Bus
Master Enable bit is not set. Ports are further more not able to forward
upstream Memory or I/O Requests if the Bus Master Enable bit is not set.
- The
html-report command output has been slightly optimized, to reduce the size of
the generated HTML code. For very big reports with many samples and graphs, the
browser can still become sluggish.
- Added virtual time mode with simulation time as option for NTP (fixes SIMICS-22778).
- Updated
list-port-forward-setup command to silently return a list that contain incoming port forwarding data (fixes SIMICS-22913)
- Fixed handling of early dealloc to prevent device from crashing.
- Fixed handling of early dealloc to prevent device from crashing.
- Stop timer when mode changes from TSC-deadline.
- Fixed a problem where iteration over namespace objects led
to an infinite loop.
- Fixed a bug that led to error when disconnecting an ethernet link without a probe instance as attribute. Also the bug was really disconnecting an ETG (fixes SIMICS-22892).
- The
list-thread-domains command now always reports cell thread domains. Previously,
cell thread domains could be omitted if there were no CPU or clock objects in them. This could be confusing (fixes SIMICS-22384).
- Removed special handling of parenthesis in simics code blocks.
This was undocumented functionality which caused confusion and confusing errors.
- Added the Migrating from IO Memory to Transactions section from the Simics 7 migration guide into the Simics 6 migration guide and moved it next to the major version migration guides, since it is not related to a major version. One can migrate from IO Memory to Transactions within Simics 6 itself. Also added a section on align-size based transaction splitting when migrating away from IO memory.
- Version 1.16.6 adds preliminary support of using host’s 5-level paging to represent target’s 5-level paging (classic and EPT) is added. It requires a host that supports both LA57 and EPT5.
- Added support for the
RegisterViewCatalog interface in the C++ BankPort class.
- The
sim->cell_list attribute has been converted to a pseudo attribute (fixes SIMICS-21638).
With this change the value is always the list of active cells.
The attribute is now read-only.
- MSI are now sent via a
transaction interface.
- Fixed kernel module detection to work with kernel address randomization and a System.map type symbol file (fixes SIMICS-22895).
- The Python bindings for a user-defined interface module will no
longer appear in a Python module named
<module>, only in a
Python module named simmod.<module>. The latter is the
official and documented name since Simics 5.
- Fixed a problem with extraneous output from
expand().
- Fixed a problem where a breakpoint was not deleted if it
was waited on using
bp.wait-for-breakpoint (fixes SIMICS-22869).
- Added
RegisterClassWithSimics class to help register a class with Simics.
- Moved user-provided-linux helper scripts from QSP into common targets to facilitate easier reuse by other platforms.
- Handle errors in
confclass attribute getters and setters the same way as classes created with pyobj (fixes SIMICS-22081).
- Raise exception when a custom setter is defined for a read-only attribute or a custom getter is defined for a write-only attribute when using confclass (fixes SIMICS-22856).
- Set correct language type for code examples in Simics User’s Guide (fixes SIMICS-22867)
- Moved the Migrating from IO Memory to Transactions section next to the major version migration guides, since it is not related to a major version. One can migrate from IO Memory to Transactions within Simics 7 itself. Also added a section on align-size based transaction splitting when migrating away from IO memory.
- The
html-report command now takes an optional graph specification file, in json format.
This new specification file describes what graphs that should be generated in the report,
if the required probe data is available.
If the json file is not specified, a default json file will be used, producing graphs
suitable for internal Simics performance analyses.
The json key/value parameters defining the graphs, are described in the help text of the
html-report command. These are preliminary and might change in future versions of Simics.
- Added
MapTargetConnect class to help connect an object as a map target.
- The HTML report will now show function coverage, both in the summary
and under a new tab named
Functions (fixes HSD-18039603755).
Function coverage output in a HTML report can be turned off using the
-no-function-coverage flag of the <code-coverage>.html-report command.
- Commands
wait-for-read, wait-for-write, wait-for-get, and wait-for-set were updated. Previously, the commands raised an exception when the transactions issued by the commands were deferred and SIM_transaction_wait was used by device models to wait for their completion (fixes HSD-22014315925).
- Added
-show-description flag to list-attributes command (fixes SIMICS-22095).
- Fixed incorrect BDFs for virtual functions when using the
list-pcie-hierarchies command.
- Updated setting and getting thread name on Windows to support Windows Server 16 (fixes HSD-15017059209).
- Python wrappers for
transaction_t were fixed not to crash when ‘del’ is used: an exception is thrown instead (fixes SIMICS-22278).
- Line directives in generated C files will now always use absolute
file paths. This is to resolve an issue where debugging or coverage tools may
be unable to locate the referenced file in certain contexts
(fixes SIMICS-22848).
- The documentation indexer no longer generates a table of contents with multiple entries for the same document if you ask it to index multiple documents with the same name.
Instead it only picks one of them.
It also prints a message about the duplicated documents to make the user aware, but this is not considered an error.
- Added a
collect marker to tests embedded in documentation that will set a collect flag for the given session in the generated json file. This is meant be used to control if a test framework shall run the test in a “stop at first failure” mode or in a “run and collect all failures” mode.
- Adding description to capture-start for when it’s viable (fixes SIMINT-1649).
- Replaced
dev_util.Dev with confclass in tests.
- Interface
io_memory removed from the apic_bus_v2 class as this is no longer used for MSI.
- Initial release of the DML 1.4 rewrite of the Accel VGA device using the new PCIe library.
- The
wait-for commands now respect breakpoint enable and
ignore count status (fixes SIMICS-22838).
- Fixed a problem where
bp.cycle_event one-shot breakpoints
could lead to a crash (fixes SIMICS-22648).
- The
bp.wait-for-breakpoint now works correctly when used
multiple times on the same breakpoint (fixes SIMICS-22828).
- The attribute macro, for example
ATTR_CLS_VAR, can be used on a C++ set now.
- Explicitly disallow pointer types from being translated into Simics attributes. Doing so will break the checkpointing capability.
- Disassembly output for Xtensa now makes use of the
.xt.prop section to determine what is instructions and what is data (fixes SIMICS-21954). Removed data that is intermixed with instructions is also presented in a better way in the html report.
- Multiple functions at same address are now handled better. Functions with zero size will be ignored. Multiple functions at the same address that have different size will be reported as errors. For functions with same address and size the one with least amount of initial underscores will be kept.
- The
SIM_make_attr_data and SIM_make_attr_data_adopt functions now report an error if the value of the size parameter is too large (i.e. larger than UINT_MAX). Previously, large values of the size parameter were handled incorrectly and no error was reported (fixes SIMICS-22766).
- Adding the arguments
read_only and write_only to attribute creation in confclass.py (fixes SIMICS-22853).
- The
api-help command now shows which c++ header includes the input interface.
- Removed the Simics 5 warning in the
read-device-reg command (fixes SIMICS-22783).
- Added
-only-outbound flag to list-object-references command. With that option then only outbound references is shown (fixes SIMICS-21358).
- Added
-hide-queue flag to list-object-references command, so that references through queue attributes can be omitted (fixes SIMICS-22673).
- Error logs will no longer cause Simics to send SIGTRAP signals
(fixes HSD-22020398500). The earlier behavior, where signals were sent out on
error logs, can optionally be turned on using the
sim->sigtrap_on_error_log
attribute.
- The
io-stats command and dev.io_access_count probe should now
report correct values for devices that use the transaction
interface. Previously, only objects implementing the io_memory interface was
supported. The internal access_count attribute has been removed for all
objects that does not implement the io_memory or transaction
interfaces. Adding objects that implements the transaction interface may
also count accesses passing through memory spaces (previously only unmapped
accesses were counted for memory spaces). In Simics 7, DMLC generates
transaction endpoints instead of io_memory, consequently, this fix impacts
Simics 7 more (fixes SIMICS-19493).
- Added the new
register_view_catalog interface to all banks. This speeds up
various operations that rely on the register_view interface, such as the
dev_util.bank_regs function and the write-device-reg and probe-address
CLI commands.
<link>.start-link-monitor, <link>.view-link-monitor and <link>.stop-link-monitor are new commands to monitor and view ethernet traffic over a link.
- Added example devices implemented in Python using
confclass. To create an empty Python device, use project-setup with the --py-device-confclass argument, or --copy-module sample-device-python-confclass to copy the module sample-device-python-confclass to the project.
- Fixed Expansion ROM BARs not being updated when the
mem field in
the command register is set to a new value
- Improved the performance of the
bank_regs function, by creating the register
structure lazily to some extent (fixes HSD-22016635716).
- Fixed a race condition with packet thread and delete real-network (fixed SIMINT-1633).
- Attribute
fwd_apic_bus added to the apic_bus_v2 class. Intended to be used for systems where there are separate local apic bus instances and routing between them is needed.
- The
expand() and instantiate() functions no require a
top level namespace name.
- Registering objects without name is no longer allowed.
- Added support for
after which is a lightweight event mechanism that schedules a specified method call (the callback) to be executed at a future point.
- Fetch project paths from JSON instead of raw file. Fixes a problem with normalizing paths with symlinks.
- Fixed an issue with broken source links when using the
-tree-summary flag with <code_coverage>.html-report (fixes HSD-13012302936).
- Added branch instruction coverage support for Xtensa (fixes HSD-15011760644).
- Now the
list-processors command sorts processors in numeric order (fixes SIMICS-22695).
- The included
libexpat library has been upgraded to version 2.6.3.
- Fixed an issue where Simics sometimes took several seconds to start on Windows (fixes SIMICS-22513).
- Fixed a problem where Simics could crash during object
creation if invalid
index-map child objects were encountered (fixes SIMICS-22694).
- The information about the Python version used at run time is now reported by the
version command, the sim.info command and when getting version information by running the simulator with the “–version” command line option (fixes SIMICS-22554).
- Removed the
Simics Model Development Checklist app-note since this information is already available in the Model Builder User's Guide (fixes SIMICS-19509).
- Fixed a bug in handling of breakpoint conditions when debugging with
Intel® System Debugger (fixes HSD-14022961505).
- TCF will now close it’s socket when the simulator exits.
- The
ATOM_LIST_END macro has been made referencable in DML
(equivalent to ATOM_list_end(0)) (fixes SIMICS-22363).
- Relaxed the rule which conditionally forbade naming a
group “port”
or “bank”. Any group may now be named “port” or “bank” regardless of
context, but ports, banks, or subdevices may not be declared underneath
any group named “port” or “bank”. (For DML 1.2 devices, this change only
applies to naming a group “port”, as naming any object “bank” in 1.2 devices
is impossible due to every object of a 1.2 device having the bank
parameter.)
- When accessing a single field through the
read-device-reg or
write-device-reg commands, and byte swapping is requested, then Simics will
now report an error if the field is not aligned to byte boundaries.
- Fixed a bug that caused
read-device-reg and write-device-reg to read or write values
in little-endian byte order also on banks using big-endian byte order (fixes SIMICS-22697).
- The documentation indexer can now generate a site with a custom title.
Use the
--title flag to set a custom title.
This fixes SIMICS-22765.
- Fixed
.d-file generation to only list each dependency once.
- Initial release of Google Goldfish Real Time Clock
- Replace invalid utf-8 characters in the command output with place-holders (fixes HSD-22020471221).
- Improved the functionality and documentation of the
probes.new-aggregate-probe, probes.new-attribute-probe, and
probes.new-percent-probe commands.
- The commands
probes.new-attribute-probe, probes.new-percent-probe,
probes.new-fraction-probe, probes.new-sum-probe,
and probes.new-aggregate-probe now print the probe-kind
created, and return this name for scripting,
(fixes SIMICS-22706).
- Moved some GNU Make definitions from Base into SystemC add-on package. SystemC users using Simics Base 6.0.209 or newer must upgrade 1013 add-on package to version 6.0.13.
- Tests can now be run with a host Python by setting the
SIMICS_PYTHON environment variable.
- Fixed a problem where Simics could sometimes crash when
started with any of the
--list-targets or --list-presets command line
arguments.
- Tests can now be run with a host Python by setting the
SIMICS_PYTHON environment variable.
- Command
memory-map now has the additional arguments start and end. These can be used to inspect a subrange of the address space [start, end). For platforms with large regions of interleaved RAM memory the memory-map command will take a very long time to execute even if one has excluded the ram objects from the output through the exclude argument. In such scenarios it is better to execute the memory-map command twice. The first time with end set at the beginning of the address range of interleaved RAM region and the second time with the start argument set right after the interleaved RAM region.
- Updated Winsome (win-control) to handle the new format returned by
target_info (fixes SIMICS-22699).
- An update in version 6.0.206 revealed that some add-on packages
registered CLI commands in an incorrect way, leading to a Python TypeError
backtrace. For backwards compatibility, Simics will now accept this
incorrect command registration with only a warning.
SIM_current_processor could previously return wrong value when executed after the call to SIM_transaction_wait. This issue was fixed (fixes SIMICS-21676).
- CLI documentation can now reference a command that is bound to an interface, by using a tag in style with
<cmd iface="the_iface"> (fixes SIMICS-22684).
- Updates which step commands are aliases and which are base commands.
- Added the
destroy template, the device deletion equivalent of the
init and post_init templates. When the device is being deleted,
destroy() will be called of every object that instantiates the destroy
template. The device object always instantiates this template.
- On Windows, the
.bat files generated in the project no
longer leaks environment variables to the calling shell.
- The
run command of the UEFI Simics Agent now supports passing arguments and redirections.
- When adding packages to project local package list, the
Python package, number 1033, will now be added automatically if it
is found.
- The attribute macro, for example
ATTR_CLS_VAR, can be used on a C++ tuple now.
- Added branch instruction coverage support for RISC-V.
- Added the command
list-target-info which provides the same information as print-target-info but also returns a value (fixes SIMICS-22653).
- Added
cli.register_command_category function to be used for
non-standard category names (fixes SIMICS-14765). It is optional to add a
custom category and adding commands. Loading modules that add CLI commands
will emit a warning message on log-level 2 and the developer should remove the type
argument from those commands, or register a custom category.
- Fixed an issue where symbols could get rejected for symbol files opened with
open_symbol_file in the debug_symbol_file interface, but not when added with add-symbol-file (fixes HSD-16025356102).
continue can now be used within foreach loops (use within
#foreach loops remains unsupported)
- Fixed an issue where the validity of referenced types in the
signatures of unused
shared methods were not properly checked, leading to
invalid generated C.
- Fixed an issue where overriding a
shared method with another could
cause an internal compiler error if the method signature involves a template
type.
after statements now support picoseconds (ps) as a unit of time (fixes SIMICS-16019).
- The
explicit_param_decls provisional feature is now considered stable. Its use will be kept supported in the same way as any standard DML feature.
- Fix how
dodoc handles <cmd class=...> markup in documentation strings it gets from Simics.
It now correctly includes the class name in the output.
- The console was updated to facilitate delayed initialization.
- The SystemC Library has been moved out of the Simics Base package to a separate package 1013 (SystemC-Library).
- Updated the SR-IOV capability registers to include the new PCIe 6 field
vf14btrs.
- The console was updated to facilitate delayed initialization.
- Previously, the tracing tools created with the
new-tracer-tool command could in certain cases produce no output at all when none of -trace-* flags were provided. This behavior was changed. The tools will now always trace all events - as if all -trace-* flags were provided - when no -trace-* flags are provided to the new-tracer-tool command. As before, to limit output from the tool one can trace only selected events by passing individual -trace-* options or a combination of them. The change fixes SIMICS-21724 bug report.
- Corrected
Version register MaxLvtField value when type is apic_x2 to return 6 instead of 5.
- Added a new CLI command
list-blueprints.
- Added depfile support to
simics_add_documentation.
- CMake configuration is now much faster when running with the
CMAKE_EXPORT_COMPILE_COMMANDS cache variable set.
- A crash in the
restart-simics command has been fixed. On
Windows, the command now opens a new console window for the Simics
command line.
- Don’t show empty class description in
list-objects unless -class-desc was specified (fixes SIMICS-22173).
- Fixed a problem where Simics could crash in the clock code.
- It is now possible to explicitly pass package locations to the documentation indexer through the
--package argument.
- The
pcie-downstream-port now correctly broadcasts the downstream
messages to all devices mapped through the pcie_map.add_map(..., PCIE_Type_Msg) interface. Previously the attributes devices and functions
were used which did not necessarily represent the targets mapped into PCIe
message space (fixes SIMICS-22337)
- The script
bin/aescrypt is no longer distributed in the
Simics-Base package.
- Generation of device
.eml files has been removed.
- Prevent run-time division-by-zero errors for aggregates of
the fraction type, (fixes HSD-18039438849).
- TAP connection information is no longer checkpointed (fixes HSD-22019220945).
- File paths in outputs of all commands are now always absolute paths.
- Parameters can now have the flag
allow_empty, which
defaults to false. If set to true, the value NIL/None/null
is a valid value of the parameter.
- The standard state classes in
comps.std.state have been
renamed to not use the word “connector”.
- The
comps.std.connectors Python module has been renamed
to comps.std.state.
- Enumeration types in C are now Python wrapped as Python
enumerations (fixes HSD-14020729880).
- The type
cpuid_value_t can now be instantiated from Python
(fixes HSD-14023038935).
- Added MSI support to the IOAPIC.
- Fixed a problem where parameter references were evaluated
too early when overriding a parameter to be a reference on the
command line, and the script imported another script in the root
node.
- Fixed a memory leak when decreasing the value of the
attribute
max_scrollback_size (fixes HSD-14022995461).
- A bug where Simics crashed when
SIM_picosecond_clock function was used inside the class_info_t’s objects_finalized function was fixed (fixes SIMICS-21927).
- On Windows host, fixed a problem introduced in Simics-Base
6.0.193, where the Visual Studio 2017 run-time was needed (fixes HSD-16024356805, SIMINT-1636).
- Show how to specialize converters for user defined types.
- On Windows host, fixed a problem introduced in Simics-Base
6.0.193, where the Visual Studio 2017 run-time was needed (fixes HSD-16024356805, SIMINT-1636).
- Fixed a bug that caused a GDB crash when encountering a subdevice
object (fixes SIMICS-22593).
- Use explicit
--soname argument to make “external” library better relocatable on disk.
- Fixed a problem that could cause a crash when a platform had a large number of registers (fixes SIMICS-22535).
- Fixed a bug in
sloop.TaskGroup: When awaiting multiple subtasks
upon fall-through, after one of the tasks finished, the task group would
sometimes cancel remaining tasks.
- VMXMON version 1.16.5 was updated to work on Red Hat Enterprise Linux (RHEL), particularly, on RHEL 9. It is expected that VMXMON 1.16.5 should now work also on third-party RHEL-based derivatives, e.g., on Rocky Linux.
- Fixed a problem on Windows when running
addon-manager directly from a Simics-Base installation (fixes SIMINT-1634).
- The source_line type breakpoints no longer require a filename. If left out the filename of the current stack frame will be used.
- Fixed a problem with
rw-state.yml.
- Fixed a problem using the
telnet_port attribute on the txt_console_comp component (fixes HSD-14022755342).
- Fixed a bug in
DBG_mm_get_sites, which sometimes would return
multiple entries for the same allocation site (fixes SIMICS-22536).
- Fix a bug in the
x command when auto repeating by simply pressing return, (fixes SIMICS-22391).
- A new hap type, Core_Log_Message_Always, was added. This one triggers always when a log message is generated regardless of the current log level. It is up to the callback to do proper filtering. Since all log levels are considered, this hap can have more performance impact than other log message haps. For this to work, the module must be compiled with
SIMICS_API_USE_LOG_ALWAYS_HAP defined before including the simics/base/log.h. This will be default in future versions of Simics.
- Simics could hang if disassembling was added in the
log-setup command. This is now fixed, (fixes SIMICS-22326).
- Bumped the C++ library shipped with Simics to libstdc++.so.6.0.33.
- New flag
-block-only was added to the ram tracer tool, which switches off tracing, but blocks caching of ram/rom pages by the direct_memory_lookup.
- The
list-processors command now accepts any object as parent, not only components.
- The categories listed by running the
help command have been updated and class-related entries have been removed or relocated (fixes SIMICS-14765).
- Changed from
trace-io to trace in the output from the trace-io and break-io commands.
- The flag to control human-readable output from the unsupported
mm-list- commands for memory debugging has been renamed to -human-readable.
- Updated TCF with the latest changes from the TCF open source project.
- Multiple
extern declarations for the same identifier are now allowed as long as they all declare the same type for the identifier (fixes SIMICS-22472).
- The warning message for comparing a value of unsigned type to a negative constant has been improved to also warn for unsigned types shorter than 64 bits.
- Calls to methods defined within object arrays now assert that the specified indices for the object arrays are in bounds (fixes SIMICS-22491). For backwards compatibility, these asserts are not performed with Simics API version 7 or below unless
--no-compat=no_method_index_asserts is passed to DMLC.
- The prefetchable bit are now by default set for 64-bit BARs. For PCIe Type 1 devices the prefetchable memory base is now by default 64-bit (fixes SIMICS-22285).
- Added new
clear-history command to the probe-monitors (new-probe-monitor and new-system-perfmeter objects).
- Added new
force-sample command to the probe-monitors (new-probe-monitor, new-probe-streamer and and new-system-perfmeter objects).
- Added new
reset-session command to the probe-monitors (new-probe-monitor, new-probe-streamer and new-system-perfmeter objects).
- On Windows, modules built with this Simics-Base version will only work with Simics-Base 7.14.0 or newer.
- Fixed a bug in
sloop.TaskGroup: If one of the tasks in a task group raised an exception, then the task group would in some cases not cancel its remaining tasks (fixes SIMICS-22449).
- Added new
<tracer_tool>.add-log-message <tracer_tool>.remove-log-message commands. This requires that the module has been compiled with SIMICS_API_USE_LOG_ALWAYS_HAP defined, this will be default in future versions of Simics.
- The prefetchable memory is now 64-bit and the BAR for MSI-X is now 64-bit (fixes SIMICS-22285).
- Virtio PCIe devices now support 64-bit prefetchable BAR mappings (fixes SIMICS-22285).
- Added clean-up of the python module, i.e. the simmod folder (fixes SIMICS-22452).
- Added the command
set-table-border-style which is the same as table-border-style but fits better with the set/get naming scheme used for other commands (fixes SIMICS-21735).
- Typechecking has been reworked to be more strict, and more accurately reject type mismatch that would result in invalid C or GCC warnings (fixes SIMICS-9504). To avoid breakage from novel type errors from the stricter typechecking, which particularly affects pointer types, the legacy lenient typechecking is still used by default with Simics API version 7 or below. The strict typechecking can be enabled by passing
--no-compat=lenient_typechecking to DMLC.
- DMLC’s use of the legacy Simics API for attribute registration is now controlled by the compatibility feature
legacy_attributes. This feature can be disabled by passing --no-compat=legacy_attributes to DMLC, in which case the modern API will be used instead, which does not support the use of dictionary attribute values (fixes SIMICS-22406). legacy_attributes will always be disabled with Simics API version 8 or above.
- Added additional log messages for the Hot-Plug functionality.
- Refactored the library to better integrate with existing access templates in platforms (fixes SIMICS-22337).
- The device has been moved to the transaction interface.
- Simics C++ API modelling extensions (SME) updates: Fixed a bug with pattern rule argument ordering and corrected a typo in a code example within the documentation.
- The signing certificate on Simics packages has been updated.
- Correct the time measurement of the
sim.time.schedule, cpu.time.schedule, and cpu.schedule_percent probes. Previously, when using defered transaction the measurements were incorrect.
- Command
memory-map now has the additional argument exclude. The argument is a list containing classes or objects or a mix. It allows the user to filter out classes and/or objects that are not of interest. An example would be to filter out interleaved ram objects that would otherwise occupy most of the output (fixes SIMICS-22369).
- Command
memory-map now has the additional argument max-regions. Argument max-regions is used to increase the maximum number of rows outputted.
- Added a link from the
generic_transaction_t documentation to the documentation for its accessor functions (fixes SIMICS-20340).
- Definitions for
arm_device_id atom have been added. See the header file simics/arch/arm.h.
- Fixed how nested lists are printed in the CLI help formatter (fixes SIMICS-20087).
- Updated reset handling to work with x86S cpu models.
- Fixed a bug in the
dead_dml_methods library, which caused it to never detect methods as dead if they occur directly after a footer block.
- When the documentation indexer styles documents it now also adds a single page variant of the document. This is linked from the first page of the document and is not indexed (fixes SIMICS-16953).
- Added old-style interface ports to legacy section for 7.
- Added section in chapter Migrating from IO Memory to Transactions describing how to migrate from
SIM_set_mem_op_user_data()/SIM_get_mem_op_user_data() into using transaction atoms (fixes SIMICS-22359).
- When linking on Windows, the
libsimics-common import library must now be used.
- Changed how
recorder stops the simulation at the end of the recording so events it replays are handled first (fixes SIMICS-21893).
- The
Ui_Record_State_Changed and REC_State_Changed haps were removed.
- Merged
c++-api-doc-code module into sample-device-c++ module
- Split the
sample-device.cc file into several smaller files. This makes the code easiser to read (fixes SIMICS-22418).
- Fixed a problem validating parameters given on the Simics command line.
- An issue with the compilation of VMXMON version 1.16.5 on Linux kernels 6.9 and newer was fixed (fixes HSD-14022400536).
- Added a class
ConnectToDescendant (fixes HSD-22019020374).
- The function
simics_add_test now accepts an argument LABELS to assign labels to Simics tests.
- The
Core_Disable_Breakpoints and Core_Time_Transition haps were removed as they would never trigger.
- Updated the Getting Started manual by restructuring tutorials, simplifying GRML installation, and adding a section about scripting.
- Fixed an issue when restoring snapshots after increasing the minimum latency. This no longer hits an assert. Instead the latency saved in the snapshot is propagated from
sync_domains to their cells (fixes SIMICS-22049).
- Fixed a bug in the
simics_session module that caused a Python exception when closing a socket (fixes HSD-14022420341).
- When command
probe-address does an unmapped access into a memory-space where either attribute ignore_unmapped_writes or unmapped_read_value is set is considered a hit. The CLI output now marks these scenarios to make it more understandable for the user (fixes SIMICS-22300).
- A bug in handling of the calls to
SIM_add_notifier and SIM_delete_notifier done from notification callbacks was fixed (fixes SIMICS-21502).
- Changed the main thread ID to be one instead of zero. Zero has a special meaning and will not work with LLDB (fixes HSD-18038467781).
- Added a Micron eMMC with adjustable partitions (fixes SIMINT-1625).
- The
NDEBUG preprocessor directive is now set in non-debug builds.
- Minor bug fixes in register and field classes in the Simics C++ API modelling extensions (SME).
- Commands
memory-map and probe-address now require flag -add-atoms in order to set atoms for platform inspection (fixes SIMICS-22314).
- Command
memory-map now supports setting simple integer atoms from CLI. One use case for atoms is routing and access restrictions, with this change the memory-map can be used to verify how atoms affect the memory view (fixes SIMICS-22313).
- Added check that the log type passed to
SIM_log_message is a valid type.
- Now the command
list-attributes returns a list of attribute-name/value pairs when run in expressions (fixes SIMICS-19252).
- The recently introduced custom output format for log entries, as specified using
log-setup, is now used without any additional separation characters. The performance of the log system has been improved (fixes SIMICS-22161).
- Added a
context-query-for-object-list command that allows getting a context query that matches a list of simulation objects. The listed objects must have a backing debug context.
- New API functions
SIM_object_iterator_for_class and SIM_object_iterator_for_interface have been added.
- Added PCIe atoms
pcie_ide_secured and pcie_segment_requester_id to support secure IDE streams (fixes HSD-18037764154).
- Return types of these (internal) functions have changed from signed to unsigned or vice versa:
str_vec_len, get_interval_vector, get_interval_vector_and_range, prof_data_granularity_log2, _vcontainsp.
- Field
Role-Based Error Reporting in the PCIe Device Capability register now by default is set. The field must be set for functions conforming to PCIe 1.1 or later revisions (fixes SIMICS-22344).
- Fixed a problem where project-setup failed to run on Windows machines with restrictive execution policies.
- In
Layout.write and Layout.read, avoid implicit use of deprecated functions like value_to_tuple_be. This avoids deprecation warnings (fixes SIMICS-22319)
- Fixed extended capabilities to start at offset 0x100 in config bank (fixes SIMICS-22347).
- Added improved support for array/vector of
Connect objects (fixes SIMICS-22156).
- It is now possible to change the location of the DML compiler using the
SIMICS_DMLC_DIR variable. It is also possible to change the Python interpreter using the SIMICS_DMLC_PYTHON variable (fixes SIMICS-22272).
- Fixed crash in TAB completion of command
probe-address where non-pywrapped ATOMs are registered (fixes SIMICS-22260).
- Trying to access non-existent members of Python wrapped structs now throws
AttributeError instead of SystemError. This fixes a previous regression (fixes SIMICS-22259).
- The
enable-writable-persistent-state command will now fail nicely when attempting to enable writable state for a configuration that contains an image that lacks backing files (fixes SIMICS-17144).
- The examples in the Getting Started document have been updated to use the new target system and the
qsp-x86/firststeps target (fixes SIMICS-20852).
- Command
probe-address now outputs information about atom accesses when the transaction passes through a transaction_translator object.
- Command
memory-map now sees a translation with size set to zero as a translation that spans the entire 64-bit address range (fixes HSD-22019889874).
- Command
memory-map now by default does an inquiry look up to not affect the state of the system (fixes SIMICS-22171).
- Added another way of parsing PCI devices based on PCIe hierarchies to support more target systems in Intel® System Debugger PCI devices view (fixes HSD-18033845467).
- The
context-query-for-object command can now be used with debug context objects.
-
Added PCIe atoms for Page Request Service: pcie_prs_page_request, pcie_prs_page_response and pcie_prs_stop_marker. Page request and page response atoms contains the new data types: pcie_prs_page_request_t and pcie_prs_page_response_t (fixes HSD-18037764161) and (fixes HSD-18037764159).
-
Added data type pcie_pasid_info_t to model PCIe PASID information.
-
SIM_issue_read_transaction and SIM_issue_write_transaction API functions were added. The functions can be used instead of the SIM_issue_transaction function when a model doesn’t need to provide any additional atoms in transaction_t transactions (fixes HSD-14021652621).
-
The SIM_add_notifier function, when called from Python, no longer leaks references to the callback function or its auxiliary data.
-
Added PCIe ATS Atoms pcie_ats_invalidate_completion_count and pcie_ats_invalidate_completion_itag_vector
to modell PCIe ATS Invalidation Completion Messages (fixes HSD-18037764165).
-
Added PCIe ATS data type pcie_ats_invalidate_request_payload_t and atom pcie_ats_invalidate_request_itag to model PCIe ATS Invalidation Request Messages (fixes HSD-18037764162).
-
Added data type pcie_ats_translation_completion_entry_t for modelling PCIe ATS Translation Completion Responses (fixes HSD-18037764155).
-
Added atoms pcie_ats_translation_request_cxl_src and pcie_ats_translation_request_no_write for PCIe Address Translation Request (fixes HSD-18037764158).
-
Fixed a bug where the callback provided in SIM_register_tracked_notifier was not called correctly when the deletion of a subscriber object triggers an implicit notifier deletion.
- Created a compatibility feature
function_in_extern_struct. The syntax void m(conf_object_t) for function pointers is only permitted when this feature is enabled. The feature will be disabled in Simics API versions > 7.
- DMLC will now report errors for some uses of function types that are illegal in C. These would previously yield broken C code.
- Added support for the
log warning statement.
- The
miss_pattern_bank template now allows for its implementations of unmapped_read, unmapped_write, and unmapped_get to be overridden.
- Added support for
uint64_t and int64_t types from C. These types are needed for C interoperability, e.g., calling a function that takes an argument of type uint64_t *.
- Documents are now built in a way that lets the documentation indexer apply styling instead of each document bundling its own styling. With this the styling files are shared between documents.
- Fixed a bug where the
status command would crash when a VM guest node was present (fixes SIMICS-22296).
- Added kernel module tracking support for kernel versions 6.4 and more recent (fixes SIMICS-22162).
- Added support x86-64 kernel versions 6.2 and more recent (fixes SIMICS-22155).
- MSI-X Table bank template
msix_table now sets param use_io_memory to false making it use the transaction interface instead of io_memory. It also now accepts transactions greater than 8 bytes and allows unaligned accessing (fixes SIMICS-22293).
- Reworked the
PASID capability. Now the library verifies the PASID capability configuration against the outgoing pcie_pasid atom to check for invalid usage. Methods translation_request, memory_read_buf and memory_write_bytes in the ats_capability template now includes a pcie_pasid_info_t *pasid argument. Method ats_invalidate in template ats_upstream_translator requires the pasid argument to be of type pcie_pasid_info_t * instead of type uint32. The library now correctly treats a PASID of value 0 as a valid PASID entry (fixes SIMICS-22269).
- Added chapter explaining the Address Translation Service support. The documentation also provides a sample
ATS capable endpoint and a sample Translation Agent root complex (fixes HSD-18037764155).
- The
ATS capability template now provide methods: translation_request, translation_size_to_entries, decode_translation, decode_invalidate and invalidate_complete to enhance the ATS support in the library (fixes HSD-18037764155).
- Changed the default value of field
Page Aligned Request to 1 in ATS capability structure since the PCIe specification strongly recommends this bit to be set.
- Method
pasid_permitted() now allows PASID for all messages routed by address as is the case in FLIT mode.
- Method
pasid_permitted() now correctly allows PASID for all ATS memory requests.
- The ATS translator implemented by template
ats_upstream_translator now enforces ATS requests to be of type read transactions.
- In cases where the processed data object request does not require a response, the DOE Busy bit was not cleared when the data object processing was completed. This is now fixed.
- Added two new snoopers `Map` and `Accumulate`, which compose snoopers the way Python’s `builtins.map` and `itertools.accumulate` compose iterables.
- Fixed a bug in
DeviceAttribute that caused errors when monitoring an attribute of data ("d") type.
- Fixed info/status commands (fixes SIMICS-22299).
- Added check to ensure that the tool only connects to processors that provide the necessary interfaces. Currently, this means that it will only connect to Intel Architecture processor models (fixes SIMICS-22276).
- Fixed an issue when the “description” field of Yaml files contained multiple lines, which was badly rendered. Developers should use the
>- block scalars, and not | (fixes SIMICS-21587).
- Fixed initial seed of class
virtio-mmio-entropy. It now uses the configuration attribute seed (fixes SIMICS-22306).
- Fixed a problem where the
insert-floppy command would crash when the image had an incorrect size.
- Class
accel-vga now supports inquiry reads for no side effect inspection (fixes HSD-14021984472).
- Added a static function
offset in Register class which returns the offset of the register passed as input.
- Added a class trait
AddOffsetTrait which adds offset function to a register class.
- Provided a CPU module has been ported to CMake and one has access to a clone of the Simics Base repository (without submodules and no need to locally build Simics), CPU modules can now be built in Simics projects.
- In Python, it is now allowed to pass arguments of the
conf_object_t type, i.e. Simics objects, to Simics API functions taking parameters of the map_target_t type. The conversion of the conf_object_t arguments to the map_target_t values is done automatically.
- Command
list-pcie-hierarchies now produce output to simics console when executed from script (fixes SIMICS-22136).
- The
stdout wrapper in Python now implements all relevant methods (fixes HSD-14021907263).
- Fixed memory leak of data atom in the Python wrapping of
transaction_t (fixes HSD-14020916214).
- Added a format argument to
log-setup which makes it possible to specify a custom log format (fixes SIMICS-21966).
- Command
print-target-info now also lists the simics namespace for each machine in the system (fixes SIMICS-18474).
- Snapshots of images backed by linear memory, such as
accel-vga framebuffers, should now get restored correctly (fixes SIMICS-21961).
- Command
probe-address now supports setting simple atoms in CLI. Simple atoms are the ones that can be expressed as integers. Atoms defined as boolean will use the integer values 0 and 1 when set on command-line (fixes SIMICS-22114).
- Fixed atoms column content for command
probe-address (fixes SIMICS-20700).
- Fixed bug in
command-history, which could give invalid results when using the substr argument (fixes SIMICS-22058).
- Fixed a problem that could lead to memory corruption.
- Fixed a bug where executed callbacks posted via immediate after statements would not trigger the device state change notifier.
- Added support for a
{{var}} variable replacement command in the documentation tool. With it you can declare variables on the command line or in a JSON-file and use them in your documentation text (fixes SIMICS-21818).
- The tool now accepts the
.cxx file extension when including snippets with the include command.
- Fixed the
doe_capability ensuring that the response of consecutive data objects is handled properly. This breaks the current API for implementing the handle_request method of a doe_protocol.
- The log levels were adjusted to reduce the amount of log output.
- Adding support for local vector table, index 0x2e.
- Added
simics_add_documentation function as a wrapper around the Simics dodoc documentation builder (fixes SIMICS-21501).
- Added a
-non-blocking flag to the run command. This allows starting the simulation from the end of a script and getting an interactive prompt (fixes SIMICS-22051).
- Any pending work will now be processed before exiting when running in batch mode.
- Added message type
PCIE_ATS_Invalidate_Completion to pcie_message_type_t (fixes HSD-18037411929).
- Backported the
warning log type, together with the SIM_LOG_WARNING macro, from Simics 7
- Added support for FLR (Function Level Reset).
- Sticky registers are no longer affected by a Hot Reset (fixes SIMICS-22104).
Root ports, upstream ports and downstream port now propagate received Hot Reset downstream by default.
- Fixed a reference counting bug in the
Hap and Log snoopers. The bug could sometimes trigger a segmentation fault (fixes HSD-18036787623 and HSD-18036861798.
- Fixed a bug in the
bin/vmp-kernel-load script preventing the driver from loading.
- The probe-monitor’s
<probe-monitor>.html-report command has been fixed so it works again after the recent probe-changes.
- Deprecation errors will now only occur when the
sim->deprecations_as_errors attribute is set.
- Improved error handling when
sim->stop_on_error attribute is set. Previously some errors would not cause Simics to return an error code when running in batch mode. There would also be unexpected messages and stack traces for errors output by Python wrapped functions (fixes SIMICS-21945).
- Fixed a bug where overlapping registers would not be rejected if they were part of a bank within a group or subdevice.
- Simics subtests will now be started with the
--deprecations-as-errors flag.
- On Windows,
mini-python.bat is now used by the test system, so characters in command line arguments are restricted to what is CMD compatible.
- Supported the macro
ATTR_GETTER on the C-style array.
- Definitions for the
riscv_device_id and riscv_process_id atoms have been added. See the header file simics/arch/riscv.h.
- Fixed an issue where leveraging
typeof within a method signature would lead to incorrect compile-time errors when the method is overridden.
- Add a new documentation include command
{{include-md}}. This lets you include one markdown file in another.
- Look for files to include in documents both relative to the file you include from and in the documents source and resource directories (fixes SIMICS-21799).
- Various changes in Simics C++ API modelling extensions (SME):
- Removed unused rd/wr/i_rd/i_wr methods.
- Added bank_element to support aggregate operations.
- Enhanced internal read/write functionality and introduced two new methods internal_read/internal_write.
- Added User Defined Rule type for notifications.
- Updated documentation.
- Cleanup of debug messages and more consistent usage of SIM_LOG.
- Test coverage and infrastructure updates.
- Command
list-pcie-hierarchies now supports listing entire hierarchies based on the legacy Simics PCIe library. Such hierarchies are based on the pcie-bus class to build the topology (fixes SIMICS-22030).
- Add flag
-include-bus to command list-pcie-hierarchies. It will add another table column showing which PCIe bus object the PCIe device is mapped to.
- Add flag
-indicate-legacy-pcie to command list-pcie-hierarchies. It will add another table column indicating if PCIe device is modelled with the legacy or the new Simics PCIe library (fixes SIMICS-22031).
- Command
list-pcie-hierarchies now prints out device type for classic PCI bridges and endpoints (fixes SIMICS-22032).
- Device is now deletable using function
SIM_delete_object.
- Ensure the dllla field in the link status register of the PCI Express Capability Structure template is unset when a device is removed from a port.
- Added missing register in DVSEC capability
- Added documentation for modelling HwInit behavior for PCIe config registers and fields.
- Added a
deprecation level context manager named deprecation_level.
- Removed the
simics::nocopy utility class. Please use the standard way of deleting the copy-CTOR instead.
- Make sure
Simics.cmake is picked up from the Simics Base associated with the Simics project.
- Moved checking of SIMICS_BUILD_ID namespace from build phase to configuration phase.
- Improvements to the
gmake-to-cmake converter.
- Updated and improved documentation.
- Deprecated
IFACE_FILES argument to simics_add_module() function. Use the SOURCES argument or the new PYWRAP argument instead.
- Python expression entered interactively using
@, or while in python-mode, are now printed using sys.displayhook. This makes it possible to customize the print format of Python expressions by setting sys.displayhook to a custom printing function (fixes HSD-14021583366).
- The
expect command shows a stack trace on failures when possible (fixes SIMICS-22026).
simics_7_api was added for import in Python (fixes SIMICS-22037).
- Decorators are now supported in python-mode and Python one liners in CLI (fixes SIMICS-21857).
- Added
SIM_printf_warning_vararg to the API. It can be called from variadic functions to print warnings.
SIM_printf_warning and pr_warn will now output proper warning prefix +++.
Added SIM_printf_error_vararg to the API. This is a variable argument version of SIM_printf_error and replaces pr_err_vararg which is now removed.
- Removed checksum from module load (fixes SIMINT-1616).
- Syntax and type errors that occur while parsing Python will now only be output once in the traceback (fixes SIMICS-21858).
- Probes: compatibility fix for older packages and newer base. Set the default probe-owner to the
sim object if it was set to None earlier. This avoids a python stack-trace when enabling probes.
- In some cases, the output from the last command in a CLI foreach or while statement was only printed for the final iteration. This has now been corrected (fixes SIMICS-17603).
- Added an alias
history to command-history and also substr.
- Updated how debugger commands are registered and handled internally. Much of the implementation was moved from core to this module (fixes SIMICS-21622).
- Added .PLREG child contexts to thread contexts (fixes HSD-18036833710).
- Fixed CMD6 handling in the SD card model (fixes HSD-22019399957).
- Added chapter to Simics Migration Guide describing how to incrementally port
io_memory devices to transaction. The chapter includes DML code examples.
- Added missing documentation of PCIe templates defined in the library.
- Renamed the port class to
sample_device_cpp.sample to avoid confusion with port namespace.
- VMXMON’s installation script for Linux that installs VMXMON with Dynamic Kernel Module Support (DKMS) framework was updated to work with DKMS version 2.8.6 and later (fixes SIMICS-21905).
- The new 1.16.5 version of VMXMON is compatible with Indirect Branch Tracking (IBT) used in Linux. Previously, VMXMON could not be used on hosts supporting Intel® Control-Flow Enforcement Technology and running Linux with enabled IBT (fixes HSD-14018128636).
- The breakpoint manager will not load the
tcf-agent module until it’s actually used (fixes SIMICS-21609).
- Fixed a bug in function
overlap_range which overflows with large offsets (fixes HSD-22019456414).
- Generation of
module_id.c now depends on the CMakeLists.txt so that any changes made to the configuration is reflected in the module metadata and forces an automatic rebuild.
- Make sure only top-level .dml files are added to
SOURCES parameter of simics_add_module(). This moves the DMLC error up from build phase into the configuration phase where it belongs and can be corrected.
-
The probes feature is now officially supported. With this, some commands have been slightly changed, and the probe-related interfaces have been cleaned up.
- The
probe definition has been improved, specifying the point in the target-system where a user can read out the value. What data is returned is defined by the probe-kind which is just a string as before. For example “cpu.cycles” is the probe-kind found on processors, while “cpu0:cpu.cycles” defines the actual instance of the probe.
- The concept of global probes have been removed, instead these probes are associated to some singleton objects such as
sim or host.
- Simics internal probes still exists, but now there is not any -internal-probes command argument to show them. Instead internal probes automatically appear if the
"internals" unsupported feature is enabled.
- The
<probes>.list command has been renamed to <probes>.list-kinds to make it more clear what is being shown. The command also takes more arguments to print more data or zoom in on certain objects or probe-kinds.
- The
<probes>.list-details command has been removed but the functionality has been merged with the <probes>.read command, which now supports reading out one probe or listing multiple probes.
- The
<probes>.print-properties command is now an internal command only.
- The arguments for the
list-kinds, subscribe, unsubscribe and read commands are now much more aligned, working more the same way.
- Added
<probes>.info, <probes>.status <host>.info and <host>.status commands.
- The different probe-samplers from
probe_monitor, probe_streamer and probe_system_perfmeter have been updated to reflect the changes in the definition. The -objects switches, used when adding or removing probes, have been removed. Instead the commands take both a probe, specifying a probe with its object, and probe-kind specifying to add/remove probes from all objects, with the specified probe-kind.
- The obsolete
probe-cache was removed.
- The user-guide has been updated for the related changes.
(fixes SIMICS-19232, SIMICS-19233, SIMICS-19234, SIMICS-19264, and SIMICS-19265).
-
CLI command clear-io-stats now have an alias as clear-device-access-stats (fixes SIMICS-19222).
-
CLI command list-pcie-hierarchies now uses the global simics table border style.
-
Ensure that the connector PciBusDownConnector only sets the devices/pci_devices attributes in the PCIe bus once.
-
Snapshots now save and restore the files attribute and image pages saved in snapshots are de-duplicated based on content. This removes the special casing of zero pages and the zero_pages field in SIM_get_snapshot_info is no longer there.
- Removed name argument to
new-tcf-agent (fixes SIMICS-21610).
- The
force_stack_crawl attribute will now enable stack crawling even when no symbol files have been added.
- Stack trace caches will now be cleared when symbol files are added or removed (fixes SIMICS-21964).
- Fixed i3c-link to support IBI when more than one target device is connected to i3c controller. The controller’s
ibi_start call shall only be propagated to targets that have issued ibi_request to the controller over interface i3c_master (fixes HSD-14021502240).
- Hot-plug event now correctly requires field
hpie and ccie to be set as well to trigger an Hot-Plug event.
- Cold-Plug presence detect is now supported. Previously only hot-plug was supported i.e. the presence detect event was only forwarded for devices being hot-plugged. Now cold-plugged devices also trigger a presence detect event to upstream target at object instantiation.
- Hot-Plug presence detect state is now sent to upstream target after object instantiation as well. Previously the hot-plug presence detect event was only forwarded when PCIe devices were attached after object instantiation.
- Fixed checkpointing bug after adding legacy multi function devices into
pcie-downstream-port-legacy.
- Added disconnect-real-network into help description of connect-real-network, also disconnect-real-network and disconnect-real-network-port-in into help description of connect-real-network-port-in along with disconnect-real-network and disconnect-real-network-port-out into help description of connect-real-network-port-out (fixes SIMICS-19377).
- Fixed a problem where parameters overridden in a preset exposed as a target were marked as user modified.
- Fixed issues reported by Coverity 2023.3.4.
- Patched FMT library for various Coverity reported issues.
- Updated the version of FMT library to 10.2.1.
- Fixed a problem loading the device when using Simics as a Python module.
--with-cmake is now enabled by default when invoking project-setup (fixes SIMICS-21810). Use --without-cmake to skip the generation of CMake files in the project root.
- Added
NAMESPACE parameter to simics_add_test function.
- Added project trampoline for
gmake-to-cmake converter (fixes SIMICS-21798).
- Set
CMAKE_OBJECT_PATH_MAX to 1000 by default in the project top-level config. This suppresses the warning CMake emits on Windows if paths are too long.
- All messages printed during the configuration phase has been assigned different log-levels; as defined by CMake. Use the
--log-level argument to change default log-level.
- Minimum CMake version bumped to 3.22
- Fixed a bug where `SANDBOX` environment variable was overwritten by `USE_ASAN` option causing checkpoint tests to fail..
- Updated the batch (
.bat) files in the bin folder so that they do not leak environment variables to the current cmd.exe command shell on Windows (fixes SIMICS-21906).
- Removed frontend protocol, frontend-server, frontend-server-client and associated API functions, Python modules, interfaces and header files (fixes SIMICS-21853).
- Ensure that the connector
PciBusDownConnector only sets the devices/pci_devices attributes in the PCIe bus once.
- A bug that could lead to crashes in
SIM_transaction_wait was fixed.
- Removed the arguments reverse and always from
sb_wait_for_sloop_awaitable and sb_wait_for_snooper (fixes SIMICS-21932).
- Removed the arguments reverse and always from internal script branch functions, and added a warning when calling either
check_script_branch_command or sb_wait with reverse or always set to a boolean value (fixes SIMICS-21932).
- Image interface has change in parameters for the internal save_diff and save_to_file methods. An extra flag for image formatting is added (fixes SIMICS-21363).
- Added SIM_write_persistent_state (fixes SIMICS-21363).
- Added new command
list-pcie-hierarchies to list PCIe hierarchies in platforms.
- The Windows release of Simics is now built using UCRT (previously MSVCRT). User modules originally built against MSVCRT may need to be rebuilt with a UCRT tool chain.
- Deprecated the script-branch functions
sb_wait_for_hap, sb_wait_for_notifier, sb_wait_for_log, sb_wait_for_breakpoint, sb_wait_for_step, sb_wait_for_cycle, sb_wait_for_time, sb_wait_for_global_time, sb_wait_for_global_sync, sb_wait_for_register_read, sb_wait_for_register_write, sb_wait_for_simulation_started, sb_wait_for_simulation_stopped, sb_wait_for_exception. For replacement functions, see Simics Migration Guide.
- Fixed a problem where Simics would quit on an error message instead of stopping the simulation.
- The
temporal_state interface is deprecated. It was used to by reverse execution to support models with special needs with regards to state and reverse execution has been removed from version 7. There is still limited support for the interface from the new snapshots system, but that should not be relied upon in new code.
- Fixed a memory corruption when deleting snapshots.
- Fixed a problem loading the device when using Simics as a Python module.
- Fixed handling of functions with varargs in
sym- commands and debugger API (fixes SIMINT-1608).
- The DMLC behaviour of suppressing the warning
WLOGMIXUP by default below Simics API version 7 is now controlled by the compatibility feature suppress_WLOGMIXUP. This is in order to increase visibility of the API-dependent behaviour, and to provide migration documentation about it. As a consequence, WLOGMIXUP can be enabled below Simics API version 7 by passing either --warn=WLOGMIXUP (as before) or --no-compat=suppress_WLOGMIXUP to DMLC.
- Fixed a problem loading the device when using Simics as a Python module.
- Fixed a problem loading the device when using Simics as a Python module.
- Fixed a problem loading the device when using Simics as a Python module.
- Fixed a problem loading the device when using Simics as a Python module.
- Added the templates
pcie_link_training and pcie_phy templates to the library. Endpoints and upstream ports instantiate pcie_phy, while Downstream and Root Ports instantiate pcie_link_training. pcie_link_training provides the object with the capabilities to initiate link training. pcie_phyAdds a port phy to a device which by default handles transactions with the atom pcie_link_negotiation. The transaction handler can be expanded to handle custom atoms that are related to the physical layer.
- Fixed value of constant
PCIE_DP_Type_RP used for param dp_type in the PCI Express capability template exp_capability.
- Fix bug where the value of some capability fields could not be overridden. Now the device model can override all default values of the capability registers (fixes HSD-22019242229).
- Implemented native PCIe Hot-Plug
- Split
pcie_root_port template into separate template for each PCIe Port type (pcie_root_port, pcie_downstream_port and pcie_upstream_port). The pcie_root_port can still be used as before.
- Added a port phy which translates incoming transactions to the phy port in downstream devices.
- Hot-Plug is now instead triggered when the devices attribute is set.
- Notify upstream target of Presence Detect Changed Hot-Plug events if it is capable of handling them.
- Fix
pcie-downstream-port-legacy to correctly map in legacy bridges and switches into PCIe configuration space. previously only endpoints were correctly mapped into PCIe configuration space (fixes HSD-22019241133).
- Fixed a problem loading the device when using Simics as a Python module.
- On a Windows host, filter out any checks of the executable flag (0x1), because Windows does not have such a flag as far as the
access function is concerned (fixes SIMICS-21922).
- The device will no longer assert when an inquiry command attempts to read vital product data information that is not set.
- Fixed a problem introduced in Simics-Base 6.0.162 where list type parameters could not be set explicitly as arguments to the
load-target or run-script commands (fixes HSD-22019380014).
- The
load-target command when given a invalid target and argument now reports a missing target error rather than invalid argument (fixes SIMICS-21333).
- When specifying substr in
<script-params>.list and <script-params>.help, the substring matching is performed on the flattened hierarchical parameter name (fixes SIMICS-21690).
- Fix problem when using
params.save and parameter references (fixes SIMICS-21733).
- An issue with the compilation of VMXMON version 1.16.4 on Linux kernels 6.5 and newer was fixed (fixes SIMICS-21764).
- Fixed a bug where
sim->automatic_cell_partition=FALSE would lead to an assertion on instantiation of an x2apic object (fixes HSD-18036198888).
- Removing output from 1 cell case in mtprof (fixes SIMINT-1607).
- Added link attributes to the ports in the switch.
- Fixed MSI-X size bits being incorrectly set
- Implemented Hot-Plug capability
- Added command that presses the attention buttion of a Downstream Port Slot
- Fixed a problem where deprecation errors did not lead to test failures.
- Added link attributes to the virtio PCIe devices.
- Simics, when launched on Linux, no longer sources the file
$HOME/.simics-5.sh (fixes SIMICS-21148)
- Error messages, e.g. from log errors or
SIM_printf_error no longer make Simics quit, but only stop the simulation.
- Added a warning in
current-processor since this command will be removed and should not be used. The object alias cpu should be used instead (fixes SIMICS-20641).
- Removed all commands from the
Simics service, this service should no longer be used. The actual service is still included as a provided service for compatibility reasons (fixes SIMICS-21515).
- The internal
SimicsCapabilities property that was sent at connect time has been removed.
- The interfaces
i2c_device, i2c_link, i2c_bus, i2c_slave, i2c_master and i2c_bridge have all been deprecated in Simics 7. Migration to interfaces i2c_master_v2, i2c_slave_v2 and to module i2c-link-v2 is strongly recommended (fixes SIMICS-21732).
- The
pci_express, pci_express_hotplug and pcie_adapter_compat_interface interfaces have been deprecated in Simics 7. Migration to the new PCIe library is strongly recommended.
- Improved the run-time performance of accesses to registers with many fields.
- Partition tracker can now handle
notify_control_reg_read in osa_machine_notification interface.
- Partition mapper will now clear state of guest instead of disabling it if it’s already disabled.
This section highlights the main new functionality in Intel® Simics®
Simulator 7 compared to the current version. Most new features in
Intel® Simics® Simulator are introduced in minor versions, while
major versions are used to remove deprecated functionality since
breaking compatibility is not allowed in a minor version. Still, the
first release of Intel® Simics® Simulator 7 has a number of new
features and many more are planned to be introduced during the
product’s lifetime.
With this feature a user can take a snapshot of the state of the
complete simulated system in run-time and revert back to this state at
any point in time later in the simulation. While the mechanism for
taking snapshots already exists in Intel® Simics® Simulator as part of
the reverse execution feature, it has never been an accessible feature
by itself. In Intel® Simics® Simulator 7, in-memory
snapshots will replace the reverse execution functionality.
Intel® Simics® Simulator 7 can be run with any modern
Python that the user has installed. Currently Python 3.10, 3.11, 3.12
and 3.13 are supported by Intel® Simics® Simulator 7,
but the list of Python versions supported may change by the time of
release. Python is still bundled with the product by default in the
initial release of Intel® Simics® Simulator 7, but
this is planned to change (see below). With this change, users have
more control over when they change the major version of Python used
in the simulator.
Intel® Simics® Simulator will include a “simics” Python module that
users can add to their existing Python installations using the
standard pip tool. Using the simulator as a Python module greatly
simplifies integrating Intel® Simics® Simulator in existing test
environments for example.
In Intel® Simics® Simulator it has been possible to build modules
using CMake as the build tool for some time. Starting with version 7,
CMake will become the default build tool. GNU Make will remain
supported as a legacy feature.
The Intel® Simics® Simulator package versioning has been updated to
comply with the industry standard semantic versioning scheme. The
previous versioning scheme used by Intel® Simics® Simulator was very
similar to semantic versioning, so it is initially a small
change. The biggest difference is that the minor version is now
represented by the second digit group in the version number. I.e., the
minor releases after Intel® Simics® Simulator 7.0.0 will be 7.1.0,
7.2.0, etc. The patch version will not be used initially.
The Windows version of Intel® Simics® Simulator now requires Windows 10.
API and script compatibility with Intel® Simics® Simulator 4.8 and
older has been dropped. Refer to the Simics 7 Migration
Guide for a complete list.
This section provides a list of minor changes since the Intel® Simics®
Simulator 6 version that was current at the time of the initial Intel®
Simics® Simulator 7 release.
- Removed
-reverse and -always flags for wait-for commands.
- Removed nfs-server from the guide and corresponding examples
- Updated deprecation table for command line options that are deprecated in Simics 7.
- Added documentation of message segment routing
- In the
config_bank template: added function message.send_custom in order for devices to append custom atoms to the PCIe messages sent upstream.