1 /* $NetBSD: pthread_compat.c,v 1.1 2008/09/29 08:48:15 ad Exp $ */
4 * Copyright (c) 2008 The NetBSD Foundation, Inc.
7 * This code is derived from software developed for The NetBSD Foundation
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
33 * libc symbols that are not present before NetBSD 5.0.
36 #include <sys/cdefs.h>
37 __RCSID("$NetBSD: pthread_compat.c,v 1.1 2008/09/29 08:48:15 ad Exp $");
39 #include <sys/param.h>
40 #include <sys/syscall.h>
48 #include "pthread_int.h"
50 static void __pthread_init(void) __attribute__((__constructor__
, __used__
));
52 void __libc_thr_init(void);
53 void __libc_atomic_init(void);
55 int _sys_sched_yield(void);
56 int _sys_aio_suspend(const struct aiocb
* const[], int,
57 const struct timespec
*);
58 int _sys_mq_send(mqd_t
, const char *, size_t, unsigned);
59 ssize_t
_sys_mq_receive(mqd_t
, char *, size_t, unsigned *);
60 int _sys_mq_timedsend(mqd_t
, const char *, size_t, unsigned,
61 const struct timespec
*);
62 ssize_t
_sys_mq_timedreceive(mqd_t
, char *, size_t, unsigned *,
63 const struct timespec
*);
74 _lwp_kill(lwpid_t a
, int b
)
77 return syscall(SYS__lwp_kill
, a
, b
);
81 _lwp_detach(lwpid_t a
)
84 return syscall(SYS__lwp_detach
, a
);
88 _lwp_park(const struct timespec
*a
, lwpid_t b
, const void *c
, const void *d
)
91 return syscall(SYS__lwp_park
, a
, b
, c
, d
);
95 _lwp_unpark(lwpid_t a
, const void *b
)
98 return syscall(SYS__lwp_unpark
, a
, b
);
102 _lwp_unpark_all(const lwpid_t
*a
, size_t b
, const void *c
)
105 return (ssize_t
)syscall(SYS__lwp_unpark_all
, a
, b
, c
);
109 _lwp_setname(lwpid_t a
, const char *b
)
112 return syscall(SYS__lwp_setname
, a
, b
);
116 _lwp_getname(lwpid_t a
, char *b
, size_t c
)
119 return syscall(SYS__lwp_getname
, a
, b
, c
);
123 _lwp_ctl(int a
, struct lwpctl
**b
)
126 return syscall(SYS__lwp_ctl
, a
, b
);
130 _sys_sched_yield(void)
133 return syscall(SYS_sched_yield
);
140 return syscall(SYS_sched_yield
);
144 _sched_setaffinity(pid_t a
, lwpid_t b
, size_t c
, const cpuset_t
*d
)
147 return syscall(SYS__sched_setaffinity
, a
, b
, c
, d
);
151 _sched_getaffinity(pid_t a
, lwpid_t b
, size_t c
, cpuset_t
*d
)
154 return syscall(SYS__sched_getaffinity
, a
, b
, c
, d
);
158 _sched_setparam(pid_t a
, lwpid_t b
, int c
, const struct sched_param
*d
)
161 return syscall(SYS__sched_setparam
, a
, b
, c
, d
);
165 _sched_getparam(pid_t a
, lwpid_t b
, int *c
, struct sched_param
*d
)
168 return syscall(SYS__sched_getparam
, a
, b
, c
, d
);
172 _sys_aio_suspend(const struct aiocb
* const a
[], int b
,
173 const struct timespec
*c
)
176 return syscall(SYS_aio_suspend
, a
, b
, c
);
180 _sys_mq_send(mqd_t a
, const char *b
, size_t c
, unsigned d
)
183 return syscall(SYS_mq_send
, a
, b
, c
, d
);
187 _sys_mq_receive(mqd_t a
, char *b
, size_t c
, unsigned *d
)
190 return (ssize_t
)syscall(SYS_mq_receive
, a
, b
, c
, d
);
194 _sys_mq_timedsend(mqd_t a
, const char *b
, size_t c
, unsigned d
,
195 const struct timespec
*e
)
198 return syscall(SYS_mq_timedsend
, a
, b
,c
,d
, e
);
202 _sys_mq_timedreceive(mqd_t a
, char *b
, size_t c
, unsigned *d
,
203 const struct timespec
*e
)
206 return (ssize_t
)syscall(SYS_mq_timedreceive
, a
, b
, c
, d
, e
);