mirror of
https://github.com/Qortal/Brooklyn.git
synced 2025-02-01 07:42:18 +00:00
33 lines
577 B
ArmAsm
33 lines
577 B
ArmAsm
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||
|
/*
|
||
|
* arch/arm/lib/call_with_stack.S
|
||
|
*
|
||
|
* Copyright (C) 2011 ARM Ltd.
|
||
|
* Written by Will Deacon <will.deacon@arm.com>
|
||
|
*/
|
||
|
|
||
|
#include <linux/linkage.h>
|
||
|
#include <asm/assembler.h>
|
||
|
|
||
|
/*
|
||
|
* void call_with_stack(void (*fn)(void *), void *arg, void *sp)
|
||
|
*
|
||
|
* Change the stack to that pointed at by sp, then invoke fn(arg) with
|
||
|
* the new stack.
|
||
|
*/
|
||
|
ENTRY(call_with_stack)
|
||
|
str sp, [r2, #-4]!
|
||
|
str lr, [r2, #-4]!
|
||
|
|
||
|
mov sp, r2
|
||
|
mov r2, r0
|
||
|
mov r0, r1
|
||
|
|
||
|
badr lr, 1f
|
||
|
ret r2
|
||
|
|
||
|
1: ldr lr, [sp]
|
||
|
ldr sp, [sp, #4]
|
||
|
ret lr
|
||
|
ENDPROC(call_with_stack)
|