diff options
author | Michal Simek <monstr@monstr.eu> | 2010-12-29 08:34:46 -0500 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2011-01-03 04:08:29 -0500 |
commit | e3288f310111f7d18c323d95ae998765dee8c825 (patch) | |
tree | 764dce005788f16e0a894257edf7237b4e4c81bd /arch/microblaze | |
parent | a3c26959cc893cafc78a8c4e7d7ca6d4ffe4525c (diff) |
microblaze: Fix unaligned exception for little endian platform
Half word unaligned accesses need to be fixed.
Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch/microblaze')
-rw-r--r-- | arch/microblaze/kernel/hw_exception_handler.S | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/microblaze/kernel/hw_exception_handler.S b/arch/microblaze/kernel/hw_exception_handler.S index 781195438ee6..25f6e07d8de8 100644 --- a/arch/microblaze/kernel/hw_exception_handler.S +++ b/arch/microblaze/kernel/hw_exception_handler.S | |||
@@ -945,11 +945,20 @@ store3: sbi r3, r4, 2; | |||
945 | store4: sbi r3, r4, 3; /* Delay slot */ | 945 | store4: sbi r3, r4, 3; /* Delay slot */ |
946 | ex_shw_vm: | 946 | ex_shw_vm: |
947 | /* Store the lower half-word, byte-by-byte into destination address */ | 947 | /* Store the lower half-word, byte-by-byte into destination address */ |
948 | #ifdef __MICROBLAZEEL__ | ||
949 | lbui r3, r5, 0; | ||
950 | store5: sbi r3, r4, 0; | ||
951 | lbui r3, r5, 1; | ||
952 | brid ret_from_exc; | ||
953 | store6: sbi r3, r4, 1; /* Delay slot */ | ||
954 | #else | ||
948 | lbui r3, r5, 2; | 955 | lbui r3, r5, 2; |
949 | store5: sbi r3, r4, 0; | 956 | store5: sbi r3, r4, 0; |
950 | lbui r3, r5, 3; | 957 | lbui r3, r5, 3; |
951 | brid ret_from_exc; | 958 | brid ret_from_exc; |
952 | store6: sbi r3, r4, 1; /* Delay slot */ | 959 | store6: sbi r3, r4, 1; /* Delay slot */ |
960 | #endif | ||
961 | |||
953 | ex_sw_end_vm: /* Exception handling of store word, ends. */ | 962 | ex_sw_end_vm: /* Exception handling of store word, ends. */ |
954 | 963 | ||
955 | /* We have to prevent cases that get/put_user macros get unaligned pointer | 964 | /* We have to prevent cases that get/put_user macros get unaligned pointer |