summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@ozlabs.org>2017-08-30 14:12:38 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2017-09-01 16:39:55 +1000
commitd955189ae42796621fb439e5e778ccaeebc2a1e7 (patch)
treeedf5d221e3570203c1e46d660b8a8c9571bfb194 /lib
parentb9da9c8a48c56339c7c95d8ff0c9aff93727ac95 (diff)
downloadlinux-stable-d955189ae42796621fb439e5e778ccaeebc2a1e7.tar.gz
linux-stable-d955189ae42796621fb439e5e778ccaeebc2a1e7.tar.bz2
linux-stable-d955189ae42796621fb439e5e778ccaeebc2a1e7.zip
powerpc: Handle opposite-endian processes in emulation code
This adds code to the load and store emulation code to byte-swap the data appropriately when the process being emulated is set to the opposite endianness to that of the kernel. This also enables the emulation for the multiple-register loads and stores (lmw, stmw, lswi, stswi, lswx, stswx) to work for little-endian. In little-endian mode, the partial word at the end of a transfer for lsw*/stsw* (when the byte count is not a multiple of 4) is loaded/stored at the least-significant end of the register. Additionally, this fixes a bug in the previous code in that it could call read_mem/write_mem with a byte count that was not 1, 2, 4 or 8. Note that this only works correctly on processors with "true" little-endian mode, such as IBM POWER processors from POWER6 on, not the so-called "PowerPC" little-endian mode that uses address swizzling as implemented on the old 32-bit 603, 604, 740/750, 74xx CPUs. Signed-off-by: Paul Mackerras <paulus@ozlabs.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'lib')
0 files changed, 0 insertions, 0 deletions