/* * Copyright 2015, Cyril Bur, IBM Corp. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */ #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) |