aboutsummaryrefslogtreecommitdiff
path: root/slof/entry.S
diff options
context:
space:
mode:
authorNikunj A Dadhania <nikunj@linux.vnet.ibm.com>2014-03-07 11:51:56 +0530
committerAlexey Kardashevskiy <aik@ozlabs.ru>2014-03-18 17:06:47 +1100
commitc3d633a04491a959dd021a9199e3199fc3ad8a41 (patch)
tree88f7dd9e16c6b58cef6dd77e335085bad456995d /slof/entry.S
parent4099049c2588cc4ab4ce0fb7b96f8033ab03f538 (diff)
downloadSLOF-c3d633a04491a959dd021a9199e3199fc3ad8a41.zip
SLOF-c3d633a04491a959dd021a9199e3199fc3ad8a41.tar.gz
SLOF-c3d633a04491a959dd021a9199e3199fc3ad8a41.tar.bz2
ELF: Enter LE binary in LE mode
Trampoline code in the LE binary were helping fix this. This patch now takes care of switching the mode to LE for LE elf binaries. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Diffstat (limited to 'slof/entry.S')
-rw-r--r--slof/entry.S23
1 files changed, 23 insertions, 0 deletions
diff --git a/slof/entry.S b/slof/entry.S
index bbaca9f..dcff57b 100644
--- a/slof/entry.S
+++ b/slof/entry.S
@@ -178,7 +178,30 @@ call_client:
mflr 4
mtctr 3
bl swap_ci_regs
+ /* Check if LE loading */
+ cmpwi 0,13,1
+ beq 0f
bctrl
+ b 1f
+0: /* handle LE */
+ mfmsr 13
+ xori 13,13,1
+ mtsrr1 13
+ mfctr 13
+ mr 12,13
+ mtsrr0 13
+ rfid
+#if 0 /* in case we return back, still to be tested */
+ .long 0x05009f42; /* bcl 20,31,$+4 */
+ .long 0xa602c87d; /* mflr r14 */
+ .long 0x1c00ce39; /* addi r14,r14,28 */
+ .long 0xa600e07d; /* mfmsr r15 */
+ .long 0x0100ef69; /* xori r15,r15,1 */
+ .long 0xa603da7d; /* mtsrr0 r14 */
+ .long 0xa603fb7d; /* mtsrr1 r15 */
+ .long 0x2400004c; /* rfid */
+#endif
+1:
bl swap_ci_regs
mtlr 4
li 3, -1 # client app return