| /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| /* |
| * Copyright 2015, Cyril Bur, IBM Corp. |
| */ |
| |
| #include "basic_asm.h" |
| |
| /* long signal_self(pid_t pid, int sig); */ |
| FUNC_START(signal_self) |
| li r0,37 /* sys_kill */ |
| /* r3 already has our pid in it */ |
| /* r4 already has signal type in it */ |
| sc |
| bc 4,3,1f |
| subfze r3,r3 |
| 1: blr |
| FUNC_END(signal_self) |
| |
| /* long tm_signal_self(pid_t pid, int sig, int *ret); */ |
| FUNC_START(tm_signal_self) |
| PUSH_BASIC_STACK(8) |
| std r5,STACK_FRAME_PARAM(0)(sp) /* ret */ |
| tbegin. |
| beq 1f |
| tsuspend. |
| li r0,37 /* sys_kill */ |
| /* r3 already has our pid in it */ |
| /* r4 already has signal type in it */ |
| sc |
| ld r5,STACK_FRAME_PARAM(0)(sp) /* ret */ |
| bc 4,3,2f |
| subfze r3,r3 |
| 2: std r3,0(r5) |
| tabort. 0 |
| tresume. /* Be nice to some cleanup, jumps back to tbegin then to 1: */ |
| /* |
| * Transaction should be proper doomed and we should never get |
| * here |
| */ |
| li r3,1 |
| POP_BASIC_STACK(8) |
| blr |
| 1: li r3,0 |
| POP_BASIC_STACK(8) |
| blr |
| FUNC_END(tm_signal_self) |