ret.S 484 B

1234567891011121314151617181920212223242526272829
  1. /* https://cirosantilli.com/linux-kernel-module-cheat#armv8-aarch64-ret-instruction */
  2. #include <lkmc.h>
  3. LKMC_PROLOGUE
  4. mov x19, 1
  5. bl inc
  6. LKMC_ASSERT_EQ(x19, =2)
  7. bl inc2
  8. LKMC_ASSERT_EQ(x19, =3)
  9. bl inc3
  10. LKMC_ASSERT_EQ(x19, =4)
  11. LKMC_EPILOGUE
  12. /* void inc(uint64_t *i) { (*i)++ } */
  13. inc:
  14. add x19, x19, 1
  15. ret
  16. /* Same but explicit return register. */
  17. inc2:
  18. add x19, x19, 1
  19. ret x30
  20. /* Same but with br. */
  21. inc3:
  22. add x19, x19, 1
  23. br x30