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