/* SPDX-License-Identifier: GPL-2.0+ */ | |
/* | |
* (C) Copyright 2007 Semihalf | |
* | |
* Written by: Rafal Jaworowski <raj@semihalf.com> | |
*/ | |
#if defined(CONFIG_PPC) | |
.text | |
.globl _start | |
_start: | |
lis %r11, search_hint@ha | |
addi %r11, %r11, search_hint@l | |
stw %r1, 0(%r11) | |
b main | |
.globl syscall | |
syscall: | |
lis %r11, syscall_ptr@ha | |
addi %r11, %r11, syscall_ptr@l | |
lwz %r11, 0(%r11) | |
mtctr %r11 | |
bctr | |
#elif defined(CONFIG_ARM) | |
.text | |
.globl _start | |
_start: | |
ldr ip, =search_hint | |
str sp, [ip] | |
b main | |
#elif defined(CONFIG_ARM64) | |
.text | |
.globl _start | |
_start: | |
ldr ip0, =search_hint | |
str sp_el2, [ip0] | |
b main | |
.globl syscall | |
syscall: | |
ldr ip0, =syscall_ptr | |
ldr pc_el2, [ip0] | |
.globl syscall | |
syscall: | |
ldr ip, =syscall_ptr | |
ldr pc, [ip] | |
#elif defined(CONFIG_MIPS) | |
#include <asm/asm.h> | |
.text | |
.globl __start | |
.ent __start | |
__start: | |
PTR_S $sp, search_hint | |
b main | |
.end __start | |
.globl syscall | |
.ent syscall | |
syscall: | |
PTR_S $ra, return_addr | |
PTR_L $t9, syscall_ptr | |
jalr $t9 | |
nop | |
PTR_L $ra, return_addr | |
jr $ra | |
nop | |
.end syscall | |
return_addr: | |
.align 8 | |
.long 0 | |
#else | |
#error No support for this arch! | |
#endif | |
.globl syscall_ptr | |
syscall_ptr: | |
.align 8 | |
.long 0 | |
.globl search_hint | |
search_hint: | |
.long 0 |