reloc_test_syms.S 1.5 KB

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