/* 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)