99 lines
1.6 KiB
ArmAsm
99 lines
1.6 KiB
ArmAsm
/******************************************************************************
|
|
* Copyright (c) 2004, 2008 IBM Corporation
|
|
* All rights reserved.
|
|
* This program and the accompanying materials
|
|
* are made available under the terms of the BSD License
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.opensource.org/licenses/bsd-license.php
|
|
*
|
|
* Contributors:
|
|
* IBM Corporation - initial implementation
|
|
*****************************************************************************/
|
|
|
|
#include <macros.h>
|
|
#include "takeover.h"
|
|
|
|
.globl _wrapclient
|
|
.section ".start"
|
|
.align 3
|
|
|
|
_wrapclient:
|
|
bcl 20,31,over # branch after pointer table
|
|
base:
|
|
.align 3
|
|
.LCgot: .quad _got-base
|
|
over:
|
|
mflr r8 # gpr 8 is the base
|
|
ld r2, .LCgot-base(r8) # load got pointer
|
|
add r2, r2, r8 # add base
|
|
li 14, 0
|
|
oris 14, 14, __bssSize@h
|
|
ori 14, 14, __bssSize@l
|
|
addi 14,14,7
|
|
srwi 14,14,3
|
|
mtctr 14
|
|
li 14, 0
|
|
oris 14, 14, __bssStart@h
|
|
ori 14, 14, __bssStart@l
|
|
subi 14, 14, 8
|
|
li 15, 0
|
|
1:
|
|
stdu 15,8(14)
|
|
bdnz 1b
|
|
|
|
bl ._entry
|
|
|
|
|
|
|
|
.globl slaveLoopNoTakeover
|
|
slaveLoopNoTakeover:
|
|
mr 28,3
|
|
|
|
li 14,0
|
|
oris 14, 14, slaveQuitt@h
|
|
ori 14, 14, slaveQuitt@l
|
|
|
|
li 3,0
|
|
std 3,0(14)
|
|
1:
|
|
ld 3,0(14)
|
|
cmpld 3,28
|
|
bne 1b
|
|
|
|
li 3,0
|
|
std 3,0(14)
|
|
|
|
LOAD64(r3, (TAKEOVERBASEADDRESS+0x150))
|
|
mtctr r3
|
|
bctr
|
|
|
|
|
|
.globl slaveLoop
|
|
slaveLoop:
|
|
mr 28,3
|
|
li r3, 0x5124
|
|
li r0, -1; .long 0x44000022
|
|
|
|
li 14,0
|
|
oris 14, 14, slaveQuitt@h
|
|
ori 14, 14, slaveQuitt@l
|
|
li 3,0
|
|
std 3,0(14)
|
|
1:
|
|
ld 3,0(14)
|
|
cmpld 3,28
|
|
bne 1b
|
|
|
|
li 3,0
|
|
std 3,0(14)
|
|
|
|
LOAD64(r3, (TAKEOVERBASEADDRESS+0x150))
|
|
mtctr r3
|
|
bctr
|
|
|
|
|
|
C_ENTRY(m_sync)
|
|
isync
|
|
sync
|
|
nop
|
|
blr
|