ARM: PIE: Add macro for generating PIE resume trampoline
Add a helper that generates a short snippet of code that updates PIE relocations, loads the stack pointer and calls a C (or asm) function. The code gets placed into a PIE section. Signed-off-by: Russ Dill <Russ.Dill@ti.com>
This commit is contained in:
parent
f4c49be431
commit
5b4bb81c25
1 changed files with 25 additions and 0 deletions
|
|
@ -1,7 +1,32 @@
|
|||
#ifndef __ASM_ARM_SUSPEND_H
|
||||
#define __ASM_ARM_SUSPEND_H
|
||||
|
||||
#include <asm/pie.h>
|
||||
|
||||
extern void cpu_resume(void);
|
||||
extern int cpu_suspend(unsigned long, int (*)(unsigned long));
|
||||
|
||||
/**
|
||||
* ARM_PIE_RESUME - generate a PIE trampoline for resume
|
||||
* @proc: SoC, should match argument used with PIE_OVERLAY_SECTION()
|
||||
* @func: C or asm function to call at resume
|
||||
* @stack: stack to use before calling func
|
||||
*/
|
||||
#define ARM_PIE_RESUME(proc, func, stack) \
|
||||
static void __naked __noreturn __pie(proc) proc##_resume_trampoline2(void) \
|
||||
{ \
|
||||
__asm__ __volatile__( \
|
||||
" mov sp, %0\n" \
|
||||
: : "r"((stack)) : "sp"); \
|
||||
\
|
||||
func(); \
|
||||
} \
|
||||
\
|
||||
void __naked __noreturn __pie(proc) proc##_resume_trampoline(void) \
|
||||
{ \
|
||||
pie_relocate_from_pie(); \
|
||||
proc##_resume_trampoline2(); \
|
||||
} \
|
||||
EXPORT_PIE_SYMBOL(proc##_resume_trampoline)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue