fprobe.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Generic arch dependent fprobe macros.
  4. */
  5. #ifndef __ASM_GENERIC_FPROBE_H__
  6. #define __ASM_GENERIC_FPROBE_H__
  7. #include <linux/bits.h>
  8. #ifdef CONFIG_64BIT
  9. /*
  10. * Encoding the size and the address of fprobe into one 64bit entry.
  11. * The 32bit architectures should use 2 entries to store those info.
  12. */
  13. #define ARCH_DEFINE_ENCODE_FPROBE_HEADER
  14. #define FPROBE_HEADER_MSB_SIZE_SHIFT (BITS_PER_LONG - FPROBE_DATA_SIZE_BITS)
  15. #define FPROBE_HEADER_MSB_MASK \
  16. GENMASK(FPROBE_HEADER_MSB_SIZE_SHIFT - 1, 0)
  17. /*
  18. * By default, this expects the MSBs in the address of kprobe is 0xf.
  19. * If any arch needs another fixed pattern (e.g. s390 is zero filled),
  20. * override this.
  21. */
  22. #define FPROBE_HEADER_MSB_PATTERN \
  23. GENMASK(BITS_PER_LONG - 1, FPROBE_HEADER_MSB_SIZE_SHIFT)
  24. #define arch_fprobe_header_encodable(fp) \
  25. (((unsigned long)(fp) & ~FPROBE_HEADER_MSB_MASK) == \
  26. FPROBE_HEADER_MSB_PATTERN)
  27. #define arch_encode_fprobe_header(fp, size) \
  28. (((unsigned long)(fp) & FPROBE_HEADER_MSB_MASK) | \
  29. ((unsigned long)(size) << FPROBE_HEADER_MSB_SIZE_SHIFT))
  30. #define arch_decode_fprobe_header_size(val) \
  31. ((unsigned long)(val) >> FPROBE_HEADER_MSB_SIZE_SHIFT)
  32. #define arch_decode_fprobe_header_fp(val) \
  33. ((struct fprobe *)(((unsigned long)(val) & FPROBE_HEADER_MSB_MASK) | \
  34. FPROBE_HEADER_MSB_PATTERN))
  35. #endif /* CONFIG_64BIT */
  36. #endif /* __ASM_GENERIC_FPROBE_H__ */