1*5d9d9091SRichard Lowe/* 2*5d9d9091SRichard Lowe * CDDL HEADER START 3*5d9d9091SRichard Lowe * 4*5d9d9091SRichard Lowe * The contents of this file are subject to the terms of the 5*5d9d9091SRichard Lowe * Common Development and Distribution License (the "License"). 6*5d9d9091SRichard Lowe * You may not use this file except in compliance with the License. 7*5d9d9091SRichard Lowe * 8*5d9d9091SRichard Lowe * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*5d9d9091SRichard Lowe * or http://www.opensolaris.org/os/licensing. 10*5d9d9091SRichard Lowe * See the License for the specific language governing permissions 11*5d9d9091SRichard Lowe * and limitations under the License. 12*5d9d9091SRichard Lowe * 13*5d9d9091SRichard Lowe * When distributing Covered Code, include this CDDL HEADER in each 14*5d9d9091SRichard Lowe * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*5d9d9091SRichard Lowe * If applicable, add the following below this CDDL HEADER, with the 16*5d9d9091SRichard Lowe * fields enclosed by brackets "[]" replaced with your own identifying 17*5d9d9091SRichard Lowe * information: Portions Copyright [yyyy] [name of copyright owner] 18*5d9d9091SRichard Lowe * 19*5d9d9091SRichard Lowe * CDDL HEADER END 20*5d9d9091SRichard Lowe */ 21*5d9d9091SRichard Lowe 22*5d9d9091SRichard Lowe/* 23*5d9d9091SRichard Lowe * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24*5d9d9091SRichard Lowe * Use is subject to license terms. 25*5d9d9091SRichard Lowe */ 26*5d9d9091SRichard Lowe 27*5d9d9091SRichard Lowe .file "syslwp.s" 28*5d9d9091SRichard Lowe 29*5d9d9091SRichard Lowe#include "SYS.h" 30*5d9d9091SRichard Lowe 31*5d9d9091SRichard Lowe/* 32*5d9d9091SRichard Lowe * int 33*5d9d9091SRichard Lowe * __lwp_create(ucontext_t *uc, unsigned long flags, lwpid_t *lwpidp) 34*5d9d9091SRichard Lowe */ 35*5d9d9091SRichard Lowe ENTRY(__lwp_create) 36*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_create) 37*5d9d9091SRichard Lowe SYSLWPERR 38*5d9d9091SRichard Lowe RET 39*5d9d9091SRichard Lowe SET_SIZE(__lwp_create) 40*5d9d9091SRichard Lowe 41*5d9d9091SRichard Lowe/* 42*5d9d9091SRichard Lowe * int 43*5d9d9091SRichard Lowe * _lwp_continue(lwpid_t lwpid) 44*5d9d9091SRichard Lowe */ 45*5d9d9091SRichard Lowe ENTRY(_lwp_continue) 46*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_continue) 47*5d9d9091SRichard Lowe SYSLWPERR 48*5d9d9091SRichard Lowe RET 49*5d9d9091SRichard Lowe SET_SIZE(_lwp_continue) 50*5d9d9091SRichard Lowe 51*5d9d9091SRichard Lowe/* 52*5d9d9091SRichard Lowe * int 53*5d9d9091SRichard Lowe * ___lwp_suspend(lwpid_t lwpid) 54*5d9d9091SRichard Lowe */ 55*5d9d9091SRichard Lowe SYSREENTRY(___lwp_suspend) 56*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_suspend) 57*5d9d9091SRichard Lowe SYSINTR_RESTART(.restart____lwp_suspend) 58*5d9d9091SRichard Lowe RET 59*5d9d9091SRichard Lowe SET_SIZE(___lwp_suspend) 60*5d9d9091SRichard Lowe 61*5d9d9091SRichard Lowe/* 62*5d9d9091SRichard Lowe * int 63*5d9d9091SRichard Lowe * _lwp_kill(lwpid_t lwpid, int sig) 64*5d9d9091SRichard Lowe */ 65*5d9d9091SRichard Lowe ENTRY(_lwp_kill) 66*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_kill) 67*5d9d9091SRichard Lowe SYSLWPERR 68*5d9d9091SRichard Lowe RET 69*5d9d9091SRichard Lowe SET_SIZE(_lwp_kill) 70*5d9d9091SRichard Lowe 71*5d9d9091SRichard Lowe/* 72*5d9d9091SRichard Lowe * lwpid_t 73*5d9d9091SRichard Lowe * _lwp_self(void) 74*5d9d9091SRichard Lowe */ 75*5d9d9091SRichard Lowe ENTRY(_lwp_self) 76*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_self) 77*5d9d9091SRichard Lowe RET 78*5d9d9091SRichard Lowe SET_SIZE(_lwp_self) 79*5d9d9091SRichard Lowe 80*5d9d9091SRichard Lowe/* 81*5d9d9091SRichard Lowe * int 82*5d9d9091SRichard Lowe * __lwp_wait(lwpid_t lwpid, lwpid_t *departed) 83*5d9d9091SRichard Lowe */ 84*5d9d9091SRichard Lowe ENTRY(__lwp_wait) 85*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_wait) 86*5d9d9091SRichard Lowe SYSLWPERR 87*5d9d9091SRichard Lowe RET 88*5d9d9091SRichard Lowe SET_SIZE(__lwp_wait) 89*5d9d9091SRichard Lowe 90*5d9d9091SRichard Lowe/* 91*5d9d9091SRichard Lowe * int 92*5d9d9091SRichard Lowe * __lwp_detach(lwpid_t lwpid) 93*5d9d9091SRichard Lowe */ 94*5d9d9091SRichard Lowe ENTRY(__lwp_detach) 95*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_detach) 96*5d9d9091SRichard Lowe SYSLWPERR 97*5d9d9091SRichard Lowe RET 98*5d9d9091SRichard Lowe SET_SIZE(__lwp_detach) 99*5d9d9091SRichard Lowe 100*5d9d9091SRichard Lowe/* 101*5d9d9091SRichard Lowe * The ___lwp_mutex_timedlock() and ___lwp_mutex_wakeup() functions 102*5d9d9091SRichard Lowe * are called while holding non-preemptive spin locks and we must 103*5d9d9091SRichard Lowe * not call out of the library while holding such locks in order 104*5d9d9091SRichard Lowe * to avoid invoking the dynamic linker. For this reason, these 105*5d9d9091SRichard Lowe * functions must never become exported symbols from the library. 106*5d9d9091SRichard Lowe */ 107*5d9d9091SRichard Lowe 108*5d9d9091SRichard Lowe/* 109*5d9d9091SRichard Lowe * int 110*5d9d9091SRichard Lowe * ___lwp_mutex_timedlock(lwp_mutex_t *, timespec_t *, uintptr_t) 111*5d9d9091SRichard Lowe */ 112*5d9d9091SRichard Lowe SYSREENTRY(___lwp_mutex_timedlock) 113*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_mutex_timedlock) 114*5d9d9091SRichard Lowe SYSINTR_RESTART(.restart____lwp_mutex_timedlock) 115*5d9d9091SRichard Lowe RET 116*5d9d9091SRichard Lowe SET_SIZE(___lwp_mutex_timedlock) 117*5d9d9091SRichard Lowe 118*5d9d9091SRichard Lowe/* 119*5d9d9091SRichard Lowe * int 120*5d9d9091SRichard Lowe * ___lwp_mutex_wakeup(lwp_mutex_t *mp, int) 121*5d9d9091SRichard Lowe */ 122*5d9d9091SRichard Lowe ENTRY(___lwp_mutex_wakeup) 123*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_mutex_wakeup) 124*5d9d9091SRichard Lowe SYSLWPERR 125*5d9d9091SRichard Lowe RET 126*5d9d9091SRichard Lowe SET_SIZE(___lwp_mutex_wakeup) 127*5d9d9091SRichard Lowe 128*5d9d9091SRichard Lowe/* 129*5d9d9091SRichard Lowe * int 130*5d9d9091SRichard Lowe * _lwp_cond_broadcast(lwp_cond_t *cvp) 131*5d9d9091SRichard Lowe */ 132*5d9d9091SRichard Lowe ENTRY(_lwp_cond_broadcast) 133*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_cond_broadcast) 134*5d9d9091SRichard Lowe SYSLWPERR 135*5d9d9091SRichard Lowe RET 136*5d9d9091SRichard Lowe SET_SIZE(_lwp_cond_broadcast) 137*5d9d9091SRichard Lowe 138*5d9d9091SRichard Lowe/* 139*5d9d9091SRichard Lowe * int 140*5d9d9091SRichard Lowe * ___lwp_cond_wait(lwp_cond_t *, lwp_mutex_t *, timespec_t *, int) 141*5d9d9091SRichard Lowe */ 142*5d9d9091SRichard Lowe ENTRY(___lwp_cond_wait) 143*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_cond_wait) 144*5d9d9091SRichard Lowe SYSLWPERR 145*5d9d9091SRichard Lowe RET 146*5d9d9091SRichard Lowe SET_SIZE(___lwp_cond_wait) 147*5d9d9091SRichard Lowe 148*5d9d9091SRichard Lowe/* 149*5d9d9091SRichard Lowe * int 150*5d9d9091SRichard Lowe * _lwp_cond_signal(lwp_cond_t *cvp) 151*5d9d9091SRichard Lowe */ 152*5d9d9091SRichard Lowe ENTRY(_lwp_cond_signal) 153*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_cond_signal) 154*5d9d9091SRichard Lowe SYSLWPERR 155*5d9d9091SRichard Lowe RET 156*5d9d9091SRichard Lowe SET_SIZE(_lwp_cond_signal) 157*5d9d9091SRichard Lowe 158*5d9d9091SRichard Lowe/* 159*5d9d9091SRichard Lowe * int 160*5d9d9091SRichard Lowe * ___lwp_sema_timedwait(lwp_sema_t *, timespec_t *, int check_park) 161*5d9d9091SRichard Lowe */ 162*5d9d9091SRichard Lowe ENTRY(___lwp_sema_timedwait) 163*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_sema_timedwait) 164*5d9d9091SRichard Lowe SYSLWPERR 165*5d9d9091SRichard Lowe RET 166*5d9d9091SRichard Lowe SET_SIZE(___lwp_sema_timedwait) 167*5d9d9091SRichard Lowe 168*5d9d9091SRichard Lowe/* 169*5d9d9091SRichard Lowe * int 170*5d9d9091SRichard Lowe * _lwp_sema_trywait(lwp_sema_t *sp) 171*5d9d9091SRichard Lowe */ 172*5d9d9091SRichard Lowe ENTRY(_lwp_sema_trywait) 173*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_sema_trywait) 174*5d9d9091SRichard Lowe SYSLWPERR 175*5d9d9091SRichard Lowe RET 176*5d9d9091SRichard Lowe SET_SIZE(_lwp_sema_trywait) 177*5d9d9091SRichard Lowe 178*5d9d9091SRichard Lowe/* 179*5d9d9091SRichard Lowe * int 180*5d9d9091SRichard Lowe * _lwp_sema_post(lwp_sema_t *sp) 181*5d9d9091SRichard Lowe */ 182*5d9d9091SRichard Lowe ENTRY(_lwp_sema_post) 183*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_sema_post) 184*5d9d9091SRichard Lowe SYSLWPERR 185*5d9d9091SRichard Lowe RET 186*5d9d9091SRichard Lowe SET_SIZE(_lwp_sema_post) 187*5d9d9091SRichard Lowe 188*5d9d9091SRichard Lowe/* 189*5d9d9091SRichard Lowe * int 190*5d9d9091SRichard Lowe * _lwp_info(struct lwpinfo *infop) 191*5d9d9091SRichard Lowe */ 192*5d9d9091SRichard Lowe ENTRY(_lwp_info) 193*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_info) 194*5d9d9091SRichard Lowe SYSLWPERR 195*5d9d9091SRichard Lowe RET 196*5d9d9091SRichard Lowe SET_SIZE(_lwp_info) 197*5d9d9091SRichard Lowe 198*5d9d9091SRichard Lowe/* 199*5d9d9091SRichard Lowe * sc_shared_t * 200*5d9d9091SRichard Lowe * __schedctl(void) 201*5d9d9091SRichard Lowe */ 202*5d9d9091SRichard Lowe SYSCALL2_RVAL1(__schedctl,schedctl) 203*5d9d9091SRichard Lowe RET 204*5d9d9091SRichard Lowe SET_SIZE(__schedctl) 205*5d9d9091SRichard Lowe 206*5d9d9091SRichard Lowe/* 207*5d9d9091SRichard Lowe * int 208*5d9d9091SRichard Lowe * ___lwp_mutex_trylock(lwp_mutex_t *mp, uintptr_t) 209*5d9d9091SRichard Lowe */ 210*5d9d9091SRichard Lowe ENTRY(___lwp_mutex_trylock) 211*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_mutex_trylock) 212*5d9d9091SRichard Lowe SYSLWPERR 213*5d9d9091SRichard Lowe RET 214*5d9d9091SRichard Lowe SET_SIZE(___lwp_mutex_trylock) 215*5d9d9091SRichard Lowe 216*5d9d9091SRichard Lowe/* 217*5d9d9091SRichard Lowe * int 218*5d9d9091SRichard Lowe * ___lwp_mutex_unlock(lwp_mutex_t *mp) 219*5d9d9091SRichard Lowe */ 220*5d9d9091SRichard Lowe ENTRY(___lwp_mutex_unlock) 221*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_mutex_unlock) 222*5d9d9091SRichard Lowe SYSLWPERR 223*5d9d9091SRichard Lowe RET 224*5d9d9091SRichard Lowe SET_SIZE(___lwp_mutex_unlock) 225*5d9d9091SRichard Lowe 226*5d9d9091SRichard Lowe/* 227*5d9d9091SRichard Lowe * int 228*5d9d9091SRichard Lowe * ___lwp_mutex_register(lwp_mutex_t *mp, lwp_mutex_t **uaddr) 229*5d9d9091SRichard Lowe */ 230*5d9d9091SRichard Lowe ENTRY(___lwp_mutex_register) 231*5d9d9091SRichard Lowe SYSTRAP_RVAL1(lwp_mutex_register) 232*5d9d9091SRichard Lowe SYSLWPERR 233*5d9d9091SRichard Lowe RET 234*5d9d9091SRichard Lowe SET_SIZE(___lwp_mutex_register) 235