Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 279913
b: refs/heads/master
c: 2d81f1f
h: refs/heads/master
i:
  279911: 69fd99f
v: v3
  • Loading branch information
Will Deacon committed Dec 12, 2011
1 parent dcf44a1 commit a05760c
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ad622671a4da0b6db1c1382e6345e1361c5fbab8
refs/heads/master: 2d81f1fe81b753a5744fd2deceafab3e62ba02d5
3 changes: 2 additions & 1 deletion trunk/arch/arm/lib/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
testchangebit.o testclearbit.o testsetbit.o \
ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
ucmpdi2.o lib1funcs.o div64.o \
io-readsb.o io-writesb.o io-readsl.o io-writesl.o
io-readsb.o io-writesb.o io-readsl.o io-writesl.o \
call_with_stack.o

mmu-y := clear_user.o copy_page.o getuser.o putuser.o

Expand Down
44 changes: 44 additions & 0 deletions trunk/arch/arm/lib/call_with_stack.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* arch/arm/lib/call_with_stack.S
*
* Copyright (C) 2011 ARM Ltd.
* Written by Will Deacon <will.deacon@arm.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

#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

adr lr, BSYM(1f)
mov pc, r2

1: ldr lr, [sp]
ldr sp, [sp, #4]
mov pc, lr
ENDPROC(call_with_stack)

0 comments on commit a05760c

Please sign in to comment.