((id, start, stop)*) Tells which breakpoints (identified by their id) are set for the space object. start and stop specifies the interval for the breakpoint.
(object, function, offset, target). An access not targeting any object in the map attribute will be forwarded to the default target. target should be non-nil if and only if object is a translation object.
((base, object, function, offset, length, target, priority, align-size, byte-swap)*). Maps zero or more objects in the memory space. object must implement one of the translate, bridge, ram, io_memory, port_space,or rom interfaces, searched for in that order. (Some of these interfaces are Simics internal and can not be implemented by user-defined classes).
If object implements the translate or bridge interface, then the target field must be set to an object, which in turn must implement either the memory_space, ram or rom interface, target should be NIL otherwise.
object is mapped in the address space from base to base + length − 1 (inclusive). Both function and offset are handed on to the mapped object through the appropriate interface. The function number, that is device specific, provides a way for devices with multiple mappings to figure out which mapping that is accessed. The priority (0 – 255) is used when multiple mappings exist on the same address. The mapping with the lowest number has the highest priority.
If the map target does not support large accesses, then align-size can be set to the maximum allowed size. Accesses spanning align boundaries will be split into several smaller transactions. By default, the align size is set to 4 for port space devices, 8 for other devices and 8192 for memory. Mappings with an align-size of 2, 4, and 8 may set the byte-swap field to 1. This can be used to model bridges that perform byte swapping on a specific bus width. It is also possible to set byte-swap to 3 to swap all bytes in the transaction based on the access size. The bus and transaction byte-swap variants can be combined by setting a value of 2. Consider a mapping with a 4-byte align-size and memory at address 0 that contains the bytes: 0x00 0x01 0x02 0x03. A 2-byte big-endian read access at address 0 will give the following values as results. No swap: 0x0001, bus swap: 0x0302, bus and transaction swap: 0x0203 and transaction swap: 0x0100
Read from or write to the space. Data is read without side effects (with the inquiry bit set), while writes are allowed to trigger side effects (including actually writing the data).
The snoop_device is similar to a timing-model, but called after a memory operation is complete. The object has to implement the "snoop_memory" interface, but the returned stall time is ignored.
The timing_model is called when a memory operation reaches the memory-space, before it is performed. The model has to implement the "timing_model" interface.
add-map | map device in a memory-space |
del-map | remove device map from a memory-space |
get | get value of physical address |
info | print information about the device |
load-binary | load binary (executable) file into memory |
load-file | load file into memory |
map | list memory map |
set | set physical address to specified value |
x | examine raw memory contents |
The -l and -b flags are used to select little-endian and big-endian byte order, respectively. If neither is given, the byte order of the currently selected processor is used.
This command operates on the physical memory associated with the current processor.
By default the virtual load address from the file is used, but the physical address can be used instead by specifying the -pa flag.
The -v flag turns on verbose mode, printing information about the loaded file.
When used as a global command, it will use the currently selected processor to find the memory space to load the binary into. If the -l flag is given, it will load it into the virtual memory space, otherwise it will use the physical memory space.
When using the namespace command on a processor object, it will load the binary into the virtual memory space of that processor.
When using the namespace command on a memory-space object, it will load the binary directly into that memory space.
The return value is the address of the execution entry point. This value is typically used in a call to set-pc.
load-binary uses Simics's Search Path and path markers (%simics%, %script%) to find the file to load. Refer to Simics User Guide (CLI chapter) for more information on how Simics's Search Path is used to locate files.
load-file uses Simics's Search Path and path markers (%simics%, %script%) to find the file to load. Refer to Simics User Guide (CLI chapter) for more information on how Simics's Search Path is used to locate files.
If value is larger than the specified size, behavior is undefined.
The -l and -b flags are used to select little-endian and big-endian byte order, respectively. If neither is given, the byte order of the currently selected processor is used.
The non-namespace version of this command operates on the physical memory associated with the current processor.
If the memory is accessed via a CPU, the type of address is specified by a prefix. For physical addresses use p:address; for virtual addresses, v:address on non-x86 targets. On x86, use segment-register:offset or l:address for x86 linear addresses.
If no prefix is given it will be interpreted as a virtual address. On x86 the default is ds:address (data segment addressing).
The size argument specifies the number of bytes to examine. When examining virtual memory, only addresses which can be found in the TLB or hardware page tables (if any) are shown. Unmapped addresses are shown as "--", undefined physical addresses as "**".