assembler.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2019 Arm Limited
  4. * Original author: Dave Martin <[email protected]>
  5. */
  6. #ifndef ASSEMBLER_H
  7. #define ASSEMBLER_H
  8. #define NT_GNU_PROPERTY_TYPE_0 5
  9. #define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000
  10. /* Bits for GNU_PROPERTY_AARCH64_FEATURE_1_BTI */
  11. #define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1U << 0)
  12. #define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1U << 1)
  13. .macro startfn name:req
  14. .globl \name
  15. \name:
  16. .macro endfn
  17. .size \name, . - \name
  18. .type \name, @function
  19. .purgem endfn
  20. .endm
  21. .endm
  22. .macro emit_aarch64_feature_1_and
  23. .pushsection .note.gnu.property, "a"
  24. .align 3
  25. .long 2f - 1f
  26. .long 6f - 3f
  27. .long NT_GNU_PROPERTY_TYPE_0
  28. 1: .string "GNU"
  29. 2:
  30. .align 3
  31. 3: .long GNU_PROPERTY_AARCH64_FEATURE_1_AND
  32. .long 5f - 4f
  33. 4:
  34. #if BTI
  35. .long GNU_PROPERTY_AARCH64_FEATURE_1_PAC | \
  36. GNU_PROPERTY_AARCH64_FEATURE_1_BTI
  37. #else
  38. .long 0
  39. #endif
  40. 5:
  41. .align 3
  42. 6:
  43. .popsection
  44. .endm
  45. .macro paciasp
  46. hint 0x19
  47. .endm
  48. .macro autiasp
  49. hint 0x1d
  50. .endm
  51. .macro __bti_
  52. hint 0x20
  53. .endm
  54. .macro __bti_c
  55. hint 0x22
  56. .endm
  57. .macro __bti_j
  58. hint 0x24
  59. .endm
  60. .macro __bti_jc
  61. hint 0x26
  62. .endm
  63. .macro bti what=
  64. __bti_\what
  65. .endm
  66. #endif /* ! ASSEMBLER_H */