/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ .file "syslwp.s" #include "SYS.h" /* * int * __lwp_create(ucontext_t *uc, unsigned long flags, lwpid_t *lwpidp) */ ENTRY(__lwp_create) SYSTRAP_RVAL1(lwp_create) SYSLWPERR RET SET_SIZE(__lwp_create) /* * int * _lwp_continue(lwpid_t lwpid) */ ENTRY(_lwp_continue) SYSTRAP_RVAL1(lwp_continue) SYSLWPERR RET SET_SIZE(_lwp_continue) /* * int * ___lwp_suspend(lwpid_t lwpid) */ SYSREENTRY(___lwp_suspend) SYSTRAP_RVAL1(lwp_suspend) SYSINTR_RESTART(.restart____lwp_suspend) RET SET_SIZE(___lwp_suspend) /* * int * _lwp_kill(lwpid_t lwpid, int sig) */ ENTRY(_lwp_kill) SYSTRAP_RVAL1(lwp_kill) SYSLWPERR RET SET_SIZE(_lwp_kill) /* * lwpid_t * _lwp_self(void) */ ENTRY(_lwp_self) SYSTRAP_RVAL1(lwp_self) RET SET_SIZE(_lwp_self) /* * int * __lwp_wait(lwpid_t lwpid, lwpid_t *departed) */ ENTRY(__lwp_wait) SYSTRAP_RVAL1(lwp_wait) SYSLWPERR RET SET_SIZE(__lwp_wait) /* * int * __lwp_detach(lwpid_t lwpid) */ ENTRY(__lwp_detach) SYSTRAP_RVAL1(lwp_detach) SYSLWPERR RET SET_SIZE(__lwp_detach) /* * The ___lwp_mutex_timedlock() and ___lwp_mutex_wakeup() functions * are called while holding non-preemptive spin locks and we must * not call out of the library while holding such locks in order * to avoid invoking the dynamic linker. For this reason, these * functions must never become exported symbols from the library. */ /* * int * ___lwp_mutex_timedlock(lwp_mutex_t *, timespec_t *, uintptr_t) */ SYSREENTRY(___lwp_mutex_timedlock) SYSTRAP_RVAL1(lwp_mutex_timedlock) SYSINTR_RESTART(.restart____lwp_mutex_timedlock) RET SET_SIZE(___lwp_mutex_timedlock) /* * int * ___lwp_mutex_wakeup(lwp_mutex_t *mp, int) */ ENTRY(___lwp_mutex_wakeup) SYSTRAP_RVAL1(lwp_mutex_wakeup) SYSLWPERR RET SET_SIZE(___lwp_mutex_wakeup) /* * int * _lwp_cond_broadcast(lwp_cond_t *cvp) */ ENTRY(_lwp_cond_broadcast) SYSTRAP_RVAL1(lwp_cond_broadcast) SYSLWPERR RET SET_SIZE(_lwp_cond_broadcast) /* * int * ___lwp_cond_wait(lwp_cond_t *, lwp_mutex_t *, timespec_t *, int) */ ENTRY(___lwp_cond_wait) SYSTRAP_RVAL1(lwp_cond_wait) SYSLWPERR RET SET_SIZE(___lwp_cond_wait) /* * int * _lwp_cond_signal(lwp_cond_t *cvp) */ ENTRY(_lwp_cond_signal) SYSTRAP_RVAL1(lwp_cond_signal) SYSLWPERR RET SET_SIZE(_lwp_cond_signal) /* * int * ___lwp_sema_timedwait(lwp_sema_t *, timespec_t *, int check_park) */ ENTRY(___lwp_sema_timedwait) SYSTRAP_RVAL1(lwp_sema_timedwait) SYSLWPERR RET SET_SIZE(___lwp_sema_timedwait) /* * int * _lwp_sema_trywait(lwp_sema_t *sp) */ ENTRY(_lwp_sema_trywait) SYSTRAP_RVAL1(lwp_sema_trywait) SYSLWPERR RET SET_SIZE(_lwp_sema_trywait) /* * int * _lwp_sema_post(lwp_sema_t *sp) */ ENTRY(_lwp_sema_post) SYSTRAP_RVAL1(lwp_sema_post) SYSLWPERR RET SET_SIZE(_lwp_sema_post) /* * int * _lwp_info(struct lwpinfo *infop) */ ENTRY(_lwp_info) SYSTRAP_RVAL1(lwp_info) SYSLWPERR RET SET_SIZE(_lwp_info) /* * sc_shared_t * * __schedctl(void) */ SYSCALL2_RVAL1(__schedctl,schedctl) RET SET_SIZE(__schedctl) /* * int * ___lwp_mutex_trylock(lwp_mutex_t *mp, uintptr_t) */ ENTRY(___lwp_mutex_trylock) SYSTRAP_RVAL1(lwp_mutex_trylock) SYSLWPERR RET SET_SIZE(___lwp_mutex_trylock) /* * int * ___lwp_mutex_unlock(lwp_mutex_t *mp) */ ENTRY(___lwp_mutex_unlock) SYSTRAP_RVAL1(lwp_mutex_unlock) SYSLWPERR RET SET_SIZE(___lwp_mutex_unlock) /* * int * ___lwp_mutex_register(lwp_mutex_t *mp, lwp_mutex_t **uaddr) */ ENTRY(___lwp_mutex_register) SYSTRAP_RVAL1(lwp_mutex_register) SYSLWPERR RET SET_SIZE(___lwp_mutex_register)