xref: /illumos-gate/usr/src/lib/libc/common/sys/syslwp.S (revision 5d9d9091)
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