xref: /linux/tools/testing/selftests/powerpc/signal/signal.S (revision e5c86679d5e864947a52fb31e45a425dea3e7fa9)
1/*
2 * Copyright 2015, Cyril Bur, IBM Corp.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version
7 * 2 of the License, or (at your option) any later version.
8 */
9
10#include "basic_asm.h"
11
12/* long signal_self(pid_t pid, int sig); */
13FUNC_START(signal_self)
14	li	r0,37 /* sys_kill */
15	/* r3 already has our pid in it */
16	/* r4 already has signal type in it */
17	sc
18	bc	4,3,1f
19	subfze	r3,r3
201:	blr
21FUNC_END(signal_self)
22
23/* long tm_signal_self(pid_t pid, int sig, int *ret); */
24FUNC_START(tm_signal_self)
25	PUSH_BASIC_STACK(8)
26	std	r5,STACK_FRAME_PARAM(0)(sp) /* ret */
27	tbegin.
28	beq	1f
29	tsuspend.
30	li	r0,37 /* sys_kill */
31	/* r3 already has our pid in it */
32	/* r4 already has signal type in it */
33	sc
34	ld	r5,STACK_FRAME_PARAM(0)(sp) /* ret */
35	bc	4,3,2f
36	subfze	r3,r3
372:	std	r3,0(r5)
38	tabort. 0
39	tresume. /* Be nice to some cleanup, jumps back to tbegin then to 1: */
40	/*
41	 * Transaction should be proper doomed and we should never get
42	 * here
43	 */
44	li	r3,1
45	POP_BASIC_STACK(8)
46	blr
471:	li	r3,0
48	POP_BASIC_STACK(8)
49	blr
50FUNC_END(tm_signal_self)
51