Home | History | Annotate | Download | only in sys
      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 2009 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 	.file	"syslwp.s"
     28 
     29 #include "SYS.h"
     30 
     31 /*
     32  * int
     33  * __lwp_create(ucontext_t *uc, unsigned long flags, lwpid_t *lwpidp)
     34  */
     35 	ENTRY(__lwp_create)
     36 	SYSTRAP_RVAL1(lwp_create)
     37 	SYSLWPERR
     38 	RET
     39 	SET_SIZE(__lwp_create)
     40 
     41 /*
     42  * int
     43  * _lwp_continue(lwpid_t lwpid)
     44  */
     45 	ENTRY(_lwp_continue)
     46 	SYSTRAP_RVAL1(lwp_continue)
     47 	SYSLWPERR
     48 	RET
     49 	SET_SIZE(_lwp_continue)
     50 
     51 /*
     52  * int
     53  * ___lwp_suspend(lwpid_t lwpid)
     54  */
     55 	SYSREENTRY(___lwp_suspend)
     56 	SYSTRAP_RVAL1(lwp_suspend)
     57 	SYSINTR_RESTART(.restart____lwp_suspend)
     58 	RET
     59 	SET_SIZE(___lwp_suspend)
     60 
     61 /*
     62  * int
     63  * _lwp_kill(lwpid_t lwpid, int sig)
     64  */
     65 	ENTRY(_lwp_kill)
     66 	SYSTRAP_RVAL1(lwp_kill)
     67 	SYSLWPERR
     68 	RET
     69 	SET_SIZE(_lwp_kill)
     70 
     71 /*
     72  * lwpid_t
     73  * _lwp_self(void)
     74  */
     75 	ENTRY(_lwp_self)
     76 	SYSTRAP_RVAL1(lwp_self)
     77 	RET
     78 	SET_SIZE(_lwp_self)
     79 
     80 /*
     81  * int
     82  * __lwp_wait(lwpid_t lwpid, lwpid_t *departed)
     83  */
     84 	ENTRY(__lwp_wait)
     85 	SYSTRAP_RVAL1(lwp_wait)
     86 	SYSLWPERR
     87 	RET
     88 	SET_SIZE(__lwp_wait)
     89 
     90 /*
     91  * int
     92  * __lwp_detach(lwpid_t lwpid)
     93  */
     94 	ENTRY(__lwp_detach)
     95 	SYSTRAP_RVAL1(lwp_detach)
     96 	SYSLWPERR
     97 	RET
     98 	SET_SIZE(__lwp_detach)
     99 
    100 /*
    101  * The ___lwp_mutex_timedlock() and ___lwp_mutex_wakeup() functions
    102  * are called while holding non-preemptive spin locks and we must
    103  * not call out of the library while holding such locks in order
    104  * to avoid invoking the dynamic linker.  For this reason, these
    105  * functions must never become exported symbols from the library.
    106  */
    107 
    108 /*
    109  * int
    110  * ___lwp_mutex_timedlock(lwp_mutex_t *, timespec_t *, uintptr_t)
    111  */
    112 	SYSREENTRY(___lwp_mutex_timedlock)
    113 	SYSTRAP_RVAL1(lwp_mutex_timedlock)
    114 	SYSINTR_RESTART(.restart____lwp_mutex_timedlock)
    115 	RET
    116 	SET_SIZE(___lwp_mutex_timedlock)
    117 
    118 /*
    119  * int
    120  * ___lwp_mutex_wakeup(lwp_mutex_t *mp, int)
    121  */
    122 	ENTRY(___lwp_mutex_wakeup)
    123 	SYSTRAP_RVAL1(lwp_mutex_wakeup)
    124 	SYSLWPERR
    125 	RET
    126 	SET_SIZE(___lwp_mutex_wakeup)
    127 
    128 /*
    129  * int
    130  * _lwp_cond_broadcast(lwp_cond_t *cvp)
    131  */
    132 	ENTRY(_lwp_cond_broadcast)
    133 	SYSTRAP_RVAL1(lwp_cond_broadcast)
    134 	SYSLWPERR
    135 	RET
    136 	SET_SIZE(_lwp_cond_broadcast)
    137 
    138 /*
    139  * int
    140  * ___lwp_cond_wait(lwp_cond_t *, lwp_mutex_t *, timespec_t *, int)
    141  */
    142 	ENTRY(___lwp_cond_wait)
    143 	SYSTRAP_RVAL1(lwp_cond_wait)
    144 	SYSLWPERR
    145 	RET
    146 	SET_SIZE(___lwp_cond_wait)
    147 
    148 /*
    149  * int
    150  * _lwp_cond_signal(lwp_cond_t *cvp)
    151  */
    152 	ENTRY(_lwp_cond_signal)
    153 	SYSTRAP_RVAL1(lwp_cond_signal)
    154 	SYSLWPERR
    155 	RET
    156 	SET_SIZE(_lwp_cond_signal)
    157 
    158 /*
    159  * int
    160  * ___lwp_sema_timedwait(lwp_sema_t *, timespec_t *, int check_park)
    161  */
    162 	ENTRY(___lwp_sema_timedwait)
    163 	SYSTRAP_RVAL1(lwp_sema_timedwait)
    164 	SYSLWPERR
    165 	RET
    166 	SET_SIZE(___lwp_sema_timedwait)
    167 
    168 /*
    169  * int
    170  * _lwp_sema_trywait(lwp_sema_t *sp)
    171  */
    172 	ENTRY(_lwp_sema_trywait)
    173 	SYSTRAP_RVAL1(lwp_sema_trywait)
    174 	SYSLWPERR
    175 	RET
    176 	SET_SIZE(_lwp_sema_trywait)
    177 
    178 /*
    179  * int
    180  * _lwp_sema_post(lwp_sema_t *sp)
    181  */
    182 	ENTRY(_lwp_sema_post)
    183 	SYSTRAP_RVAL1(lwp_sema_post)
    184 	SYSLWPERR
    185 	RET
    186 	SET_SIZE(_lwp_sema_post)
    187 
    188 /*
    189  * int
    190  * _lwp_info(struct lwpinfo *infop)
    191  */
    192 	ENTRY(_lwp_info)
    193 	SYSTRAP_RVAL1(lwp_info)
    194 	SYSLWPERR
    195 	RET
    196 	SET_SIZE(_lwp_info)
    197 
    198 /*
    199  * sc_shared_t *
    200  * __schedctl(void)
    201  */
    202 	SYSCALL2_RVAL1(__schedctl,schedctl)
    203 	RET
    204 	SET_SIZE(__schedctl)
    205 
    206 /*
    207  * int
    208  * ___lwp_mutex_trylock(lwp_mutex_t *mp, uintptr_t)
    209  */
    210 	ENTRY(___lwp_mutex_trylock)
    211 	SYSTRAP_RVAL1(lwp_mutex_trylock)
    212 	SYSLWPERR
    213 	RET
    214 	SET_SIZE(___lwp_mutex_trylock)
    215 
    216 /*
    217  * int
    218  * ___lwp_mutex_unlock(lwp_mutex_t *mp)
    219  */
    220 	ENTRY(___lwp_mutex_unlock)
    221 	SYSTRAP_RVAL1(lwp_mutex_unlock)
    222 	SYSLWPERR
    223 	RET
    224 	SET_SIZE(___lwp_mutex_unlock)
    225 
    226 /*
    227  * int
    228  * ___lwp_mutex_register(lwp_mutex_t *mp, lwp_mutex_t **uaddr)
    229  */
    230 	ENTRY(___lwp_mutex_register)
    231 	SYSTRAP_RVAL1(lwp_mutex_register)
    232 	SYSLWPERR
    233 	RET
    234 	SET_SIZE(___lwp_mutex_register)
    235