123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 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.
|