69 lines
2.2 KiB
ReStructuredText
69 lines
2.2 KiB
ReStructuredText
|
===================
|
||
|
Legacy instructions
|
||
|
===================
|
||
|
|
||
|
The arm64 port of the Linux kernel provides infrastructure to support
|
||
|
emulation of instructions which have been deprecated, or obsoleted in
|
||
|
the architecture. The infrastructure code uses undefined instruction
|
||
|
hooks to support emulation. Where available it also allows turning on
|
||
|
the instruction execution in hardware.
|
||
|
|
||
|
The emulation mode can be controlled by writing to sysctl nodes
|
||
|
(/proc/sys/abi). The following explains the different execution
|
||
|
behaviours and the corresponding values of the sysctl nodes -
|
||
|
|
||
|
* Undef
|
||
|
Value: 0
|
||
|
|
||
|
Generates undefined instruction abort. Default for instructions that
|
||
|
have been obsoleted in the architecture, e.g., SWP
|
||
|
|
||
|
* Emulate
|
||
|
Value: 1
|
||
|
|
||
|
Uses software emulation. To aid migration of software, in this mode
|
||
|
usage of emulated instruction is traced as well as rate limited
|
||
|
warnings are issued. This is the default for deprecated
|
||
|
instructions, .e.g., CP15 barriers
|
||
|
|
||
|
* Hardware Execution
|
||
|
Value: 2
|
||
|
|
||
|
Although marked as deprecated, some implementations may support the
|
||
|
enabling/disabling of hardware support for the execution of these
|
||
|
instructions. Using hardware execution generally provides better
|
||
|
performance, but at the loss of ability to gather runtime statistics
|
||
|
about the use of the deprecated instructions.
|
||
|
|
||
|
The default mode depends on the status of the instruction in the
|
||
|
architecture. Deprecated instructions should default to emulation
|
||
|
while obsolete instructions must be undefined by default.
|
||
|
|
||
|
Note: Instruction emulation may not be possible in all cases. See
|
||
|
individual instruction notes for further information.
|
||
|
|
||
|
Supported legacy instructions
|
||
|
-----------------------------
|
||
|
* SWP{B}
|
||
|
|
||
|
:Node: /proc/sys/abi/swp
|
||
|
:Status: Obsolete
|
||
|
:Default: Undef (0)
|
||
|
|
||
|
* CP15 Barriers
|
||
|
|
||
|
:Node: /proc/sys/abi/cp15_barrier
|
||
|
:Status: Deprecated
|
||
|
:Default: Emulate (1)
|
||
|
|
||
|
* SETEND
|
||
|
|
||
|
:Node: /proc/sys/abi/setend
|
||
|
:Status: Deprecated
|
||
|
:Default: Emulate (1)*
|
||
|
|
||
|
Note: All the cpus on the system must have mixed endian support at EL0
|
||
|
for this feature to be enabled. If a new CPU - which doesn't support mixed
|
||
|
endian - is hotplugged in after this feature has been enabled, there could
|
||
|
be unexpected results in the application.
|