1d2912cb1SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */ 2214fad55SArd Biesheuvel/* 3214fad55SArd Biesheuvel * Copyright (C) 2017 Linaro, Ltd. <ard.biesheuvel@linaro.org> 4214fad55SArd Biesheuvel */ 5214fad55SArd Biesheuvel 6214fad55SArd Biesheuvel#include <linux/linkage.h> 7214fad55SArd Biesheuvel 80343a7e4SMark BrownSYM_FUNC_START(absolute_data64) 9214fad55SArd Biesheuvel ldr x0, 0f 10214fad55SArd Biesheuvel ret 11214fad55SArd Biesheuvel0: .quad sym64_abs 120343a7e4SMark BrownSYM_FUNC_END(absolute_data64) 13214fad55SArd Biesheuvel 140343a7e4SMark BrownSYM_FUNC_START(absolute_data32) 15214fad55SArd Biesheuvel ldr w0, 0f 16214fad55SArd Biesheuvel ret 17214fad55SArd Biesheuvel0: .long sym32_abs 180343a7e4SMark BrownSYM_FUNC_END(absolute_data32) 19214fad55SArd Biesheuvel 200343a7e4SMark BrownSYM_FUNC_START(absolute_data16) 21214fad55SArd Biesheuvel adr x0, 0f 22214fad55SArd Biesheuvel ldrh w0, [x0] 23214fad55SArd Biesheuvel ret 24214fad55SArd Biesheuvel0: .short sym16_abs, 0 250343a7e4SMark BrownSYM_FUNC_END(absolute_data16) 26214fad55SArd Biesheuvel 270343a7e4SMark BrownSYM_FUNC_START(signed_movw) 28214fad55SArd Biesheuvel movz x0, #:abs_g2_s:sym64_abs 29214fad55SArd Biesheuvel movk x0, #:abs_g1_nc:sym64_abs 30214fad55SArd Biesheuvel movk x0, #:abs_g0_nc:sym64_abs 31214fad55SArd Biesheuvel ret 320343a7e4SMark BrownSYM_FUNC_END(signed_movw) 33214fad55SArd Biesheuvel 340343a7e4SMark BrownSYM_FUNC_START(unsigned_movw) 35214fad55SArd Biesheuvel movz x0, #:abs_g3:sym64_abs 36214fad55SArd Biesheuvel movk x0, #:abs_g2_nc:sym64_abs 37214fad55SArd Biesheuvel movk x0, #:abs_g1_nc:sym64_abs 38214fad55SArd Biesheuvel movk x0, #:abs_g0_nc:sym64_abs 39214fad55SArd Biesheuvel ret 400343a7e4SMark BrownSYM_FUNC_END(unsigned_movw) 41214fad55SArd Biesheuvel 42a257e025SArd Biesheuvel .align 12 43a257e025SArd Biesheuvel .space 0xff8 440343a7e4SMark BrownSYM_FUNC_START(relative_adrp) 45214fad55SArd Biesheuvel adrp x0, sym64_rel 46214fad55SArd Biesheuvel add x0, x0, #:lo12:sym64_rel 47214fad55SArd Biesheuvel ret 480343a7e4SMark BrownSYM_FUNC_END(relative_adrp) 49214fad55SArd Biesheuvel 50a257e025SArd Biesheuvel .align 12 51a257e025SArd Biesheuvel .space 0xffc 520343a7e4SMark BrownSYM_FUNC_START(relative_adrp_far) 53bd99f9a1SArnd Bergmann adrp x0, memstart_addr 54bd99f9a1SArnd Bergmann add x0, x0, #:lo12:memstart_addr 55a257e025SArd Biesheuvel ret 560343a7e4SMark BrownSYM_FUNC_END(relative_adrp_far) 57214fad55SArd Biesheuvel 580343a7e4SMark BrownSYM_FUNC_START(relative_adr) 59214fad55SArd Biesheuvel adr x0, sym64_rel 60214fad55SArd Biesheuvel ret 610343a7e4SMark BrownSYM_FUNC_END(relative_adr) 62214fad55SArd Biesheuvel 630343a7e4SMark BrownSYM_FUNC_START(relative_data64) 64214fad55SArd Biesheuvel adr x1, 0f 65214fad55SArd Biesheuvel ldr x0, [x1] 66214fad55SArd Biesheuvel add x0, x0, x1 67214fad55SArd Biesheuvel ret 68214fad55SArd Biesheuvel0: .quad sym64_rel - . 690343a7e4SMark BrownSYM_FUNC_END(relative_data64) 70214fad55SArd Biesheuvel 710343a7e4SMark BrownSYM_FUNC_START(relative_data32) 72214fad55SArd Biesheuvel adr x1, 0f 73214fad55SArd Biesheuvel ldr w0, [x1] 74214fad55SArd Biesheuvel add x0, x0, x1 75214fad55SArd Biesheuvel ret 76214fad55SArd Biesheuvel0: .long sym64_rel - . 770343a7e4SMark BrownSYM_FUNC_END(relative_data32) 78214fad55SArd Biesheuvel 790343a7e4SMark BrownSYM_FUNC_START(relative_data16) 80214fad55SArd Biesheuvel adr x1, 0f 81214fad55SArd Biesheuvel ldrsh w0, [x1] 82214fad55SArd Biesheuvel add x0, x0, x1 83214fad55SArd Biesheuvel ret 84214fad55SArd Biesheuvel0: .short sym64_rel - ., 0 850343a7e4SMark BrownSYM_FUNC_END(relative_data16) 86