signal.S 973 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Copyright 2015, Cyril Bur, IBM Corp.
  4. */
  5. #include "basic_asm.h"
  6. /* long signal_self(pid_t pid, int sig); */
  7. FUNC_START(signal_self)
  8. li r0,37 /* sys_kill */
  9. /* r3 already has our pid in it */
  10. /* r4 already has signal type in it */
  11. sc
  12. bc 4,3,1f
  13. subfze r3,r3
  14. 1: blr
  15. FUNC_END(signal_self)
  16. /* long tm_signal_self(pid_t pid, int sig, int *ret); */
  17. FUNC_START(tm_signal_self)
  18. PUSH_BASIC_STACK(8)
  19. std r5,STACK_FRAME_PARAM(0)(sp) /* ret */
  20. tbegin.
  21. beq 1f
  22. tsuspend.
  23. li r0,37 /* sys_kill */
  24. /* r3 already has our pid in it */
  25. /* r4 already has signal type in it */
  26. sc
  27. ld r5,STACK_FRAME_PARAM(0)(sp) /* ret */
  28. bc 4,3,2f
  29. subfze r3,r3
  30. 2: std r3,0(r5)
  31. tabort. 0
  32. tresume. /* Be nice to some cleanup, jumps back to tbegin then to 1: */
  33. /*
  34. * Transaction should be proper doomed and we should never get
  35. * here
  36. */
  37. li r3,1
  38. POP_BASIC_STACK(8)
  39. blr
  40. 1: li r3,0
  41. POP_BASIC_STACK(8)
  42. blr
  43. FUNC_END(tm_signal_self)