reloc_test_syms.S 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * Copyright (C) 2017 Linaro, Ltd. <ard.biesheuvel@linaro.org>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 as
  6. * published by the Free Software Foundation.
  7. *
  8. */
  9. #include <linux/linkage.h>
  10. ENTRY(absolute_data64)
  11. ldr x0, 0f
  12. ret
  13. 0: .quad sym64_abs
  14. ENDPROC(absolute_data64)
  15. ENTRY(absolute_data32)
  16. ldr w0, 0f
  17. ret
  18. 0: .long sym32_abs
  19. ENDPROC(absolute_data32)
  20. ENTRY(absolute_data16)
  21. adr x0, 0f
  22. ldrh w0, [x0]
  23. ret
  24. 0: .short sym16_abs, 0
  25. ENDPROC(absolute_data16)
  26. ENTRY(signed_movw)
  27. movz x0, #:abs_g2_s:sym64_abs
  28. movk x0, #:abs_g1_nc:sym64_abs
  29. movk x0, #:abs_g0_nc:sym64_abs
  30. ret
  31. ENDPROC(signed_movw)
  32. ENTRY(unsigned_movw)
  33. movz x0, #:abs_g3:sym64_abs
  34. movk x0, #:abs_g2_nc:sym64_abs
  35. movk x0, #:abs_g1_nc:sym64_abs
  36. movk x0, #:abs_g0_nc:sym64_abs
  37. ret
  38. ENDPROC(unsigned_movw)
  39. .align 12
  40. .space 0xff8
  41. ENTRY(relative_adrp)
  42. adrp x0, sym64_rel
  43. add x0, x0, #:lo12:sym64_rel
  44. ret
  45. ENDPROC(relative_adrp)
  46. .align 12
  47. .space 0xffc
  48. ENTRY(relative_adrp_far)
  49. adrp x0, memstart_addr
  50. add x0, x0, #:lo12:memstart_addr
  51. ret
  52. ENDPROC(relative_adrp_far)
  53. ENTRY(relative_adr)
  54. adr x0, sym64_rel
  55. ret
  56. ENDPROC(relative_adr)
  57. ENTRY(relative_data64)
  58. adr x1, 0f
  59. ldr x0, [x1]
  60. add x0, x0, x1
  61. ret
  62. 0: .quad sym64_rel - .
  63. ENDPROC(relative_data64)
  64. ENTRY(relative_data32)
  65. adr x1, 0f
  66. ldr w0, [x1]
  67. add x0, x0, x1
  68. ret
  69. 0: .long sym64_rel - .
  70. ENDPROC(relative_data32)
  71. ENTRY(relative_data16)
  72. adr x1, 0f
  73. ldrsh w0, [x1]
  74. add x0, x0, x1
  75. ret
  76. 0: .short sym64_rel - ., 0
  77. ENDPROC(relative_data16)