Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Copyright 2015, Cyril Bur, IBM Corp.
0004  */
0005 
0006 #include "basic_asm.h"
0007 
0008 /* long signal_self(pid_t pid, int sig); */
0009 FUNC_START(signal_self)
0010     li  r0,37 /* sys_kill */
0011     /* r3 already has our pid in it */
0012     /* r4 already has signal type in it */
0013     sc
0014     bc  4,3,1f
0015     subfze  r3,r3
0016 1:  blr
0017 FUNC_END(signal_self)
0018 
0019 /* long tm_signal_self(pid_t pid, int sig, int *ret); */
0020 FUNC_START(tm_signal_self)
0021     PUSH_BASIC_STACK(8)
0022     std r5,STACK_FRAME_PARAM(0)(sp) /* ret */
0023     tbegin.
0024     beq 1f
0025     tsuspend.
0026     li  r0,37 /* sys_kill */
0027     /* r3 already has our pid in it */
0028     /* r4 already has signal type in it */
0029     sc
0030     ld  r5,STACK_FRAME_PARAM(0)(sp) /* ret */
0031     bc  4,3,2f
0032     subfze  r3,r3
0033 2:  std r3,0(r5)
0034     tabort. 0
0035     tresume. /* Be nice to some cleanup, jumps back to tbegin then to 1: */
0036     /*
0037      * Transaction should be proper doomed and we should never get
0038      * here
0039      */
0040     li  r3,1
0041     POP_BASIC_STACK(8)
0042     blr
0043 1:  li  r3,0
0044     POP_BASIC_STACK(8)
0045     blr
0046 FUNC_END(tm_signal_self)