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