1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Copyright (C) 2017 Linaro, Ltd. <ard.biesheuvel@linaro.org> |
4 | */ |
5 | |
6 | #include <linux/linkage.h> |
7 | |
8 | SYM_FUNC_START(absolute_data64) |
9 | ldr x0, 0f |
10 | ret |
11 | 0: .quad sym64_abs |
12 | SYM_FUNC_END(absolute_data64) |
13 | |
14 | SYM_FUNC_START(absolute_data32) |
15 | ldr w0, 0f |
16 | ret |
17 | 0: .long sym32_abs |
18 | SYM_FUNC_END(absolute_data32) |
19 | |
20 | SYM_FUNC_START(absolute_data16) |
21 | adr x0, 0f |
22 | ldrh w0, [x0] |
23 | ret |
24 | 0: .short sym16_abs, 0 |
25 | SYM_FUNC_END(absolute_data16) |
26 | |
27 | SYM_FUNC_START(signed_movw) |
28 | movz x0, #:abs_g2_s:sym64_abs |
29 | movk x0, #:abs_g1_nc:sym64_abs |
30 | movk x0, #:abs_g0_nc:sym64_abs |
31 | ret |
32 | SYM_FUNC_END(signed_movw) |
33 | |
34 | SYM_FUNC_START(unsigned_movw) |
35 | movz x0, #:abs_g3:sym64_abs |
36 | movk x0, #:abs_g2_nc:sym64_abs |
37 | movk x0, #:abs_g1_nc:sym64_abs |
38 | movk x0, #:abs_g0_nc:sym64_abs |
39 | ret |
40 | SYM_FUNC_END(unsigned_movw) |
41 | |
42 | .align 12 |
43 | .space 0xff8 |
44 | SYM_FUNC_START(relative_adrp) |
45 | adrp x0, sym64_rel |
46 | add x0, x0, #:lo12:sym64_rel |
47 | ret |
48 | SYM_FUNC_END(relative_adrp) |
49 | |
50 | .align 12 |
51 | .space 0xffc |
52 | SYM_FUNC_START(relative_adrp_far) |
53 | adrp x0, memstart_addr |
54 | add x0, x0, #:lo12:memstart_addr |
55 | ret |
56 | SYM_FUNC_END(relative_adrp_far) |
57 | |
58 | SYM_FUNC_START(relative_adr) |
59 | adr x0, sym64_rel |
60 | ret |
61 | SYM_FUNC_END(relative_adr) |
62 | |
63 | SYM_FUNC_START(relative_data64) |
64 | adr x1, 0f |
65 | ldr x0, [x1] |
66 | add x0, x0, x1 |
67 | ret |
68 | 0: .quad sym64_rel - . |
69 | SYM_FUNC_END(relative_data64) |
70 | |
71 | SYM_FUNC_START(relative_data32) |
72 | adr x1, 0f |
73 | ldr w0, [x1] |
74 | add x0, x0, x1 |
75 | ret |
76 | 0: .long sym64_rel - . |
77 | SYM_FUNC_END(relative_data32) |
78 | |
79 | SYM_FUNC_START(relative_data16) |
80 | adr x1, 0f |
81 | ldrsh w0, [x1] |
82 | add x0, x0, x1 |
83 | ret |
84 | 0: .short sym64_rel - ., 0 |
85 | SYM_FUNC_END(relative_data16) |
86 | |