1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
/* 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) && !defined(CONFIG_ARM64)
.text
.globl _start
_start:
ldr r4, =search_hint
mov r5, sp
str r5, [r4]
b main
.globl syscall
syscall:
ldr r4, =syscall_ptr
ldr r4, [r4]
bx r4
#elif defined(CONFIG_ARM64)
.text
.globl _start
_start:
ldr x17, =search_hint
mov x16, sp
str x16, [x17]
b main
.globl syscall
syscall:
ldr x16, =syscall_ptr
ldr x16, [x16]
br x16
#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
#elif defined(CONFIG_ARCH_RV32I)
.text
.globl _start
_start:
la t0, search_hint
sw sp, 0(t0)
la t0, main
jalr x0, t0
.globl syscall
syscall:
la t0, syscall_ptr
lw t0, 0(t0)
jalr x0, t0
#elif defined(CONFIG_ARCH_RV64I)
.text
.globl _start
_start:
la t0, search_hint
sd sp, 0(t0)
la t0, main
jalr x0, t0
.globl syscall
syscall:
la t0, syscall_ptr
ld t0, 0(t0)
jalr x0, t0
#else
#error No support for this arch!
#endif
.section .data
.globl syscall_ptr
syscall_ptr:
.align 8
.long 0
.globl search_hint
search_hint:
.long 0
|