Use pselect to select the current processor.
The value of path is normally appended at the end of the list. If the -prepend flag is given, the path will be added as first in the list.
length is the interval length in bytes (default is 1).
Breakpoints inserted with the tbreak command are automatically disabled when they have triggered.
The default action at a triggered breakpoint is to return to the frontend. This can be changed by using haps. When an execution breakpoint is triggered, Simics will return to the command prompt before the instructions is executed, while instructions triggering read or write breakpoints will complete before control is returned to the command prompt.
To break on a virtual address, use a context object:
primary_context.break 0x1ff00
Several breakpoints can be set on the same address and Simics will break on them in turn. If hap handlers (callback functions) are connected to the breakpoints they will also be executed in turn. Hap handlers are called before the access is performed, allowing the user to read a memory value that may be overwritten by the access. See the Simics Reference Manual for a description of hap handlers.
Each breakpoint is associated with an id (printed when the breakpoint is set or by the list-breakpoints command) which is used for further references to the breakpoint.
For convenience there are also a break command which sets a breakpoint on memory connected to the current frontend CPU (see pselect). Default is to break on virtual address accesses (in the current context). By prefixing the address with p: it is possible to break on physical accesses as well (cf. phys_mem0.break); e.g., break p:0xffc0.
Several attributes can be set for a breakpoint for breaking only when some conditions are true. See the disable, enable, ignore, set-prefix, set-substr and set-pattern commands for more details.
Breakpoints can be removed using delete.
The reg-name parameter specifies which control register should be traced. The available control registers depends on the simulated target.
Instead of a register name, the -all flag may be given. This will enable or disable tracing of all control register.
The exception parameter specifies which exception should be traced. The available exceptions depends on the simulated target.
Instead of an exception, the -all flag may be given. This will enable or disable tracing of all exceptions.
The hap parameter specifies the hap.
Instead of a hap, the -all flag may be given. This will enable or disable breaking on all haps.
The device parameter specifies which device object should be traced.
Instead of an object name, the -all flag may be given. This will enable or disable breaking on accesses to all device.
The server argument specifies the server to connect to. It is either of the form <addr>[:<port>] if a TCP connection should be used, or a file name if a file socket should be used. This is the same as the command line argument -central, but can be executed at any time.
To connect to a server object in the same Simics, use the obj argument instead.
The reconnect argument gives the time between tries to connect to the server if a connection can't be established, or if the connection is lost. A value of zero disables reconnection. The default is to not try to reconnect.
The optional interface argument specifies the Ethernet or TAP interface of the host to use.
By default a TAP interface is used, but if the host-access argument is raw, raw access to an Ethernet interface is used.
MAC address translation can be disabled with the -no-mac-xlate flag.
The -persistent is for backward compatibility and should not be used.
If -propagate-link-status is specified, link status changes on the host interface will be propagated to all devices on the link that implements the link-status interface. For TUN/TAP, only 'up' and 'down' status will be propagated (and not 'unconnected'). Link status propagation is only supported on Linux.
See the Connecting to a Real Network chapter of the Simics User Guide for more information about how to connect to a real network.
The optional interface argument specifies the TAP interface of the host to use.
The -persistent is for backward compatibility and should not be used.
See the Connecting to a Real Network chapter of the Simics User Guide for more information about how to connect to a real network.
This command is currently not supported on Solaris hosts.
The flags -tcp and -udp can be used to specify the protocol to forward. The default is to forward only the usual protocol for named services and both tcp and udp for numerically specified ports.
The flag -f can be used to cause the command to fail if the suggested host port could not be allocated, without the flag the command will assign the first availble port starting from the specified host port and upwards.
The host-port given is only a hint, and the actual port used may be a different one. The command output shows the actual port used, and it can also be determined by inspecting the connections attribute in the appropriate port forwarding object.
Both tcp and udp will be forwarded unless one of the -tcp or -udp flags are given in which case only that protocol will be forwarded.
The optional interface argument specifies the Ethernet interface of the host to use.
The ip and netmask arguments specify the IP address and netmask that the router should use on the simulated Ethernet link.
The gateway argument specifies the gateway on the simulated Ethernet link that router should use for packets from the real network that are not in the router's subnet.
See the Connecting to a Real Network chapter of the Simics User Guide for more information about how to connect to a real network.
Example 1: AB Create one or two modules with any size (all slots need not be populated).
Example 2: AA Create two modules with identical size.
Example 3: aa Create one module or two modules with identical size.
Optional arguments are ranks_per_module, min_module_size, max_module_size, and ecc.
To list all breakpoints set use the command list-breakpoints.
To list all breakpoints set use the command list-breakpoints.
Reverse operations are possible in the region following the first (i.e. oldest) time bookmark.
With the enable-real-time-mode command Simics will periodically check its actual running speed and sleep for a while if it is too high. This also reduces Simics CPU usage. speed specifies the percentage (as an integer) of the how fast the Simics target machine is allowed to run compared to the host machine; default is 100%. check_interval specifies how often the measurement should take place in milliseconds of the simulator time; default is 1000.
The disable-real-time-mode will deactivate any real-time behavior and Simics will run as fast as possible again.
On some architectures, address must be word aligned. A physical address is given by prefixing the address with p: (e.g., p:0xf000). With no prefix, a virtual address will be assumed. If the address is omitted the current program counter will be used. count defaults to 1 instruction.
Global disassembly settings, such as whether to print the raw opcodes, can be set by the disassemble-settings command.
This command will also include various profiling statistics for the address of each instruction, one column for each profiler view listed in the processor attribute aprof-views. For descriptions of the columns, use the <processor>.aprof-views command.
opcode indicates whether to print the raw bytes of the instruction in addition to the disassembly. If partial-opcode is set, and the opcode encodes more than one instruction, the opcode bytes will be divided among the instructions so that the entire opcode has been printed exactly once when all the instructions have been disassembled. If partial-opcode is not set, the entire opcode will be printed for every instruction. (The only Simics target with multiple instructions per opcode is ia64.)
physaddr indicates whether to compute and display the physical address if the virtual address was specified (if the physical address was specified, the virtual address is never printed).
Without arguments, the current settings will be shown.
The flags -tcp and -udp can be used to specify the protocol to forward. The default is to forward only the usual protocol for named services and both tcp and udp for numerically specified ports.
The flag -f can be used to cause the command to fail if the suggested host port could not be allocated, without the flag the command will assign the first availble port starting from the specified host port and upwards.
The host-port given is only a hint, and the actual port used may be a different one. The command output shows the actual port used, and it can also be determined by inspecting the connections attribute in the appropriate port forwarding object.
Both tcp and udp will be forwarded unless one of the -tcp or -udp flags are given in which case only that protocol will be forwarded.
if <condition> { commands } if <condition> { commands } else { commands } if <condition> { commands } else if <condition> { commands }The if command returns the value of the last executed command in the block.
With the enable-real-time-mode command Simics will periodically check its actual running speed and sleep for a while if it is too high. This also reduces Simics CPU usage. speed specifies the percentage (as an integer) of the how fast the Simics target machine is allowed to run compared to the host machine; default is 100%. check_interval specifies how often the measurement should take place in milliseconds of the simulator time; default is 1000.
The disable-real-time-mode will deactivate any real-time behavior and Simics will run as fast as possible again.
This can be useful when writing scripts that want to assert a state in the simulator. Note that it only works with integer and string arguments.
next-line causes the simulation to run until it reaches another source line, but will not stop in subroutine calls. reverse-next-line is the same as next-line, except for running backwards. next-instruction and reverse-next-instruction are like next-line and reverse-next-line, respectively, except for stepping just one instruction instead of an entire source line.
finish-function causes the simulation to run until the current function has returned. uncall-function causes the simulation to run backwards until just before the current function was called.
These commands can either be called as context namespace commands, e.g., context.step-line, in which case the command will apply to that context; or not, e.g., step-line, in which case the command will operate on the current context of the current processor.
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.
To refine your search, you may use filters in the topic as shown below: help topic = command:break The recognized filters are command:, class:, object:, interface:, module:, hap:, attribute: and api:.
By default, the help command does not provided tab-completion on topic for modules and api symbols unless the specific filter is provided.
if <condition> { commands } if <condition> { commands } else { commands } if <condition> { commands } else if <condition> { commands }The if command returns the value of the last executed command in the block.
Sets the instruction fetch mode of all cpus on the system according to the mode passed as argument.
line or file:line --- list from given line
function or file:function --- list that function
address --- list from that address
At most maxlines lines of source or asm are printed. -s produces source intermixed with disassembly, and -d only disassembles.
If prefix, substring and/or pattern conditions are set it will be printed as well (see set-prefix, set-substr and set-pattern command).
Time breakpoints are also listed.
If -all is passed as argument, list-breakpoints will also list all internal breakpoints set for simulation purposes.
Similar to list-modules but shows modules that will not load into Simics, and the reason why Simics refuses to load them (e.g., missing symbol, wrong version, ...).
If the -v flag is specified, show verbose information, with the full path to the module file and any library loader error message.
The MODULE column contains the name of the module or the filename of the shared library file if the module name could not be established.
If the module has the same name as another module, an X will be printed in the DUP column.
If the module could not be loaded since it was compiled or written for a different version of Simics, the version it was built for will be printed in the VERSION column.
The USR_VERS will contain the user version string, if provided.
The LINK column contains any linker error (cf. the dlerror(3) manpage).
When the -v flag is provided, the PATH column will contain linker information for the module.
If the -n flag is given, the output will be sorted on the object name instead of the class name, which is the default.
Some objects also implement command interfaces. A command interface is a collection of commands that can be used by an object implementing this interface. For example, breakpoint is an interface that is implemented by objects of the memory-space class. This allows one to write phys_mem0.break 0xffc00 to set a breakpoint in the memory interface.
Objects implementing command interfaces are listed in the second half of output from this command.
You can specify a class or interface name as type. Only objects of that class or implementing that interface will then be listed.
The objects are sorted by class name by default. Use the -n flag to sort them by object name instead.
Component objects are printed, first, and then all other objects. To mix all objects in the same list, use the -a flag.
simics> tmp = %pc + 4
simics> count = 10
simics> disassemble $tmp $count
They can also be accessed from Python by using the name space simenv:
simics> $foo = 1 + 4 * 4
simics> @print simenv.foo
17
simics> @simenv.bar = "hello"
simics> echo $bar
hello
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.
The default level is 1, and this is the lowest level that objects can report messages on. Setting it to 0 will inhibit output of all messages.
Messages are also added to an access log that can be viewed by the log command in Simics.
There are four log levels defined: 1 - important messages printed by default. 2 - "high-level" informative messages. 3 - standard debug messages. 4 - detailed information, such as register accesses.
Not all classes are converted to use this log level scheme.
This command can be used for portability when opening files residing on the host filesystem.
This command has no effect under Windows.
The port argument can be used to change the TCP listen port. By setting it to -1, the server will not listen for TCP connections. By setting it to 0, the server will choose an available TCP port number. The used port number will be printed when the server successfully opened the port.
The file argument can be used to change the file name for the UNIX file socket. And empty string disables it.
The min-latency argument specifies the minimum latency in nanoseconds for inter-simics communication enforced by Simics Central.
As of Simics 3.0 this command is deprecated. The new-std-ethernet-link command should be used in component based configurations.
The latency argument specifies the latency in nanoseconds for communication over the link.
The architecture argument can be used to specify a particular architecture for the GDB session. It should be the architecture name used by Simics and not the GDB architecture name. For example, if you are debugging a 32-bit program on a 64-bit x86 processor, you may want to specify x86 as architecture and run set architecture i386 in GDB before connecting. If not given, the architecture of the CPU will be used.
Use the GDB command target remote host:port to connect to Simics.
The tracker's set of processors will initially be empty. You can add the processors you want it to watch with its add-processors command.
The tracker's set of processors will initially be empty. You can add the processors you want it to watch with its add-processors command.
The tracker's set of processors will initially be empty. You can add the processors you want it to watch with its add-processors command.
As of Simics 3.0 this command is deprecated. The new-std-service-node command should be used in component based configurations.
If an link argument is provided, it should be the name of an existing ethernet-link object. When a link is specified, the ip argument should give the IP address that the service node will use on the link, and the netmask argument the netmask. Optionally, the netmask may be given in the ip argument as a /bits suffix. The netmask may also left out entirely, in which case it will default to 255.255.255.0.
The tracker's set of processors will initially be empty. You can add the processors you want it to watch with its add-processors command.
next-line causes the simulation to run until it reaches another source line, but will not stop in subroutine calls. reverse-next-line is the same as next-line, except for running backwards. next-instruction and reverse-next-instruction are like next-line and reverse-next-line, respectively, except for stepping just one instruction instead of an entire source line.
finish-function causes the simulation to run until the current function has returned. uncall-function causes the simulation to run backwards until just before the current function was called.
These commands can either be called as context namespace commands, e.g., context.step-line, in which case the command will apply to that context; or not, e.g., step-line, in which case the command will operate on the current context of the current processor.
next-line causes the simulation to run until it reaches another source line, but will not stop in subroutine calls. reverse-next-line is the same as next-line, except for running backwards. next-instruction and reverse-next-instruction are like next-line and reverse-next-line, respectively, except for stepping just one instruction instead of an entire source line.
finish-function causes the simulation to run until the current function has returned. uncall-function causes the simulation to run backwards until just before the current function was called.
These commands can either be called as context namespace commands, e.g., context.step-line, in which case the command will apply to that context; or not, e.g., step-line, in which case the command will operate on the current context of the current processor.
If group is non-zero, numbers will be grouped in groups of group digits, separated by underscores (_).
Currently, this only affects the output of the print command, and how return values of commands are displayed.
Without arguments, the current setting will be shown.
pdisable takes processor as parameter. If no processor is given, it will list all enabled processors. The method variant can also be used to disable a processor. A disabled processor is simply stalled for an infinite amount of time. Make sure that you always have at least one enabled processor.
pdisable takes processor as parameter. If no processor is given, it will list all enabled processors. The method variant can also be used to disable a processor. A disabled processor is simply stalled for an infinite amount of time. Make sure that you always have at least one enabled processor.
Print binary contents of the floating point registers in hexadecimal form.
Print binary contents of the floating point registers in hexadecimal form.
Use -s to convert the value to signed integers. size is the bit width to use. E.g., print -x 257 8 will print 0x1. Valid sizes are 8, 16, 32, 64, and 128 bits. Default size is 64.
SPARC V9 command. Prints contents of the 32 double precision floating point registers. Note that the first 16 overlaps with the 32 single precision floating points registers.
Prints the contents of the data TLB of the processor cpu_name. If no CPU is specified, the current CPU will be selected.
SPARC V9 command. Prints contents of the single-precision floating point registers in exponent form (32 of them).
The entire floating point register bank is printed as integers, each double-precision register as a 64-bit number. The first half corresponds to the 32 single precision floating-point registers and the first 16 double precision registers, the second half is the rest of the doubles.
Prints the contents of the instruction TLB of the processor cpu_name. If no CPU is specified, the current CPU will be selected.
If called from a processor namespace (e.g., cpu0.print-time), the time for that processor is printed. Otherwise, the time for the current processor is printed, or, if the -all flag is given, the time for all processors.
if the -c flag used, the cycle count for the processor is returned and nothing is printed. The -s flag is similar and returns the step count.
A step is a completed instruction or an exception. An instruction that fails to complete because of an exception will count as a single step, including the exception.
Prints the contents of the TLB of the processor cpu_name. If no CPU is specified, the current CPU will be selected.
Without any argument, this command will print the currently selected processor.
Both expressions and statements can be run, but for statements the @ command can be used instead.
run-python-file uses Simics's Search Path and path markers (%simics%, %script%) to find the script to run. Refer to Simics User Guide (CLI chapter) for more information.
The read-ipr command reads the value of a single register. The register is specified either by its name (e.g. pal_base) or its index (e.g. 0x10E).
The write_ipr commands writes the given value to the specified register.
Note that register names and indices differs between different Alpha implementations (EV5, EV6, etc).
If no cpu-name is supplied, the current frontend processor is used.
Before the machine can be reversed, at least one time bookmark has to be set. Reverse operations are possible in the region following the first (oldest) time bookmark.
next-line causes the simulation to run until it reaches another source line, but will not stop in subroutine calls. reverse-next-line is the same as next-line, except for running backwards. next-instruction and reverse-next-instruction are like next-line and reverse-next-line, respectively, except for stepping just one instruction instead of an entire source line.
finish-function causes the simulation to run until the current function has returned. uncall-function causes the simulation to run backwards until just before the current function was called.
These commands can either be called as context namespace commands, e.g., context.step-line, in which case the command will apply to that context; or not, e.g., step-line, in which case the command will operate on the current context of the current processor.
next-line causes the simulation to run until it reaches another source line, but will not stop in subroutine calls. reverse-next-line is the same as next-line, except for running backwards. next-instruction and reverse-next-instruction are like next-line and reverse-next-line, respectively, except for stepping just one instruction instead of an entire source line.
finish-function causes the simulation to run until the current function has returned. uncall-function causes the simulation to run backwards until just before the current function was called.
These commands can either be called as context namespace commands, e.g., context.step-line, in which case the command will apply to that context; or not, e.g., step-line, in which case the command will operate on the current context of the current processor.
The reverse-next-instruction command is similar except that it does not reverse into called functions.
next-line causes the simulation to run until it reaches another source line, but will not stop in subroutine calls. reverse-next-line is the same as next-line, except for running backwards. next-instruction and reverse-next-instruction are like next-line and reverse-next-line, respectively, except for stepping just one instruction instead of an entire source line.
finish-function causes the simulation to run until the current function has returned. uncall-function causes the simulation to run backwards until just before the current function was called.
These commands can either be called as context namespace commands, e.g., context.step-line, in which case the command will apply to that context; or not, e.g., step-line, in which case the command will operate on the current context of the current processor.
At least one time bookmark has to be set before any reverse operations are possible.
size_mb limits the amount of memory used for reverse execution.
steps limits the scope of reversability to the specified number of steps.
Python code can also by executed by prefixing the line with @. Multi-line Python statements can be used by leaving a blank line at the end of the statement. Only the first line should have an @ in this case.
Simics scripts usually ends with the suffix ".simics" but this is only a convention. The suffix is ignored by Simics.
This is an example of a Simics script:
# This is a Simics script
break 0xffc000 # set a breakpoint
run
echo "breakpoint reached"
run-command-file another-script.simics
Simics scripts can be executed directly when Simics has started by using the -x command line option.
If a command fails or the user presses Control-C the Simics script is interrupted and control returns to the Simics prompt.
run-command-file uses Simics's Search Path and path markers (%simics%, %script%) to find the script to run. Refer to Simics User Guide (CLI chapter) for more information.
Use the -z flag for compressed images, or -u for uncompressed. The default is taken from the preference object.
script-branch { commands }
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.
Reverse operations are possible in the region following the first (i.e. oldest) time bookmark.
Setting a time bookmark can cause a certain reduction in forward simulation performance (deleting all bookmarks will restore the original performance).
If limit is zero, the memory limit is removed. If swapdir is specified, it indicates a directory to use for swap files. If no argument is given, the current setting is displayed.
Simics sets a default memory limit at startup that depends on the amount of memory, and number of processors, on the host system.
Since an instruction may be longer than the longest supported integer in the frontend, both pattern and mask must be supplied as strings.
Set pattern and mask to the empty string ("") to remove this extra condition.
Set prefix to the empty string ("") to remove this extra condition.
Set sub-string to the empty string ("") to remove this extra condition.
To list all breakpoints set use the command list-breakpoints.
To list all breakpoints set use the command list-breakpoints.
next-line causes the simulation to run until it reaches another source line, but will not stop in subroutine calls. reverse-next-line is the same as next-line, except for running backwards. next-instruction and reverse-next-instruction are like next-line and reverse-next-line, respectively, except for stepping just one instruction instead of an entire source line.
finish-function causes the simulation to run until the current function has returned. uncall-function causes the simulation to run backwards until just before the current function was called.
These commands can either be called as context namespace commands, e.g., context.step-line, in which case the command will apply to that context; or not, e.g., step-line, in which case the command will operate on the current context of the current processor.
Sum a memory range. The width of the running sum is specified with the -w8 (default), -w16, or -w32 flag, standing for 8, 16, and 32 bits respectively.
The id parameter specifies the breakpoint to trace.
Instead of an id, the -all flag may be given. This will enable or disable tracing of all breakpoints.
The reg-name parameter specifies which control register should be traced. The available control registers depends on the simulated target.
Instead of a register name, the -all flag may be given. This will enable or disable tracing of all control register.
The exception parameter specifies which exception should be traced. The available exceptions depends on the simulated target.
Instead of an exception, the -all flag may be given. This will enable or disable tracing of all exceptions.
The hap parameter specifies the hap.
Instead of a hap, the -all flag may be given. This will enable or disable tracing of all haps.
The device parameter specifies the device object that should be traced.
Instead of an object name, the -all flag may be given. This will enable or disable tracing of all devices.
The reg-name parameter specifies which control register should be traced. The available control registers depends on the simulated target.
Instead of a register name, the -all flag may be given. This will enable or disable tracing of all control register.
The exception parameter specifies which exception should be traced. The available exceptions depends on the simulated target.
Instead of an exception, the -all flag may be given. This will enable or disable tracing of all exceptions.
The hap parameter specifies the hap.
Instead of a hap, the -all flag may be given. This will enable or disable breaking on all haps.
The device parameter specifies which device object should be traced.
Instead of an object name, the -all flag may be given. This will enable or disable breaking on accesses to all device.
next-line causes the simulation to run until it reaches another source line, but will not stop in subroutine calls. reverse-next-line is the same as next-line, except for running backwards. next-instruction and reverse-next-instruction are like next-line and reverse-next-line, respectively, except for stepping just one instruction instead of an entire source line.
finish-function causes the simulation to run until the current function has returned. uncall-function causes the simulation to run backwards until just before the current function was called.
These commands can either be called as context namespace commands, e.g., context.step-line, in which case the command will apply to that context; or not, e.g., step-line, in which case the command will operate on the current context of the current processor.
The id parameter specifies the breakpoint to trace.
Instead of an id, the -all flag may be given. This will enable or disable tracing of all breakpoints.
The reg-name parameter specifies which control register should be traced. The available control registers depends on the simulated target.
Instead of a register name, the -all flag may be given. This will enable or disable tracing of all control register.
The exception parameter specifies which exception should be traced. The available exceptions depends on the simulated target.
Instead of an exception, the -all flag may be given. This will enable or disable tracing of all exceptions.
The hap parameter specifies the hap.
Instead of a hap, the -all flag may be given. This will enable or disable tracing of all haps.
The device parameter specifies the device object that should be traced.
Instead of an object name, the -all flag may be given. This will enable or disable tracing of all devices.
while <condition> { commands }
Use the -z flag for compressed images, or -u for uncompressed. The default is taken from the preference object.
The read-ipr command reads the value of a single register. The register is specified either by its name (e.g. pal_base) or its index (e.g. 0x10E).
The write_ipr commands writes the given value to the specified register.
Note that register names and indices differs between different Alpha implementations (EV5, EV6, etc).
This function may or may not have the correct side-effects, depending on target and register. If no cpu-name is given, the current frontend processor is used.
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 "**".