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