source: rtems-libbsd/freebsd/lib/libc/include/libc_private.h @ f41a394

55-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since f41a394 was b6f6deb, checked in by Sebastian Huber <sebastian.huber@…>, on Apr 27, 2016 at 8:26:50 AM

Directly use <sys/_types.h> provided by Newlib

  • Property mode set to 100644
File size: 7.4 KB
Line 
1/*
2 * Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the author nor the names of any co-contributors
14 *    may be used to endorse or promote products derived from this software
15 *    without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * $FreeBSD$
30 *
31 * Private definitions for libc, libc_r and libpthread.
32 *
33 */
34
35#ifndef _LIBC_PRIVATE_H_
36#define _LIBC_PRIVATE_H_
37#include <sys/_types.h>
38#include <sys/_pthreadtypes.h>
39
40/*
41 * This global flag is non-zero when a process has created one
42 * or more threads. It is used to avoid calling locking functions
43 * when they are not required.
44 */
45#ifdef __rtems__
46#define __isthreaded 1
47#else /* __rtems__ */
48extern int      __isthreaded;
49#endif /* __rtems__ */
50
51/*
52 * Elf_Auxinfo *__elf_aux_vector, the pointer to the ELF aux vector
53 * provided by kernel. Either set for us by rtld, or found at runtime
54 * on stack for static binaries.
55 *
56 * Type is void to avoid polluting whole libc with ELF types.
57 */
58extern void     *__elf_aux_vector;
59
60/*
61 * libc should use libc_dlopen internally, which respects a global
62 * flag where loading of new shared objects can be restricted.
63 */
64void *libc_dlopen(const char *, int);
65
66/*
67 * For dynamic linker.
68 */
69void _rtld_error(const char *fmt, ...);
70
71/*
72 * File lock contention is difficult to diagnose without knowing
73 * where locks were set. Allow a debug library to be built which
74 * records the source file and line number of each lock call.
75 */
76#ifdef  _FLOCK_DEBUG
77#define _FLOCKFILE(x)   _flockfile_debug(x, __FILE__, __LINE__)
78#else
79#define _FLOCKFILE(x)   _flockfile(x)
80#endif
81
82/*
83 * Macros for locking and unlocking FILEs. These test if the
84 * process is threaded to avoid locking when not required.
85 */
86#define FLOCKFILE(fp)           if (__isthreaded) _FLOCKFILE(fp)
87#define FUNLOCKFILE(fp)         if (__isthreaded) _funlockfile(fp)
88
89struct _spinlock;
90extern struct _spinlock __stdio_thread_lock;
91#define STDIO_THREAD_LOCK()                             \
92do {                                                    \
93        if (__isthreaded)                               \
94                _SPINLOCK(&__stdio_thread_lock);        \
95} while (0)
96#define STDIO_THREAD_UNLOCK()                           \
97do {                                                    \
98        if (__isthreaded)                               \
99                _SPINUNLOCK(&__stdio_thread_lock);      \
100} while (0)
101
102/*
103 * Indexes into the pthread jump table.
104 *
105 * Warning! If you change this type, you must also change the threads
106 * libraries that reference it (libc_r, libpthread).
107 */
108typedef enum {
109        PJT_ATFORK,
110        PJT_ATTR_DESTROY,
111        PJT_ATTR_GETDETACHSTATE,
112        PJT_ATTR_GETGUARDSIZE,
113        PJT_ATTR_GETINHERITSCHED,
114        PJT_ATTR_GETSCHEDPARAM,
115        PJT_ATTR_GETSCHEDPOLICY,
116        PJT_ATTR_GETSCOPE,
117        PJT_ATTR_GETSTACKADDR,
118        PJT_ATTR_GETSTACKSIZE,
119        PJT_ATTR_INIT,
120        PJT_ATTR_SETDETACHSTATE,
121        PJT_ATTR_SETGUARDSIZE,
122        PJT_ATTR_SETINHERITSCHED,
123        PJT_ATTR_SETSCHEDPARAM,
124        PJT_ATTR_SETSCHEDPOLICY,
125        PJT_ATTR_SETSCOPE,
126        PJT_ATTR_SETSTACKADDR,
127        PJT_ATTR_SETSTACKSIZE,
128        PJT_CANCEL,
129        PJT_CLEANUP_POP,
130        PJT_CLEANUP_PUSH,
131        PJT_COND_BROADCAST,
132        PJT_COND_DESTROY,
133        PJT_COND_INIT,
134        PJT_COND_SIGNAL,
135        PJT_COND_TIMEDWAIT,
136        PJT_COND_WAIT,
137        PJT_DETACH,
138        PJT_EQUAL,
139        PJT_EXIT,
140        PJT_GETSPECIFIC,
141        PJT_JOIN,
142        PJT_KEY_CREATE,
143        PJT_KEY_DELETE,
144        PJT_KILL,
145        PJT_MAIN_NP,
146        PJT_MUTEXATTR_DESTROY,
147        PJT_MUTEXATTR_INIT,
148        PJT_MUTEXATTR_SETTYPE,
149        PJT_MUTEX_DESTROY,
150        PJT_MUTEX_INIT,
151        PJT_MUTEX_LOCK,
152        PJT_MUTEX_TRYLOCK,
153        PJT_MUTEX_UNLOCK,
154        PJT_ONCE,
155        PJT_RWLOCK_DESTROY,
156        PJT_RWLOCK_INIT,
157        PJT_RWLOCK_RDLOCK,
158        PJT_RWLOCK_TRYRDLOCK,
159        PJT_RWLOCK_TRYWRLOCK,
160        PJT_RWLOCK_UNLOCK,
161        PJT_RWLOCK_WRLOCK,
162        PJT_SELF,
163        PJT_SETCANCELSTATE,
164        PJT_SETCANCELTYPE,
165        PJT_SETSPECIFIC,
166        PJT_SIGMASK,
167        PJT_TESTCANCEL,
168        PJT_CLEANUP_POP_IMP,
169        PJT_CLEANUP_PUSH_IMP,
170        PJT_CANCEL_ENTER,
171        PJT_CANCEL_LEAVE,
172        PJT_MAX
173} pjt_index_t;
174
175typedef int (*pthread_func_t)(void);
176typedef pthread_func_t pthread_func_entry_t[2];
177
178extern pthread_func_entry_t __thr_jtable[];
179
180/*
181 * yplib internal interfaces
182 */
183#ifdef YP
184int _yp_check(char **);
185#endif
186
187/*
188 * Initialise TLS for static programs
189 */
190void _init_tls(void);
191
192/*
193 * Provides pthread_once()-like functionality for both single-threaded
194 * and multi-threaded applications.
195 */
196int _once(pthread_once_t *, void (*)(void));
197
198/*
199 * Set the TLS thread pointer
200 */
201void _set_tp(void *tp);
202
203/*
204 * This is a pointer in the C run-time startup code. It is used
205 * by getprogname() and setprogname().
206 */
207extern const char *__progname;
208
209/*
210 * This function is used by the threading libraries to notify malloc that a
211 * thread is exiting.
212 */
213void _malloc_thread_cleanup(void);
214
215/*
216 * These functions are used by the threading libraries in order to protect
217 * malloc across fork().
218 */
219void _malloc_prefork(void);
220void _malloc_postfork(void);
221
222/*
223 * Function to clean up streams, called from abort() and exit().
224 */
225extern void (*__cleanup)(void);
226
227/*
228 * Get kern.osreldate to detect ABI revisions.  Explicitly
229 * ignores value of $OSVERSION and caches result.  Prototypes
230 * for the wrapped "new" pad-less syscalls are here for now.
231 */
232extern int __getosreldate(void);
233#include <sys/_types.h>
234/* Without pad */
235extern __off_t  __sys_lseek(int, __off_t, int);
236extern int      __sys_ftruncate(int, __off_t);
237extern int      __sys_truncate(const char *, __off_t);
238extern __ssize_t __sys_pread(int, void *, __size_t, __off_t);
239extern __ssize_t __sys_pwrite(int, const void *, __size_t, __off_t);
240extern void *   __sys_mmap(void *, __size_t, int, int, int, __off_t);
241
242/* With pad */
243extern __off_t  __sys_freebsd6_lseek(int, int, __off_t, int);
244extern int      __sys_freebsd6_ftruncate(int, int, __off_t);
245extern int      __sys_freebsd6_truncate(const char *, int, __off_t);
246extern __ssize_t __sys_freebsd6_pread(int, void *, __size_t, int, __off_t);
247extern __ssize_t __sys_freebsd6_pwrite(int, const void *, __size_t, int, __off_t);
248extern void *   __sys_freebsd6_mmap(void *, __size_t, int, int, int, int, __off_t);
249
250/* Without back-compat translation */
251extern int      __sys_fcntl(int, int, ...);
252
253struct timespec;
254struct timeval;
255struct timezone;
256int     __sys_gettimeofday(struct timeval *, struct timezone *);
257int     __sys_clock_gettime(__clockid_t, struct timespec *ts);
258
259/* execve() with PATH processing to implement posix_spawnp() */
260int _execvpe(const char *, char * const *, char * const *);
261
262int _elf_aux_info(int aux, void *buf, int buflen);
263struct dl_phdr_info;
264int __elf_phdr_match_addr(struct dl_phdr_info *, void *);
265void __init_elf_aux_vector(void);
266
267void    _pthread_cancel_enter(int);
268void    _pthread_cancel_leave(int);
269
270#endif /* _LIBC_PRIVATE_H_ */
Note: See TracBrowser for help on using the repository browser.