1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| /* 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)
|
|