Punit Agrawal | 587064b | 2014-11-18 11:41:24 +0000 | [diff] [blame] | 1 | The arm64 port of the Linux kernel provides infrastructure to support |
| 2 | emulation of instructions which have been deprecated, or obsoleted in |
| 3 | the architecture. The infrastructure code uses undefined instruction |
| 4 | hooks to support emulation. Where available it also allows turning on |
| 5 | the instruction execution in hardware. |
| 6 | |
| 7 | The emulation mode can be controlled by writing to sysctl nodes |
| 8 | (/proc/sys/abi). The following explains the different execution |
| 9 | behaviours and the corresponding values of the sysctl nodes - |
| 10 | |
| 11 | * Undef |
| 12 | Value: 0 |
| 13 | Generates undefined instruction abort. Default for instructions that |
| 14 | have been obsoleted in the architecture, e.g., SWP |
| 15 | |
| 16 | * Emulate |
| 17 | Value: 1 |
| 18 | Uses software emulation. To aid migration of software, in this mode |
| 19 | usage of emulated instruction is traced as well as rate limited |
| 20 | warnings are issued. This is the default for deprecated |
| 21 | instructions, .e.g., CP15 barriers |
| 22 | |
| 23 | * Hardware Execution |
| 24 | Value: 2 |
| 25 | Although marked as deprecated, some implementations may support the |
| 26 | enabling/disabling of hardware support for the execution of these |
| 27 | instructions. Using hardware execution generally provides better |
| 28 | performance, but at the loss of ability to gather runtime statistics |
| 29 | about the use of the deprecated instructions. |
| 30 | |
| 31 | The default mode depends on the status of the instruction in the |
| 32 | architecture. Deprecated instructions should default to emulation |
| 33 | while obsolete instructions must be undefined by default. |
Punit Agrawal | bd35a4a | 2014-11-18 11:41:25 +0000 | [diff] [blame] | 34 | |
Suzuki K. Poulose | 2d888f4 | 2015-01-21 12:43:11 +0000 | [diff] [blame] | 35 | Note: Instruction emulation may not be possible in all cases. See |
| 36 | individual instruction notes for further information. |
| 37 | |
Punit Agrawal | bd35a4a | 2014-11-18 11:41:25 +0000 | [diff] [blame] | 38 | Supported legacy instructions |
| 39 | ----------------------------- |
| 40 | * SWP{B} |
| 41 | Node: /proc/sys/abi/swp |
| 42 | Status: Obsolete |
| 43 | Default: Undef (0) |
Punit Agrawal | c852f32 | 2014-11-18 11:41:26 +0000 | [diff] [blame] | 44 | |
| 45 | * CP15 Barriers |
| 46 | Node: /proc/sys/abi/cp15_barrier |
| 47 | Status: Deprecated |
| 48 | Default: Emulate (1) |
Suzuki K. Poulose | 2d888f4 | 2015-01-21 12:43:11 +0000 | [diff] [blame] | 49 | |
| 50 | * SETEND |
| 51 | Node: /proc/sys/abi/setend |
| 52 | Status: Deprecated |
| 53 | Default: Emulate (1)* |
| 54 | Note: All the cpus on the system must have mixed endian support at EL0 |
| 55 | for this feature to be enabled. If a new CPU - which doesn't support mixed |
| 56 | endian - is hotplugged in after this feature has been enabled, there could |
| 57 | be unexpected results in the application. |