增加所有文件
This commit is contained in:
240
prebuilts/gcc/arm-none-eabi/include/sys/_default_fcntl.h
Normal file
240
prebuilts/gcc/arm-none-eabi/include/sys/_default_fcntl.h
Normal file
@@ -0,0 +1,240 @@
|
||||
|
||||
#ifndef _SYS__DEFAULT_FCNTL_H_
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define _SYS__DEFAULT_FCNTL_H_
|
||||
#include <_ansi.h>
|
||||
#include <sys/cdefs.h>
|
||||
#define _FOPEN (-1) /* from sys/file.h, kernel use only */
|
||||
#define _FREAD 0x0001 /* read enabled */
|
||||
#define _FWRITE 0x0002 /* write enabled */
|
||||
#define _FAPPEND 0x0008 /* append (writes guaranteed at the end) */
|
||||
#define _FMARK 0x0010 /* internal; mark during gc() */
|
||||
#define _FDEFER 0x0020 /* internal; defer for next gc pass */
|
||||
#define _FASYNC 0x0040 /* signal pgrp when data ready */
|
||||
#define _FSHLOCK 0x0080 /* BSD flock() shared lock present */
|
||||
#define _FEXLOCK 0x0100 /* BSD flock() exclusive lock present */
|
||||
#define _FCREAT 0x0200 /* open with file create */
|
||||
#define _FTRUNC 0x0400 /* open with truncation */
|
||||
#define _FEXCL 0x0800 /* error on open if file exists */
|
||||
#define _FNBIO 0x1000 /* non blocking I/O (sys5 style) */
|
||||
#define _FSYNC 0x2000 /* do all writes synchronously */
|
||||
#define _FNONBLOCK 0x4000 /* non blocking I/O (POSIX style) */
|
||||
#define _FNDELAY _FNONBLOCK /* non blocking I/O (4.2 style) */
|
||||
#define _FNOCTTY 0x8000 /* don't assign a ctty on this open */
|
||||
#if defined (__CYGWIN__)
|
||||
#define _FBINARY 0x10000
|
||||
#define _FTEXT 0x20000
|
||||
#endif
|
||||
#define _FNOINHERIT 0x40000
|
||||
#define _FDIRECT 0x80000
|
||||
#define _FNOFOLLOW 0x100000
|
||||
#define _FDIRECTORY 0x200000
|
||||
#define _FEXECSRCH 0x400000
|
||||
#if defined (__CYGWIN__)
|
||||
#define _FTMPFILE 0x800000
|
||||
#define _FNOATIME 0x1000000
|
||||
#define _FPATH 0x2000000
|
||||
#endif
|
||||
|
||||
#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
|
||||
|
||||
/*
|
||||
* Flag values for open(2) and fcntl(2)
|
||||
* The kernel adds 1 to the open modes to turn it into some
|
||||
* combination of FREAD and FWRITE.
|
||||
*/
|
||||
#define O_RDONLY 0 /* +1 == FREAD */
|
||||
#define O_WRONLY 1 /* +1 == FWRITE */
|
||||
#define O_RDWR 2 /* +1 == FREAD|FWRITE */
|
||||
#define O_APPEND _FAPPEND
|
||||
#define O_CREAT _FCREAT
|
||||
#define O_TRUNC _FTRUNC
|
||||
#define O_EXCL _FEXCL
|
||||
#define O_SYNC _FSYNC
|
||||
/* O_NDELAY _FNDELAY set in include/fcntl.h */
|
||||
/* O_NDELAY _FNBIO set in include/fcntl.h */
|
||||
#define O_NONBLOCK _FNONBLOCK
|
||||
#define O_NOCTTY _FNOCTTY
|
||||
|
||||
/* POSIX-1.2008 specific flags */
|
||||
#if __POSIX_VISIBLE >= 200809
|
||||
#define O_CLOEXEC _FNOINHERIT
|
||||
#define O_NOFOLLOW _FNOFOLLOW
|
||||
#define O_DIRECTORY _FDIRECTORY
|
||||
#define O_EXEC _FEXECSRCH
|
||||
#define O_SEARCH _FEXECSRCH
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#define O_DIRECT _FDIRECT
|
||||
#endif
|
||||
|
||||
#if defined (__CYGWIN__)
|
||||
#define O_BINARY _FBINARY
|
||||
#define O_TEXT _FTEXT
|
||||
#define O_DSYNC _FSYNC
|
||||
#define O_RSYNC _FSYNC
|
||||
|
||||
/* Linux-specific flags */
|
||||
#if __GNU_VISIBLE
|
||||
#define O_TMPFILE _FTMPFILE
|
||||
#define O_NOATIME _FNOATIME
|
||||
#define O_PATH _FPATH
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __MISC_VISIBLE
|
||||
|
||||
/*
|
||||
* Flags that work for fcntl(fd, F_SETFL, FXXXX)
|
||||
*/
|
||||
#define FAPPEND _FAPPEND
|
||||
#define FSYNC _FSYNC
|
||||
#define FASYNC _FASYNC
|
||||
#define FNBIO _FNBIO
|
||||
#define FNONBIO _FNONBLOCK /* XXX fix to be NONBLOCK everywhere */
|
||||
#define FNDELAY _FNDELAY
|
||||
|
||||
/*
|
||||
* Flags that are disallowed for fcntl's (FCNTLCANT);
|
||||
* used for opens, internal state, or locking.
|
||||
*/
|
||||
#define FREAD _FREAD
|
||||
#define FWRITE _FWRITE
|
||||
#define FMARK _FMARK
|
||||
#define FDEFER _FDEFER
|
||||
#define FSHLOCK _FSHLOCK
|
||||
#define FEXLOCK _FEXLOCK
|
||||
|
||||
/*
|
||||
* The rest of the flags, used only for opens
|
||||
*/
|
||||
#define FOPEN _FOPEN
|
||||
#define FCREAT _FCREAT
|
||||
#define FTRUNC _FTRUNC
|
||||
#define FEXCL _FEXCL
|
||||
#define FNOCTTY _FNOCTTY
|
||||
|
||||
#endif /* __MISC_VISIBLE */
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#define FNONBLOCK _FNONBLOCK
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
/* XXX close on exec request; must match UF_EXCLOSE in user.h */
|
||||
#define FD_CLOEXEC 1 /* posix */
|
||||
|
||||
/* fcntl(2) requests */
|
||||
#define F_DUPFD 0 /* Duplicate fildes */
|
||||
#define F_GETFD 1 /* Get fildes flags (close on exec) */
|
||||
#define F_SETFD 2 /* Set fildes flags (close on exec) */
|
||||
#define F_GETFL 3 /* Get file flags */
|
||||
#define F_SETFL 4 /* Set file flags */
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112
|
||||
#define F_GETOWN 5 /* Get owner - for ASYNC */
|
||||
#define F_SETOWN 6 /* Set owner - for ASYNC */
|
||||
#endif /* __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 */
|
||||
#define F_GETLK 7 /* Get record-locking information */
|
||||
#define F_SETLK 8 /* Set or Clear a record-lock (Non-Blocking) */
|
||||
#define F_SETLKW 9 /* Set or Clear a record-lock (Blocking) */
|
||||
#if __MISC_VISIBLE
|
||||
#define F_RGETLK 10 /* Test a remote lock to see if it is blocked */
|
||||
#define F_RSETLK 11 /* Set or unlock a remote lock */
|
||||
#define F_CNVT 12 /* Convert a fhandle to an open fd */
|
||||
#define F_RSETLKW 13 /* Set or Clear remote record-lock(Blocking) */
|
||||
#endif /* __MISC_VISIBLE */
|
||||
#if __POSIX_VISIBLE >= 200809
|
||||
#define F_DUPFD_CLOEXEC 14 /* As F_DUPFD, but set close-on-exec flag */
|
||||
#endif
|
||||
|
||||
/* fcntl(2) flags (l_type field of flock structure) */
|
||||
#define F_RDLCK 1 /* read lock */
|
||||
#define F_WRLCK 2 /* write lock */
|
||||
#define F_UNLCK 3 /* remove lock(s) */
|
||||
#if __MISC_VISIBLE
|
||||
#define F_UNLKSYS 4 /* remove remote locks for a given system */
|
||||
#endif /* __MISC_VISIBLE */
|
||||
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
|
||||
/* Special descriptor value to denote the cwd in calls to openat(2) etc. */
|
||||
#define AT_FDCWD -2
|
||||
|
||||
/* Flag values for faccessat2) et al. */
|
||||
#define AT_EACCESS 1
|
||||
#define AT_SYMLINK_NOFOLLOW 2
|
||||
#define AT_SYMLINK_FOLLOW 4
|
||||
#define AT_REMOVEDIR 8
|
||||
#if __GNU_VISIBLE
|
||||
#define AT_EMPTY_PATH 16
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
/* lock operations for flock(2) */
|
||||
#define LOCK_SH 0x01 /* shared file lock */
|
||||
#define LOCK_EX 0x02 /* exclusive file lock */
|
||||
#define LOCK_NB 0x04 /* don't block when locking */
|
||||
#define LOCK_UN 0x08 /* unlock file */
|
||||
#endif
|
||||
|
||||
/*#include <sys/stdtypes.h>*/
|
||||
|
||||
#ifndef __CYGWIN__
|
||||
/* file segment locking set data type - information passed to system by user */
|
||||
struct flock {
|
||||
short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */
|
||||
short l_whence; /* flag to choose starting offset */
|
||||
long l_start; /* relative offset, in bytes */
|
||||
long l_len; /* length, in bytes; 0 means lock to EOF */
|
||||
short l_pid; /* returned with F_GETLK */
|
||||
short l_xxx; /* reserved for future use */
|
||||
};
|
||||
#endif /* __CYGWIN__ */
|
||||
|
||||
#if __MISC_VISIBLE
|
||||
/* extended file segment locking set data type */
|
||||
struct eflock {
|
||||
short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */
|
||||
short l_whence; /* flag to choose starting offset */
|
||||
long l_start; /* relative offset, in bytes */
|
||||
long l_len; /* length, in bytes; 0 means lock to EOF */
|
||||
short l_pid; /* returned with F_GETLK */
|
||||
short l_xxx; /* reserved for future use */
|
||||
long l_rpid; /* Remote process id wanting this lock */
|
||||
long l_rsys; /* Remote system id wanting this lock */
|
||||
};
|
||||
#endif /* __MISC_VISIBLE */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h> /* sigh. for the mode bits for open/creat */
|
||||
|
||||
extern int open (const char *, int, ...);
|
||||
#if __ATFILE_VISIBLE
|
||||
extern int openat (int, const char *, int, ...);
|
||||
#endif
|
||||
extern int creat (const char *, mode_t);
|
||||
extern int fcntl (int, int, ...);
|
||||
#if __BSD_VISIBLE
|
||||
extern int flock (int, int);
|
||||
#endif
|
||||
#if __GNU_VISIBLE
|
||||
#include <sys/time.h>
|
||||
extern int futimesat (int, const char *, const struct timeval [2]);
|
||||
#endif
|
||||
|
||||
/* Provide _<systemcall> prototypes for functions provided by some versions
|
||||
of newlib. */
|
||||
#ifdef _LIBC
|
||||
extern int _open (const char *, int, ...);
|
||||
extern int _fcntl (int, int, ...);
|
||||
#ifdef __LARGE64_FILES
|
||||
extern int _open64 (const char *, int, ...);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* !_SYS__DEFAULT_FCNTL_H_ */
|
||||
199
prebuilts/gcc/arm-none-eabi/include/sys/_intsup.h
Normal file
199
prebuilts/gcc/arm-none-eabi/include/sys/_intsup.h
Normal file
@@ -0,0 +1,199 @@
|
||||
/*
|
||||
* Copyright (c) 2004, 2005 by
|
||||
* Ralf Corsepius, Ulm/Germany. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software
|
||||
* is freely granted, provided that this notice is preserved.
|
||||
*/
|
||||
|
||||
#ifndef _SYS__INTSUP_H
|
||||
#define _SYS__INTSUP_H
|
||||
|
||||
#include <sys/features.h>
|
||||
|
||||
#if __GNUC_PREREQ (3, 2)
|
||||
/* gcc > 3.2 implicitly defines the values we are interested */
|
||||
#define __STDINT_EXP(x) __##x##__
|
||||
#else
|
||||
#define __STDINT_EXP(x) x
|
||||
#include <limits.h>
|
||||
#endif
|
||||
|
||||
/* Determine how intptr_t and intN_t fastN_t and leastN_t are defined by gcc
|
||||
for this target. This is used to determine the correct printf() constant in
|
||||
inttypes.h and other constants in stdint.h.
|
||||
So we end up with
|
||||
?(signed|unsigned) char == 0
|
||||
?(signed|unsigned) short == 1
|
||||
?(signed|unsigned) int == 2
|
||||
?(signed|unsigned) short int == 3
|
||||
?(signed|unsigned) long == 4
|
||||
?(signed|unsigned) long int == 6
|
||||
?(signed|unsigned) long long == 8
|
||||
?(signed|unsigned) long long int == 10
|
||||
*/
|
||||
#pragma push_macro("signed")
|
||||
#pragma push_macro("unsigned")
|
||||
#pragma push_macro("char")
|
||||
#pragma push_macro("short")
|
||||
#pragma push_macro("__int20")
|
||||
#pragma push_macro("__int20__")
|
||||
#pragma push_macro("int")
|
||||
#pragma push_macro("long")
|
||||
#undef signed
|
||||
#undef unsigned
|
||||
#undef char
|
||||
#undef short
|
||||
#undef int
|
||||
#undef __int20
|
||||
#undef __int20__
|
||||
#undef long
|
||||
#define signed +0
|
||||
#define unsigned +0
|
||||
#define char +0
|
||||
#define short +1
|
||||
#define __int20 +2
|
||||
#define __int20__ +2
|
||||
#define int +2
|
||||
#define long +4
|
||||
#if (__INTPTR_TYPE__ == 8 || __INTPTR_TYPE__ == 10)
|
||||
#define _INTPTR_EQ_LONGLONG
|
||||
#elif (__INTPTR_TYPE__ == 4 || __INTPTR_TYPE__ == 6)
|
||||
#define _INTPTR_EQ_LONG
|
||||
/* Note - the tests for _INTPTR_EQ_INT and _INTPTR_EQ_SHORT are currently
|
||||
redundant as the values are not used. But one day they may be needed
|
||||
and so the tests remain. */
|
||||
#elif __INTPTR_TYPE__ == 2
|
||||
#define _INTPTR_EQ_INT
|
||||
#elif (__INTPTR_TYPE__ == 1 || __INTPTR_TYPE__ == 3)
|
||||
#define _INTPTR_EQ_SHORT
|
||||
#else
|
||||
#error "Unable to determine type definition of intptr_t"
|
||||
#endif
|
||||
#if (__INT32_TYPE__ == 4 || __INT32_TYPE__ == 6)
|
||||
#define _INT32_EQ_LONG
|
||||
#elif __INT32_TYPE__ == 2
|
||||
/* Nothing to define because int32_t is safe to print as an int. */
|
||||
#else
|
||||
#error "Unable to determine type definition of int32_t"
|
||||
#endif
|
||||
|
||||
#if (__INT8_TYPE__ == 0)
|
||||
#define __INT8 "hh"
|
||||
#elif (__INT8_TYPE__ == 1 || __INT8_TYPE__ == 3)
|
||||
#define __INT8 "h"
|
||||
#elif (__INT8_TYPE__ == 2)
|
||||
#define __INT8
|
||||
#elif (__INT8_TYPE__ == 4 || __INT8_TYPE__ == 6)
|
||||
#define __INT8 "l"
|
||||
#elif (__INT8_TYPE__ == 8 || __INT8_TYPE__ == 10)
|
||||
#define __INT8 "ll"
|
||||
#endif
|
||||
#if (__INT16_TYPE__ == 1 || __INT16_TYPE__ == 3)
|
||||
#define __INT16 "h"
|
||||
#elif (__INT16_TYPE__ == 2)
|
||||
#define __INT16
|
||||
#elif (__INT16_TYPE__ == 4 || __INT16_TYPE__ == 6)
|
||||
#define __INT16 "l"
|
||||
#elif (__INT16_TYPE__ == 8 || __INT16_TYPE__ == 10)
|
||||
#define __INT16 "ll"
|
||||
#endif
|
||||
#if (__INT32_TYPE__ == 2)
|
||||
#define __INT32
|
||||
#elif (__INT32_TYPE__ == 4 || __INT32_TYPE__ == 6)
|
||||
#define __INT32 "l"
|
||||
#elif (__INT32_TYPE__ == 8 || __INT32_TYPE__ == 10)
|
||||
#define __INT32 "ll"
|
||||
#endif
|
||||
#if (__INT64_TYPE__ == 2)
|
||||
#define __INT64
|
||||
#elif (__INT64_TYPE__ == 4 || __INT64_TYPE__ == 6)
|
||||
#define __INT64 "l"
|
||||
#elif (__INT64_TYPE__ == 8 || __INT64_TYPE__ == 10)
|
||||
#define __INT64 "ll"
|
||||
#endif
|
||||
#if (__INT_FAST8_TYPE__ == 0)
|
||||
#define __FAST8 "hh"
|
||||
#elif (__INT_FAST8_TYPE__ == 1 || __INT_FAST8_TYPE__ == 3)
|
||||
#define __FAST8 "h"
|
||||
#elif (__INT_FAST8_TYPE__ == 2)
|
||||
#define __FAST8
|
||||
#elif (__INT_FAST8_TYPE__ == 4 || __INT_FAST8_TYPE__ == 6)
|
||||
#define __FAST8 "l"
|
||||
#elif (__INT_FAST8_TYPE__ == 8 || __INT_FAST8_TYPE__ == 10)
|
||||
#define __FAST8 "ll"
|
||||
#endif
|
||||
#if (__INT_FAST16_TYPE__ == 1 || __INT_FAST16_TYPE__ == 3)
|
||||
#define __FAST16 "h"
|
||||
#elif (__INT_FAST16_TYPE__ == 2)
|
||||
#define __FAST16
|
||||
#elif (__INT_FAST16_TYPE__ == 4 || __INT_FAST16_TYPE__ == 6)
|
||||
#define __FAST16 "l"
|
||||
#elif (__INT_FAST16_TYPE__ == 8 || __INT_FAST16_TYPE__ == 10)
|
||||
#define __FAST16 "ll"
|
||||
#endif
|
||||
#if (__INT_FAST32_TYPE__ == 2)
|
||||
#define __FAST32
|
||||
#elif (__INT_FAST32_TYPE__ == 4 || __INT_FAST32_TYPE__ == 6)
|
||||
#define __FAST32 "l"
|
||||
#elif (__INT_FAST32_TYPE__ == 8 || __INT_FAST32_TYPE__ == 10)
|
||||
#define __FAST32 "ll"
|
||||
#endif
|
||||
#if (__INT_FAST64_TYPE__ == 2)
|
||||
#define __FAST64
|
||||
#elif (__INT_FAST64_TYPE__ == 4 || __INT_FAST64_TYPE__ == 6)
|
||||
#define __FAST64 "l"
|
||||
#elif (__INT_FAST64_TYPE__ == 8 || __INT_FAST64_TYPE__ == 10)
|
||||
#define __FAST64 "ll"
|
||||
#endif
|
||||
|
||||
#if (__INT_LEAST8_TYPE__ == 0)
|
||||
#define __LEAST8 "hh"
|
||||
#elif (__INT_LEAST8_TYPE__ == 1 || __INT_LEAST8_TYPE__ == 3)
|
||||
#define __LEAST8 "h"
|
||||
#elif (__INT_LEAST8_TYPE__ == 2)
|
||||
#define __LEAST8
|
||||
#elif (__INT_LEAST8_TYPE__ == 4 || __INT_LEAST8_TYPE__ == 6)
|
||||
#define __LEAST8 "l"
|
||||
#elif (__INT_LEAST8_TYPE__ == 8 || __INT_LEAST8_TYPE__ == 10)
|
||||
#define __LEAST8 "ll"
|
||||
#endif
|
||||
#if (__INT_LEAST16_TYPE__ == 1 || __INT_LEAST16_TYPE__ == 3)
|
||||
#define __LEAST16 "h"
|
||||
#elif (__INT_LEAST16_TYPE__ == 2)
|
||||
#define __LEAST16
|
||||
#elif (__INT_LEAST16_TYPE__ == 4 || __INT_LEAST16_TYPE__ == 6)
|
||||
#define __LEAST16 "l"
|
||||
#elif (__INT_LEAST16_TYPE__ == 8 || __INT_LEAST16_TYPE__ == 10)
|
||||
#define __LEAST16 "ll"
|
||||
#endif
|
||||
#if (__INT_LEAST32_TYPE__ == 2)
|
||||
#define __LEAST32
|
||||
#elif (__INT_LEAST32_TYPE__ == 4 || __INT_LEAST32_TYPE__ == 6)
|
||||
#define __LEAST32 "l"
|
||||
#elif (__INT_LEAST32_TYPE__ == 8 || __INT_LEAST32_TYPE__ == 10)
|
||||
#define __LEAST32 "ll"
|
||||
#endif
|
||||
#if (__INT_LEAST64_TYPE__ == 2)
|
||||
#define __LEAST64
|
||||
#elif (__INT_LEAST64_TYPE__ == 4 || __INT_LEAST64_TYPE__ == 6)
|
||||
#define __LEAST64 "l"
|
||||
#elif (__INT_LEAST64_TYPE__ == 8 || __INT_LEAST64_TYPE__ == 10)
|
||||
#define __LEAST64 "ll"
|
||||
#endif
|
||||
#undef signed
|
||||
#undef unsigned
|
||||
#undef char
|
||||
#undef short
|
||||
#undef int
|
||||
#undef long
|
||||
#pragma pop_macro("signed")
|
||||
#pragma pop_macro("unsigned")
|
||||
#pragma pop_macro("char")
|
||||
#pragma pop_macro("short")
|
||||
#pragma pop_macro("__int20")
|
||||
#pragma pop_macro("__int20__")
|
||||
#pragma pop_macro("int")
|
||||
#pragma pop_macro("long")
|
||||
|
||||
#endif /* _SYS__INTSUP_H */
|
||||
12
prebuilts/gcc/arm-none-eabi/include/sys/_locale.h
Normal file
12
prebuilts/gcc/arm-none-eabi/include/sys/_locale.h
Normal file
@@ -0,0 +1,12 @@
|
||||
/* Definition of opaque POSIX-1.2008 type locale_t for userspace. */
|
||||
|
||||
#ifndef _SYS__LOCALE_H
|
||||
#define _SYS__LOCALE_H
|
||||
|
||||
#include <newlib.h>
|
||||
#include <sys/config.h>
|
||||
|
||||
struct __locale_t;
|
||||
typedef struct __locale_t *locale_t;
|
||||
|
||||
#endif /* _SYS__LOCALE_H */
|
||||
233
prebuilts/gcc/arm-none-eabi/include/sys/_pthreadtypes.h
Normal file
233
prebuilts/gcc/arm-none-eabi/include/sys/_pthreadtypes.h
Normal file
@@ -0,0 +1,233 @@
|
||||
/*
|
||||
* Written by Joel Sherrill <joel.sherrill@OARcorp.com>.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-2013, 2015.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose without fee is hereby granted, provided that this entire notice
|
||||
* is included in all copies of any software which is or includes a copy
|
||||
* or modification of this software.
|
||||
*
|
||||
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION
|
||||
* OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
|
||||
* SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS__PTHREADTYPES_H_
|
||||
#define _SYS__PTHREADTYPES_H_
|
||||
|
||||
#if defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506
|
||||
|
||||
#include <sys/sched.h>
|
||||
|
||||
/*
|
||||
* 2.5 Primitive System Data Types, P1003.1c/D10, p. 19.
|
||||
*/
|
||||
|
||||
#if defined(__XMK__)
|
||||
typedef unsigned int pthread_t; /* identify a thread */
|
||||
#else
|
||||
typedef __uint32_t pthread_t; /* identify a thread */
|
||||
#endif
|
||||
|
||||
/* P1003.1c/D10, p. 118-119 */
|
||||
#define PTHREAD_SCOPE_PROCESS 0
|
||||
#define PTHREAD_SCOPE_SYSTEM 1
|
||||
|
||||
/* P1003.1c/D10, p. 111 */
|
||||
#define PTHREAD_INHERIT_SCHED 1 /* scheduling policy and associated */
|
||||
/* attributes are inherited from */
|
||||
/* the calling thread. */
|
||||
#define PTHREAD_EXPLICIT_SCHED 2 /* set from provided attribute object */
|
||||
|
||||
/* P1003.1c/D10, p. 141 */
|
||||
#define PTHREAD_CREATE_DETACHED 0
|
||||
#define PTHREAD_CREATE_JOINABLE 1
|
||||
|
||||
#if defined(__XMK__)
|
||||
typedef struct pthread_attr_s {
|
||||
int contentionscope;
|
||||
struct sched_param schedparam;
|
||||
int detachstate;
|
||||
void *stackaddr;
|
||||
size_t stacksize;
|
||||
} pthread_attr_t;
|
||||
|
||||
#define PTHREAD_STACK_MIN 200
|
||||
|
||||
#else /* !defined(__XMK__) */
|
||||
typedef struct {
|
||||
int is_initialized;
|
||||
void *stackaddr;
|
||||
int stacksize;
|
||||
int contentionscope;
|
||||
int inheritsched;
|
||||
int schedpolicy;
|
||||
struct sched_param schedparam;
|
||||
|
||||
/* P1003.4b/D8, p. 54 adds cputime_clock_allowed attribute. */
|
||||
#if defined(_POSIX_THREAD_CPUTIME)
|
||||
int cputime_clock_allowed; /* see time.h */
|
||||
#endif
|
||||
int detachstate;
|
||||
} pthread_attr_t;
|
||||
|
||||
#endif /* !defined(__XMK__) */
|
||||
|
||||
#if defined(_POSIX_THREAD_PROCESS_SHARED)
|
||||
/* NOTE: P1003.1c/D10, p. 81 defines following values for process_shared. */
|
||||
|
||||
#define PTHREAD_PROCESS_PRIVATE 0 /* visible within only the creating process */
|
||||
#define PTHREAD_PROCESS_SHARED 1 /* visible too all processes with access to */
|
||||
/* the memory where the resource is */
|
||||
/* located */
|
||||
#endif
|
||||
|
||||
#if defined(_POSIX_THREAD_PRIO_PROTECT)
|
||||
/* Mutexes */
|
||||
|
||||
/* Values for blocking protocol. */
|
||||
|
||||
#define PTHREAD_PRIO_NONE 0
|
||||
#define PTHREAD_PRIO_INHERIT 1
|
||||
#define PTHREAD_PRIO_PROTECT 2
|
||||
#endif
|
||||
|
||||
#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
|
||||
|
||||
/* Values for mutex type */
|
||||
|
||||
/* The following defines are part of the X/Open System Interface (XSI). */
|
||||
|
||||
/*
|
||||
* This type of mutex does not detect deadlock. A thread attempting to
|
||||
* relock this mutex without first unlocking it shall deadlock. Attempting
|
||||
* to unlock a mutex locked by a different thread results in undefined
|
||||
* behavior. Attempting to unlock an unlocked mutex results in undefined
|
||||
* behavior.
|
||||
*/
|
||||
#define PTHREAD_MUTEX_NORMAL 0
|
||||
|
||||
/*
|
||||
* A thread attempting to relock this mutex without first unlocking
|
||||
* it shall succeed in locking the mutex. The relocking deadlock which
|
||||
* can occur with mutexes of type PTHREAD_MUTEX_NORMAL cannot occur with
|
||||
* this type of mutex. Multiple locks of this mutex shall require the
|
||||
* same number of unlocks to release the mutex before another thread can
|
||||
* acquire the mutex. A thread attempting to unlock a mutex which another
|
||||
* thread has locked shall return with an error. A thread attempting to
|
||||
* unlock an unlocked mutex shall return with an error.
|
||||
*/
|
||||
#define PTHREAD_MUTEX_RECURSIVE 1
|
||||
|
||||
/*
|
||||
* This type of mutex provides error checking. A thread attempting
|
||||
* to relock this mutex without first unlocking it shall return with an
|
||||
* error. A thread attempting to unlock a mutex which another thread has
|
||||
* locked shall return with an error. A thread attempting to unlock an
|
||||
* unlocked mutex shall return with an error.
|
||||
*/
|
||||
#define PTHREAD_MUTEX_ERRORCHECK 2
|
||||
|
||||
/*
|
||||
* Attempting to recursively lock a mutex of this type results
|
||||
* in undefined behavior. Attempting to unlock a mutex of this type
|
||||
* which was not locked by the calling thread results in undefined
|
||||
* behavior. Attempting to unlock a mutex of this type which is not locked
|
||||
* results in undefined behavior. An implementation may map this mutex to
|
||||
* one of the other mutex types.
|
||||
*/
|
||||
#define PTHREAD_MUTEX_DEFAULT 3
|
||||
|
||||
#endif /* !defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) */
|
||||
|
||||
#if defined(__XMK__)
|
||||
typedef unsigned int pthread_mutex_t; /* identify a mutex */
|
||||
|
||||
typedef struct {
|
||||
int type;
|
||||
} pthread_mutexattr_t;
|
||||
|
||||
#else /* !defined(__XMK__) */
|
||||
typedef __uint32_t pthread_mutex_t; /* identify a mutex */
|
||||
|
||||
typedef struct {
|
||||
int is_initialized;
|
||||
#if defined(_POSIX_THREAD_PROCESS_SHARED)
|
||||
int process_shared; /* allow mutex to be shared amongst processes */
|
||||
#endif
|
||||
#if defined(_POSIX_THREAD_PRIO_PROTECT)
|
||||
int prio_ceiling;
|
||||
int protocol;
|
||||
#endif
|
||||
#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
|
||||
int type;
|
||||
#endif
|
||||
int recursive;
|
||||
} pthread_mutexattr_t;
|
||||
#endif /* !defined(__XMK__) */
|
||||
|
||||
#define _PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF)
|
||||
|
||||
/* Condition Variables */
|
||||
|
||||
typedef __uint32_t pthread_cond_t; /* identify a condition variable */
|
||||
|
||||
#define _PTHREAD_COND_INITIALIZER ((pthread_cond_t) 0xFFFFFFFF)
|
||||
|
||||
typedef struct {
|
||||
int is_initialized;
|
||||
clock_t clock; /* specifiy clock for timeouts */
|
||||
#if defined(_POSIX_THREAD_PROCESS_SHARED)
|
||||
int process_shared; /* allow this to be shared amongst processes */
|
||||
#endif
|
||||
} pthread_condattr_t; /* a condition attribute object */
|
||||
|
||||
/* Keys */
|
||||
|
||||
typedef __uint32_t pthread_key_t; /* thread-specific data keys */
|
||||
|
||||
typedef struct {
|
||||
int is_initialized; /* is this structure initialized? */
|
||||
int init_executed; /* has the initialization routine been run? */
|
||||
} pthread_once_t; /* dynamic package initialization */
|
||||
|
||||
#define _PTHREAD_ONCE_INIT { 1, 0 } /* is initialized and not run */
|
||||
#endif /* defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506 */
|
||||
|
||||
/* POSIX Barrier Types */
|
||||
|
||||
#if defined(_POSIX_BARRIERS)
|
||||
typedef __uint32_t pthread_barrier_t; /* POSIX Barrier Object */
|
||||
typedef struct {
|
||||
int is_initialized; /* is this structure initialized? */
|
||||
#if defined(_POSIX_THREAD_PROCESS_SHARED)
|
||||
int process_shared; /* allow this to be shared amongst processes */
|
||||
#endif
|
||||
} pthread_barrierattr_t;
|
||||
#endif /* defined(_POSIX_BARRIERS) */
|
||||
|
||||
/* POSIX Spin Lock Types */
|
||||
|
||||
#if defined(_POSIX_SPIN_LOCKS)
|
||||
typedef __uint32_t pthread_spinlock_t; /* POSIX Spin Lock Object */
|
||||
#endif /* defined(_POSIX_SPIN_LOCKS) */
|
||||
|
||||
/* POSIX Reader/Writer Lock Types */
|
||||
|
||||
#if defined(_POSIX_READER_WRITER_LOCKS)
|
||||
typedef __uint32_t pthread_rwlock_t; /* POSIX RWLock Object */
|
||||
|
||||
#define _PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) 0xFFFFFFFF)
|
||||
|
||||
typedef struct {
|
||||
int is_initialized; /* is this structure initialized? */
|
||||
#if defined(_POSIX_THREAD_PROCESS_SHARED)
|
||||
int process_shared; /* allow this to be shared amongst processes */
|
||||
#endif
|
||||
} pthread_rwlockattr_t;
|
||||
#endif /* defined(_POSIX_READER_WRITER_LOCKS) */
|
||||
|
||||
#endif /* ! _SYS__PTHREADTYPES_H_ */
|
||||
43
prebuilts/gcc/arm-none-eabi/include/sys/_sigset.h
Normal file
43
prebuilts/gcc/arm-none-eabi/include/sys/_sigset.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1989, 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)signal.h 8.4 (Berkeley) 5/4/95
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _SYS__SIGSET_H_
|
||||
#define _SYS__SIGSET_H_
|
||||
|
||||
typedef unsigned long __sigset_t;
|
||||
|
||||
#endif /* !_SYS__SIGSET_H_ */
|
||||
90
prebuilts/gcc/arm-none-eabi/include/sys/_stdint.h
Normal file
90
prebuilts/gcc/arm-none-eabi/include/sys/_stdint.h
Normal file
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) 2004, 2005 by
|
||||
* Ralf Corsepius, Ulm/Germany. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software
|
||||
* is freely granted, provided that this notice is preserved.
|
||||
*/
|
||||
|
||||
#ifndef _SYS__STDINT_H
|
||||
#define _SYS__STDINT_H
|
||||
|
||||
#include <machine/_default_types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef ___int8_t_defined
|
||||
#ifndef _INT8_T_DECLARED
|
||||
typedef __int8_t int8_t ;
|
||||
#define _INT8_T_DECLARED
|
||||
#endif
|
||||
#ifndef _UINT8_T_DECLARED
|
||||
typedef __uint8_t uint8_t ;
|
||||
#define _UINT8_T_DECLARED
|
||||
#endif
|
||||
#define __int8_t_defined 1
|
||||
#endif /* ___int8_t_defined */
|
||||
|
||||
#ifdef ___int16_t_defined
|
||||
#ifndef _INT16_T_DECLARED
|
||||
typedef __int16_t int16_t ;
|
||||
#define _INT16_T_DECLARED
|
||||
#endif
|
||||
#ifndef _UINT16_T_DECLARED
|
||||
typedef __uint16_t uint16_t ;
|
||||
#define _UINT16_T_DECLARED
|
||||
#endif
|
||||
#define __int16_t_defined 1
|
||||
#endif /* ___int16_t_defined */
|
||||
|
||||
#ifdef ___int32_t_defined
|
||||
#ifndef _INT32_T_DECLARED
|
||||
typedef __int32_t int32_t ;
|
||||
#define _INT32_T_DECLARED
|
||||
#endif
|
||||
#ifndef _UINT32_T_DECLARED
|
||||
typedef __uint32_t uint32_t ;
|
||||
#define _UINT32_T_DECLARED
|
||||
#endif
|
||||
#define __int32_t_defined 1
|
||||
#endif /* ___int32_t_defined */
|
||||
|
||||
#ifdef ___int64_t_defined
|
||||
#ifndef _INT64_T_DECLARED
|
||||
typedef __int64_t int64_t ;
|
||||
#define _INT64_T_DECLARED
|
||||
#endif
|
||||
#ifndef _UINT64_T_DECLARED
|
||||
typedef __uint64_t uint64_t ;
|
||||
#define _UINT64_T_DECLARED
|
||||
#endif
|
||||
#define __int64_t_defined 1
|
||||
#endif /* ___int64_t_defined */
|
||||
|
||||
#ifndef _INTMAX_T_DECLARED
|
||||
typedef __intmax_t intmax_t;
|
||||
#define _INTMAX_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _UINTMAX_T_DECLARED
|
||||
typedef __uintmax_t uintmax_t;
|
||||
#define _UINTMAX_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _INTPTR_T_DECLARED
|
||||
typedef __intptr_t intptr_t;
|
||||
#define _INTPTR_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _UINTPTR_T_DECLARED
|
||||
typedef __uintptr_t uintptr_t;
|
||||
#define _UINTPTR_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SYS__STDINT_H */
|
||||
52
prebuilts/gcc/arm-none-eabi/include/sys/_timespec.h
Normal file
52
prebuilts/gcc/arm-none-eabi/include/sys/_timespec.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Copyright (c) 1982, 1986, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
||||
* from: FreeBSD: src/sys/sys/time.h,v 1.43 2000/03/20 14:09:05 phk Exp
|
||||
* $FreeBSD: head/sys/sys/_timespec.h 326023 2017-11-20 19:43:44Z pfg $
|
||||
*/
|
||||
|
||||
#ifndef _SYS__TIMESPEC_H_
|
||||
#define _SYS__TIMESPEC_H_
|
||||
|
||||
#include <sys/_types.h>
|
||||
|
||||
#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED)
|
||||
typedef _TIME_T_ time_t;
|
||||
#define __time_t_defined
|
||||
#define _TIME_T_DECLARED
|
||||
#endif
|
||||
|
||||
struct timespec {
|
||||
time_t tv_sec; /* seconds */
|
||||
long tv_nsec; /* and nanoseconds */
|
||||
};
|
||||
|
||||
#endif /* !_SYS__TIMESPEC_H_ */
|
||||
60
prebuilts/gcc/arm-none-eabi/include/sys/_timeval.h
Normal file
60
prebuilts/gcc/arm-none-eabi/include/sys/_timeval.h
Normal file
@@ -0,0 +1,60 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
|
||||
*
|
||||
* Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: head/sys/sys/_timeval.h 326256 2017-11-27 15:01:59Z pfg $
|
||||
*/
|
||||
|
||||
#ifndef _SYS__TIMEVAL_H_
|
||||
#define _SYS__TIMEVAL_H_
|
||||
|
||||
#include <sys/_types.h>
|
||||
|
||||
#ifndef _SUSECONDS_T_DECLARED
|
||||
typedef __suseconds_t suseconds_t;
|
||||
#define _SUSECONDS_T_DECLARED
|
||||
#endif
|
||||
|
||||
#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED)
|
||||
typedef _TIME_T_ time_t;
|
||||
#define __time_t_defined
|
||||
#define _TIME_T_DECLARED
|
||||
#endif
|
||||
|
||||
/* This define is also used outside of Newlib, e.g. in MinGW-w64 */
|
||||
#ifndef _TIMEVAL_DEFINED
|
||||
#define _TIMEVAL_DEFINED
|
||||
|
||||
/*
|
||||
* Structure returned by gettimeofday(2) system call, and used in other calls.
|
||||
*/
|
||||
struct timeval {
|
||||
time_t tv_sec; /* seconds */
|
||||
suseconds_t tv_usec; /* and microseconds */
|
||||
};
|
||||
#endif /* _TIMEVAL_DEFINED */
|
||||
|
||||
#endif /* !_SYS__TIMEVAL_H_ */
|
||||
228
prebuilts/gcc/arm-none-eabi/include/sys/_types.h
Normal file
228
prebuilts/gcc/arm-none-eabi/include/sys/_types.h
Normal file
@@ -0,0 +1,228 @@
|
||||
/* ANSI C namespace clean utility typedefs */
|
||||
|
||||
/* This file defines various typedefs needed by the system calls that support
|
||||
the C library. Basically, they're just the POSIX versions with an '_'
|
||||
prepended. Targets shall use <machine/_types.h> to define their own
|
||||
internal types if desired.
|
||||
|
||||
There are three define patterns used for type definitions. Lets assume
|
||||
xyz_t is a user type.
|
||||
|
||||
The internal type definition uses __machine_xyz_t_defined. It is defined by
|
||||
<machine/_types.h> to disable a default definition in <sys/_types.h>. It
|
||||
must not be used in other files.
|
||||
|
||||
User type definitions are guarded by __xyz_t_defined in glibc and
|
||||
_XYZ_T_DECLARED in BSD compatible systems.
|
||||
*/
|
||||
|
||||
#ifndef _SYS__TYPES_H
|
||||
#define _SYS__TYPES_H
|
||||
|
||||
#define __need_size_t
|
||||
#define __need_wint_t
|
||||
#include <stddef.h>
|
||||
#include <newlib.h>
|
||||
#include <sys/config.h>
|
||||
#include <machine/_types.h>
|
||||
|
||||
#ifndef __machine_blkcnt_t_defined
|
||||
typedef long __blkcnt_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_blksize_t_defined
|
||||
typedef long __blksize_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_fsblkcnt_t_defined
|
||||
typedef __uint64_t __fsblkcnt_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_fsfilcnt_t_defined
|
||||
typedef __uint32_t __fsfilcnt_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_off_t_defined
|
||||
typedef long _off_t;
|
||||
#endif
|
||||
|
||||
#if defined(__XMK__)
|
||||
typedef signed char __pid_t;
|
||||
#else
|
||||
typedef int __pid_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_dev_t_defined
|
||||
typedef short __dev_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_uid_t_defined
|
||||
typedef unsigned short __uid_t;
|
||||
#endif
|
||||
#ifndef __machine_gid_t_defined
|
||||
typedef unsigned short __gid_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_id_t_defined
|
||||
typedef __uint32_t __id_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_ino_t_defined
|
||||
#if (defined(__i386__) && (defined(GO32) || defined(__MSDOS__))) || \
|
||||
defined(__sparc__) || defined(__SPU__)
|
||||
typedef unsigned long __ino_t;
|
||||
#else
|
||||
typedef unsigned short __ino_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __machine_mode_t_defined
|
||||
#if defined(__i386__) && (defined(GO32) || defined(__MSDOS__))
|
||||
typedef int __mode_t;
|
||||
#else
|
||||
#if defined(__sparc__) && !defined(__sparc_v9__)
|
||||
#ifdef __svr4__
|
||||
typedef unsigned long __mode_t;
|
||||
#else
|
||||
typedef unsigned short __mode_t;
|
||||
#endif
|
||||
#else
|
||||
typedef __uint32_t __mode_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __machine_off64_t_defined
|
||||
__extension__ typedef long long _off64_t;
|
||||
#endif
|
||||
|
||||
#if defined(__CYGWIN__) && !defined(__LP64__)
|
||||
typedef _off64_t __off_t;
|
||||
#else
|
||||
typedef _off_t __off_t;
|
||||
#endif
|
||||
|
||||
typedef _off64_t __loff_t;
|
||||
|
||||
#ifndef __machine_key_t_defined
|
||||
typedef long __key_t;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We need fpos_t for the following, but it doesn't have a leading "_",
|
||||
* so we use _fpos_t instead.
|
||||
*/
|
||||
#ifndef __machine_fpos_t_defined
|
||||
typedef long _fpos_t; /* XXX must match off_t in <sys/types.h> */
|
||||
/* (and must be `long' for now) */
|
||||
#endif
|
||||
|
||||
#ifdef __LARGE64_FILES
|
||||
#ifndef __machine_fpos64_t_defined
|
||||
typedef _off64_t _fpos64_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Defined by GCC provided <stddef.h> */
|
||||
#undef __size_t
|
||||
|
||||
#ifndef __machine_size_t_defined
|
||||
#ifdef __SIZE_TYPE__
|
||||
typedef __SIZE_TYPE__ __size_t;
|
||||
#else
|
||||
#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
|
||||
typedef unsigned int __size_t;
|
||||
#else
|
||||
typedef unsigned long __size_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __machine_ssize_t_defined
|
||||
#ifdef __SIZE_TYPE__
|
||||
/* If __SIZE_TYPE__ is defined (gcc) we define ssize_t based on size_t.
|
||||
We simply change "unsigned" to "signed" for this single definition
|
||||
to make sure ssize_t and size_t only differ by their signedness. */
|
||||
#define unsigned signed
|
||||
typedef __SIZE_TYPE__ _ssize_t;
|
||||
#undef unsigned
|
||||
#else
|
||||
#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
|
||||
typedef int _ssize_t;
|
||||
#else
|
||||
typedef long _ssize_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef _ssize_t __ssize_t;
|
||||
|
||||
#ifndef __machine_mbstate_t_defined
|
||||
/* Conversion state information. */
|
||||
typedef struct
|
||||
{
|
||||
int __count;
|
||||
union
|
||||
{
|
||||
wint_t __wch;
|
||||
unsigned char __wchb[4];
|
||||
} __value; /* Value so far. */
|
||||
} _mbstate_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_iconv_t_defined
|
||||
/* Iconv descriptor type */
|
||||
typedef void *_iconv_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_clock_t_defined
|
||||
#define _CLOCK_T_ unsigned long /* clock() */
|
||||
#endif
|
||||
|
||||
typedef _CLOCK_T_ __clock_t;
|
||||
|
||||
#if defined(_USE_LONG_TIME_T) || __LONG_MAX__ > 0x7fffffffL
|
||||
#define _TIME_T_ long
|
||||
#else
|
||||
#define _TIME_T_ __int_least64_t
|
||||
#endif
|
||||
typedef _TIME_T_ __time_t;
|
||||
|
||||
#ifndef __machine_clockid_t_defined
|
||||
#define _CLOCKID_T_ unsigned long
|
||||
#endif
|
||||
|
||||
typedef _CLOCKID_T_ __clockid_t;
|
||||
|
||||
#ifndef __machine_daddr_t_defined
|
||||
typedef long __daddr_t;
|
||||
#endif
|
||||
|
||||
#define _TIMER_T_ unsigned long
|
||||
typedef _TIMER_T_ __timer_t;
|
||||
|
||||
#ifndef __machine_sa_family_t_defined
|
||||
typedef __uint8_t __sa_family_t;
|
||||
#endif
|
||||
|
||||
#ifndef __machine_socklen_t_defined
|
||||
typedef __uint32_t __socklen_t;
|
||||
#endif
|
||||
|
||||
typedef int __nl_item;
|
||||
typedef unsigned short __nlink_t;
|
||||
typedef long __suseconds_t; /* microseconds (signed) */
|
||||
typedef unsigned long __useconds_t; /* microseconds (unsigned) */
|
||||
|
||||
/*
|
||||
* Must be identical to the __GNUCLIKE_BUILTIN_VAALIST definition in
|
||||
* <sys/cdefs.h>. The <sys/cdefs.h> must not be included here to avoid cyclic
|
||||
* header dependencies.
|
||||
*/
|
||||
#if __GNUC_MINOR__ > 95 || __GNUC__ >= 3
|
||||
typedef __builtin_va_list __va_list;
|
||||
#else
|
||||
typedef char * __va_list;
|
||||
#endif
|
||||
|
||||
#endif /* _SYS__TYPES_H */
|
||||
24
prebuilts/gcc/arm-none-eabi/include/sys/_tz_structs.h
Normal file
24
prebuilts/gcc/arm-none-eabi/include/sys/_tz_structs.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#ifndef _SYS__TZ_STRUCTS_H_
|
||||
#define _SYS__TZ_STRUCTS_H_
|
||||
|
||||
typedef struct __tzrule_struct
|
||||
{
|
||||
char ch;
|
||||
int m; /* Month of year if ch=M */
|
||||
int n; /* Week of month if ch=M */
|
||||
int d; /* Day of week if ch=M, day of year if ch=J or ch=D */
|
||||
int s; /* Time of day in seconds */
|
||||
time_t change;
|
||||
long offset; /* Match type of _timezone. */
|
||||
} __tzrule_type;
|
||||
|
||||
typedef struct __tzinfo_struct
|
||||
{
|
||||
int __tznorth;
|
||||
int __tzyear;
|
||||
__tzrule_type __tzrule[2];
|
||||
} __tzinfo_type;
|
||||
|
||||
__tzinfo_type *__gettzinfo (void);
|
||||
|
||||
#endif /* _SYS__TZ_STRUCTS_H_ */
|
||||
740
prebuilts/gcc/arm-none-eabi/include/sys/cdefs.h
Normal file
740
prebuilts/gcc/arm-none-eabi/include/sys/cdefs.h
Normal file
@@ -0,0 +1,740 @@
|
||||
/* libc/sys/linux/sys/cdefs.h - Helper macros for K&R vs. ANSI C compat. */
|
||||
|
||||
/* Written 2000 by Werner Almesberger */
|
||||
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Copyright (c) 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Berkeley Software Design, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)cdefs.h 8.8 (Berkeley) 1/9/95
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_CDEFS_H_
|
||||
#define _SYS_CDEFS_H_
|
||||
|
||||
#include <machine/_default_types.h>
|
||||
#include <sys/features.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#define __PMT(args) args
|
||||
#define __DOTS , ...
|
||||
#define __THROW
|
||||
|
||||
#ifdef __GNUC__
|
||||
# define __ASMNAME(cname) __XSTRING (__USER_LABEL_PREFIX__) cname
|
||||
#endif
|
||||
|
||||
#define __ptr_t void *
|
||||
#define __long_double_t long double
|
||||
|
||||
#define __attribute_malloc__
|
||||
#define __attribute_pure__
|
||||
#define __attribute_format_strfmon__(a,b)
|
||||
#define __flexarr [0]
|
||||
|
||||
#ifndef __BOUNDED_POINTERS__
|
||||
# define __bounded /* nothing */
|
||||
# define __unbounded /* nothing */
|
||||
# define __ptrvalue /* nothing */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Testing against Clang-specific extensions.
|
||||
*/
|
||||
#ifndef __has_attribute
|
||||
#define __has_attribute(x) 0
|
||||
#endif
|
||||
#ifndef __has_extension
|
||||
#define __has_extension __has_feature
|
||||
#endif
|
||||
#ifndef __has_feature
|
||||
#define __has_feature(x) 0
|
||||
#endif
|
||||
#ifndef __has_include
|
||||
#define __has_include(x) 0
|
||||
#endif
|
||||
#ifndef __has_builtin
|
||||
#define __has_builtin(x) 0
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#define __BEGIN_DECLS extern "C" {
|
||||
#define __END_DECLS }
|
||||
#else
|
||||
#define __BEGIN_DECLS
|
||||
#define __END_DECLS
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This code has been put in place to help reduce the addition of
|
||||
* compiler specific defines in FreeBSD code. It helps to aid in
|
||||
* having a compiler-agnostic source tree.
|
||||
*/
|
||||
|
||||
#if defined(__GNUC__)
|
||||
|
||||
#if __GNUC__ >= 3
|
||||
#define __GNUCLIKE_ASM 3
|
||||
#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS
|
||||
#else
|
||||
#define __GNUCLIKE_ASM 2
|
||||
#endif
|
||||
#define __GNUCLIKE___TYPEOF 1
|
||||
#define __GNUCLIKE___SECTION 1
|
||||
|
||||
#define __GNUCLIKE_CTOR_SECTION_HANDLING 1
|
||||
|
||||
#define __GNUCLIKE_BUILTIN_CONSTANT_P 1
|
||||
|
||||
#if (__GNUC_MINOR__ > 95 || __GNUC__ >= 3)
|
||||
#define __GNUCLIKE_BUILTIN_VARARGS 1
|
||||
#define __GNUCLIKE_BUILTIN_STDARG 1
|
||||
#define __GNUCLIKE_BUILTIN_VAALIST 1
|
||||
#endif
|
||||
|
||||
#define __GNUC_VA_LIST_COMPATIBILITY 1
|
||||
|
||||
/*
|
||||
* Compiler memory barriers, specific to gcc and clang.
|
||||
*/
|
||||
#define __compiler_membar() __asm __volatile(" " : : : "memory")
|
||||
|
||||
#define __GNUCLIKE_BUILTIN_NEXT_ARG 1
|
||||
#define __GNUCLIKE_MATH_BUILTIN_RELOPS
|
||||
|
||||
#define __GNUCLIKE_BUILTIN_MEMCPY 1
|
||||
|
||||
/* XXX: if __GNUC__ >= 2: not tested everywhere originally, where replaced */
|
||||
#define __CC_SUPPORTS_INLINE 1
|
||||
#define __CC_SUPPORTS___INLINE 1
|
||||
#define __CC_SUPPORTS___INLINE__ 1
|
||||
|
||||
#define __CC_SUPPORTS___FUNC__ 1
|
||||
#define __CC_SUPPORTS_WARNING 1
|
||||
|
||||
#define __CC_SUPPORTS_VARADIC_XXX 1 /* see varargs.h */
|
||||
|
||||
#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1
|
||||
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
/*
|
||||
* The __CONCAT macro is used to concatenate parts of symbol names, e.g.
|
||||
* with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
|
||||
* The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
|
||||
* mode -- there must be no spaces between its arguments, and for nested
|
||||
* __CONCAT's, all the __CONCAT's must be at the left. __CONCAT can also
|
||||
* concatenate double-quoted strings produced by the __STRING macro, but
|
||||
* this only works with ANSI C.
|
||||
*
|
||||
* __XSTRING is like __STRING, but it expands any macros in its argument
|
||||
* first. It is only available with ANSI C.
|
||||
*/
|
||||
#if defined(__STDC__) || defined(__cplusplus)
|
||||
#define __P(protos) protos /* full-blown ANSI C */
|
||||
#define __CONCAT1(x,y) x ## y
|
||||
#define __CONCAT(x,y) __CONCAT1(x,y)
|
||||
#define __STRING(x) #x /* stringify without expanding x */
|
||||
#define __XSTRING(x) __STRING(x) /* expand x, then stringify */
|
||||
|
||||
#define __const const /* define reserved names to standard */
|
||||
#define __signed signed
|
||||
#define __volatile volatile
|
||||
#if defined(__cplusplus)
|
||||
#define __inline inline /* convert to C++ keyword */
|
||||
#else
|
||||
#if !(defined(__CC_SUPPORTS___INLINE))
|
||||
#define __inline /* delete GCC keyword */
|
||||
#endif /* ! __CC_SUPPORTS___INLINE */
|
||||
#endif /* !__cplusplus */
|
||||
|
||||
#else /* !(__STDC__ || __cplusplus) */
|
||||
#define __P(protos) () /* traditional C preprocessor */
|
||||
#define __CONCAT(x,y) x/**/y
|
||||
#define __STRING(x) "x"
|
||||
|
||||
#if !defined(__CC_SUPPORTS___INLINE)
|
||||
#define __const /* delete pseudo-ANSI C keywords */
|
||||
#define __inline
|
||||
#define __signed
|
||||
#define __volatile
|
||||
/*
|
||||
* In non-ANSI C environments, new programs will want ANSI-only C keywords
|
||||
* deleted from the program and old programs will want them left alone.
|
||||
* When using a compiler other than gcc, programs using the ANSI C keywords
|
||||
* const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
|
||||
* When using "gcc -traditional", we assume that this is the intent; if
|
||||
* __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
|
||||
*/
|
||||
#ifndef NO_ANSI_KEYWORDS
|
||||
#define const /* delete ANSI C keywords */
|
||||
#define inline
|
||||
#define signed
|
||||
#define volatile
|
||||
#endif /* !NO_ANSI_KEYWORDS */
|
||||
#endif /* !__CC_SUPPORTS___INLINE */
|
||||
#endif /* !(__STDC__ || __cplusplus) */
|
||||
|
||||
/*
|
||||
* Compiler-dependent macros to help declare dead (non-returning) and
|
||||
* pure (no side effects) functions, and unused variables. They are
|
||||
* null except for versions of gcc that are known to support the features
|
||||
* properly (old versions of gcc-2 supported the dead and pure features
|
||||
* in a different (wrong) way). If we do not provide an implementation
|
||||
* for a given compiler, let the compile fail if it is told to use
|
||||
* a feature that we cannot live without.
|
||||
*/
|
||||
#define __weak_symbol __attribute__((__weak__))
|
||||
#if !__GNUC_PREREQ__(2, 5)
|
||||
#define __dead2
|
||||
#define __pure2
|
||||
#define __unused
|
||||
#endif
|
||||
#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7
|
||||
#define __dead2 __attribute__((__noreturn__))
|
||||
#define __pure2 __attribute__((__const__))
|
||||
#define __unused
|
||||
/* XXX Find out what to do for __packed, __aligned and __section */
|
||||
#endif
|
||||
#if __GNUC_PREREQ__(2, 7)
|
||||
#define __dead2 __attribute__((__noreturn__))
|
||||
#define __pure2 __attribute__((__const__))
|
||||
#define __unused __attribute__((__unused__))
|
||||
#define __used __attribute__((__used__))
|
||||
#define __packed __attribute__((__packed__))
|
||||
#define __aligned(x) __attribute__((__aligned__(x)))
|
||||
#define __section(x) __attribute__((__section__(x)))
|
||||
#endif
|
||||
#if __GNUC_PREREQ__(4, 3) || __has_attribute(__alloc_size__)
|
||||
#define __alloc_size(x) __attribute__((__alloc_size__(x)))
|
||||
#define __alloc_size2(n, x) __attribute__((__alloc_size__(n, x)))
|
||||
#else
|
||||
#define __alloc_size(x)
|
||||
#define __alloc_size2(n, x)
|
||||
#endif
|
||||
#if __GNUC_PREREQ__(4, 9) || __has_attribute(__alloc_align__)
|
||||
#define __alloc_align(x) __attribute__((__alloc_align__(x)))
|
||||
#else
|
||||
#define __alloc_align(x)
|
||||
#endif
|
||||
|
||||
#if !__GNUC_PREREQ__(2, 95)
|
||||
#define __alignof(x) __offsetof(struct { char __a; x __b; }, __b)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Keywords added in C11.
|
||||
*/
|
||||
|
||||
#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L
|
||||
|
||||
#if !__has_extension(c_alignas)
|
||||
#if (defined(__cplusplus) && __cplusplus >= 201103L) || \
|
||||
__has_extension(cxx_alignas)
|
||||
#define _Alignas(x) alignas(x)
|
||||
#else
|
||||
/* XXX: Only emulates _Alignas(constant-expression); not _Alignas(type-name). */
|
||||
#define _Alignas(x) __aligned(x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus) && __cplusplus >= 201103L
|
||||
#define _Alignof(x) alignof(x)
|
||||
#else
|
||||
#define _Alignof(x) __alignof(x)
|
||||
#endif
|
||||
|
||||
#if !defined(__cplusplus) && !__has_extension(c_atomic) && \
|
||||
!__has_extension(cxx_atomic) && !__GNUC_PREREQ__(4, 7)
|
||||
/*
|
||||
* No native support for _Atomic(). Place object in structure to prevent
|
||||
* most forms of direct non-atomic access.
|
||||
*/
|
||||
#define _Atomic(T) struct { T volatile __val; }
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus) && __cplusplus >= 201103L
|
||||
#define _Noreturn [[noreturn]]
|
||||
#else
|
||||
#define _Noreturn __dead2
|
||||
#endif
|
||||
|
||||
#if !__has_extension(c_static_assert)
|
||||
#if (defined(__cplusplus) && __cplusplus >= 201103L) || \
|
||||
__has_extension(cxx_static_assert)
|
||||
#define _Static_assert(x, y) static_assert(x, y)
|
||||
#elif __GNUC_PREREQ__(4,6) && !defined(__cplusplus)
|
||||
/* Nothing, gcc 4.6 and higher has _Static_assert built-in */
|
||||
#elif defined(__COUNTER__)
|
||||
#define _Static_assert(x, y) __Static_assert(x, __COUNTER__)
|
||||
#define __Static_assert(x, y) ___Static_assert(x, y)
|
||||
#define ___Static_assert(x, y) typedef char __assert_ ## y[(x) ? 1 : -1] \
|
||||
__unused
|
||||
#else
|
||||
#define _Static_assert(x, y) struct __hack
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !__has_extension(c_thread_local)
|
||||
/*
|
||||
* XXX: Some compilers (Clang 3.3, GCC 4.7) falsely announce C++11 mode
|
||||
* without actually supporting the thread_local keyword. Don't check for
|
||||
* the presence of C++11 when defining _Thread_local.
|
||||
*/
|
||||
#if /* (defined(__cplusplus) && __cplusplus >= 201103L) || */ \
|
||||
__has_extension(cxx_thread_local)
|
||||
#define _Thread_local thread_local
|
||||
#else
|
||||
#define _Thread_local __thread
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* __STDC_VERSION__ || __STDC_VERSION__ < 201112L */
|
||||
|
||||
/*
|
||||
* Emulation of C11 _Generic(). Unlike the previously defined C11
|
||||
* keywords, it is not possible to implement this using exactly the same
|
||||
* syntax. Therefore implement something similar under the name
|
||||
* __generic(). Unlike _Generic(), this macro can only distinguish
|
||||
* between a single type, so it requires nested invocations to
|
||||
* distinguish multiple cases.
|
||||
*/
|
||||
|
||||
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \
|
||||
__has_extension(c_generic_selections)
|
||||
#define __generic(expr, t, yes, no) \
|
||||
_Generic(expr, t: yes, default: no)
|
||||
#elif __GNUC_PREREQ__(3, 1) && !defined(__cplusplus)
|
||||
#define __generic(expr, t, yes, no) \
|
||||
__builtin_choose_expr( \
|
||||
__builtin_types_compatible_p(__typeof(expr), t), yes, no)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* C99 Static array indices in function parameter declarations. Syntax such as:
|
||||
* void bar(int myArray[static 10]);
|
||||
* is allowed in C99 but not in C++. Define __min_size appropriately so
|
||||
* headers using it can be compiled in either language. Use like this:
|
||||
* void bar(int myArray[__min_size(10)]);
|
||||
*/
|
||||
#if !defined(__cplusplus) && \
|
||||
(defined(__clang__) || __GNUC_PREREQ__(4, 6)) && \
|
||||
(!defined(__STDC_VERSION__) || (__STDC_VERSION__ >= 199901))
|
||||
#define __min_size(x) static (x)
|
||||
#else
|
||||
#define __min_size(x) (x)
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(2, 96)
|
||||
#define __malloc_like __attribute__((__malloc__))
|
||||
#define __pure __attribute__((__pure__))
|
||||
#else
|
||||
#define __malloc_like
|
||||
#define __pure
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(3, 1)
|
||||
#define __always_inline __inline__ __attribute__((__always_inline__))
|
||||
#else
|
||||
#define __always_inline
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(3, 1)
|
||||
#define __noinline __attribute__ ((__noinline__))
|
||||
#else
|
||||
#define __noinline
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(3, 3)
|
||||
#define __nonnull(x) __attribute__((__nonnull__ x))
|
||||
#define __nonnull_all __attribute__((__nonnull__))
|
||||
#else
|
||||
#define __nonnull(x)
|
||||
#define __nonnull_all
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(3, 4)
|
||||
#define __fastcall __attribute__((__fastcall__))
|
||||
#define __result_use_check __attribute__((__warn_unused_result__))
|
||||
#else
|
||||
#define __fastcall
|
||||
#define __result_use_check
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(4, 1)
|
||||
#define __returns_twice __attribute__((__returns_twice__))
|
||||
#else
|
||||
#define __returns_twice
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(4, 6) || __has_builtin(__builtin_unreachable)
|
||||
#define __unreachable() __builtin_unreachable()
|
||||
#else
|
||||
#define __unreachable() ((void)0)
|
||||
#endif
|
||||
|
||||
/* XXX: should use `#if __STDC_VERSION__ < 199901'. */
|
||||
#if !__GNUC_PREREQ__(2, 7)
|
||||
#define __func__ NULL
|
||||
#endif
|
||||
|
||||
/*
|
||||
* GCC 2.95 provides `__restrict' as an extension to C90 to support the
|
||||
* C99-specific `restrict' type qualifier. We happen to use `__restrict' as
|
||||
* a way to define the `restrict' type qualifier without disturbing older
|
||||
* software that is unaware of C99 keywords.
|
||||
*/
|
||||
#if !(__GNUC__ == 2 && __GNUC_MINOR__ == 95)
|
||||
#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901
|
||||
#define __restrict
|
||||
#else
|
||||
#define __restrict restrict
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* GNU C version 2.96 adds explicit branch prediction so that
|
||||
* the CPU back-end can hint the processor and also so that
|
||||
* code blocks can be reordered such that the predicted path
|
||||
* sees a more linear flow, thus improving cache behavior, etc.
|
||||
*
|
||||
* The following two macros provide us with a way to utilize this
|
||||
* compiler feature. Use __predict_true() if you expect the expression
|
||||
* to evaluate to true, and __predict_false() if you expect the
|
||||
* expression to evaluate to false.
|
||||
*
|
||||
* A few notes about usage:
|
||||
*
|
||||
* * Generally, __predict_false() error condition checks (unless
|
||||
* you have some _strong_ reason to do otherwise, in which case
|
||||
* document it), and/or __predict_true() `no-error' condition
|
||||
* checks, assuming you want to optimize for the no-error case.
|
||||
*
|
||||
* * Other than that, if you don't know the likelihood of a test
|
||||
* succeeding from empirical or other `hard' evidence, don't
|
||||
* make predictions.
|
||||
*
|
||||
* * These are meant to be used in places that are run `a lot'.
|
||||
* It is wasteful to make predictions in code that is run
|
||||
* seldomly (e.g. at subsystem initialization time) as the
|
||||
* basic block reordering that this affects can often generate
|
||||
* larger code.
|
||||
*/
|
||||
#if __GNUC_PREREQ__(2, 96)
|
||||
#define __predict_true(exp) __builtin_expect((exp), 1)
|
||||
#define __predict_false(exp) __builtin_expect((exp), 0)
|
||||
#else
|
||||
#define __predict_true(exp) (exp)
|
||||
#define __predict_false(exp) (exp)
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(4, 0)
|
||||
#define __null_sentinel __attribute__((__sentinel__))
|
||||
#define __exported __attribute__((__visibility__("default")))
|
||||
/* Only default visibility is supported on PE/COFF targets. */
|
||||
#ifndef __CYGWIN__
|
||||
#define __hidden __attribute__((__visibility__("hidden")))
|
||||
#else
|
||||
#define __hidden
|
||||
#endif
|
||||
#else
|
||||
#define __null_sentinel
|
||||
#define __exported
|
||||
#define __hidden
|
||||
#endif
|
||||
|
||||
#define __offsetof(type, field) offsetof(type, field)
|
||||
#define __rangeof(type, start, end) \
|
||||
(__offsetof(type, end) - __offsetof(type, start))
|
||||
|
||||
/*
|
||||
* Given the pointer x to the member m of the struct s, return
|
||||
* a pointer to the containing structure. When using GCC, we first
|
||||
* assign pointer x to a local variable, to check that its type is
|
||||
* compatible with member m.
|
||||
*/
|
||||
#if __GNUC_PREREQ__(3, 1)
|
||||
#define __containerof(x, s, m) ({ \
|
||||
const volatile __typeof(((s *)0)->m) *__x = (x); \
|
||||
__DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));\
|
||||
})
|
||||
#else
|
||||
#define __containerof(x, s, m) \
|
||||
__DEQUALIFY(s *, (const volatile char *)(x) - __offsetof(s, m))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Compiler-dependent macros to declare that functions take printf-like
|
||||
* or scanf-like arguments. They are null except for versions of gcc
|
||||
* that are known to support the features properly (old versions of gcc-2
|
||||
* didn't permit keeping the keywords out of the application namespace).
|
||||
*/
|
||||
#if !__GNUC_PREREQ__(2, 7)
|
||||
#define __printflike(fmtarg, firstvararg)
|
||||
#define __scanflike(fmtarg, firstvararg)
|
||||
#define __format_arg(fmtarg)
|
||||
#define __strfmonlike(fmtarg, firstvararg)
|
||||
#define __strftimelike(fmtarg, firstvararg)
|
||||
#else
|
||||
#define __printflike(fmtarg, firstvararg) \
|
||||
__attribute__((__format__ (__printf__, fmtarg, firstvararg)))
|
||||
#define __scanflike(fmtarg, firstvararg) \
|
||||
__attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
|
||||
#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))
|
||||
#define __strfmonlike(fmtarg, firstvararg) \
|
||||
__attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
|
||||
#define __strftimelike(fmtarg, firstvararg) \
|
||||
__attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
|
||||
#endif
|
||||
|
||||
/* Compiler-dependent macros that rely on FreeBSD-specific extensions. */
|
||||
#if defined(__FreeBSD_cc_version) && __FreeBSD_cc_version >= 300001 && \
|
||||
defined(__GNUC__)
|
||||
#define __printf0like(fmtarg, firstvararg) \
|
||||
__attribute__((__format__ (__printf0__, fmtarg, firstvararg)))
|
||||
#else
|
||||
#define __printf0like(fmtarg, firstvararg)
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__)
|
||||
#define __strong_reference(sym,aliassym) \
|
||||
extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
|
||||
#ifdef __ELF__
|
||||
#ifdef __STDC__
|
||||
#define __weak_reference(sym,alias) \
|
||||
__asm__(".weak " #alias); \
|
||||
__asm__(".equ " #alias ", " #sym)
|
||||
#define __warn_references(sym,msg) \
|
||||
__asm__(".section .gnu.warning." #sym); \
|
||||
__asm__(".asciz \"" msg "\""); \
|
||||
__asm__(".previous")
|
||||
#define __sym_compat(sym,impl,verid) \
|
||||
__asm__(".symver " #impl ", " #sym "@" #verid)
|
||||
#define __sym_default(sym,impl,verid) \
|
||||
__asm__(".symver " #impl ", " #sym "@@" #verid)
|
||||
#else
|
||||
#define __weak_reference(sym,alias) \
|
||||
__asm__(".weak alias"); \
|
||||
__asm__(".equ alias, sym")
|
||||
#define __warn_references(sym,msg) \
|
||||
__asm__(".section .gnu.warning.sym"); \
|
||||
__asm__(".asciz \"msg\""); \
|
||||
__asm__(".previous")
|
||||
#define __sym_compat(sym,impl,verid) \
|
||||
__asm__(".symver impl, sym@verid")
|
||||
#define __sym_default(impl,sym,verid) \
|
||||
__asm__(".symver impl, sym@@verid")
|
||||
#endif /* __STDC__ */
|
||||
#else /* !__ELF__ */
|
||||
#ifdef __STDC__
|
||||
#define __weak_reference(sym,alias) \
|
||||
__asm__(".stabs \"_" #alias "\",11,0,0,0"); \
|
||||
__asm__(".stabs \"_" #sym "\",1,0,0,0")
|
||||
#define __warn_references(sym,msg) \
|
||||
__asm__(".stabs \"" msg "\",30,0,0,0"); \
|
||||
__asm__(".stabs \"_" #sym "\",1,0,0,0")
|
||||
#else
|
||||
#define __weak_reference(sym,alias) \
|
||||
__asm__(".stabs \"_/**/alias\",11,0,0,0"); \
|
||||
__asm__(".stabs \"_/**/sym\",1,0,0,0")
|
||||
#define __warn_references(sym,msg) \
|
||||
__asm__(".stabs msg,30,0,0,0"); \
|
||||
__asm__(".stabs \"_/**/sym\",1,0,0,0")
|
||||
#endif /* __STDC__ */
|
||||
#endif /* __ELF__ */
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#ifndef __FBSDID
|
||||
#define __FBSDID(s) struct __hack
|
||||
#endif
|
||||
|
||||
#ifndef __RCSID
|
||||
#define __RCSID(s) struct __hack
|
||||
#endif
|
||||
|
||||
#ifndef __RCSID_SOURCE
|
||||
#define __RCSID_SOURCE(s) struct __hack
|
||||
#endif
|
||||
|
||||
#ifndef __SCCSID
|
||||
#define __SCCSID(s) struct __hack
|
||||
#endif
|
||||
|
||||
#ifndef __COPYRIGHT
|
||||
#define __COPYRIGHT(s) struct __hack
|
||||
#endif
|
||||
|
||||
#ifndef __DECONST
|
||||
#define __DECONST(type, var) ((type)(__uintptr_t)(const void *)(var))
|
||||
#endif
|
||||
|
||||
#ifndef __DEVOLATILE
|
||||
#define __DEVOLATILE(type, var) ((type)(__uintptr_t)(volatile void *)(var))
|
||||
#endif
|
||||
|
||||
#ifndef __DEQUALIFY
|
||||
#define __DEQUALIFY(type, var) ((type)(__uintptr_t)(const volatile void *)(var))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Nullability qualifiers: currently only supported by Clang.
|
||||
*/
|
||||
#if !(defined(__clang__) && __has_feature(nullability))
|
||||
#define _Nonnull
|
||||
#define _Nullable
|
||||
#define _Null_unspecified
|
||||
#define __NULLABILITY_PRAGMA_PUSH
|
||||
#define __NULLABILITY_PRAGMA_POP
|
||||
#else
|
||||
#define __NULLABILITY_PRAGMA_PUSH _Pragma("clang diagnostic push") \
|
||||
_Pragma("clang diagnostic ignored \"-Wnullability-completeness\"")
|
||||
#define __NULLABILITY_PRAGMA_POP _Pragma("clang diagnostic pop")
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Type Safety Checking
|
||||
*
|
||||
* Clang provides additional attributes to enable checking type safety
|
||||
* properties that cannot be enforced by the C type system.
|
||||
*/
|
||||
|
||||
#if __has_attribute(__argument_with_type_tag__) && \
|
||||
__has_attribute(__type_tag_for_datatype__)
|
||||
#define __arg_type_tag(arg_kind, arg_idx, type_tag_idx) \
|
||||
__attribute__((__argument_with_type_tag__(arg_kind, arg_idx, type_tag_idx)))
|
||||
#define __datatype_type_tag(kind, type) \
|
||||
__attribute__((__type_tag_for_datatype__(kind, type)))
|
||||
#else
|
||||
#define __arg_type_tag(arg_kind, arg_idx, type_tag_idx)
|
||||
#define __datatype_type_tag(kind, type)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Lock annotations.
|
||||
*
|
||||
* Clang provides support for doing basic thread-safety tests at
|
||||
* compile-time, by marking which locks will/should be held when
|
||||
* entering/leaving a functions.
|
||||
*
|
||||
* Furthermore, it is also possible to annotate variables and structure
|
||||
* members to enforce that they are only accessed when certain locks are
|
||||
* held.
|
||||
*/
|
||||
|
||||
#if __has_extension(c_thread_safety_attributes)
|
||||
#define __lock_annotate(x) __attribute__((x))
|
||||
#else
|
||||
#define __lock_annotate(x)
|
||||
#endif
|
||||
|
||||
/* Structure implements a lock. */
|
||||
/* FIXME: Use __lockable__, etc. to avoid colliding with user namespace macros,
|
||||
* once clang is fixed: https://bugs.llvm.org/show_bug.cgi?id=34319 */
|
||||
#define __lockable __lock_annotate(lockable)
|
||||
|
||||
/* Function acquires an exclusive or shared lock. */
|
||||
#define __locks_exclusive(...) \
|
||||
__lock_annotate(exclusive_lock_function(__VA_ARGS__))
|
||||
#define __locks_shared(...) \
|
||||
__lock_annotate(shared_lock_function(__VA_ARGS__))
|
||||
|
||||
/* Function attempts to acquire an exclusive or shared lock. */
|
||||
#define __trylocks_exclusive(...) \
|
||||
__lock_annotate(exclusive_trylock_function(__VA_ARGS__))
|
||||
#define __trylocks_shared(...) \
|
||||
__lock_annotate(shared_trylock_function(__VA_ARGS__))
|
||||
|
||||
/* Function releases a lock. */
|
||||
#define __unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__))
|
||||
|
||||
/* Function asserts that an exclusive or shared lock is held. */
|
||||
#define __asserts_exclusive(...) \
|
||||
__lock_annotate(assert_exclusive_lock(__VA_ARGS__))
|
||||
#define __asserts_shared(...) \
|
||||
__lock_annotate(assert_shared_lock(__VA_ARGS__))
|
||||
|
||||
/* Function requires that an exclusive or shared lock is or is not held. */
|
||||
#define __requires_exclusive(...) \
|
||||
__lock_annotate(exclusive_locks_required(__VA_ARGS__))
|
||||
#define __requires_shared(...) \
|
||||
__lock_annotate(shared_locks_required(__VA_ARGS__))
|
||||
#define __requires_unlocked(...) \
|
||||
__lock_annotate(locks_excluded(__VA_ARGS__))
|
||||
|
||||
/* Function should not be analyzed. */
|
||||
#define __no_lock_analysis __lock_annotate(no_thread_safety_analysis)
|
||||
|
||||
/*
|
||||
* Function or variable should not be sanitized, e.g., by AddressSanitizer.
|
||||
* GCC has the nosanitize attribute, but as a function attribute only, and
|
||||
* warns on use as a variable attribute.
|
||||
*/
|
||||
#if __has_attribute(no_sanitize) && defined(__clang__)
|
||||
#ifdef _KERNEL
|
||||
#define __nosanitizeaddress __attribute__((no_sanitize("kernel-address")))
|
||||
#define __nosanitizememory __attribute__((no_sanitize("kernel-memory")))
|
||||
#else
|
||||
#define __nosanitizeaddress __attribute__((no_sanitize("address")))
|
||||
#define __nosanitizememory __attribute__((no_sanitize("memory")))
|
||||
#endif
|
||||
#define __nosanitizethread __attribute__((no_sanitize("thread")))
|
||||
#else
|
||||
#define __nosanitizeaddress
|
||||
#define __nosanitizememory
|
||||
#define __nosanitizethread
|
||||
#endif
|
||||
|
||||
/* Guard variables and structure members by lock. */
|
||||
#define __guarded_by(x) __lock_annotate(guarded_by(x))
|
||||
#define __pt_guarded_by(x) __lock_annotate(pt_guarded_by(x))
|
||||
|
||||
/* Alignment builtins for better type checking and improved code generation. */
|
||||
/* Provide fallback versions for other compilers (GCC/Clang < 10): */
|
||||
#if !__has_builtin(__builtin_is_aligned)
|
||||
#define __builtin_is_aligned(x, align) \
|
||||
(((__uintptr_t)x & ((align) - 1)) == 0)
|
||||
#endif
|
||||
#if !__has_builtin(__builtin_align_up)
|
||||
#define __builtin_align_up(x, align) \
|
||||
((__typeof__(x))(((__uintptr_t)(x)+((align)-1))&(~((align)-1))))
|
||||
#endif
|
||||
#if !__has_builtin(__builtin_align_down)
|
||||
#define __builtin_align_down(x, align) \
|
||||
((__typeof__(x))((x)&(~((align)-1))))
|
||||
#endif
|
||||
|
||||
#define __align_up(x, y) __builtin_align_up(x, y)
|
||||
#define __align_down(x, y) __builtin_align_down(x, y)
|
||||
#define __is_aligned(x, y) __builtin_is_aligned(x, y)
|
||||
|
||||
#endif /* !_SYS_CDEFS_H_ */
|
||||
314
prebuilts/gcc/arm-none-eabi/include/sys/config.h
Normal file
314
prebuilts/gcc/arm-none-eabi/include/sys/config.h
Normal file
@@ -0,0 +1,314 @@
|
||||
#ifndef __SYS_CONFIG_H__
|
||||
#define __SYS_CONFIG_H__
|
||||
|
||||
#include <machine/ieeefp.h> /* floating point macros */
|
||||
#include <sys/features.h> /* POSIX defs */
|
||||
|
||||
#ifdef __aarch64__
|
||||
#define MALLOC_ALIGNMENT 16
|
||||
#endif
|
||||
|
||||
#ifdef __AMDGCN__
|
||||
#define __DYNAMIC_REENT__
|
||||
#endif
|
||||
|
||||
/* exceptions first */
|
||||
#if defined(__H8500__) || defined(__W65__)
|
||||
#define __SMALL_BITFIELDS
|
||||
/* ??? This conditional is true for the h8500 and the w65, defining H8300
|
||||
in those cases probably isn't the right thing to do. */
|
||||
#define H8300 1
|
||||
#endif
|
||||
|
||||
/* 16 bit integer machines */
|
||||
#if defined(__Z8001__) || defined(__Z8002__) || defined(__H8500__) || defined(__W65__) || defined (__mn10200__) || defined (__AVR__) || defined (__MSP430__)
|
||||
|
||||
#undef INT_MAX
|
||||
#undef UINT_MAX
|
||||
#define INT_MAX 32767
|
||||
#define UINT_MAX 65535
|
||||
#endif
|
||||
|
||||
#if defined (__H8300__) || defined (__H8300H__) || defined(__H8300S__) || defined (__H8300SX__)
|
||||
#define __SMALL_BITFIELDS
|
||||
#define H8300 1
|
||||
#undef INT_MAX
|
||||
#undef UINT_MAX
|
||||
#define INT_MAX __INT_MAX__
|
||||
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||
#endif
|
||||
|
||||
#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__))
|
||||
#ifndef __INT32__
|
||||
#define __SMALL_BITFIELDS
|
||||
#undef INT_MAX
|
||||
#undef UINT_MAX
|
||||
#define INT_MAX 32767
|
||||
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||
#else /* INT32 */
|
||||
#undef INT_MAX
|
||||
#undef UINT_MAX
|
||||
#define INT_MAX 2147483647
|
||||
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||
#endif /* INT32 */
|
||||
|
||||
#endif /* CR16C */
|
||||
|
||||
#if defined (__xc16x__) || defined (__xc16xL__) || defined (__xc16xS__)
|
||||
#define __SMALL_BITFIELDS
|
||||
#endif
|
||||
|
||||
#ifdef __W65__
|
||||
#define __SMALL_BITFIELDS
|
||||
#endif
|
||||
|
||||
#if defined(__D10V__)
|
||||
#define __SMALL_BITFIELDS
|
||||
#undef INT_MAX
|
||||
#undef UINT_MAX
|
||||
#define INT_MAX __INT_MAX__
|
||||
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||
#define _POINTER_INT short
|
||||
#endif
|
||||
|
||||
#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
|
||||
#undef INT_MAX
|
||||
#undef UINT_MAX
|
||||
#define INT_MAX __INT_MAX__
|
||||
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||
#define _POINTER_INT short
|
||||
#endif
|
||||
|
||||
#if defined(__m68k__) || defined(__mc68000__) || defined(__riscv)
|
||||
#define _READ_WRITE_RETURN_TYPE _ssize_t
|
||||
#endif
|
||||
|
||||
#ifdef ___AM29K__
|
||||
#define _FLOAT_RET double
|
||||
#endif
|
||||
|
||||
#ifdef __i386__
|
||||
#ifndef __unix__
|
||||
/* in other words, go32 */
|
||||
#define _FLOAT_RET double
|
||||
#endif
|
||||
#if defined(__linux__) || defined(__RDOS__)
|
||||
/* we want the reentrancy structure to be returned by a function */
|
||||
#define __DYNAMIC_REENT__
|
||||
#define HAVE_GETDATE
|
||||
#define _READ_WRITE_RETURN_TYPE _ssize_t
|
||||
#define __LARGE64_FILES 1
|
||||
/* we use some glibc header files so turn on glibc large file feature */
|
||||
#define _LARGEFILE64_SOURCE 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __mn10200__
|
||||
#define __SMALL_BITFIELDS
|
||||
#endif
|
||||
|
||||
#ifdef __AVR__
|
||||
#define __SMALL_BITFIELDS
|
||||
#define _POINTER_INT short
|
||||
#endif
|
||||
|
||||
#if defined(__v850) && !defined(__rtems__)
|
||||
#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__sda__))
|
||||
#endif
|
||||
|
||||
/* For the PowerPC eabi, force the _impure_ptr to be in .sdata */
|
||||
#if defined(__PPC__)
|
||||
#if defined(_CALL_SYSV)
|
||||
#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
|
||||
#endif
|
||||
#ifdef __SPE__
|
||||
#define _LONG_DOUBLE double
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Configure small REENT structure for Xilinx MicroBlaze platforms */
|
||||
#if defined (__MICROBLAZE__) && !defined(__rtems__)
|
||||
#ifndef _REENT_SMALL
|
||||
#define _REENT_SMALL
|
||||
#endif
|
||||
/* Xilinx XMK uses Unix98 mutex */
|
||||
#ifdef __XMK__
|
||||
#define _UNIX98_THREAD_MUTEX_ATTRIBUTES
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__mips__) && !defined(__rtems__)
|
||||
#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
|
||||
#endif
|
||||
|
||||
#ifdef __xstormy16__
|
||||
#define __SMALL_BITFIELDS
|
||||
#undef INT_MAX
|
||||
#undef UINT_MAX
|
||||
#define INT_MAX __INT_MAX__
|
||||
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||
#define MALLOC_ALIGNMENT 8
|
||||
#define _POINTER_INT short
|
||||
#define __BUFSIZ__ 16
|
||||
#define _REENT_SMALL
|
||||
#endif
|
||||
|
||||
#if defined __MSP430__
|
||||
#ifndef _REENT_SMALL
|
||||
#define _REENT_SMALL
|
||||
#endif
|
||||
|
||||
#define __BUFSIZ__ 256
|
||||
#define __SMALL_BITFIELDS
|
||||
|
||||
#ifdef __MSP430X_LARGE__
|
||||
#define _POINTER_INT __int20
|
||||
#else
|
||||
#define _POINTER_INT int
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __m32c__
|
||||
#define __SMALL_BITFIELDS
|
||||
#undef INT_MAX
|
||||
#undef UINT_MAX
|
||||
#define INT_MAX __INT_MAX__
|
||||
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||
#define MALLOC_ALIGNMENT 8
|
||||
#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
|
||||
#define _POINTER_INT short
|
||||
#else
|
||||
#define _POINTER_INT long
|
||||
#endif
|
||||
#define __BUFSIZ__ 16
|
||||
#define _REENT_SMALL
|
||||
#endif /* __m32c__ */
|
||||
|
||||
#ifdef __SPU__
|
||||
#define MALLOC_ALIGNMENT 16
|
||||
#define __CUSTOM_FILE_IO__
|
||||
#endif
|
||||
|
||||
#if defined(__or1k__) || defined(__or1knd__)
|
||||
#define __DYNAMIC_REENT__
|
||||
#endif
|
||||
|
||||
/* This block should be kept in sync with GCC's limits.h. The point
|
||||
of having these definitions here is to not include limits.h, which
|
||||
would pollute the user namespace, while still using types of the
|
||||
the correct widths when deciding how to define __int32_t and
|
||||
__int64_t. */
|
||||
#ifndef __INT_MAX__
|
||||
# ifdef INT_MAX
|
||||
# define __INT_MAX__ INT_MAX
|
||||
# else
|
||||
# define __INT_MAX__ 2147483647
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef __LONG_MAX__
|
||||
# ifdef LONG_MAX
|
||||
# define __LONG_MAX__ LONG_MAX
|
||||
# else
|
||||
# if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) \
|
||||
|| defined (__sparcv9)
|
||||
# define __LONG_MAX__ 9223372036854775807L
|
||||
# else
|
||||
# define __LONG_MAX__ 2147483647L
|
||||
# endif /* __alpha__ || sparc64 */
|
||||
# endif
|
||||
#endif
|
||||
/* End of block that should be kept in sync with GCC's limits.h. */
|
||||
|
||||
#ifndef _POINTER_INT
|
||||
#define _POINTER_INT long
|
||||
#endif
|
||||
|
||||
#ifdef __frv__
|
||||
#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
|
||||
#endif
|
||||
#undef __RAND_MAX
|
||||
#if __INT_MAX__ == 32767
|
||||
#define __RAND_MAX 32767
|
||||
#else
|
||||
#define __RAND_MAX 0x7fffffff
|
||||
#endif
|
||||
|
||||
#if defined(__CYGWIN__)
|
||||
#include <cygwin/config.h>
|
||||
#endif
|
||||
|
||||
#if defined(__rtems__)
|
||||
#define __FILENAME_MAX__ 255
|
||||
#define _READ_WRITE_RETURN_TYPE _ssize_t
|
||||
#define __DYNAMIC_REENT__
|
||||
#endif
|
||||
|
||||
#ifndef __EXPORT
|
||||
#define __EXPORT
|
||||
#endif
|
||||
|
||||
#ifndef __IMPORT
|
||||
#define __IMPORT
|
||||
#endif
|
||||
|
||||
/* Define return type of read/write routines. In POSIX, the return type
|
||||
for read()/write() is "ssize_t" but legacy newlib code has been using
|
||||
"int" for some time. If not specified, "int" is defaulted. */
|
||||
#ifndef _READ_WRITE_RETURN_TYPE
|
||||
#define _READ_WRITE_RETURN_TYPE int
|
||||
#endif
|
||||
/* Define `count' parameter of read/write routines. In POSIX, the `count'
|
||||
parameter is "size_t" but legacy newlib code has been using "int" for some
|
||||
time. If not specified, "int" is defaulted. */
|
||||
#ifndef _READ_WRITE_BUFSIZE_TYPE
|
||||
#define _READ_WRITE_BUFSIZE_TYPE int
|
||||
#endif
|
||||
|
||||
#ifndef __WCHAR_MAX__
|
||||
#if __INT_MAX__ == 32767 || defined (_WIN32)
|
||||
#define __WCHAR_MAX__ 0xffffu
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* See if small reent asked for at configuration time and
|
||||
is not chosen by the platform by default. */
|
||||
#ifdef _WANT_REENT_SMALL
|
||||
#ifndef _REENT_SMALL
|
||||
#define _REENT_SMALL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _WANT_USE_LONG_TIME_T
|
||||
#ifndef _USE_LONG_TIME_T
|
||||
#define _USE_LONG_TIME_T
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _WANT_USE_GDTOA
|
||||
#ifndef _USE_GDTOA
|
||||
#define _USE_GDTOA
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _WANT_REENT_BACKWARD_BINARY_COMPAT
|
||||
#ifndef _REENT_BACKWARD_BINARY_COMPAT
|
||||
#define _REENT_BACKWARD_BINARY_COMPAT
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _WANT_REENT_THREAD_LOCAL
|
||||
#ifndef _REENT_THREAD_LOCAL
|
||||
#define _REENT_THREAD_LOCAL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* If _MB_EXTENDED_CHARSETS_ALL is set, we want all of the extended
|
||||
charsets. The extended charsets add a few functions and a couple
|
||||
of tables of a few K each. */
|
||||
#ifdef _MB_EXTENDED_CHARSETS_ALL
|
||||
#define _MB_EXTENDED_CHARSETS_ISO 1
|
||||
#define _MB_EXTENDED_CHARSETS_WINDOWS 1
|
||||
#endif
|
||||
|
||||
#endif /* __SYS_CONFIG_H__ */
|
||||
2
prebuilts/gcc/arm-none-eabi/include/sys/custom_file.h
Normal file
2
prebuilts/gcc/arm-none-eabi/include/sys/custom_file.h
Normal file
@@ -0,0 +1,2 @@
|
||||
#error System-specific custom_file.h is missing.
|
||||
|
||||
10
prebuilts/gcc/arm-none-eabi/include/sys/dir.h
Normal file
10
prebuilts/gcc/arm-none-eabi/include/sys/dir.h
Normal file
@@ -0,0 +1,10 @@
|
||||
/* BSD predecessor of POSIX.1 <dirent.h> and struct dirent */
|
||||
|
||||
#ifndef _SYS_DIR_H_
|
||||
#define _SYS_DIR_H_
|
||||
|
||||
#include <dirent.h>
|
||||
|
||||
#define direct dirent
|
||||
|
||||
#endif /*_SYS_DIR_H_*/
|
||||
13
prebuilts/gcc/arm-none-eabi/include/sys/dirent.h
Normal file
13
prebuilts/gcc/arm-none-eabi/include/sys/dirent.h
Normal file
@@ -0,0 +1,13 @@
|
||||
/* <dirent.h> includes <sys/dirent.h>, which is this file. On a
|
||||
system which supports <dirent.h>, this file is overridden by
|
||||
dirent.h in the libc/sys/.../sys directory. On a system which does
|
||||
not support <dirent.h>, we will get this file which uses #error to force
|
||||
an error. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#error "<dirent.h> not supported"
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
198
prebuilts/gcc/arm-none-eabi/include/sys/errno.h
Normal file
198
prebuilts/gcc/arm-none-eabi/include/sys/errno.h
Normal file
@@ -0,0 +1,198 @@
|
||||
/* errno is not a global variable, because that would make using it
|
||||
non-reentrant. Instead, its address is returned by the function
|
||||
__errno. */
|
||||
|
||||
#ifndef _SYS_ERRNO_H_
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define _SYS_ERRNO_H_
|
||||
|
||||
#include <sys/reent.h>
|
||||
|
||||
#ifdef _REENT_THREAD_LOCAL
|
||||
#define errno (_tls_errno)
|
||||
#else /* _REENT_THREAD_LOCAL */
|
||||
|
||||
#ifndef _REENT_ONLY
|
||||
#define errno (*__errno())
|
||||
extern int *__errno (void);
|
||||
#endif
|
||||
|
||||
#endif /* _REENT_THREAD_LOCAL */
|
||||
|
||||
/* Please don't use these variables directly.
|
||||
Use strerror instead. */
|
||||
extern __IMPORT const char * const _sys_errlist[];
|
||||
extern __IMPORT int _sys_nerr;
|
||||
#ifdef __CYGWIN__
|
||||
extern __IMPORT const char * const sys_errlist[];
|
||||
extern __IMPORT int sys_nerr;
|
||||
extern __IMPORT char *program_invocation_name;
|
||||
extern __IMPORT char *program_invocation_short_name;
|
||||
#endif
|
||||
|
||||
#define __errno_r(ptr) _REENT_ERRNO(ptr)
|
||||
|
||||
#define EPERM 1 /* Not owner */
|
||||
#define ENOENT 2 /* No such file or directory */
|
||||
#define ESRCH 3 /* No such process */
|
||||
#define EINTR 4 /* Interrupted system call */
|
||||
#define EIO 5 /* I/O error */
|
||||
#define ENXIO 6 /* No such device or address */
|
||||
#define E2BIG 7 /* Arg list too long */
|
||||
#define ENOEXEC 8 /* Exec format error */
|
||||
#define EBADF 9 /* Bad file number */
|
||||
#define ECHILD 10 /* No children */
|
||||
#define EAGAIN 11 /* No more processes */
|
||||
#define ENOMEM 12 /* Not enough space */
|
||||
#define EACCES 13 /* Permission denied */
|
||||
#define EFAULT 14 /* Bad address */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define ENOTBLK 15 /* Block device required */
|
||||
#endif
|
||||
#define EBUSY 16 /* Device or resource busy */
|
||||
#define EEXIST 17 /* File exists */
|
||||
#define EXDEV 18 /* Cross-device link */
|
||||
#define ENODEV 19 /* No such device */
|
||||
#define ENOTDIR 20 /* Not a directory */
|
||||
#define EISDIR 21 /* Is a directory */
|
||||
#define EINVAL 22 /* Invalid argument */
|
||||
#define ENFILE 23 /* Too many open files in system */
|
||||
#define EMFILE 24 /* File descriptor value too large */
|
||||
#define ENOTTY 25 /* Not a character device */
|
||||
#define ETXTBSY 26 /* Text file busy */
|
||||
#define EFBIG 27 /* File too large */
|
||||
#define ENOSPC 28 /* No space left on device */
|
||||
#define ESPIPE 29 /* Illegal seek */
|
||||
#define EROFS 30 /* Read-only file system */
|
||||
#define EMLINK 31 /* Too many links */
|
||||
#define EPIPE 32 /* Broken pipe */
|
||||
#define EDOM 33 /* Mathematics argument out of domain of function */
|
||||
#define ERANGE 34 /* Result too large */
|
||||
#define ENOMSG 35 /* No message of desired type */
|
||||
#define EIDRM 36 /* Identifier removed */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define ECHRNG 37 /* Channel number out of range */
|
||||
#define EL2NSYNC 38 /* Level 2 not synchronized */
|
||||
#define EL3HLT 39 /* Level 3 halted */
|
||||
#define EL3RST 40 /* Level 3 reset */
|
||||
#define ELNRNG 41 /* Link number out of range */
|
||||
#define EUNATCH 42 /* Protocol driver not attached */
|
||||
#define ENOCSI 43 /* No CSI structure available */
|
||||
#define EL2HLT 44 /* Level 2 halted */
|
||||
#endif
|
||||
#define EDEADLK 45 /* Deadlock */
|
||||
#define ENOLCK 46 /* No lock */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define EBADE 50 /* Invalid exchange */
|
||||
#define EBADR 51 /* Invalid request descriptor */
|
||||
#define EXFULL 52 /* Exchange full */
|
||||
#define ENOANO 53 /* No anode */
|
||||
#define EBADRQC 54 /* Invalid request code */
|
||||
#define EBADSLT 55 /* Invalid slot */
|
||||
#define EDEADLOCK 56 /* File locking deadlock error */
|
||||
#define EBFONT 57 /* Bad font file fmt */
|
||||
#endif
|
||||
#define ENOSTR 60 /* Not a stream */
|
||||
#define ENODATA 61 /* No data (for no delay io) */
|
||||
#define ETIME 62 /* Stream ioctl timeout */
|
||||
#define ENOSR 63 /* No stream resources */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define ENONET 64 /* Machine is not on the network */
|
||||
#define ENOPKG 65 /* Package not installed */
|
||||
#define EREMOTE 66 /* The object is remote */
|
||||
#endif
|
||||
#define ENOLINK 67 /* Virtual circuit is gone */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define EADV 68 /* Advertise error */
|
||||
#define ESRMNT 69 /* Srmount error */
|
||||
#define ECOMM 70 /* Communication error on send */
|
||||
#endif
|
||||
#define EPROTO 71 /* Protocol error */
|
||||
#define EMULTIHOP 74 /* Multihop attempted */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define ELBIN 75 /* Inode is remote (not really error) */
|
||||
#define EDOTDOT 76 /* Cross mount point (not really error) */
|
||||
#endif
|
||||
#define EBADMSG 77 /* Bad message */
|
||||
#define EFTYPE 79 /* Inappropriate file type or format */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define ENOTUNIQ 80 /* Given log. name not unique */
|
||||
#define EBADFD 81 /* f.d. invalid for this operation */
|
||||
#define EREMCHG 82 /* Remote address changed */
|
||||
#define ELIBACC 83 /* Can't access a needed shared lib */
|
||||
#define ELIBBAD 84 /* Accessing a corrupted shared lib */
|
||||
#define ELIBSCN 85 /* .lib section in a.out corrupted */
|
||||
#define ELIBMAX 86 /* Attempting to link in too many libs */
|
||||
#define ELIBEXEC 87 /* Attempting to exec a shared library */
|
||||
#endif
|
||||
#define ENOSYS 88 /* Function not implemented */
|
||||
#ifdef __CYGWIN__
|
||||
#define ENMFILE 89 /* No more files */
|
||||
#endif
|
||||
#define ENOTEMPTY 90 /* Directory not empty */
|
||||
#define ENAMETOOLONG 91 /* File or path name too long */
|
||||
#define ELOOP 92 /* Too many symbolic links */
|
||||
#define EOPNOTSUPP 95 /* Operation not supported on socket */
|
||||
#define EPFNOSUPPORT 96 /* Protocol family not supported */
|
||||
#define ECONNRESET 104 /* Connection reset by peer */
|
||||
#define ENOBUFS 105 /* No buffer space available */
|
||||
#define EAFNOSUPPORT 106 /* Address family not supported by protocol family */
|
||||
#define EPROTOTYPE 107 /* Protocol wrong type for socket */
|
||||
#define ENOTSOCK 108 /* Socket operation on non-socket */
|
||||
#define ENOPROTOOPT 109 /* Protocol not available */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define ESHUTDOWN 110 /* Can't send after socket shutdown */
|
||||
#endif
|
||||
#define ECONNREFUSED 111 /* Connection refused */
|
||||
#define EADDRINUSE 112 /* Address already in use */
|
||||
#define ECONNABORTED 113 /* Software caused connection abort */
|
||||
#define ENETUNREACH 114 /* Network is unreachable */
|
||||
#define ENETDOWN 115 /* Network interface is not configured */
|
||||
#define ETIMEDOUT 116 /* Connection timed out */
|
||||
#define EHOSTDOWN 117 /* Host is down */
|
||||
#define EHOSTUNREACH 118 /* Host is unreachable */
|
||||
#define EINPROGRESS 119 /* Connection already in progress */
|
||||
#define EALREADY 120 /* Socket already connected */
|
||||
#define EDESTADDRREQ 121 /* Destination address required */
|
||||
#define EMSGSIZE 122 /* Message too long */
|
||||
#define EPROTONOSUPPORT 123 /* Unknown protocol */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define ESOCKTNOSUPPORT 124 /* Socket type not supported */
|
||||
#endif
|
||||
#define EADDRNOTAVAIL 125 /* Address not available */
|
||||
#define ENETRESET 126 /* Connection aborted by network */
|
||||
#define EISCONN 127 /* Socket is already connected */
|
||||
#define ENOTCONN 128 /* Socket is not connected */
|
||||
#define ETOOMANYREFS 129
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define EPROCLIM 130
|
||||
#define EUSERS 131
|
||||
#endif
|
||||
#define EDQUOT 132
|
||||
#define ESTALE 133
|
||||
#define ENOTSUP 134 /* Not supported */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define ENOMEDIUM 135 /* No medium (in tape drive) */
|
||||
#endif
|
||||
#ifdef __CYGWIN__
|
||||
#define ENOSHARE 136 /* No such host or network path */
|
||||
#define ECASECLASH 137 /* Filename exists with different case */
|
||||
#endif
|
||||
#define EILSEQ 138 /* Illegal byte sequence */
|
||||
#define EOVERFLOW 139 /* Value too large for defined data type */
|
||||
#define ECANCELED 140 /* Operation canceled */
|
||||
#define ENOTRECOVERABLE 141 /* State not recoverable */
|
||||
#define EOWNERDEAD 142 /* Previous owner died */
|
||||
#ifdef __LINUX_ERRNO_EXTENSIONS__
|
||||
#define ESTRPIPE 143 /* Streams pipe error */
|
||||
#endif
|
||||
#define EWOULDBLOCK EAGAIN /* Operation would block */
|
||||
|
||||
#define __ELASTERROR 2000 /* Users can add values starting here */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* _SYS_ERRNO_H */
|
||||
12
prebuilts/gcc/arm-none-eabi/include/sys/fcntl.h
Normal file
12
prebuilts/gcc/arm-none-eabi/include/sys/fcntl.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef _SYS_FCNTL_H_
|
||||
#define _SYS_FCNTL_H_
|
||||
|
||||
#include <sys/_default_fcntl.h>
|
||||
|
||||
/* We want to support O_BINARY for the open syscall.
|
||||
For example, the Demon debug monitor has a separate
|
||||
flag value for "rb" vs "r". */
|
||||
#define _FBINARY 0x10000
|
||||
#define O_BINARY _FBINARY
|
||||
|
||||
#endif /* _SYS_FCNTL_H_ */
|
||||
538
prebuilts/gcc/arm-none-eabi/include/sys/features.h
Normal file
538
prebuilts/gcc/arm-none-eabi/include/sys/features.h
Normal file
@@ -0,0 +1,538 @@
|
||||
/*
|
||||
* Written by Joel Sherrill <joel@OARcorp.com>.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-2014.
|
||||
*
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose without fee is hereby granted, provided that this entire notice
|
||||
* is included in all copies of any software which is or includes a copy
|
||||
* or modification of this software.
|
||||
*
|
||||
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION
|
||||
* OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
|
||||
* SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_FEATURES_H
|
||||
#define _SYS_FEATURES_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <_newlib_version.h>
|
||||
|
||||
/* Macro to test version of GCC. Returns 0 for non-GCC or too old GCC. */
|
||||
#ifndef __GNUC_PREREQ
|
||||
# if defined __GNUC__ && defined __GNUC_MINOR__
|
||||
# define __GNUC_PREREQ(maj, min) \
|
||||
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||
# else
|
||||
# define __GNUC_PREREQ(maj, min) 0
|
||||
# endif
|
||||
#endif /* __GNUC_PREREQ */
|
||||
/* Version with trailing underscores for BSD compatibility. */
|
||||
#define __GNUC_PREREQ__(ma, mi) __GNUC_PREREQ(ma, mi)
|
||||
|
||||
|
||||
/*
|
||||
* Feature test macros control which symbols are exposed by the system
|
||||
* headers. Any of these must be defined before including any headers.
|
||||
*
|
||||
* __STRICT_ANSI__ (defined by gcc -ansi, -std=c90, -std=c99, or -std=c11)
|
||||
* ISO C
|
||||
*
|
||||
* _POSIX_SOURCE (deprecated by _POSIX_C_SOURCE=1)
|
||||
* _POSIX_C_SOURCE >= 1
|
||||
* POSIX.1-1990
|
||||
*
|
||||
* _POSIX_C_SOURCE >= 2
|
||||
* POSIX.2-1992
|
||||
*
|
||||
* _POSIX_C_SOURCE >= 199309L
|
||||
* POSIX.1b-1993 Real-time extensions
|
||||
*
|
||||
* _POSIX_C_SOURCE >= 199506L
|
||||
* POSIX.1c-1995 Threads extensions
|
||||
*
|
||||
* _POSIX_C_SOURCE >= 200112L
|
||||
* POSIX.1-2001 and C99
|
||||
*
|
||||
* _POSIX_C_SOURCE >= 200809L
|
||||
* POSIX.1-2008
|
||||
*
|
||||
* _XOPEN_SOURCE
|
||||
* POSIX.1-1990 and XPG4
|
||||
*
|
||||
* _XOPEN_SOURCE_EXTENDED
|
||||
* SUSv1 (POSIX.2-1992 plus XPG4v2)
|
||||
*
|
||||
* _XOPEN_SOURCE >= 500
|
||||
* SUSv2 (POSIX.1c-1995 plus XSI)
|
||||
*
|
||||
* _XOPEN_SOURCE >= 600
|
||||
* SUSv3 (POSIX.1-2001 plus XSI) and C99
|
||||
*
|
||||
* _XOPEN_SOURCE >= 700
|
||||
* SUSv4 (POSIX.1-2008 plus XSI)
|
||||
*
|
||||
* _ISOC99_SOURCE or gcc -std=c99 or g++
|
||||
* ISO C99
|
||||
*
|
||||
* _ISOC11_SOURCE or gcc -std=c11 or g++ -std=c++11
|
||||
* ISO C11
|
||||
*
|
||||
* _ATFILE_SOURCE (implied by _POSIX_C_SOURCE >= 200809L)
|
||||
* "at" functions
|
||||
*
|
||||
* _LARGEFILE_SOURCE (deprecated by _XOPEN_SOURCE >= 500)
|
||||
* fseeko, ftello
|
||||
*
|
||||
* _GNU_SOURCE
|
||||
* All of the above plus GNU extensions
|
||||
*
|
||||
* _BSD_SOURCE (deprecated by _DEFAULT_SOURCE)
|
||||
* _SVID_SOURCE (deprecated by _DEFAULT_SOURCE)
|
||||
* _DEFAULT_SOURCE (or none of the above)
|
||||
* POSIX-1.2008 with BSD and SVr4 extensions
|
||||
*
|
||||
* _FORTIFY_SOURCE = 1 or 2
|
||||
* Object Size Checking function wrappers
|
||||
*/
|
||||
|
||||
#ifdef _GNU_SOURCE
|
||||
#undef _ATFILE_SOURCE
|
||||
#define _ATFILE_SOURCE 1
|
||||
#undef _DEFAULT_SOURCE
|
||||
#define _DEFAULT_SOURCE 1
|
||||
#undef _ISOC99_SOURCE
|
||||
#define _ISOC99_SOURCE 1
|
||||
#undef _ISOC11_SOURCE
|
||||
#define _ISOC11_SOURCE 1
|
||||
#undef _POSIX_SOURCE
|
||||
#define _POSIX_SOURCE 1
|
||||
#undef _POSIX_C_SOURCE
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
#undef _XOPEN_SOURCE
|
||||
#define _XOPEN_SOURCE 700
|
||||
#undef _XOPEN_SOURCE_EXTENDED
|
||||
#define _XOPEN_SOURCE_EXTENDED 1
|
||||
#endif /* _GNU_SOURCE */
|
||||
|
||||
#if defined(_BSD_SOURCE) || defined(_SVID_SOURCE) || \
|
||||
(!defined(__STRICT_ANSI__) && !defined(_ANSI_SOURCE) && \
|
||||
!defined(_ISOC99_SOURCE) && !defined(_POSIX_SOURCE) && \
|
||||
!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE))
|
||||
#undef _DEFAULT_SOURCE
|
||||
#define _DEFAULT_SOURCE 1
|
||||
#endif
|
||||
|
||||
#if defined(_DEFAULT_SOURCE)
|
||||
#undef _POSIX_SOURCE
|
||||
#define _POSIX_SOURCE 1
|
||||
#undef _POSIX_C_SOURCE
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
#endif
|
||||
|
||||
#if !defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) && \
|
||||
((!defined(__STRICT_ANSI__) && !defined(_ANSI_SOURCE)) || \
|
||||
(_XOPEN_SOURCE - 0) >= 500)
|
||||
#define _POSIX_SOURCE 1
|
||||
#if !defined(_XOPEN_SOURCE) || (_XOPEN_SOURCE - 0) >= 700
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
#elif (_XOPEN_SOURCE - 0) >= 600
|
||||
#define _POSIX_C_SOURCE 200112L
|
||||
#elif (_XOPEN_SOURCE - 0) >= 500
|
||||
#define _POSIX_C_SOURCE 199506L
|
||||
#elif (_XOPEN_SOURCE - 0) < 500
|
||||
#define _POSIX_C_SOURCE 2
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200809
|
||||
#undef _ATFILE_SOURCE
|
||||
#define _ATFILE_SOURCE 1
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The following private macros are used throughout the headers to control
|
||||
* which symbols should be exposed. They are for internal use only, as
|
||||
* indicated by the leading double underscore, and must never be used outside
|
||||
* of these headers.
|
||||
*
|
||||
* __POSIX_VISIBLE
|
||||
* any version of POSIX.1; enabled by default, or with _POSIX_SOURCE,
|
||||
* any value of _POSIX_C_SOURCE, or _XOPEN_SOURCE >= 500.
|
||||
*
|
||||
* __POSIX_VISIBLE >= 2
|
||||
* POSIX.2-1992; enabled by default, with _POSIX_C_SOURCE >= 2,
|
||||
* or _XOPEN_SOURCE >= 500.
|
||||
*
|
||||
* __POSIX_VISIBLE >= 199309
|
||||
* POSIX.1b-1993; enabled by default, with _POSIX_C_SOURCE >= 199309L,
|
||||
* or _XOPEN_SOURCE >= 500.
|
||||
*
|
||||
* __POSIX_VISIBLE >= 199506
|
||||
* POSIX.1c-1995; enabled by default, with _POSIX_C_SOURCE >= 199506L,
|
||||
* or _XOPEN_SOURCE >= 500.
|
||||
*
|
||||
* __POSIX_VISIBLE >= 200112
|
||||
* POSIX.1-2001; enabled by default, with _POSIX_C_SOURCE >= 200112L,
|
||||
* or _XOPEN_SOURCE >= 600.
|
||||
*
|
||||
* __POSIX_VISIBLE >= 200809
|
||||
* POSIX.1-2008; enabled by default, with _POSIX_C_SOURCE >= 200809L,
|
||||
* or _XOPEN_SOURCE >= 700.
|
||||
*
|
||||
* __XSI_VISIBLE
|
||||
* XPG4 XSI extensions; enabled with any version of _XOPEN_SOURCE.
|
||||
*
|
||||
* __XSI_VISIBLE >= 4
|
||||
* SUSv1 XSI extensions; enabled with both _XOPEN_SOURCE and
|
||||
* _XOPEN_SOURCE_EXTENDED together.
|
||||
*
|
||||
* __XSI_VISIBLE >= 500
|
||||
* SUSv2 XSI extensions; enabled with _XOPEN_SOURCE >= 500.
|
||||
*
|
||||
* __XSI_VISIBLE >= 600
|
||||
* SUSv3 XSI extensions; enabled with _XOPEN_SOURCE >= 600.
|
||||
*
|
||||
* __XSI_VISIBLE >= 700
|
||||
* SUSv4 XSI extensions; enabled with _XOPEN_SOURCE >= 700.
|
||||
*
|
||||
* __ISO_C_VISIBLE >= 1999
|
||||
* ISO C99; enabled with gcc -std=c99 or newer (on by default since GCC 5),
|
||||
* any version of C++, or with _ISOC99_SOURCE, _POSIX_C_SOURCE >= 200112L,
|
||||
* or _XOPEN_SOURCE >= 600.
|
||||
*
|
||||
* __ISO_C_VISIBLE >= 2011
|
||||
* ISO C11; enabled with gcc -std=c11 or newer (on by default since GCC 5),
|
||||
* g++ -std=c++11 or newer (on by default since GCC 6), or with
|
||||
* _ISOC11_SOURCE.
|
||||
*
|
||||
* __ATFILE_VISIBLE
|
||||
* "at" functions; enabled by default, with _ATFILE_SOURCE,
|
||||
* _POSIX_C_SOURCE >= 200809L, or _XOPEN_SOURCE >= 700.
|
||||
*
|
||||
* __LARGEFILE_VISIBLE
|
||||
* fseeko, ftello; enabled with _LARGEFILE_SOURCE or _XOPEN_SOURCE >= 500.
|
||||
*
|
||||
* __BSD_VISIBLE
|
||||
* BSD extensions; enabled by default, or with _BSD_SOURCE.
|
||||
*
|
||||
* __SVID_VISIBLE
|
||||
* SVr4 extensions; enabled by default, or with _SVID_SOURCE.
|
||||
*
|
||||
* __MISC_VISIBLE
|
||||
* Extensions found in both BSD and SVr4 (shorthand for
|
||||
* (__BSD_VISIBLE || __SVID_VISIBLE)), or newlib-specific
|
||||
* extensions; enabled by default.
|
||||
*
|
||||
* __GNU_VISIBLE
|
||||
* GNU extensions; enabled with _GNU_SOURCE.
|
||||
*
|
||||
* __SSP_FORTIFY_LEVEL
|
||||
* Object Size Checking; defined to 0 (off), 1, or 2.
|
||||
*
|
||||
* In all cases above, "enabled by default" means either by defining
|
||||
* _DEFAULT_SOURCE, or by not defining any of the public feature test macros.
|
||||
*/
|
||||
|
||||
#ifdef _ATFILE_SOURCE
|
||||
#define __ATFILE_VISIBLE 1
|
||||
#else
|
||||
#define __ATFILE_VISIBLE 0
|
||||
#endif
|
||||
|
||||
#ifdef _DEFAULT_SOURCE
|
||||
#define __BSD_VISIBLE 1
|
||||
#else
|
||||
#define __BSD_VISIBLE 0
|
||||
#endif
|
||||
|
||||
#ifdef _GNU_SOURCE
|
||||
#define __GNU_VISIBLE 1
|
||||
#else
|
||||
#define __GNU_VISIBLE 0
|
||||
#endif
|
||||
|
||||
#if defined(_ISOC11_SOURCE) || \
|
||||
(__STDC_VERSION__ - 0) >= 201112L || (__cplusplus - 0) >= 201103L
|
||||
#define __ISO_C_VISIBLE 2011
|
||||
#elif defined(_ISOC99_SOURCE) || (_POSIX_C_SOURCE - 0) >= 200112L || \
|
||||
(__STDC_VERSION__ - 0) >= 199901L || defined(__cplusplus)
|
||||
#define __ISO_C_VISIBLE 1999
|
||||
#else
|
||||
#define __ISO_C_VISIBLE 1990
|
||||
#endif
|
||||
|
||||
#if defined(_LARGEFILE_SOURCE) || (_XOPEN_SOURCE - 0) >= 500
|
||||
#define __LARGEFILE_VISIBLE 1
|
||||
#else
|
||||
#define __LARGEFILE_VISIBLE 0
|
||||
#endif
|
||||
|
||||
#ifdef _DEFAULT_SOURCE
|
||||
#define __MISC_VISIBLE 1
|
||||
#else
|
||||
#define __MISC_VISIBLE 0
|
||||
#endif
|
||||
|
||||
#if (_POSIX_C_SOURCE - 0) >= 200809L
|
||||
#define __POSIX_VISIBLE 200809
|
||||
#elif (_POSIX_C_SOURCE - 0) >= 200112L
|
||||
#define __POSIX_VISIBLE 200112
|
||||
#elif (_POSIX_C_SOURCE - 0) >= 199506L
|
||||
#define __POSIX_VISIBLE 199506
|
||||
#elif (_POSIX_C_SOURCE - 0) >= 199309L
|
||||
#define __POSIX_VISIBLE 199309
|
||||
#elif (_POSIX_C_SOURCE - 0) >= 2 || defined(_XOPEN_SOURCE)
|
||||
#define __POSIX_VISIBLE 199209
|
||||
#elif defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE)
|
||||
#define __POSIX_VISIBLE 199009
|
||||
#else
|
||||
#define __POSIX_VISIBLE 0
|
||||
#endif
|
||||
|
||||
#ifdef _DEFAULT_SOURCE
|
||||
#define __SVID_VISIBLE 1
|
||||
#else
|
||||
#define __SVID_VISIBLE 0
|
||||
#endif
|
||||
|
||||
#if (_XOPEN_SOURCE - 0) >= 700
|
||||
#define __XSI_VISIBLE 700
|
||||
#elif (_XOPEN_SOURCE - 0) >= 600
|
||||
#define __XSI_VISIBLE 600
|
||||
#elif (_XOPEN_SOURCE - 0) >= 500
|
||||
#define __XSI_VISIBLE 500
|
||||
#elif defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)
|
||||
#define __XSI_VISIBLE 4
|
||||
#elif defined(_XOPEN_SOURCE)
|
||||
#define __XSI_VISIBLE 1
|
||||
#else
|
||||
#define __XSI_VISIBLE 0
|
||||
#endif
|
||||
|
||||
#if _FORTIFY_SOURCE > 0 && !defined(__cplusplus) && !defined(__lint__) && \
|
||||
(__OPTIMIZE__ > 0 || defined(__clang__)) && __GNUC_PREREQ__(4, 1) && \
|
||||
!defined(_LIBC)
|
||||
# if _FORTIFY_SOURCE > 1
|
||||
# define __SSP_FORTIFY_LEVEL 2
|
||||
# else
|
||||
# define __SSP_FORTIFY_LEVEL 1
|
||||
# endif
|
||||
#else
|
||||
# define __SSP_FORTIFY_LEVEL 0
|
||||
#endif
|
||||
|
||||
/* RTEMS adheres to POSIX -- 1003.1b with some features from annexes. */
|
||||
|
||||
#ifdef __rtems__
|
||||
#define _POSIX_JOB_CONTROL 1
|
||||
#define _POSIX_SAVED_IDS 1
|
||||
#define _POSIX_VERSION 199309L
|
||||
#define _POSIX_ASYNCHRONOUS_IO 1
|
||||
#define _POSIX_FSYNC 1
|
||||
#define _POSIX_MAPPED_FILES 1
|
||||
#define _POSIX_MEMLOCK 1
|
||||
#define _POSIX_MEMLOCK_RANGE 1
|
||||
#define _POSIX_MEMORY_PROTECTION 1
|
||||
#define _POSIX_MESSAGE_PASSING 1
|
||||
#define _POSIX_MONOTONIC_CLOCK 200112L
|
||||
#define _POSIX_CLOCK_SELECTION 200112L
|
||||
#define _POSIX_PRIORITIZED_IO 1
|
||||
#define _POSIX_PRIORITY_SCHEDULING 1
|
||||
#define _POSIX_REALTIME_SIGNALS 1
|
||||
#define _POSIX_SEMAPHORES 1
|
||||
#define _POSIX_SHARED_MEMORY_OBJECTS 1
|
||||
#define _POSIX_SYNCHRONIZED_IO 1
|
||||
#define _POSIX_TIMERS 1
|
||||
#define _POSIX_BARRIERS 200112L
|
||||
#define _POSIX_READER_WRITER_LOCKS 200112L
|
||||
#define _POSIX_SPIN_LOCKS 200112L
|
||||
|
||||
|
||||
/* In P1003.1b but defined by drafts at least as early as P1003.1c/D10 */
|
||||
#define _POSIX_THREADS 1
|
||||
#define _POSIX_THREAD_ATTR_STACKADDR 1
|
||||
#define _POSIX_THREAD_ATTR_STACKSIZE 1
|
||||
#define _POSIX_THREAD_PRIORITY_SCHEDULING 1
|
||||
#define _POSIX_THREAD_PRIO_INHERIT 1
|
||||
#define _POSIX_THREAD_PRIO_PROTECT 1
|
||||
#define _POSIX_THREAD_PROCESS_SHARED 1
|
||||
#define _POSIX_THREAD_SAFE_FUNCTIONS 1
|
||||
|
||||
/* P1003.4b/D8 defines the constants below this comment. */
|
||||
#define _POSIX_SPAWN 1
|
||||
#define _POSIX_TIMEOUTS 1
|
||||
#define _POSIX_CPUTIME 1
|
||||
#define _POSIX_THREAD_CPUTIME 1
|
||||
#define _POSIX_SPORADIC_SERVER 1
|
||||
#define _POSIX_THREAD_SPORADIC_SERVER 1
|
||||
#define _POSIX_DEVICE_CONTROL 1
|
||||
#define _POSIX_DEVCTL_DIRECTION 1
|
||||
#define _POSIX_INTERRUPT_CONTROL 1
|
||||
#define _POSIX_ADVISORY_INFO 1
|
||||
|
||||
/* UNIX98 added some new pthread mutex attributes */
|
||||
#define _UNIX98_THREAD_MUTEX_ATTRIBUTES 1
|
||||
|
||||
/* POSIX 1003.26-2003 defined device control method */
|
||||
#define _POSIX_26_VERSION 200312L
|
||||
|
||||
#endif
|
||||
|
||||
/* XMK loosely adheres to POSIX -- 1003.1 */
|
||||
#ifdef __XMK__
|
||||
#define _POSIX_THREADS 1
|
||||
#define _POSIX_THREAD_PRIORITY_SCHEDULING 1
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __svr4__
|
||||
# define _POSIX_JOB_CONTROL 1
|
||||
# define _POSIX_SAVED_IDS 1
|
||||
# define _POSIX_VERSION 199009L
|
||||
#endif
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
|
||||
#if __POSIX_VISIBLE >= 200809
|
||||
#define _POSIX_VERSION 200809L
|
||||
#define _POSIX2_VERSION 200809L
|
||||
#elif __POSIX_VISIBLE >= 200112
|
||||
#define _POSIX_VERSION 200112L
|
||||
#define _POSIX2_VERSION 200112L
|
||||
#elif __POSIX_VISIBLE >= 199506
|
||||
#define _POSIX_VERSION 199506L
|
||||
#define _POSIX2_VERSION 199506L
|
||||
#elif __POSIX_VISIBLE >= 199309
|
||||
#define _POSIX_VERSION 199309L
|
||||
#define _POSIX2_VERSION 199209L
|
||||
#elif __POSIX_VISIBLE >= 199209
|
||||
#define _POSIX_VERSION 199009L
|
||||
#define _POSIX2_VERSION 199209L
|
||||
#elif __POSIX_VISIBLE
|
||||
#define _POSIX_VERSION 199009L
|
||||
#endif
|
||||
#if __XSI_VISIBLE >= 4
|
||||
#define _XOPEN_VERSION __XSI_VISIBLE
|
||||
#endif
|
||||
|
||||
#define _POSIX_ADVISORY_INFO 200809L
|
||||
#define _POSIX_ASYNCHRONOUS_IO 200809L
|
||||
#define _POSIX_BARRIERS 200809L
|
||||
#define _POSIX_CHOWN_RESTRICTED 1
|
||||
#define _POSIX_CLOCK_SELECTION 200809L
|
||||
#define _POSIX_CPUTIME 200809L
|
||||
#define _POSIX_FSYNC 200809L
|
||||
#define _POSIX_IPV6 200809L
|
||||
#define _POSIX_JOB_CONTROL 1
|
||||
#define _POSIX_MAPPED_FILES 200809L
|
||||
/* #define _POSIX_MEMLOCK -1 */
|
||||
#define _POSIX_MEMLOCK_RANGE 200809L
|
||||
#define _POSIX_MEMORY_PROTECTION 200809L
|
||||
#define _POSIX_MESSAGE_PASSING 200809L
|
||||
#define _POSIX_MONOTONIC_CLOCK 200809L
|
||||
#define _POSIX_NO_TRUNC 1
|
||||
/* #define _POSIX_PRIORITIZED_IO -1 */
|
||||
#define _POSIX_PRIORITY_SCHEDULING 200809L
|
||||
#define _POSIX_RAW_SOCKETS 200809L
|
||||
#define _POSIX_READER_WRITER_LOCKS 200809L
|
||||
#define _POSIX_REALTIME_SIGNALS 200809L
|
||||
#define _POSIX_REGEXP 1
|
||||
#define _POSIX_SAVED_IDS 1
|
||||
#define _POSIX_SEMAPHORES 200809L
|
||||
#define _POSIX_SHARED_MEMORY_OBJECTS 200809L
|
||||
#define _POSIX_SHELL 1
|
||||
#define _POSIX_SPAWN 200809L
|
||||
#define _POSIX_SPIN_LOCKS 200809L
|
||||
/* #define _POSIX_SPORADIC_SERVER -1 */
|
||||
#define _POSIX_SYNCHRONIZED_IO 200809L
|
||||
#define _POSIX_THREAD_ATTR_STACKADDR 200809L
|
||||
#define _POSIX_THREAD_ATTR_STACKSIZE 200809L
|
||||
#define _POSIX_THREAD_CPUTIME 200809L
|
||||
/* #define _POSIX_THREAD_PRIO_INHERIT -1 */
|
||||
/* #define _POSIX_THREAD_PRIO_PROTECT -1 */
|
||||
#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L
|
||||
#define _POSIX_THREAD_PROCESS_SHARED 200809L
|
||||
#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L
|
||||
/* #define _POSIX_THREAD_SPORADIC_SERVER -1 */
|
||||
#define _POSIX_THREADS 200809L
|
||||
#define _POSIX_TIMEOUTS 200809L
|
||||
#define _POSIX_TIMERS 200809L
|
||||
/* #define _POSIX_TRACE -1 */
|
||||
/* #define _POSIX_TRACE_EVENT_FILTER -1 */
|
||||
/* #define _POSIX_TRACE_INHERIT -1 */
|
||||
/* #define _POSIX_TRACE_LOG -1 */
|
||||
/* #define _POSIX_TYPED_MEMORY_OBJECTS -1 */
|
||||
#define _POSIX_VDISABLE '\0'
|
||||
|
||||
#if __POSIX_VISIBLE >= 2
|
||||
#define _POSIX2_C_VERSION _POSIX2_VERSION
|
||||
#define _POSIX2_C_BIND _POSIX2_VERSION
|
||||
#define _POSIX2_C_DEV _POSIX2_VERSION
|
||||
#define _POSIX2_CHAR_TERM _POSIX2_VERSION
|
||||
/* #define _POSIX2_FORT_DEV -1 */
|
||||
/* #define _POSIX2_FORT_RUN -1 */
|
||||
/* #define _POSIX2_LOCALEDEF -1 */
|
||||
/* #define _POSIX2_PBS -1 */
|
||||
/* #define _POSIX2_PBS_ACCOUNTING -1 */
|
||||
/* #define _POSIX2_PBS_CHECKPOINT -1 */
|
||||
/* #define _POSIX2_PBS_LOCATE -1 */
|
||||
/* #define _POSIX2_PBS_MESSAGE -1 */
|
||||
/* #define _POSIX2_PBS_TRACK -1 */
|
||||
#define _POSIX2_SW_DEV _POSIX2_VERSION
|
||||
#define _POSIX2_UPE _POSIX2_VERSION
|
||||
#endif /* __POSIX_VISIBLE >= 2 */
|
||||
|
||||
#define _POSIX_V6_ILP32_OFF32 -1
|
||||
#ifdef __LP64__
|
||||
#define _POSIX_V6_ILP32_OFFBIG -1
|
||||
#define _POSIX_V6_LP64_OFF64 1
|
||||
#define _POSIX_V6_LPBIG_OFFBIG 1
|
||||
#else
|
||||
#define _POSIX_V6_ILP32_OFFBIG 1
|
||||
#define _POSIX_V6_LP64_OFF64 -1
|
||||
#define _POSIX_V6_LPBIG_OFFBIG -1
|
||||
#endif
|
||||
#define _POSIX_V7_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
|
||||
#define _POSIX_V7_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
|
||||
#define _POSIX_V7_LP64_OFF64 _POSIX_V6_LP64_OFF64
|
||||
#define _POSIX_V7_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
|
||||
#define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
|
||||
#define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
|
||||
#define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64
|
||||
#define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
|
||||
|
||||
#if __XSI_VISIBLE
|
||||
#define _XOPEN_CRYPT 1
|
||||
#define _XOPEN_ENH_I18N 1
|
||||
/* #define _XOPEN_LEGACY -1 */
|
||||
/* #define _XOPEN_REALTIME -1 */
|
||||
/* #define _XOPEN_REALTIME_THREADS -1 */
|
||||
#define _XOPEN_SHM 1
|
||||
/* #define _XOPEN_STREAMS -1 */
|
||||
/* #define _XOPEN_UNIX -1 */
|
||||
#endif /* __XSI_VISIBLE */
|
||||
|
||||
/*
|
||||
* newlib's wide char conversion functions were updated on
|
||||
* 2019-01-12
|
||||
* to UNICODE version:
|
||||
* 11.0.0 released 2018-06-05
|
||||
*/
|
||||
#define __STDC_ISO_10646__ 201806L
|
||||
|
||||
#endif /* __CYGWIN__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* _SYS_FEATURES_H */
|
||||
90
prebuilts/gcc/arm-none-eabi/include/sys/fenv.h
Normal file
90
prebuilts/gcc/arm-none-eabi/include/sys/fenv.h
Normal file
@@ -0,0 +1,90 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
|
||||
*
|
||||
* Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_FENV_H_
|
||||
#define _SYS_FENV_H_ 1
|
||||
|
||||
#include <sys/_types.h>
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef int fenv_t;
|
||||
typedef int fexcept_t;
|
||||
|
||||
/* Exception flags */
|
||||
#define FE_INVALID 0x0001
|
||||
#define FE_DIVBYZERO 0x0002
|
||||
#define FE_OVERFLOW 0x0004
|
||||
#define FE_UNDERFLOW 0x0008
|
||||
#define FE_INEXACT 0x0010
|
||||
#ifndef __SOFTFP__
|
||||
#define FE_DENORMAL 0x0080
|
||||
#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | \
|
||||
FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_DENORMAL)
|
||||
#else
|
||||
#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | \
|
||||
FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
|
||||
#endif
|
||||
|
||||
/* Rounding modes */
|
||||
#define FE_TONEAREST 0x00000000
|
||||
#define FE_UPWARD 0x00400000
|
||||
#define FE_DOWNWARD 0x00800000
|
||||
#define FE_TOWARDZERO 0x00c00000
|
||||
|
||||
/* Default floating-point environment */
|
||||
extern const fenv_t *_fe_dfl_env;
|
||||
#define FE_DFL_ENV (_fe_dfl_env)
|
||||
|
||||
int feclearexcept(int);
|
||||
int fegetexceptflag(fexcept_t *, int);
|
||||
int fesetexceptflag(const fexcept_t *, int);
|
||||
int feraiseexcept(int);
|
||||
int fetestexcept(int);
|
||||
int fegetround(void);
|
||||
int fesetround(int);
|
||||
int fegetenv(fenv_t *);
|
||||
int feholdexcept(fenv_t *);
|
||||
int fesetenv(const fenv_t *);
|
||||
int feupdateenv(const fenv_t *);
|
||||
#if __BSD_VISIBLE
|
||||
int feenableexcept(int);
|
||||
int fedisableexcept(int);
|
||||
int fegetexcept(void);
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SYS_FENV_H_ */
|
||||
2
prebuilts/gcc/arm-none-eabi/include/sys/file.h
Normal file
2
prebuilts/gcc/arm-none-eabi/include/sys/file.h
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
#include <sys/fcntl.h>
|
||||
77
prebuilts/gcc/arm-none-eabi/include/sys/iconvnls.h
Normal file
77
prebuilts/gcc/arm-none-eabi/include/sys/iconvnls.h
Normal file
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (c) 2003-2004, Artem B. Bityuckiy.
|
||||
* Rights transferred to Franklin Electronic Publishers.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Funtions, macros, etc implimented in iconv library but used by other
|
||||
* NLS-related subsystems too.
|
||||
*/
|
||||
#ifndef __SYS_ICONVNLS_H__
|
||||
#define __SYS_ICONVNLS_H__
|
||||
|
||||
#include <_ansi.h>
|
||||
#include <reent.h>
|
||||
#include <wchar.h>
|
||||
#include <iconv.h>
|
||||
|
||||
/* Iconv data path environment variable name */
|
||||
#define NLS_ENVVAR_NAME "NLSPATH"
|
||||
/* Default NLSPATH value */
|
||||
#define ICONV_DEFAULT_NLSPATH "/usr/locale"
|
||||
/* Direction markers */
|
||||
#define ICONV_NLS_FROM 0
|
||||
#define ICONV_NLS_TO 1
|
||||
|
||||
void
|
||||
_iconv_nls_get_state (iconv_t cd, mbstate_t *ps, int direction);
|
||||
|
||||
int
|
||||
_iconv_nls_set_state (iconv_t cd, mbstate_t *ps, int direction);
|
||||
|
||||
int
|
||||
_iconv_nls_is_stateful (iconv_t cd, int direction);
|
||||
|
||||
int
|
||||
_iconv_nls_get_mb_cur_max (iconv_t cd, int direction);
|
||||
|
||||
size_t
|
||||
_iconv_nls_conv (struct _reent *rptr, iconv_t cd,
|
||||
const char **inbuf, size_t *inbytesleft,
|
||||
char **outbuf, size_t *outbytesleft);
|
||||
|
||||
const char *
|
||||
_iconv_nls_construct_filename (struct _reent *rptr, const char *file,
|
||||
const char *dir, const char *ext);
|
||||
|
||||
|
||||
int
|
||||
_iconv_nls_open (struct _reent *rptr, const char *encoding,
|
||||
iconv_t *towc, iconv_t *fromwc, int flag);
|
||||
|
||||
char *
|
||||
_iconv_resolve_encoding_name (struct _reent *rptr, const char *ca);
|
||||
|
||||
#endif /* __SYS_ICONVNLS_H__ */
|
||||
|
||||
69
prebuilts/gcc/arm-none-eabi/include/sys/lock.h
Normal file
69
prebuilts/gcc/arm-none-eabi/include/sys/lock.h
Normal file
@@ -0,0 +1,69 @@
|
||||
#ifndef __SYS_LOCK_H__
|
||||
#define __SYS_LOCK_H__
|
||||
|
||||
/* dummy lock routines for single-threaded aps */
|
||||
|
||||
#include <newlib.h>
|
||||
#include <_ansi.h>
|
||||
|
||||
#if !defined(_RETARGETABLE_LOCKING)
|
||||
|
||||
typedef int _LOCK_T;
|
||||
typedef int _LOCK_RECURSIVE_T;
|
||||
|
||||
#define __LOCK_INIT(class,lock) static int lock = 0;
|
||||
#define __LOCK_INIT_RECURSIVE(class,lock) static int lock = 0;
|
||||
#define __lock_init(lock) ((void) 0)
|
||||
#define __lock_init_recursive(lock) ((void) 0)
|
||||
#define __lock_close(lock) ((void) 0)
|
||||
#define __lock_close_recursive(lock) ((void) 0)
|
||||
#define __lock_acquire(lock) ((void) 0)
|
||||
#define __lock_acquire_recursive(lock) ((void) 0)
|
||||
#define __lock_try_acquire(lock) ((void) 0)
|
||||
#define __lock_try_acquire_recursive(lock) ((void) 0)
|
||||
#define __lock_release(lock) ((void) 0)
|
||||
#define __lock_release_recursive(lock) ((void) 0)
|
||||
|
||||
#else
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct __lock;
|
||||
typedef struct __lock * _LOCK_T;
|
||||
#define _LOCK_RECURSIVE_T _LOCK_T
|
||||
|
||||
#define __LOCK_INIT(class,lock) extern struct __lock __lock_ ## lock; \
|
||||
class _LOCK_T lock = &__lock_ ## lock
|
||||
#define __LOCK_INIT_RECURSIVE(class,lock) __LOCK_INIT(class,lock)
|
||||
|
||||
extern void __retarget_lock_init(_LOCK_T *lock);
|
||||
#define __lock_init(lock) __retarget_lock_init(&lock)
|
||||
extern void __retarget_lock_init_recursive(_LOCK_T *lock);
|
||||
#define __lock_init_recursive(lock) __retarget_lock_init_recursive(&lock)
|
||||
extern void __retarget_lock_close(_LOCK_T lock);
|
||||
#define __lock_close(lock) __retarget_lock_close(lock)
|
||||
extern void __retarget_lock_close_recursive(_LOCK_T lock);
|
||||
#define __lock_close_recursive(lock) __retarget_lock_close_recursive(lock)
|
||||
extern void __retarget_lock_acquire(_LOCK_T lock);
|
||||
#define __lock_acquire(lock) __retarget_lock_acquire(lock)
|
||||
extern void __retarget_lock_acquire_recursive(_LOCK_T lock);
|
||||
#define __lock_acquire_recursive(lock) __retarget_lock_acquire_recursive(lock)
|
||||
extern int __retarget_lock_try_acquire(_LOCK_T lock);
|
||||
#define __lock_try_acquire(lock) __retarget_lock_try_acquire(lock)
|
||||
extern int __retarget_lock_try_acquire_recursive(_LOCK_T lock);
|
||||
#define __lock_try_acquire_recursive(lock) \
|
||||
__retarget_lock_try_acquire_recursive(lock)
|
||||
extern void __retarget_lock_release(_LOCK_T lock);
|
||||
#define __lock_release(lock) __retarget_lock_release(lock)
|
||||
extern void __retarget_lock_release_recursive(_LOCK_T lock);
|
||||
#define __lock_release_recursive(lock) __retarget_lock_release_recursive(lock)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_RETARGETABLE_LOCKING) */
|
||||
|
||||
#endif /* __SYS_LOCK_H__ */
|
||||
35
prebuilts/gcc/arm-none-eabi/include/sys/param.h
Normal file
35
prebuilts/gcc/arm-none-eabi/include/sys/param.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/* This is a dummy <sys/param.h> file, not customized for any
|
||||
particular system. If there is a param.h in libc/sys/SYSDIR/sys,
|
||||
it will override this one. */
|
||||
|
||||
#ifndef _SYS_PARAM_H
|
||||
# define _SYS_PARAM_H
|
||||
|
||||
#include <sys/config.h>
|
||||
#include <sys/syslimits.h>
|
||||
#include <machine/endian.h>
|
||||
#include <machine/param.h>
|
||||
|
||||
#ifndef NBBY
|
||||
# define NBBY 8 /* number of bits in a byte */
|
||||
#endif
|
||||
#ifndef HZ
|
||||
# define HZ (60)
|
||||
#endif
|
||||
#ifndef NOFILE
|
||||
# define NOFILE (60)
|
||||
#endif
|
||||
#ifndef PATHSIZE
|
||||
# define PATHSIZE (1024)
|
||||
#endif
|
||||
|
||||
#define MAXPATHLEN PATH_MAX
|
||||
|
||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||
|
||||
#ifndef howmany
|
||||
#define howmany(x, y) (((x)+((y)-1))/(y))
|
||||
#endif
|
||||
|
||||
#endif
|
||||
919
prebuilts/gcc/arm-none-eabi/include/sys/queue.h
Normal file
919
prebuilts/gcc/arm-none-eabi/include/sys/queue.h
Normal file
@@ -0,0 +1,919 @@
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)queue.h 8.5 (Berkeley) 8/20/94
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_QUEUE_H_
|
||||
#define _SYS_QUEUE_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/*
|
||||
* This file defines four types of data structures: singly-linked lists,
|
||||
* singly-linked tail queues, lists and tail queues.
|
||||
*
|
||||
* A singly-linked list is headed by a single forward pointer. The elements
|
||||
* are singly linked for minimum space and pointer manipulation overhead at
|
||||
* the expense of O(n) removal for arbitrary elements. New elements can be
|
||||
* added to the list after an existing element or at the head of the list.
|
||||
* Elements being removed from the head of the list should use the explicit
|
||||
* macro for this purpose for optimum efficiency. A singly-linked list may
|
||||
* only be traversed in the forward direction. Singly-linked lists are ideal
|
||||
* for applications with large datasets and few or no removals or for
|
||||
* implementing a LIFO queue.
|
||||
*
|
||||
* A singly-linked tail queue is headed by a pair of pointers, one to the
|
||||
* head of the list and the other to the tail of the list. The elements are
|
||||
* singly linked for minimum space and pointer manipulation overhead at the
|
||||
* expense of O(n) removal for arbitrary elements. New elements can be added
|
||||
* to the list after an existing element, at the head of the list, or at the
|
||||
* end of the list. Elements being removed from the head of the tail queue
|
||||
* should use the explicit macro for this purpose for optimum efficiency.
|
||||
* A singly-linked tail queue may only be traversed in the forward direction.
|
||||
* Singly-linked tail queues are ideal for applications with large datasets
|
||||
* and few or no removals or for implementing a FIFO queue.
|
||||
*
|
||||
* A list is headed by a single forward pointer (or an array of forward
|
||||
* pointers for a hash table header). The elements are doubly linked
|
||||
* so that an arbitrary element can be removed without a need to
|
||||
* traverse the list. New elements can be added to the list before
|
||||
* or after an existing element or at the head of the list. A list
|
||||
* may be traversed in either direction.
|
||||
*
|
||||
* A tail queue is headed by a pair of pointers, one to the head of the
|
||||
* list and the other to the tail of the list. The elements are doubly
|
||||
* linked so that an arbitrary element can be removed without a need to
|
||||
* traverse the list. New elements can be added to the list before or
|
||||
* after an existing element, at the head of the list, or at the end of
|
||||
* the list. A tail queue may be traversed in either direction.
|
||||
*
|
||||
* For details on the use of these macros, see the queue(3) manual page.
|
||||
*
|
||||
* Below is a summary of implemented functions where:
|
||||
* + means the macro is available
|
||||
* - means the macro is not available
|
||||
* s means the macro is available but is slow (runs in O(n) time)
|
||||
*
|
||||
* SLIST LIST STAILQ TAILQ
|
||||
* _HEAD + + + +
|
||||
* _CLASS_HEAD + + + +
|
||||
* _HEAD_INITIALIZER + + + +
|
||||
* _ENTRY + + + +
|
||||
* _CLASS_ENTRY + + + +
|
||||
* _INIT + + + +
|
||||
* _EMPTY + + + +
|
||||
* _FIRST + + + +
|
||||
* _NEXT + + + +
|
||||
* _PREV - + - +
|
||||
* _LAST - - + +
|
||||
* _LAST_FAST - - - +
|
||||
* _FOREACH + + + +
|
||||
* _FOREACH_FROM + + + +
|
||||
* _FOREACH_SAFE + + + +
|
||||
* _FOREACH_FROM_SAFE + + + +
|
||||
* _FOREACH_REVERSE - - - +
|
||||
* _FOREACH_REVERSE_FROM - - - +
|
||||
* _FOREACH_REVERSE_SAFE - - - +
|
||||
* _FOREACH_REVERSE_FROM_SAFE - - - +
|
||||
* _INSERT_HEAD + + + +
|
||||
* _INSERT_BEFORE - + - +
|
||||
* _INSERT_AFTER + + + +
|
||||
* _INSERT_TAIL - - + +
|
||||
* _CONCAT s s + +
|
||||
* _REMOVE_AFTER + - + -
|
||||
* _REMOVE_HEAD + - + -
|
||||
* _REMOVE s + s +
|
||||
* _SWAP + + + +
|
||||
*
|
||||
*/
|
||||
#ifdef QUEUE_MACRO_DEBUG
|
||||
#warn Use QUEUE_MACRO_DEBUG_TRACE and/or QUEUE_MACRO_DEBUG_TRASH
|
||||
#define QUEUE_MACRO_DEBUG_TRACE
|
||||
#define QUEUE_MACRO_DEBUG_TRASH
|
||||
#endif
|
||||
|
||||
#ifdef QUEUE_MACRO_DEBUG_TRACE
|
||||
/* Store the last 2 places the queue element or head was altered */
|
||||
struct qm_trace {
|
||||
unsigned long lastline;
|
||||
unsigned long prevline;
|
||||
const char *lastfile;
|
||||
const char *prevfile;
|
||||
};
|
||||
|
||||
#define TRACEBUF struct qm_trace trace;
|
||||
#define TRACEBUF_INITIALIZER { __LINE__, 0, __FILE__, NULL } ,
|
||||
|
||||
#define QMD_TRACE_HEAD(head) do { \
|
||||
(head)->trace.prevline = (head)->trace.lastline; \
|
||||
(head)->trace.prevfile = (head)->trace.lastfile; \
|
||||
(head)->trace.lastline = __LINE__; \
|
||||
(head)->trace.lastfile = __FILE__; \
|
||||
} while (0)
|
||||
|
||||
#define QMD_TRACE_ELEM(elem) do { \
|
||||
(elem)->trace.prevline = (elem)->trace.lastline; \
|
||||
(elem)->trace.prevfile = (elem)->trace.lastfile; \
|
||||
(elem)->trace.lastline = __LINE__; \
|
||||
(elem)->trace.lastfile = __FILE__; \
|
||||
} while (0)
|
||||
|
||||
#else /* !QUEUE_MACRO_DEBUG_TRACE */
|
||||
#define QMD_TRACE_ELEM(elem)
|
||||
#define QMD_TRACE_HEAD(head)
|
||||
#define TRACEBUF
|
||||
#define TRACEBUF_INITIALIZER
|
||||
#endif /* QUEUE_MACRO_DEBUG_TRACE */
|
||||
|
||||
#ifdef QUEUE_MACRO_DEBUG_TRASH
|
||||
#define TRASHIT(x) do {(x) = (void *)-1;} while (0)
|
||||
#define QMD_IS_TRASHED(x) ((x) == (void *)(intptr_t)-1)
|
||||
#else /* !QUEUE_MACRO_DEBUG_TRASH */
|
||||
#define TRASHIT(x)
|
||||
#define QMD_IS_TRASHED(x) 0
|
||||
#endif /* QUEUE_MACRO_DEBUG_TRASH */
|
||||
|
||||
#if defined(QUEUE_MACRO_DEBUG_TRACE) || defined(QUEUE_MACRO_DEBUG_TRASH)
|
||||
#define QMD_SAVELINK(name, link) void **name = (void *)&(link)
|
||||
#else /* !QUEUE_MACRO_DEBUG_TRACE && !QUEUE_MACRO_DEBUG_TRASH */
|
||||
#define QMD_SAVELINK(name, link)
|
||||
#endif /* QUEUE_MACRO_DEBUG_TRACE || QUEUE_MACRO_DEBUG_TRASH */
|
||||
|
||||
#ifdef __cplusplus
|
||||
/*
|
||||
* In C++ there can be structure lists and class lists:
|
||||
*/
|
||||
#define QUEUE_TYPEOF(type) type
|
||||
#else
|
||||
#define QUEUE_TYPEOF(type) struct type
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Singly-linked List declarations.
|
||||
*/
|
||||
#define SLIST_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *slh_first; /* first element */ \
|
||||
}
|
||||
|
||||
#define SLIST_CLASS_HEAD(name, type) \
|
||||
struct name { \
|
||||
class type *slh_first; /* first element */ \
|
||||
}
|
||||
|
||||
#define SLIST_HEAD_INITIALIZER(head) \
|
||||
{ NULL }
|
||||
|
||||
#define SLIST_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *sle_next; /* next element */ \
|
||||
}
|
||||
|
||||
#define SLIST_CLASS_ENTRY(type) \
|
||||
struct { \
|
||||
class type *sle_next; /* next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* Singly-linked List functions.
|
||||
*/
|
||||
#if (defined(_KERNEL) && defined(INVARIANTS))
|
||||
#define QMD_SLIST_CHECK_PREVPTR(prevp, elm) do { \
|
||||
if (*(prevp) != (elm)) \
|
||||
panic("Bad prevptr *(%p) == %p != %p", \
|
||||
(prevp), *(prevp), (elm)); \
|
||||
} while (0)
|
||||
#else
|
||||
#define QMD_SLIST_CHECK_PREVPTR(prevp, elm)
|
||||
#endif
|
||||
|
||||
#define SLIST_CONCAT(head1, head2, type, field) do { \
|
||||
QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head1); \
|
||||
if (curelm == NULL) { \
|
||||
if ((SLIST_FIRST(head1) = SLIST_FIRST(head2)) != NULL) \
|
||||
SLIST_INIT(head2); \
|
||||
} else if (SLIST_FIRST(head2) != NULL) { \
|
||||
while (SLIST_NEXT(curelm, field) != NULL) \
|
||||
curelm = SLIST_NEXT(curelm, field); \
|
||||
SLIST_NEXT(curelm, field) = SLIST_FIRST(head2); \
|
||||
SLIST_INIT(head2); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
|
||||
|
||||
#define SLIST_FIRST(head) ((head)->slh_first)
|
||||
|
||||
#define SLIST_FOREACH(var, head, field) \
|
||||
for ((var) = SLIST_FIRST((head)); \
|
||||
(var); \
|
||||
(var) = SLIST_NEXT((var), field))
|
||||
|
||||
#define SLIST_FOREACH_FROM(var, head, field) \
|
||||
for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \
|
||||
(var); \
|
||||
(var) = SLIST_NEXT((var), field))
|
||||
|
||||
#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
|
||||
for ((var) = SLIST_FIRST((head)); \
|
||||
(var) && ((tvar) = SLIST_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define SLIST_FOREACH_FROM_SAFE(var, head, field, tvar) \
|
||||
for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \
|
||||
(var) && ((tvar) = SLIST_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
|
||||
for ((varp) = &SLIST_FIRST((head)); \
|
||||
((var) = *(varp)) != NULL; \
|
||||
(varp) = &SLIST_NEXT((var), field))
|
||||
|
||||
#define SLIST_INIT(head) do { \
|
||||
SLIST_FIRST((head)) = NULL; \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
|
||||
SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \
|
||||
SLIST_NEXT((slistelm), field) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_INSERT_HEAD(head, elm, field) do { \
|
||||
SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \
|
||||
SLIST_FIRST((head)) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
|
||||
|
||||
#define SLIST_REMOVE(head, elm, type, field) do { \
|
||||
QMD_SAVELINK(oldnext, (elm)->field.sle_next); \
|
||||
if (SLIST_FIRST((head)) == (elm)) { \
|
||||
SLIST_REMOVE_HEAD((head), field); \
|
||||
} \
|
||||
else { \
|
||||
QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head); \
|
||||
while (SLIST_NEXT(curelm, field) != (elm)) \
|
||||
curelm = SLIST_NEXT(curelm, field); \
|
||||
SLIST_REMOVE_AFTER(curelm, field); \
|
||||
} \
|
||||
TRASHIT(*oldnext); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_REMOVE_AFTER(elm, field) do { \
|
||||
SLIST_NEXT(elm, field) = \
|
||||
SLIST_NEXT(SLIST_NEXT(elm, field), field); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_REMOVE_HEAD(head, field) do { \
|
||||
SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_REMOVE_PREVPTR(prevp, elm, field) do { \
|
||||
QMD_SLIST_CHECK_PREVPTR(prevp, elm); \
|
||||
*(prevp) = SLIST_NEXT(elm, field); \
|
||||
TRASHIT((elm)->field.sle_next); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_SWAP(head1, head2, type) do { \
|
||||
QUEUE_TYPEOF(type) *swap_first = SLIST_FIRST(head1); \
|
||||
SLIST_FIRST(head1) = SLIST_FIRST(head2); \
|
||||
SLIST_FIRST(head2) = swap_first; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Singly-linked Tail queue declarations.
|
||||
*/
|
||||
#define STAILQ_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *stqh_first;/* first element */ \
|
||||
struct type **stqh_last;/* addr of last next element */ \
|
||||
}
|
||||
|
||||
#define STAILQ_CLASS_HEAD(name, type) \
|
||||
struct name { \
|
||||
class type *stqh_first; /* first element */ \
|
||||
class type **stqh_last; /* addr of last next element */ \
|
||||
}
|
||||
|
||||
#define STAILQ_HEAD_INITIALIZER(head) \
|
||||
{ NULL, &(head).stqh_first }
|
||||
|
||||
#define STAILQ_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *stqe_next; /* next element */ \
|
||||
}
|
||||
|
||||
#define STAILQ_CLASS_ENTRY(type) \
|
||||
struct { \
|
||||
class type *stqe_next; /* next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* Singly-linked Tail queue functions.
|
||||
*/
|
||||
#define STAILQ_CONCAT(head1, head2) do { \
|
||||
if (!STAILQ_EMPTY((head2))) { \
|
||||
*(head1)->stqh_last = (head2)->stqh_first; \
|
||||
(head1)->stqh_last = (head2)->stqh_last; \
|
||||
STAILQ_INIT((head2)); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL)
|
||||
|
||||
#define STAILQ_FIRST(head) ((head)->stqh_first)
|
||||
|
||||
#define STAILQ_FOREACH(var, head, field) \
|
||||
for((var) = STAILQ_FIRST((head)); \
|
||||
(var); \
|
||||
(var) = STAILQ_NEXT((var), field))
|
||||
|
||||
#define STAILQ_FOREACH_FROM(var, head, field) \
|
||||
for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \
|
||||
(var); \
|
||||
(var) = STAILQ_NEXT((var), field))
|
||||
|
||||
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
|
||||
for ((var) = STAILQ_FIRST((head)); \
|
||||
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \
|
||||
for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \
|
||||
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define STAILQ_INIT(head) do { \
|
||||
STAILQ_FIRST((head)) = NULL; \
|
||||
(head)->stqh_last = &STAILQ_FIRST((head)); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \
|
||||
if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
STAILQ_NEXT((tqelm), field) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_INSERT_HEAD(head, elm, field) do { \
|
||||
if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
STAILQ_FIRST((head)) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_INSERT_TAIL(head, elm, field) do { \
|
||||
STAILQ_NEXT((elm), field) = NULL; \
|
||||
*(head)->stqh_last = (elm); \
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_LAST(head, type, field) \
|
||||
(STAILQ_EMPTY((head)) ? NULL : \
|
||||
__containerof((head)->stqh_last, \
|
||||
QUEUE_TYPEOF(type), field.stqe_next))
|
||||
|
||||
#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
|
||||
|
||||
#define STAILQ_REMOVE(head, elm, type, field) do { \
|
||||
QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \
|
||||
if (STAILQ_FIRST((head)) == (elm)) { \
|
||||
STAILQ_REMOVE_HEAD((head), field); \
|
||||
} \
|
||||
else { \
|
||||
QUEUE_TYPEOF(type) *curelm = STAILQ_FIRST(head); \
|
||||
while (STAILQ_NEXT(curelm, field) != (elm)) \
|
||||
curelm = STAILQ_NEXT(curelm, field); \
|
||||
STAILQ_REMOVE_AFTER(head, curelm, field); \
|
||||
} \
|
||||
TRASHIT(*oldnext); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_REMOVE_AFTER(head, elm, field) do { \
|
||||
if ((STAILQ_NEXT(elm, field) = \
|
||||
STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_REMOVE_HEAD(head, field) do { \
|
||||
if ((STAILQ_FIRST((head)) = \
|
||||
STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
|
||||
(head)->stqh_last = &STAILQ_FIRST((head)); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_REMOVE_HEAD_UNTIL(head, elm, field) do { \
|
||||
if ((STAILQ_FIRST((head)) = STAILQ_NEXT((elm), field)) == NULL) \
|
||||
(head)->stqh_last = &STAILQ_FIRST((head)); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_SWAP(head1, head2, type) do { \
|
||||
QUEUE_TYPEOF(type) *swap_first = STAILQ_FIRST(head1); \
|
||||
QUEUE_TYPEOF(type) **swap_last = (head1)->stqh_last; \
|
||||
STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \
|
||||
(head1)->stqh_last = (head2)->stqh_last; \
|
||||
STAILQ_FIRST(head2) = swap_first; \
|
||||
(head2)->stqh_last = swap_last; \
|
||||
if (STAILQ_EMPTY(head1)) \
|
||||
(head1)->stqh_last = &STAILQ_FIRST(head1); \
|
||||
if (STAILQ_EMPTY(head2)) \
|
||||
(head2)->stqh_last = &STAILQ_FIRST(head2); \
|
||||
} while (0)
|
||||
|
||||
|
||||
/*
|
||||
* List declarations.
|
||||
*/
|
||||
#define LIST_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *lh_first; /* first element */ \
|
||||
}
|
||||
|
||||
#define LIST_CLASS_HEAD(name, type) \
|
||||
struct name { \
|
||||
class type *lh_first; /* first element */ \
|
||||
}
|
||||
|
||||
#define LIST_HEAD_INITIALIZER(head) \
|
||||
{ NULL }
|
||||
|
||||
#define LIST_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *le_next; /* next element */ \
|
||||
struct type **le_prev; /* address of previous next element */ \
|
||||
}
|
||||
|
||||
#define LIST_CLASS_ENTRY(type) \
|
||||
struct { \
|
||||
class type *le_next; /* next element */ \
|
||||
class type **le_prev; /* address of previous next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* List functions.
|
||||
*/
|
||||
|
||||
#if (defined(_KERNEL) && defined(INVARIANTS))
|
||||
/*
|
||||
* QMD_LIST_CHECK_HEAD(LIST_HEAD *head, LIST_ENTRY NAME)
|
||||
*
|
||||
* If the list is non-empty, validates that the first element of the list
|
||||
* points back at 'head.'
|
||||
*/
|
||||
#define QMD_LIST_CHECK_HEAD(head, field) do { \
|
||||
if (LIST_FIRST((head)) != NULL && \
|
||||
LIST_FIRST((head))->field.le_prev != \
|
||||
&LIST_FIRST((head))) \
|
||||
panic("Bad list head %p first->prev != head", (head)); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* QMD_LIST_CHECK_NEXT(TYPE *elm, LIST_ENTRY NAME)
|
||||
*
|
||||
* If an element follows 'elm' in the list, validates that the next element
|
||||
* points back at 'elm.'
|
||||
*/
|
||||
#define QMD_LIST_CHECK_NEXT(elm, field) do { \
|
||||
if (LIST_NEXT((elm), field) != NULL && \
|
||||
LIST_NEXT((elm), field)->field.le_prev != \
|
||||
&((elm)->field.le_next)) \
|
||||
panic("Bad link elm %p next->prev != elm", (elm)); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* QMD_LIST_CHECK_PREV(TYPE *elm, LIST_ENTRY NAME)
|
||||
*
|
||||
* Validates that the previous element (or head of the list) points to 'elm.'
|
||||
*/
|
||||
#define QMD_LIST_CHECK_PREV(elm, field) do { \
|
||||
if (*(elm)->field.le_prev != (elm)) \
|
||||
panic("Bad link elm %p prev->next != elm", (elm)); \
|
||||
} while (0)
|
||||
#else
|
||||
#define QMD_LIST_CHECK_HEAD(head, field)
|
||||
#define QMD_LIST_CHECK_NEXT(elm, field)
|
||||
#define QMD_LIST_CHECK_PREV(elm, field)
|
||||
#endif /* (_KERNEL && INVARIANTS) */
|
||||
|
||||
#define LIST_CONCAT(head1, head2, type, field) do { \
|
||||
QUEUE_TYPEOF(type) *curelm = LIST_FIRST(head1); \
|
||||
if (curelm == NULL) { \
|
||||
if ((LIST_FIRST(head1) = LIST_FIRST(head2)) != NULL) { \
|
||||
LIST_FIRST(head2)->field.le_prev = \
|
||||
&LIST_FIRST((head1)); \
|
||||
LIST_INIT(head2); \
|
||||
} \
|
||||
} else if (LIST_FIRST(head2) != NULL) { \
|
||||
while (LIST_NEXT(curelm, field) != NULL) \
|
||||
curelm = LIST_NEXT(curelm, field); \
|
||||
LIST_NEXT(curelm, field) = LIST_FIRST(head2); \
|
||||
LIST_FIRST(head2)->field.le_prev = &LIST_NEXT(curelm, field); \
|
||||
LIST_INIT(head2); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define LIST_EMPTY(head) ((head)->lh_first == NULL)
|
||||
|
||||
#define LIST_FIRST(head) ((head)->lh_first)
|
||||
|
||||
#define LIST_FOREACH(var, head, field) \
|
||||
for ((var) = LIST_FIRST((head)); \
|
||||
(var); \
|
||||
(var) = LIST_NEXT((var), field))
|
||||
|
||||
#define LIST_FOREACH_FROM(var, head, field) \
|
||||
for ((var) = ((var) ? (var) : LIST_FIRST((head))); \
|
||||
(var); \
|
||||
(var) = LIST_NEXT((var), field))
|
||||
|
||||
#define LIST_FOREACH_SAFE(var, head, field, tvar) \
|
||||
for ((var) = LIST_FIRST((head)); \
|
||||
(var) && ((tvar) = LIST_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define LIST_FOREACH_FROM_SAFE(var, head, field, tvar) \
|
||||
for ((var) = ((var) ? (var) : LIST_FIRST((head))); \
|
||||
(var) && ((tvar) = LIST_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define LIST_INIT(head) do { \
|
||||
LIST_FIRST((head)) = NULL; \
|
||||
} while (0)
|
||||
|
||||
#define LIST_INSERT_AFTER(listelm, elm, field) do { \
|
||||
QMD_LIST_CHECK_NEXT(listelm, field); \
|
||||
if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
|
||||
LIST_NEXT((listelm), field)->field.le_prev = \
|
||||
&LIST_NEXT((elm), field); \
|
||||
LIST_NEXT((listelm), field) = (elm); \
|
||||
(elm)->field.le_prev = &LIST_NEXT((listelm), field); \
|
||||
} while (0)
|
||||
|
||||
#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
|
||||
QMD_LIST_CHECK_PREV(listelm, field); \
|
||||
(elm)->field.le_prev = (listelm)->field.le_prev; \
|
||||
LIST_NEXT((elm), field) = (listelm); \
|
||||
*(listelm)->field.le_prev = (elm); \
|
||||
(listelm)->field.le_prev = &LIST_NEXT((elm), field); \
|
||||
} while (0)
|
||||
|
||||
#define LIST_INSERT_HEAD(head, elm, field) do { \
|
||||
QMD_LIST_CHECK_HEAD((head), field); \
|
||||
if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \
|
||||
LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
|
||||
LIST_FIRST((head)) = (elm); \
|
||||
(elm)->field.le_prev = &LIST_FIRST((head)); \
|
||||
} while (0)
|
||||
|
||||
#define LIST_NEXT(elm, field) ((elm)->field.le_next)
|
||||
|
||||
#define LIST_PREV(elm, head, type, field) \
|
||||
((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \
|
||||
__containerof((elm)->field.le_prev, \
|
||||
QUEUE_TYPEOF(type), field.le_next))
|
||||
|
||||
#define LIST_REMOVE(elm, field) do { \
|
||||
QMD_SAVELINK(oldnext, (elm)->field.le_next); \
|
||||
QMD_SAVELINK(oldprev, (elm)->field.le_prev); \
|
||||
QMD_LIST_CHECK_NEXT(elm, field); \
|
||||
QMD_LIST_CHECK_PREV(elm, field); \
|
||||
if (LIST_NEXT((elm), field) != NULL) \
|
||||
LIST_NEXT((elm), field)->field.le_prev = \
|
||||
(elm)->field.le_prev; \
|
||||
*(elm)->field.le_prev = LIST_NEXT((elm), field); \
|
||||
TRASHIT(*oldnext); \
|
||||
TRASHIT(*oldprev); \
|
||||
} while (0)
|
||||
|
||||
#define LIST_SWAP(head1, head2, type, field) do { \
|
||||
QUEUE_TYPEOF(type) *swap_tmp = LIST_FIRST(head1); \
|
||||
LIST_FIRST((head1)) = LIST_FIRST((head2)); \
|
||||
LIST_FIRST((head2)) = swap_tmp; \
|
||||
if ((swap_tmp = LIST_FIRST((head1))) != NULL) \
|
||||
swap_tmp->field.le_prev = &LIST_FIRST((head1)); \
|
||||
if ((swap_tmp = LIST_FIRST((head2))) != NULL) \
|
||||
swap_tmp->field.le_prev = &LIST_FIRST((head2)); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Tail queue declarations.
|
||||
*/
|
||||
#define TAILQ_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *tqh_first; /* first element */ \
|
||||
struct type **tqh_last; /* addr of last next element */ \
|
||||
TRACEBUF \
|
||||
}
|
||||
|
||||
#define TAILQ_CLASS_HEAD(name, type) \
|
||||
struct name { \
|
||||
class type *tqh_first; /* first element */ \
|
||||
class type **tqh_last; /* addr of last next element */ \
|
||||
TRACEBUF \
|
||||
}
|
||||
|
||||
#define TAILQ_HEAD_INITIALIZER(head) \
|
||||
{ NULL, &(head).tqh_first, TRACEBUF_INITIALIZER }
|
||||
|
||||
#define TAILQ_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *tqe_next; /* next element */ \
|
||||
struct type **tqe_prev; /* address of previous next element */ \
|
||||
TRACEBUF \
|
||||
}
|
||||
|
||||
#define TAILQ_CLASS_ENTRY(type) \
|
||||
struct { \
|
||||
class type *tqe_next; /* next element */ \
|
||||
class type **tqe_prev; /* address of previous next element */ \
|
||||
TRACEBUF \
|
||||
}
|
||||
|
||||
/*
|
||||
* Tail queue functions.
|
||||
*/
|
||||
#if (defined(_KERNEL) && defined(INVARIANTS))
|
||||
/*
|
||||
* QMD_TAILQ_CHECK_HEAD(TAILQ_HEAD *head, TAILQ_ENTRY NAME)
|
||||
*
|
||||
* If the tailq is non-empty, validates that the first element of the tailq
|
||||
* points back at 'head.'
|
||||
*/
|
||||
#define QMD_TAILQ_CHECK_HEAD(head, field) do { \
|
||||
if (!TAILQ_EMPTY(head) && \
|
||||
TAILQ_FIRST((head))->field.tqe_prev != \
|
||||
&TAILQ_FIRST((head))) \
|
||||
panic("Bad tailq head %p first->prev != head", (head)); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* QMD_TAILQ_CHECK_TAIL(TAILQ_HEAD *head, TAILQ_ENTRY NAME)
|
||||
*
|
||||
* Validates that the tail of the tailq is a pointer to pointer to NULL.
|
||||
*/
|
||||
#define QMD_TAILQ_CHECK_TAIL(head, field) do { \
|
||||
if (*(head)->tqh_last != NULL) \
|
||||
panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* QMD_TAILQ_CHECK_NEXT(TYPE *elm, TAILQ_ENTRY NAME)
|
||||
*
|
||||
* If an element follows 'elm' in the tailq, validates that the next element
|
||||
* points back at 'elm.'
|
||||
*/
|
||||
#define QMD_TAILQ_CHECK_NEXT(elm, field) do { \
|
||||
if (TAILQ_NEXT((elm), field) != NULL && \
|
||||
TAILQ_NEXT((elm), field)->field.tqe_prev != \
|
||||
&((elm)->field.tqe_next)) \
|
||||
panic("Bad link elm %p next->prev != elm", (elm)); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* QMD_TAILQ_CHECK_PREV(TYPE *elm, TAILQ_ENTRY NAME)
|
||||
*
|
||||
* Validates that the previous element (or head of the tailq) points to 'elm.'
|
||||
*/
|
||||
#define QMD_TAILQ_CHECK_PREV(elm, field) do { \
|
||||
if (*(elm)->field.tqe_prev != (elm)) \
|
||||
panic("Bad link elm %p prev->next != elm", (elm)); \
|
||||
} while (0)
|
||||
#else
|
||||
#define QMD_TAILQ_CHECK_HEAD(head, field)
|
||||
#define QMD_TAILQ_CHECK_TAIL(head, headname)
|
||||
#define QMD_TAILQ_CHECK_NEXT(elm, field)
|
||||
#define QMD_TAILQ_CHECK_PREV(elm, field)
|
||||
#endif /* (_KERNEL && INVARIANTS) */
|
||||
|
||||
#define TAILQ_CONCAT(head1, head2, field) do { \
|
||||
if (!TAILQ_EMPTY(head2)) { \
|
||||
*(head1)->tqh_last = (head2)->tqh_first; \
|
||||
(head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
|
||||
(head1)->tqh_last = (head2)->tqh_last; \
|
||||
TAILQ_INIT((head2)); \
|
||||
QMD_TRACE_HEAD(head1); \
|
||||
QMD_TRACE_HEAD(head2); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
|
||||
|
||||
#define TAILQ_FIRST(head) ((head)->tqh_first)
|
||||
|
||||
#define TAILQ_FOREACH(var, head, field) \
|
||||
for ((var) = TAILQ_FIRST((head)); \
|
||||
(var); \
|
||||
(var) = TAILQ_NEXT((var), field))
|
||||
|
||||
#define TAILQ_FOREACH_FROM(var, head, field) \
|
||||
for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \
|
||||
(var); \
|
||||
(var) = TAILQ_NEXT((var), field))
|
||||
|
||||
#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
|
||||
for ((var) = TAILQ_FIRST((head)); \
|
||||
(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \
|
||||
for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \
|
||||
(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
|
||||
for ((var) = TAILQ_LAST((head), headname); \
|
||||
(var); \
|
||||
(var) = TAILQ_PREV((var), headname, field))
|
||||
|
||||
#define TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field) \
|
||||
for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \
|
||||
(var); \
|
||||
(var) = TAILQ_PREV((var), headname, field))
|
||||
|
||||
#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
|
||||
for ((var) = TAILQ_LAST((head), headname); \
|
||||
(var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar) \
|
||||
for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \
|
||||
(var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define TAILQ_INIT(head) do { \
|
||||
TAILQ_FIRST((head)) = NULL; \
|
||||
(head)->tqh_last = &TAILQ_FIRST((head)); \
|
||||
QMD_TRACE_HEAD(head); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
|
||||
QMD_TAILQ_CHECK_NEXT(listelm, field); \
|
||||
if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
|
||||
TAILQ_NEXT((elm), field)->field.tqe_prev = \
|
||||
&TAILQ_NEXT((elm), field); \
|
||||
else { \
|
||||
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
|
||||
QMD_TRACE_HEAD(head); \
|
||||
} \
|
||||
TAILQ_NEXT((listelm), field) = (elm); \
|
||||
(elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \
|
||||
QMD_TRACE_ELEM(&(elm)->field); \
|
||||
QMD_TRACE_ELEM(&(listelm)->field); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
|
||||
QMD_TAILQ_CHECK_PREV(listelm, field); \
|
||||
(elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
|
||||
TAILQ_NEXT((elm), field) = (listelm); \
|
||||
*(listelm)->field.tqe_prev = (elm); \
|
||||
(listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \
|
||||
QMD_TRACE_ELEM(&(elm)->field); \
|
||||
QMD_TRACE_ELEM(&(listelm)->field); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_HEAD(head, elm, field) do { \
|
||||
QMD_TAILQ_CHECK_HEAD(head, field); \
|
||||
if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \
|
||||
TAILQ_FIRST((head))->field.tqe_prev = \
|
||||
&TAILQ_NEXT((elm), field); \
|
||||
else \
|
||||
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
|
||||
TAILQ_FIRST((head)) = (elm); \
|
||||
(elm)->field.tqe_prev = &TAILQ_FIRST((head)); \
|
||||
QMD_TRACE_HEAD(head); \
|
||||
QMD_TRACE_ELEM(&(elm)->field); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_TAIL(head, elm, field) do { \
|
||||
QMD_TAILQ_CHECK_TAIL(head, field); \
|
||||
TAILQ_NEXT((elm), field) = NULL; \
|
||||
(elm)->field.tqe_prev = (head)->tqh_last; \
|
||||
*(head)->tqh_last = (elm); \
|
||||
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
|
||||
QMD_TRACE_HEAD(head); \
|
||||
QMD_TRACE_ELEM(&(elm)->field); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_LAST(head, headname) \
|
||||
(*(((struct headname *)((head)->tqh_last))->tqh_last))
|
||||
|
||||
/*
|
||||
* The FAST function is fast in that it causes no data access other
|
||||
* then the access to the head. The standard LAST function above
|
||||
* will cause a data access of both the element you want and
|
||||
* the previous element. FAST is very useful for instances when
|
||||
* you may want to prefetch the last data element.
|
||||
*/
|
||||
#define TAILQ_LAST_FAST(head, type, field) \
|
||||
(TAILQ_EMPTY(head) ? NULL : __containerof((head)->tqh_last, QUEUE_TYPEOF(type), field.tqe_next))
|
||||
|
||||
#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
|
||||
|
||||
#define TAILQ_PREV(elm, headname, field) \
|
||||
(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
|
||||
|
||||
#define TAILQ_REMOVE(head, elm, field) do { \
|
||||
QMD_SAVELINK(oldnext, (elm)->field.tqe_next); \
|
||||
QMD_SAVELINK(oldprev, (elm)->field.tqe_prev); \
|
||||
QMD_TAILQ_CHECK_NEXT(elm, field); \
|
||||
QMD_TAILQ_CHECK_PREV(elm, field); \
|
||||
if ((TAILQ_NEXT((elm), field)) != NULL) \
|
||||
TAILQ_NEXT((elm), field)->field.tqe_prev = \
|
||||
(elm)->field.tqe_prev; \
|
||||
else { \
|
||||
(head)->tqh_last = (elm)->field.tqe_prev; \
|
||||
QMD_TRACE_HEAD(head); \
|
||||
} \
|
||||
*(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \
|
||||
TRASHIT(*oldnext); \
|
||||
TRASHIT(*oldprev); \
|
||||
QMD_TRACE_ELEM(&(elm)->field); \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_SWAP(head1, head2, type, field) do { \
|
||||
QUEUE_TYPEOF(type) *swap_first = (head1)->tqh_first; \
|
||||
QUEUE_TYPEOF(type) **swap_last = (head1)->tqh_last; \
|
||||
(head1)->tqh_first = (head2)->tqh_first; \
|
||||
(head1)->tqh_last = (head2)->tqh_last; \
|
||||
(head2)->tqh_first = swap_first; \
|
||||
(head2)->tqh_last = swap_last; \
|
||||
if ((swap_first = (head1)->tqh_first) != NULL) \
|
||||
swap_first->field.tqe_prev = &(head1)->tqh_first; \
|
||||
else \
|
||||
(head1)->tqh_last = &(head1)->tqh_first; \
|
||||
if ((swap_first = (head2)->tqh_first) != NULL) \
|
||||
swap_first->field.tqe_prev = &(head2)->tqh_first; \
|
||||
else \
|
||||
(head2)->tqh_last = &(head2)->tqh_first; \
|
||||
} while (0)
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
/*
|
||||
* XXX insque() and remque() are an old way of handling certain queues.
|
||||
* They bogusly assumes that all queue heads look alike.
|
||||
*/
|
||||
|
||||
struct quehead {
|
||||
struct quehead *qh_link;
|
||||
struct quehead *qh_rlink;
|
||||
};
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
static __inline void
|
||||
insque(void *a, void *b)
|
||||
{
|
||||
struct quehead *element = (struct quehead *)a,
|
||||
*head = (struct quehead *)b;
|
||||
|
||||
element->qh_link = head->qh_link;
|
||||
element->qh_rlink = head;
|
||||
head->qh_link = element;
|
||||
element->qh_link->qh_rlink = element;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
remque(void *a)
|
||||
{
|
||||
struct quehead *element = (struct quehead *)a;
|
||||
|
||||
element->qh_link->qh_rlink = element->qh_rlink;
|
||||
element->qh_rlink->qh_link = element->qh_link;
|
||||
element->qh_rlink = 0;
|
||||
}
|
||||
|
||||
#else /* !__GNUC__ */
|
||||
|
||||
void insque(void *a, void *b);
|
||||
void remque(void *a);
|
||||
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_SYS_QUEUE_H_ */
|
||||
880
prebuilts/gcc/arm-none-eabi/include/sys/reent.h
Normal file
880
prebuilts/gcc/arm-none-eabi/include/sys/reent.h
Normal file
@@ -0,0 +1,880 @@
|
||||
/* This header file provides the reentrancy. */
|
||||
|
||||
/* WARNING: All identifiers here must begin with an underscore. This file is
|
||||
included by stdio.h and others and we therefore must only use identifiers
|
||||
in the namespace allotted to us. */
|
||||
|
||||
#ifndef _SYS_REENT_H_
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define _SYS_REENT_H_
|
||||
|
||||
#include <_ansi.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
#define _NULL 0
|
||||
|
||||
#ifndef __Long
|
||||
#if __LONG_MAX__ == 2147483647L
|
||||
#define __Long long
|
||||
typedef unsigned __Long __ULong;
|
||||
#elif __INT_MAX__ == 2147483647
|
||||
#define __Long int
|
||||
typedef unsigned __Long __ULong;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined( __Long)
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#ifndef __machine_flock_t_defined
|
||||
#include <sys/lock.h>
|
||||
typedef _LOCK_RECURSIVE_T _flock_t;
|
||||
#endif
|
||||
|
||||
#ifndef __Long
|
||||
#define __Long __int32_t
|
||||
typedef __uint32_t __ULong;
|
||||
#endif
|
||||
|
||||
struct _reent;
|
||||
|
||||
struct __locale_t;
|
||||
|
||||
/*
|
||||
* If _REENT_SMALL is defined, we make struct _reent as small as possible,
|
||||
* by having nearly everything possible allocated at first use.
|
||||
*/
|
||||
|
||||
struct _Bigint
|
||||
{
|
||||
struct _Bigint *_next;
|
||||
int _k, _maxwds, _sign, _wds;
|
||||
__ULong _x[1];
|
||||
};
|
||||
|
||||
/* needed by reentrant structure */
|
||||
struct __tm
|
||||
{
|
||||
int __tm_sec;
|
||||
int __tm_min;
|
||||
int __tm_hour;
|
||||
int __tm_mday;
|
||||
int __tm_mon;
|
||||
int __tm_year;
|
||||
int __tm_wday;
|
||||
int __tm_yday;
|
||||
int __tm_isdst;
|
||||
};
|
||||
|
||||
/*
|
||||
* atexit() support.
|
||||
*/
|
||||
|
||||
#define _ATEXIT_SIZE 32 /* must be at least 32 to guarantee ANSI conformance */
|
||||
|
||||
struct _on_exit_args {
|
||||
void * _fnargs[_ATEXIT_SIZE]; /* user fn args */
|
||||
void * _dso_handle[_ATEXIT_SIZE];
|
||||
/* Bitmask is set if user function takes arguments. */
|
||||
__ULong _fntypes; /* type of exit routine -
|
||||
Must have at least _ATEXIT_SIZE bits */
|
||||
/* Bitmask is set if function was registered via __cxa_atexit. */
|
||||
__ULong _is_cxa;
|
||||
};
|
||||
|
||||
#ifdef _REENT_SMALL
|
||||
struct _atexit {
|
||||
struct _atexit *_next; /* next in list */
|
||||
int _ind; /* next index in this table */
|
||||
void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */
|
||||
struct _on_exit_args * _on_exit_args_ptr;
|
||||
};
|
||||
# define _ATEXIT_INIT {_NULL, 0, {_NULL}, _NULL}
|
||||
#else
|
||||
struct _atexit {
|
||||
struct _atexit *_next; /* next in list */
|
||||
int _ind; /* next index in this table */
|
||||
/* Some entries may already have been called, and will be NULL. */
|
||||
void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */
|
||||
struct _on_exit_args _on_exit_args;
|
||||
};
|
||||
# define _ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Stdio buffers.
|
||||
*
|
||||
* This and __FILE are defined here because we need them for struct _reent,
|
||||
* but we don't want stdio.h included when stdlib.h is.
|
||||
*/
|
||||
|
||||
struct __sbuf {
|
||||
unsigned char *_base;
|
||||
int _size;
|
||||
};
|
||||
|
||||
/*
|
||||
* Stdio state variables.
|
||||
*
|
||||
* The following always hold:
|
||||
*
|
||||
* if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
|
||||
* _lbfsize is -_bf._size, else _lbfsize is 0
|
||||
* if _flags&__SRD, _w is 0
|
||||
* if _flags&__SWR, _r is 0
|
||||
*
|
||||
* This ensures that the getc and putc macros (or inline functions) never
|
||||
* try to write or read from a file that is in `read' or `write' mode.
|
||||
* (Moreover, they can, and do, automatically switch from read mode to
|
||||
* write mode, and back, on "r+" and "w+" files.)
|
||||
*
|
||||
* _lbfsize is used only to make the inline line-buffered output stream
|
||||
* code as compact as possible.
|
||||
*
|
||||
* _ub, _up, and _ur are used when ungetc() pushes back more characters
|
||||
* than fit in the current _bf, or when ungetc() pushes back a character
|
||||
* that does not match the previous one in _bf. When this happens,
|
||||
* _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
|
||||
* _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
|
||||
*/
|
||||
|
||||
#define _REENT_SMALL_CHECK_INIT(ptr) /* nothing */
|
||||
|
||||
struct __sFILE {
|
||||
unsigned char *_p; /* current position in (some) buffer */
|
||||
int _r; /* read space left for getc() */
|
||||
int _w; /* write space left for putc() */
|
||||
short _flags; /* flags, below; this FILE is free if 0 */
|
||||
short _file; /* fileno, if Unix descriptor, else -1 */
|
||||
struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
|
||||
int _lbfsize; /* 0 or -_bf._size, for inline putc */
|
||||
|
||||
#ifdef _REENT_SMALL
|
||||
struct _reent *_data;
|
||||
#endif
|
||||
|
||||
/* operations */
|
||||
void * _cookie; /* cookie passed to io functions */
|
||||
|
||||
_READ_WRITE_RETURN_TYPE (*_read) (struct _reent *, void *,
|
||||
char *, _READ_WRITE_BUFSIZE_TYPE);
|
||||
_READ_WRITE_RETURN_TYPE (*_write) (struct _reent *, void *,
|
||||
const char *,
|
||||
_READ_WRITE_BUFSIZE_TYPE);
|
||||
_fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int);
|
||||
int (*_close) (struct _reent *, void *);
|
||||
|
||||
/* separate buffer for long sequences of ungetc() */
|
||||
struct __sbuf _ub; /* ungetc buffer */
|
||||
unsigned char *_up; /* saved _p when _p is doing ungetc data */
|
||||
int _ur; /* saved _r when _r is counting ungetc data */
|
||||
|
||||
/* tricks to meet minimum requirements even when malloc() fails */
|
||||
unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
|
||||
unsigned char _nbuf[1]; /* guarantee a getc() buffer */
|
||||
|
||||
/* separate buffer for fgetline() when line crosses buffer boundary */
|
||||
struct __sbuf _lb; /* buffer for fgetline() */
|
||||
|
||||
/* Unix stdio files get aligned to block boundaries on fseek() */
|
||||
int _blksize; /* stat.st_blksize (may be != _bf._size) */
|
||||
_off_t _offset; /* current lseek offset */
|
||||
|
||||
#ifndef _REENT_SMALL
|
||||
struct _reent *_data; /* Here for binary compatibility? Remove? */
|
||||
#endif
|
||||
|
||||
#ifndef __SINGLE_THREAD__
|
||||
_flock_t _lock; /* for thread-safety locking */
|
||||
#endif
|
||||
_mbstate_t _mbstate; /* for wide char stdio functions. */
|
||||
int _flags2; /* for future use */
|
||||
};
|
||||
|
||||
#ifdef __CUSTOM_FILE_IO__
|
||||
|
||||
/* Get custom _FILE definition. */
|
||||
#include <sys/custom_file.h>
|
||||
|
||||
#else /* !__CUSTOM_FILE_IO__ */
|
||||
#ifdef __LARGE64_FILES
|
||||
struct __sFILE64 {
|
||||
unsigned char *_p; /* current position in (some) buffer */
|
||||
int _r; /* read space left for getc() */
|
||||
int _w; /* write space left for putc() */
|
||||
short _flags; /* flags, below; this FILE is free if 0 */
|
||||
short _file; /* fileno, if Unix descriptor, else -1 */
|
||||
struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
|
||||
int _lbfsize; /* 0 or -_bf._size, for inline putc */
|
||||
|
||||
struct _reent *_data;
|
||||
|
||||
/* operations */
|
||||
void * _cookie; /* cookie passed to io functions */
|
||||
|
||||
_READ_WRITE_RETURN_TYPE (*_read) (struct _reent *, void *,
|
||||
char *, _READ_WRITE_BUFSIZE_TYPE);
|
||||
_READ_WRITE_RETURN_TYPE (*_write) (struct _reent *, void *,
|
||||
const char *,
|
||||
_READ_WRITE_BUFSIZE_TYPE);
|
||||
_fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int);
|
||||
int (*_close) (struct _reent *, void *);
|
||||
|
||||
/* separate buffer for long sequences of ungetc() */
|
||||
struct __sbuf _ub; /* ungetc buffer */
|
||||
unsigned char *_up; /* saved _p when _p is doing ungetc data */
|
||||
int _ur; /* saved _r when _r is counting ungetc data */
|
||||
|
||||
/* tricks to meet minimum requirements even when malloc() fails */
|
||||
unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
|
||||
unsigned char _nbuf[1]; /* guarantee a getc() buffer */
|
||||
|
||||
/* separate buffer for fgetline() when line crosses buffer boundary */
|
||||
struct __sbuf _lb; /* buffer for fgetline() */
|
||||
|
||||
/* Unix stdio files get aligned to block boundaries on fseek() */
|
||||
int _blksize; /* stat.st_blksize (may be != _bf._size) */
|
||||
int _flags2; /* for future use */
|
||||
|
||||
_off64_t _offset; /* current lseek offset */
|
||||
_fpos64_t (*_seek64) (struct _reent *, void *, _fpos64_t, int);
|
||||
|
||||
#ifndef __SINGLE_THREAD__
|
||||
_flock_t _lock; /* for thread-safety locking */
|
||||
#endif
|
||||
_mbstate_t _mbstate; /* for wide char stdio functions. */
|
||||
};
|
||||
typedef struct __sFILE64 __FILE;
|
||||
#else
|
||||
typedef struct __sFILE __FILE;
|
||||
#endif /* __LARGE64_FILES */
|
||||
#endif /* !__CUSTOM_FILE_IO__ */
|
||||
|
||||
extern __FILE __sf[3];
|
||||
|
||||
struct _glue
|
||||
{
|
||||
struct _glue *_next;
|
||||
int _niobs;
|
||||
__FILE *_iobs;
|
||||
};
|
||||
|
||||
extern struct _glue __sglue;
|
||||
|
||||
/*
|
||||
* rand48 family support
|
||||
*
|
||||
* Copyright (c) 1993 Martin Birgmeier
|
||||
* All rights reserved.
|
||||
*
|
||||
* You may redistribute unmodified or modified versions of this source
|
||||
* code provided that the above copyright notice and this and the
|
||||
* following conditions are retained.
|
||||
*
|
||||
* This software is provided ``as is'', and comes with no warranties
|
||||
* of any kind. I shall in no event be liable for anything that happens
|
||||
* to anyone/anything when using this software.
|
||||
*/
|
||||
#define _RAND48_SEED_0 (0x330e)
|
||||
#define _RAND48_SEED_1 (0xabcd)
|
||||
#define _RAND48_SEED_2 (0x1234)
|
||||
#define _RAND48_MULT_0 (0xe66d)
|
||||
#define _RAND48_MULT_1 (0xdeec)
|
||||
#define _RAND48_MULT_2 (0x0005)
|
||||
#define _RAND48_ADD (0x000b)
|
||||
struct _rand48 {
|
||||
unsigned short _seed[3];
|
||||
unsigned short _mult[3];
|
||||
unsigned short _add;
|
||||
#ifdef _REENT_SMALL
|
||||
/* Put this in here as well, for good luck. */
|
||||
__extension__ unsigned long long _rand_next;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* How big the some arrays are. */
|
||||
#define _REENT_EMERGENCY_SIZE 25
|
||||
#define _REENT_ASCTIME_SIZE 26
|
||||
#define _REENT_SIGNAL_SIZE 24
|
||||
|
||||
#ifndef _REENT_THREAD_LOCAL
|
||||
|
||||
#ifdef _REENT_BACKWARD_BINARY_COMPAT
|
||||
#define _REENT_INIT_RESERVED_0 0,
|
||||
#define _REENT_INIT_RESERVED_1 0,
|
||||
#define _REENT_INIT_RESERVED_2 0,
|
||||
#define _REENT_INIT_RESERVED_6_7 _NULL, _ATEXIT_INIT,
|
||||
#define _REENT_INIT_RESERVED_8 {_NULL, 0, _NULL},
|
||||
#else
|
||||
#define _REENT_INIT_RESERVED_0 /* Nothing to initialize */
|
||||
#define _REENT_INIT_RESERVED_1 /* Nothing to initialize */
|
||||
#define _REENT_INIT_RESERVED_2 /* Nothing to initialize */
|
||||
#define _REENT_INIT_RESERVED_6_7 /* Nothing to initialize */
|
||||
#define _REENT_INIT_RESERVED_8 /* Nothing to initialize */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* struct _reent
|
||||
*
|
||||
* This structure contains the thread-local objects needed by the library.
|
||||
* It's raison d'etre is to facilitate threads by making all library routines
|
||||
* reentrant. The exit handler support and FILE maintenance use dedicated
|
||||
* global objects which are not included in this structure.
|
||||
*/
|
||||
|
||||
#ifdef _REENT_SMALL
|
||||
|
||||
struct _mprec
|
||||
{
|
||||
/* used by mprec routines */
|
||||
struct _Bigint *_result;
|
||||
int _result_k;
|
||||
struct _Bigint *_p5s;
|
||||
struct _Bigint **_freelist;
|
||||
};
|
||||
|
||||
|
||||
struct _misc_reent
|
||||
{
|
||||
/* miscellaneous reentrant data */
|
||||
char *_strtok_last;
|
||||
_mbstate_t _mblen_state;
|
||||
_mbstate_t _wctomb_state;
|
||||
_mbstate_t _mbtowc_state;
|
||||
char _l64a_buf[8];
|
||||
int _getdate_err;
|
||||
_mbstate_t _mbrlen_state;
|
||||
_mbstate_t _mbrtowc_state;
|
||||
_mbstate_t _mbsrtowcs_state;
|
||||
_mbstate_t _wcrtomb_state;
|
||||
_mbstate_t _wcsrtombs_state;
|
||||
};
|
||||
|
||||
/* This version of _reent is laid out with "int"s in pairs, to help
|
||||
* ports with 16-bit int's but 32-bit pointers, align nicely. */
|
||||
struct _reent
|
||||
{
|
||||
/* As an exception to the above put _errno first for binary
|
||||
compatibility with non _REENT_SMALL targets. */
|
||||
int _errno; /* local copy of errno */
|
||||
|
||||
/* FILE is a big struct and may change over time. To try to achieve binary
|
||||
compatibility with future versions, put stdin,stdout,stderr here.
|
||||
These are pointers into member __sf defined below. */
|
||||
__FILE *_stdin, *_stdout, *_stderr; /* XXX */
|
||||
|
||||
int _inc; /* used by tmpnam */
|
||||
|
||||
char *_emergency;
|
||||
|
||||
#ifdef _REENT_BACKWARD_BINARY_COMPAT
|
||||
int _reserved_0;
|
||||
int _reserved_1;
|
||||
#endif
|
||||
struct __locale_t *_locale;/* per-thread locale */
|
||||
|
||||
struct _mprec *_mp;
|
||||
|
||||
void (*__cleanup) (struct _reent *);
|
||||
|
||||
int _gamma_signgam;
|
||||
|
||||
/* used by some fp conversion routines */
|
||||
int _cvtlen; /* should be size_t */
|
||||
char *_cvtbuf;
|
||||
|
||||
struct _rand48 *_r48;
|
||||
struct __tm *_localtime_buf;
|
||||
char *_asctime_buf;
|
||||
|
||||
/* signal info */
|
||||
void (** _sig_func)(int);
|
||||
|
||||
#ifdef _REENT_BACKWARD_BINARY_COMPAT
|
||||
struct _atexit *_reserved_6;
|
||||
struct _atexit _reserved_7;
|
||||
struct _glue _reserved_8;
|
||||
#endif
|
||||
|
||||
__FILE *__sf; /* file descriptors */
|
||||
struct _misc_reent *_misc; /* strtok, multibyte states */
|
||||
char *_signal_buf; /* strsignal */
|
||||
};
|
||||
|
||||
# define _REENT_INIT(var) \
|
||||
{ 0, \
|
||||
&__sf[0], \
|
||||
&__sf[1], \
|
||||
&__sf[2], \
|
||||
0, \
|
||||
_NULL, \
|
||||
_REENT_INIT_RESERVED_0 \
|
||||
_REENT_INIT_RESERVED_1 \
|
||||
_NULL, \
|
||||
_NULL, \
|
||||
_NULL, \
|
||||
0, \
|
||||
0, \
|
||||
_NULL, \
|
||||
_NULL, \
|
||||
_NULL, \
|
||||
_NULL, \
|
||||
_NULL, \
|
||||
_REENT_INIT_RESERVED_6_7 \
|
||||
_REENT_INIT_RESERVED_8 \
|
||||
_NULL, \
|
||||
_NULL, \
|
||||
_NULL \
|
||||
}
|
||||
|
||||
#define _REENT_INIT_PTR_ZEROED(var) \
|
||||
{ (var)->_stdin = &__sf[0]; \
|
||||
(var)->_stdout = &__sf[1]; \
|
||||
(var)->_stderr = &__sf[2]; \
|
||||
}
|
||||
|
||||
/* Specify how to handle reent_check malloc failures. */
|
||||
#ifdef _REENT_CHECK_VERIFY
|
||||
#include <assert.h>
|
||||
#define __reent_assert(x) ((x) ? (void)0 : __assert_func(__FILE__, __LINE__, (char *)0, "REENT malloc succeeded"))
|
||||
#else
|
||||
#define __reent_assert(x) ((void)0)
|
||||
#endif
|
||||
|
||||
#ifdef __CUSTOM_FILE_IO__
|
||||
#error Custom FILE I/O and _REENT_SMALL not currently supported.
|
||||
#endif
|
||||
|
||||
/* Generic _REENT check macro. */
|
||||
#define _REENT_CHECK(var, what, type, size, init) do { \
|
||||
struct _reent *_r = (var); \
|
||||
if (_r->what == NULL) { \
|
||||
_r->what = (type)malloc(size); \
|
||||
__reent_assert(_r->what); \
|
||||
init; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define _REENT_CHECK_TM(var) \
|
||||
_REENT_CHECK(var, _localtime_buf, struct __tm *, sizeof *((var)->_localtime_buf), \
|
||||
/* nothing */)
|
||||
|
||||
#define _REENT_CHECK_ASCTIME_BUF(var) \
|
||||
_REENT_CHECK(var, _asctime_buf, char *, _REENT_ASCTIME_SIZE, \
|
||||
memset((var)->_asctime_buf, 0, _REENT_ASCTIME_SIZE))
|
||||
|
||||
/* Handle the dynamically allocated rand48 structure. */
|
||||
#define _REENT_INIT_RAND48(var) do { \
|
||||
struct _reent *_r = (var); \
|
||||
_r->_r48->_seed[0] = _RAND48_SEED_0; \
|
||||
_r->_r48->_seed[1] = _RAND48_SEED_1; \
|
||||
_r->_r48->_seed[2] = _RAND48_SEED_2; \
|
||||
_r->_r48->_mult[0] = _RAND48_MULT_0; \
|
||||
_r->_r48->_mult[1] = _RAND48_MULT_1; \
|
||||
_r->_r48->_mult[2] = _RAND48_MULT_2; \
|
||||
_r->_r48->_add = _RAND48_ADD; \
|
||||
_r->_r48->_rand_next = 1; \
|
||||
} while (0)
|
||||
#define _REENT_CHECK_RAND48(var) \
|
||||
_REENT_CHECK(var, _r48, struct _rand48 *, sizeof *((var)->_r48), _REENT_INIT_RAND48((var)))
|
||||
|
||||
#define _REENT_INIT_MP(var) do { \
|
||||
struct _reent *_r = (var); \
|
||||
_r->_mp->_result_k = 0; \
|
||||
_r->_mp->_result = _r->_mp->_p5s = _NULL; \
|
||||
_r->_mp->_freelist = _NULL; \
|
||||
} while (0)
|
||||
#define _REENT_CHECK_MP(var) \
|
||||
_REENT_CHECK(var, _mp, struct _mprec *, sizeof *((var)->_mp), _REENT_INIT_MP(var))
|
||||
|
||||
#define _REENT_CHECK_EMERGENCY(var) \
|
||||
_REENT_CHECK(var, _emergency, char *, _REENT_EMERGENCY_SIZE, /* nothing */)
|
||||
|
||||
#define _REENT_INIT_MISC(var) do { \
|
||||
struct _reent *_r = (var); \
|
||||
_r->_misc->_strtok_last = _NULL; \
|
||||
_r->_misc->_mblen_state.__count = 0; \
|
||||
_r->_misc->_mblen_state.__value.__wch = 0; \
|
||||
_r->_misc->_wctomb_state.__count = 0; \
|
||||
_r->_misc->_wctomb_state.__value.__wch = 0; \
|
||||
_r->_misc->_mbtowc_state.__count = 0; \
|
||||
_r->_misc->_mbtowc_state.__value.__wch = 0; \
|
||||
_r->_misc->_mbrlen_state.__count = 0; \
|
||||
_r->_misc->_mbrlen_state.__value.__wch = 0; \
|
||||
_r->_misc->_mbrtowc_state.__count = 0; \
|
||||
_r->_misc->_mbrtowc_state.__value.__wch = 0; \
|
||||
_r->_misc->_mbsrtowcs_state.__count = 0; \
|
||||
_r->_misc->_mbsrtowcs_state.__value.__wch = 0; \
|
||||
_r->_misc->_wcrtomb_state.__count = 0; \
|
||||
_r->_misc->_wcrtomb_state.__value.__wch = 0; \
|
||||
_r->_misc->_wcsrtombs_state.__count = 0; \
|
||||
_r->_misc->_wcsrtombs_state.__value.__wch = 0; \
|
||||
_r->_misc->_l64a_buf[0] = '\0'; \
|
||||
_r->_misc->_getdate_err = 0; \
|
||||
} while (0)
|
||||
#define _REENT_CHECK_MISC(var) \
|
||||
_REENT_CHECK(var, _misc, struct _misc_reent *, sizeof *((var)->_misc), _REENT_INIT_MISC(var))
|
||||
|
||||
#define _REENT_CHECK_SIGNAL_BUF(var) \
|
||||
_REENT_CHECK(var, _signal_buf, char *, _REENT_SIGNAL_SIZE, /* nothing */)
|
||||
|
||||
#define _REENT_SIGNGAM(ptr) ((ptr)->_gamma_signgam)
|
||||
#define _REENT_RAND_NEXT(ptr) ((ptr)->_r48->_rand_next)
|
||||
#define _REENT_RAND48_SEED(ptr) ((ptr)->_r48->_seed)
|
||||
#define _REENT_RAND48_MULT(ptr) ((ptr)->_r48->_mult)
|
||||
#define _REENT_RAND48_ADD(ptr) ((ptr)->_r48->_add)
|
||||
#define _REENT_MP_RESULT(ptr) ((ptr)->_mp->_result)
|
||||
#define _REENT_MP_RESULT_K(ptr) ((ptr)->_mp->_result_k)
|
||||
#define _REENT_MP_P5S(ptr) ((ptr)->_mp->_p5s)
|
||||
#define _REENT_MP_FREELIST(ptr) ((ptr)->_mp->_freelist)
|
||||
#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_asctime_buf)
|
||||
#define _REENT_TM(ptr) ((ptr)->_localtime_buf)
|
||||
#define _REENT_STRTOK_LAST(ptr) ((ptr)->_misc->_strtok_last)
|
||||
#define _REENT_MBLEN_STATE(ptr) ((ptr)->_misc->_mblen_state)
|
||||
#define _REENT_MBTOWC_STATE(ptr)((ptr)->_misc->_mbtowc_state)
|
||||
#define _REENT_WCTOMB_STATE(ptr)((ptr)->_misc->_wctomb_state)
|
||||
#define _REENT_MBRLEN_STATE(ptr) ((ptr)->_misc->_mbrlen_state)
|
||||
#define _REENT_MBRTOWC_STATE(ptr) ((ptr)->_misc->_mbrtowc_state)
|
||||
#define _REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_misc->_mbsrtowcs_state)
|
||||
#define _REENT_WCRTOMB_STATE(ptr) ((ptr)->_misc->_wcrtomb_state)
|
||||
#define _REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_misc->_wcsrtombs_state)
|
||||
#define _REENT_L64A_BUF(ptr) ((ptr)->_misc->_l64a_buf)
|
||||
#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_misc->_getdate_err))
|
||||
#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_signal_buf)
|
||||
|
||||
#else /* !_REENT_SMALL */
|
||||
|
||||
struct _reent
|
||||
{
|
||||
int _errno; /* local copy of errno */
|
||||
|
||||
/* FILE is a big struct and may change over time. To try to achieve binary
|
||||
compatibility with future versions, put stdin,stdout,stderr here.
|
||||
These are pointers into member __sf defined below. */
|
||||
__FILE *_stdin, *_stdout, *_stderr;
|
||||
|
||||
int _inc; /* used by tmpnam */
|
||||
char _emergency[_REENT_EMERGENCY_SIZE];
|
||||
|
||||
#ifdef _REENT_BACKWARD_BINARY_COMPAT
|
||||
int _reserved_1;
|
||||
#endif
|
||||
struct __locale_t *_locale;/* per-thread locale */
|
||||
|
||||
#ifdef _REENT_BACKWARD_BINARY_COMPAT
|
||||
int _reserved_0;
|
||||
#endif
|
||||
|
||||
void (*__cleanup) (struct _reent *);
|
||||
|
||||
/* used by mprec routines */
|
||||
struct _Bigint *_result;
|
||||
int _result_k;
|
||||
struct _Bigint *_p5s;
|
||||
struct _Bigint **_freelist;
|
||||
|
||||
/* used by some fp conversion routines */
|
||||
int _cvtlen; /* should be size_t */
|
||||
char *_cvtbuf;
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
#ifdef _REENT_BACKWARD_BINARY_COMPAT
|
||||
unsigned int _reserved_2;
|
||||
#endif
|
||||
char * _strtok_last;
|
||||
char _asctime_buf[_REENT_ASCTIME_SIZE];
|
||||
struct __tm _localtime_buf;
|
||||
int _gamma_signgam;
|
||||
__extension__ unsigned long long _rand_next;
|
||||
struct _rand48 _r48;
|
||||
_mbstate_t _mblen_state;
|
||||
_mbstate_t _mbtowc_state;
|
||||
_mbstate_t _wctomb_state;
|
||||
char _l64a_buf[8];
|
||||
char _signal_buf[_REENT_SIGNAL_SIZE];
|
||||
int _getdate_err;
|
||||
_mbstate_t _mbrlen_state;
|
||||
_mbstate_t _mbrtowc_state;
|
||||
_mbstate_t _mbsrtowcs_state;
|
||||
_mbstate_t _wcrtomb_state;
|
||||
_mbstate_t _wcsrtombs_state;
|
||||
int _h_errno;
|
||||
} _reent;
|
||||
#ifdef _REENT_BACKWARD_BINARY_COMPAT
|
||||
struct
|
||||
{
|
||||
unsigned char * _reserved_3[30];
|
||||
unsigned int _reserved_4[30];
|
||||
} _reserved_5;
|
||||
#endif
|
||||
} _new;
|
||||
|
||||
#ifdef _REENT_BACKWARD_BINARY_COMPAT
|
||||
struct _atexit *_reserved_6;
|
||||
struct _atexit _reserved_7;
|
||||
#endif
|
||||
|
||||
/* signal info */
|
||||
void (**_sig_func)(int);
|
||||
};
|
||||
|
||||
#define _REENT_INIT(var) \
|
||||
{ 0, \
|
||||
&__sf[0], \
|
||||
&__sf[1], \
|
||||
&__sf[2], \
|
||||
0, \
|
||||
"", \
|
||||
_REENT_INIT_RESERVED_1 \
|
||||
_NULL, \
|
||||
_REENT_INIT_RESERVED_0 \
|
||||
_NULL, \
|
||||
_NULL, \
|
||||
0, \
|
||||
_NULL, \
|
||||
_NULL, \
|
||||
0, \
|
||||
_NULL, \
|
||||
{ \
|
||||
{ \
|
||||
_REENT_INIT_RESERVED_2 \
|
||||
_NULL, \
|
||||
"", \
|
||||
{0, 0, 0, 0, 0, 0, 0, 0, 0}, \
|
||||
0, \
|
||||
1, \
|
||||
{ \
|
||||
{_RAND48_SEED_0, _RAND48_SEED_1, _RAND48_SEED_2}, \
|
||||
{_RAND48_MULT_0, _RAND48_MULT_1, _RAND48_MULT_2}, \
|
||||
_RAND48_ADD \
|
||||
}, \
|
||||
{0, {0}}, \
|
||||
{0, {0}}, \
|
||||
{0, {0}}, \
|
||||
"", \
|
||||
"", \
|
||||
0, \
|
||||
{0, {0}}, \
|
||||
{0, {0}}, \
|
||||
{0, {0}}, \
|
||||
{0, {0}}, \
|
||||
{0, {0}} \
|
||||
} \
|
||||
}, \
|
||||
_REENT_INIT_RESERVED_6_7 \
|
||||
_NULL \
|
||||
}
|
||||
|
||||
#define _REENT_INIT_PTR_ZEROED(var) \
|
||||
{ (var)->_stdin = &__sf[0]; \
|
||||
(var)->_stdout = &__sf[1]; \
|
||||
(var)->_stderr = &__sf[2]; \
|
||||
(var)->_new._reent._rand_next = 1; \
|
||||
(var)->_new._reent._r48._seed[0] = _RAND48_SEED_0; \
|
||||
(var)->_new._reent._r48._seed[1] = _RAND48_SEED_1; \
|
||||
(var)->_new._reent._r48._seed[2] = _RAND48_SEED_2; \
|
||||
(var)->_new._reent._r48._mult[0] = _RAND48_MULT_0; \
|
||||
(var)->_new._reent._r48._mult[1] = _RAND48_MULT_1; \
|
||||
(var)->_new._reent._r48._mult[2] = _RAND48_MULT_2; \
|
||||
(var)->_new._reent._r48._add = _RAND48_ADD; \
|
||||
}
|
||||
|
||||
#define _REENT_CHECK_RAND48(ptr) /* nothing */
|
||||
#define _REENT_CHECK_MP(ptr) /* nothing */
|
||||
#define _REENT_CHECK_TM(ptr) /* nothing */
|
||||
#define _REENT_CHECK_ASCTIME_BUF(ptr) /* nothing */
|
||||
#define _REENT_CHECK_EMERGENCY(ptr) /* nothing */
|
||||
#define _REENT_CHECK_MISC(ptr) /* nothing */
|
||||
#define _REENT_CHECK_SIGNAL_BUF(ptr) /* nothing */
|
||||
|
||||
#define _REENT_SIGNGAM(ptr) ((ptr)->_new._reent._gamma_signgam)
|
||||
#define _REENT_RAND_NEXT(ptr) ((ptr)->_new._reent._rand_next)
|
||||
#define _REENT_RAND48_SEED(ptr) ((ptr)->_new._reent._r48._seed)
|
||||
#define _REENT_RAND48_MULT(ptr) ((ptr)->_new._reent._r48._mult)
|
||||
#define _REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add)
|
||||
#define _REENT_MP_RESULT(ptr) ((ptr)->_result)
|
||||
#define _REENT_MP_RESULT_K(ptr) ((ptr)->_result_k)
|
||||
#define _REENT_MP_P5S(ptr) ((ptr)->_p5s)
|
||||
#define _REENT_MP_FREELIST(ptr) ((ptr)->_freelist)
|
||||
#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_new._reent._asctime_buf)
|
||||
#define _REENT_TM(ptr) (&(ptr)->_new._reent._localtime_buf)
|
||||
#define _REENT_STRTOK_LAST(ptr) ((ptr)->_new._reent._strtok_last)
|
||||
#define _REENT_MBLEN_STATE(ptr) ((ptr)->_new._reent._mblen_state)
|
||||
#define _REENT_MBTOWC_STATE(ptr)((ptr)->_new._reent._mbtowc_state)
|
||||
#define _REENT_WCTOMB_STATE(ptr)((ptr)->_new._reent._wctomb_state)
|
||||
#define _REENT_MBRLEN_STATE(ptr)((ptr)->_new._reent._mbrlen_state)
|
||||
#define _REENT_MBRTOWC_STATE(ptr)((ptr)->_new._reent._mbrtowc_state)
|
||||
#define _REENT_MBSRTOWCS_STATE(ptr)((ptr)->_new._reent._mbsrtowcs_state)
|
||||
#define _REENT_WCRTOMB_STATE(ptr)((ptr)->_new._reent._wcrtomb_state)
|
||||
#define _REENT_WCSRTOMBS_STATE(ptr)((ptr)->_new._reent._wcsrtombs_state)
|
||||
#define _REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf)
|
||||
#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf)
|
||||
#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err))
|
||||
|
||||
#endif /* !_REENT_SMALL */
|
||||
|
||||
#define _REENT_CLEANUP(_ptr) ((_ptr)->__cleanup)
|
||||
#define _REENT_CVTBUF(_ptr) ((_ptr)->_cvtbuf)
|
||||
#define _REENT_CVTLEN(_ptr) ((_ptr)->_cvtlen)
|
||||
#define _REENT_EMERGENCY(_ptr) ((_ptr)->_emergency)
|
||||
#define _REENT_ERRNO(_ptr) ((_ptr)->_errno)
|
||||
#define _REENT_INC(_ptr) ((_ptr)->_inc)
|
||||
#define _REENT_LOCALE(_ptr) ((_ptr)->_locale)
|
||||
#define _REENT_SIG_FUNC(_ptr) ((_ptr)->_sig_func)
|
||||
#define _REENT_STDIN(_ptr) ((_ptr)->_stdin)
|
||||
#define _REENT_STDOUT(_ptr) ((_ptr)->_stdout)
|
||||
#define _REENT_STDERR(_ptr) ((_ptr)->_stderr)
|
||||
|
||||
#define _REENT_INIT_PTR(var) \
|
||||
{ memset((var), 0, sizeof(*(var))); \
|
||||
_REENT_INIT_PTR_ZEROED(var); \
|
||||
}
|
||||
|
||||
/*
|
||||
* All references to struct _reent are via this pointer.
|
||||
* Internally, newlib routines that need to reference it should use _REENT.
|
||||
*/
|
||||
|
||||
#ifndef __ATTRIBUTE_IMPURE_PTR__
|
||||
#define __ATTRIBUTE_IMPURE_PTR__
|
||||
#endif
|
||||
|
||||
extern struct _reent *_impure_ptr __ATTRIBUTE_IMPURE_PTR__;
|
||||
|
||||
#ifndef __ATTRIBUTE_IMPURE_DATA__
|
||||
#define __ATTRIBUTE_IMPURE_DATA__
|
||||
#endif
|
||||
|
||||
extern struct _reent _impure_data __ATTRIBUTE_IMPURE_DATA__;
|
||||
|
||||
/* #define _REENT_ONLY define this to get only reentrant routines */
|
||||
|
||||
#if defined(__DYNAMIC_REENT__) && !defined(__SINGLE_THREAD__)
|
||||
#ifndef __getreent
|
||||
struct _reent * __getreent (void);
|
||||
#endif
|
||||
# define _REENT (__getreent())
|
||||
#else /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
|
||||
# define _REENT _impure_ptr
|
||||
#endif /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
|
||||
|
||||
#define _REENT_IS_NULL(_ptr) ((_ptr) == NULL)
|
||||
|
||||
#define _GLOBAL_REENT (&_impure_data)
|
||||
|
||||
#else /* _REENT_THREAD_LOCAL */
|
||||
|
||||
#define _REENT NULL
|
||||
#define _GLOBAL_REENT NULL
|
||||
|
||||
/*
|
||||
* Since _REENT is defined as NULL, this macro ensures that calls to
|
||||
* CHECK_INIT() do not automatically fail.
|
||||
*/
|
||||
#define _REENT_IS_NULL(_ptr) 0
|
||||
|
||||
#define _REENT_CHECK_RAND48(ptr) /* nothing */
|
||||
#define _REENT_CHECK_MP(ptr) /* nothing */
|
||||
#define _REENT_CHECK_TM(ptr) /* nothing */
|
||||
#define _REENT_CHECK_ASCTIME_BUF(ptr) /* nothing */
|
||||
#define _REENT_CHECK_EMERGENCY(ptr) /* nothing */
|
||||
#define _REENT_CHECK_MISC(ptr) /* nothing */
|
||||
#define _REENT_CHECK_SIGNAL_BUF(ptr) /* nothing */
|
||||
|
||||
extern _Thread_local char _tls_asctime_buf[_REENT_ASCTIME_SIZE];
|
||||
#define _REENT_ASCTIME_BUF(_ptr) (_tls_asctime_buf)
|
||||
extern _Thread_local char *_tls_cvtbuf;
|
||||
#define _REENT_CVTBUF(_ptr) (_tls_cvtbuf)
|
||||
extern _Thread_local int _tls_cvtlen;
|
||||
#define _REENT_CVTLEN(_ptr) (_tls_cvtlen)
|
||||
extern _Thread_local void (*_tls_cleanup)(struct _reent *);
|
||||
#define _REENT_CLEANUP(_ptr) (_tls_cleanup)
|
||||
extern _Thread_local char _tls_emergency;
|
||||
#define _REENT_EMERGENCY(_ptr) (_tls_emergency)
|
||||
extern _Thread_local int _tls_errno;
|
||||
#define _REENT_ERRNO(_ptr) (_tls_errno)
|
||||
extern _Thread_local int _tls_getdate_err;
|
||||
#define _REENT_GETDATE_ERR_P(_ptr) (&_tls_getdate_err)
|
||||
extern _Thread_local int _tls_inc;
|
||||
#define _REENT_INC(_ptr) (_tls_inc)
|
||||
extern _Thread_local char _tls_l64a_buf[8];
|
||||
#define _REENT_L64A_BUF(_ptr) (_tls_l64a_buf)
|
||||
extern _Thread_local struct __locale_t *_tls_locale;
|
||||
#define _REENT_LOCALE(_ptr) (_tls_locale)
|
||||
extern _Thread_local _mbstate_t _tls_mblen_state;
|
||||
#define _REENT_MBLEN_STATE(_ptr) (_tls_mblen_state)
|
||||
extern _Thread_local _mbstate_t _tls_mbrlen_state;
|
||||
#define _REENT_MBRLEN_STATE(_ptr) (_tls_mbrlen_state)
|
||||
extern _Thread_local _mbstate_t _tls_mbrtowc_state;
|
||||
#define _REENT_MBRTOWC_STATE(_ptr) (_tls_mbrtowc_state)
|
||||
extern _Thread_local _mbstate_t _tls_mbsrtowcs_state;
|
||||
#define _REENT_MBSRTOWCS_STATE(_ptr) (_tls_mbsrtowcs_state)
|
||||
extern _Thread_local _mbstate_t _tls_mbtowc_state;
|
||||
#define _REENT_MBTOWC_STATE(_ptr) (_tls_mbtowc_state)
|
||||
extern _Thread_local struct _Bigint **_tls_mp_freelist;
|
||||
#define _REENT_MP_FREELIST(_ptr) (_tls_mp_freelist)
|
||||
extern _Thread_local struct _Bigint *_tls_mp_p5s;
|
||||
#define _REENT_MP_P5S(_ptr) (_tls_mp_p5s)
|
||||
extern _Thread_local struct _Bigint *_tls_mp_result;
|
||||
#define _REENT_MP_RESULT(_ptr) (_tls_mp_result)
|
||||
extern _Thread_local int _tls_mp_result_k;
|
||||
#define _REENT_MP_RESULT_K(_ptr) (_tls_mp_result_k)
|
||||
extern _Thread_local unsigned short _tls_rand48_add;
|
||||
#define _REENT_RAND48_ADD(_ptr) (_tls_rand48_add)
|
||||
extern _Thread_local unsigned short _tls_rand48_mult[3];
|
||||
#define _REENT_RAND48_MULT(_ptr) (_tls_rand48_mult)
|
||||
extern _Thread_local unsigned short _tls_rand48_seed[3];
|
||||
#define _REENT_RAND48_SEED(_ptr) (_tls_rand48_seed)
|
||||
extern _Thread_local unsigned long long _tls_rand_next;
|
||||
#define _REENT_RAND_NEXT(_ptr) (_tls_rand_next)
|
||||
extern _Thread_local void (**_tls_sig_func)(int);
|
||||
#define _REENT_SIG_FUNC(_ptr) (_tls_sig_func)
|
||||
extern _Thread_local char _tls_signal_buf[_REENT_SIGNAL_SIZE];
|
||||
#define _REENT_SIGNAL_BUF(_ptr) (_tls_signal_buf)
|
||||
extern _Thread_local int _tls_gamma_signgam;
|
||||
#define _REENT_SIGNGAM(_ptr) (_tls_gamma_signgam)
|
||||
extern _Thread_local __FILE *_tls_stdin;
|
||||
#define _REENT_STDIN(_ptr) (_tls_stdin)
|
||||
extern _Thread_local __FILE *_tls_stdout;
|
||||
#define _REENT_STDOUT(_ptr) (_tls_stdout)
|
||||
extern _Thread_local __FILE *_tls_stderr;
|
||||
#define _REENT_STDERR(_ptr) (_tls_stderr)
|
||||
extern _Thread_local char *_tls_strtok_last;
|
||||
#define _REENT_STRTOK_LAST(_ptr) (_tls_strtok_last)
|
||||
extern _Thread_local struct __tm _tls_localtime_buf;
|
||||
#define _REENT_TM(_ptr) (&_tls_localtime_buf)
|
||||
extern _Thread_local _mbstate_t _tls_wctomb_state;
|
||||
#define _REENT_WCTOMB_STATE(_ptr) (_tls_wctomb_state)
|
||||
extern _Thread_local _mbstate_t _tls_wcrtomb_state;
|
||||
#define _REENT_WCRTOMB_STATE(_ptr) (_tls_wcrtomb_state)
|
||||
extern _Thread_local _mbstate_t _tls_wcsrtombs_state;
|
||||
#define _REENT_WCSRTOMBS_STATE(_ptr) (_tls_wcsrtombs_state)
|
||||
|
||||
#endif /* !_REENT_THREAD_LOCAL */
|
||||
|
||||
/* This value is used in stdlib/misc.c. reent/reent.c has to know it
|
||||
as well to make sure the freelist is correctly free'd. Therefore
|
||||
we define it here, rather than in stdlib/misc.c, as before. */
|
||||
#define _Kmax (sizeof (size_t) << 3)
|
||||
|
||||
extern struct _atexit *__atexit; /* points to head of LIFO stack */
|
||||
extern struct _atexit __atexit0; /* one guaranteed table, required by ANSI */
|
||||
|
||||
extern void (*__stdio_exit_handler) (void);
|
||||
|
||||
void _reclaim_reent (struct _reent *);
|
||||
|
||||
extern int _fwalk_sglue (struct _reent *, int (*)(struct _reent *, __FILE *),
|
||||
struct _glue *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* _SYS_REENT_H_ */
|
||||
17
prebuilts/gcc/arm-none-eabi/include/sys/resource.h
Normal file
17
prebuilts/gcc/arm-none-eabi/include/sys/resource.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef _SYS_RESOURCE_H_
|
||||
#define _SYS_RESOURCE_H_
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
#define RUSAGE_SELF 0 /* calling process */
|
||||
#define RUSAGE_CHILDREN -1 /* terminated child processes */
|
||||
|
||||
struct rusage {
|
||||
struct timeval ru_utime; /* user time used */
|
||||
struct timeval ru_stime; /* system time used */
|
||||
};
|
||||
|
||||
int getrusage (int, struct rusage*);
|
||||
|
||||
#endif
|
||||
|
||||
69
prebuilts/gcc/arm-none-eabi/include/sys/sched.h
Normal file
69
prebuilts/gcc/arm-none-eabi/include/sys/sched.h
Normal file
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Written by Joel Sherrill <joel@OARcorp.com>.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-2010.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose without fee is hereby granted, provided that this entire notice
|
||||
* is included in all copies of any software which is or includes a copy
|
||||
* or modification of this software.
|
||||
*
|
||||
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION
|
||||
* OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
|
||||
* SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _SYS_SCHED_H_
|
||||
#define _SYS_SCHED_H_
|
||||
|
||||
#include <sys/_timespec.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Scheduling Policies */
|
||||
/* Open Group Specifications Issue 6 */
|
||||
#if defined(__CYGWIN__)
|
||||
#define SCHED_OTHER 3
|
||||
#else
|
||||
#define SCHED_OTHER 0
|
||||
#endif
|
||||
|
||||
#define SCHED_FIFO 1
|
||||
#define SCHED_RR 2
|
||||
|
||||
#if defined(_POSIX_SPORADIC_SERVER)
|
||||
#define SCHED_SPORADIC 4
|
||||
#endif
|
||||
|
||||
/* Scheduling Parameters */
|
||||
/* Open Group Specifications Issue 6 */
|
||||
|
||||
struct sched_param {
|
||||
int sched_priority; /* Process execution scheduling priority */
|
||||
|
||||
#if defined(_POSIX_SPORADIC_SERVER) || defined(_POSIX_THREAD_SPORADIC_SERVER)
|
||||
int sched_ss_low_priority; /* Low scheduling priority for sporadic */
|
||||
/* server */
|
||||
struct timespec sched_ss_repl_period;
|
||||
/* Replenishment period for sporadic server */
|
||||
struct timespec sched_ss_init_budget;
|
||||
/* Initial budget for sporadic server */
|
||||
int sched_ss_max_repl; /* Maximum pending replenishments for */
|
||||
/* sporadic server */
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
|
||||
94
prebuilts/gcc/arm-none-eabi/include/sys/select.h
Normal file
94
prebuilts/gcc/arm-none-eabi/include/sys/select.h
Normal file
@@ -0,0 +1,94 @@
|
||||
#ifndef _SYS_SELECT_H
|
||||
#define _SYS_SELECT_H
|
||||
|
||||
/* We don't define fd_set and friends if we are compiling POSIX
|
||||
source, or if we have included (or may include as indicated
|
||||
by __USE_W32_SOCKETS) the W32api winsock[2].h header which
|
||||
defines Windows versions of them. Note that a program which
|
||||
includes the W32api winsock[2].h header must know what it is doing;
|
||||
it must not call the Cygwin select function.
|
||||
*/
|
||||
# if !(defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS))
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_sigset.h>
|
||||
#include <sys/_timeval.h>
|
||||
#include <sys/timespec.h>
|
||||
|
||||
#if !defined(_SIGSET_T_DECLARED)
|
||||
#define _SIGSET_T_DECLARED
|
||||
typedef __sigset_t sigset_t;
|
||||
#endif
|
||||
|
||||
# define _SYS_TYPES_FD_SET
|
||||
/*
|
||||
* Select uses bit masks of file descriptors in longs.
|
||||
* These macros manipulate such bit fields (the filesystem macros use chars).
|
||||
* FD_SETSIZE may be defined by the user, but the default here
|
||||
* should be enough for most uses.
|
||||
*/
|
||||
#ifndef FD_SETSIZE
|
||||
# ifdef __CYGWIN__
|
||||
# define FD_SETSIZE 1024
|
||||
# else
|
||||
# define FD_SETSIZE 64
|
||||
# endif
|
||||
#endif
|
||||
|
||||
typedef unsigned long __fd_mask;
|
||||
#if __BSD_VISIBLE
|
||||
typedef __fd_mask fd_mask;
|
||||
#endif
|
||||
|
||||
#define _NFDBITS ((int)sizeof(__fd_mask) * 8) /* bits per mask */
|
||||
#if __BSD_VISIBLE
|
||||
#define NFDBITS _NFDBITS
|
||||
#endif
|
||||
|
||||
#ifndef _howmany
|
||||
#define _howmany(x,y) (((x) + ((y) - 1)) / (y))
|
||||
#endif
|
||||
|
||||
typedef struct fd_set {
|
||||
__fd_mask __fds_bits[_howmany(FD_SETSIZE, _NFDBITS)];
|
||||
} fd_set;
|
||||
#if __BSD_VISIBLE
|
||||
#define fds_bits __fds_bits
|
||||
#endif
|
||||
|
||||
#define __fdset_mask(n) ((__fd_mask)1 << ((n) % _NFDBITS))
|
||||
#define FD_CLR(n, p) ((p)->__fds_bits[(n)/_NFDBITS] &= ~__fdset_mask(n))
|
||||
#if __BSD_VISIBLE
|
||||
#define FD_COPY(f, t) (void)(*(t) = *(f))
|
||||
#endif
|
||||
#define FD_ISSET(n, p) (((p)->__fds_bits[(n)/_NFDBITS] & __fdset_mask(n)) != 0)
|
||||
#define FD_SET(n, p) ((p)->__fds_bits[(n)/_NFDBITS] |= __fdset_mask(n))
|
||||
#define FD_ZERO(p) do { \
|
||||
fd_set *_p; \
|
||||
__size_t _n; \
|
||||
\
|
||||
_p = (p); \
|
||||
_n = _howmany(FD_SETSIZE, _NFDBITS); \
|
||||
while (_n > 0) \
|
||||
_p->__fds_bits[--_n] = 0; \
|
||||
} while (0)
|
||||
|
||||
#if !defined (__INSIDE_CYGWIN_NET__)
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
int select __P ((int __n, fd_set *__readfds, fd_set *__writefds,
|
||||
fd_set *__exceptfds, struct timeval *__timeout));
|
||||
#if __POSIX_VISIBLE >= 200112
|
||||
int pselect __P ((int __n, fd_set *__readfds, fd_set *__writefds,
|
||||
fd_set *__exceptfds, const struct timespec *__timeout,
|
||||
const sigset_t *__set));
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !__INSIDE_CYGWIN_NET__ */
|
||||
|
||||
#endif /* !(_WINSOCK_H || _WINSOCKAPI_ || __USE_W32_SOCKETS) */
|
||||
|
||||
#endif /* sys/select.h */
|
||||
388
prebuilts/gcc/arm-none-eabi/include/sys/signal.h
Normal file
388
prebuilts/gcc/arm-none-eabi/include/sys/signal.h
Normal file
@@ -0,0 +1,388 @@
|
||||
/* sys/signal.h */
|
||||
|
||||
#ifndef _SYS_SIGNAL_H
|
||||
#define _SYS_SIGNAL_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "_ansi.h"
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/features.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/_sigset.h>
|
||||
#include <sys/_timespec.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#if !defined(_SIGSET_T_DECLARED)
|
||||
#define _SIGSET_T_DECLARED
|
||||
typedef __sigset_t sigset_t;
|
||||
#endif
|
||||
|
||||
#if defined(__CYGWIN__)
|
||||
#include <cygwin/signal.h>
|
||||
#else
|
||||
|
||||
#if defined(_POSIX_REALTIME_SIGNALS) || __POSIX_VISIBLE >= 199309
|
||||
|
||||
/* sigev_notify values
|
||||
NOTE: P1003.1c/D10, p. 34 adds SIGEV_THREAD. */
|
||||
|
||||
#define SIGEV_NONE 1 /* No asynchronous notification shall be delivered */
|
||||
/* when the event of interest occurs. */
|
||||
#define SIGEV_SIGNAL 2 /* A queued signal, with an application defined */
|
||||
/* value, shall be delivered when the event of */
|
||||
/* interest occurs. */
|
||||
#define SIGEV_THREAD 3 /* A notification function shall be called to */
|
||||
/* perform notification. */
|
||||
|
||||
/* Signal Generation and Delivery, P1003.1b-1993, p. 63
|
||||
NOTE: P1003.1c/D10, p. 34 adds sigev_notify_function and
|
||||
sigev_notify_attributes to the sigevent structure. */
|
||||
|
||||
union sigval {
|
||||
int sival_int; /* Integer signal value */
|
||||
void *sival_ptr; /* Pointer signal value */
|
||||
};
|
||||
|
||||
struct sigevent {
|
||||
int sigev_notify; /* Notification type */
|
||||
int sigev_signo; /* Signal number */
|
||||
union sigval sigev_value; /* Signal value */
|
||||
|
||||
#if defined(_POSIX_THREADS)
|
||||
void (*sigev_notify_function)( union sigval );
|
||||
/* Notification function */
|
||||
pthread_attr_t *sigev_notify_attributes; /* Notification Attributes */
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Signal Actions, P1003.1b-1993, p. 64 */
|
||||
/* si_code values, p. 66 */
|
||||
|
||||
#define SI_USER 1 /* Sent by a user. kill(), abort(), etc */
|
||||
#define SI_QUEUE 2 /* Sent by sigqueue() */
|
||||
#define SI_TIMER 3 /* Sent by expiration of a timer_settime() timer */
|
||||
#define SI_ASYNCIO 4 /* Indicates completion of asycnhronous IO */
|
||||
#define SI_MESGQ 5 /* Indicates arrival of a message at an empty queue */
|
||||
|
||||
typedef struct {
|
||||
int si_signo; /* Signal number */
|
||||
int si_code; /* Cause of the signal */
|
||||
union sigval si_value; /* Signal value */
|
||||
} siginfo_t;
|
||||
#endif /* defined(_POSIX_REALTIME_SIGNALS) || __POSIX_VISIBLE >= 199309 */
|
||||
|
||||
#if defined(__rtems__)
|
||||
|
||||
/* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 */
|
||||
|
||||
#define SA_NOCLDSTOP 0x1 /* Do not generate SIGCHLD when children stop */
|
||||
#define SA_SIGINFO 0x2 /* Invoke the signal catching function with */
|
||||
/* three arguments instead of one. */
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809
|
||||
#define SA_ONSTACK 0x4 /* Signal delivery will be on a separate stack. */
|
||||
#endif
|
||||
|
||||
/* struct sigaction notes from POSIX:
|
||||
*
|
||||
* (1) Routines stored in sa_handler should take a single int as
|
||||
* their argument although the POSIX standard does not require this.
|
||||
* This is not longer true since at least POSIX.1-2008
|
||||
* (2) The fields sa_handler and sa_sigaction may overlap, and a conforming
|
||||
* application should not use both simultaneously.
|
||||
*/
|
||||
|
||||
typedef void (*_sig_func_ptr)(int);
|
||||
|
||||
struct sigaction {
|
||||
int sa_flags; /* Special flags to affect behavior of signal */
|
||||
sigset_t sa_mask; /* Additional set of signals to be blocked */
|
||||
/* during execution of signal-catching */
|
||||
/* function. */
|
||||
union {
|
||||
_sig_func_ptr _handler; /* SIG_DFL, SIG_IGN, or pointer to a function */
|
||||
#if defined(_POSIX_REALTIME_SIGNALS)
|
||||
void (*_sigaction)( int, siginfo_t *, void * );
|
||||
#endif
|
||||
} _signal_handlers;
|
||||
};
|
||||
|
||||
#define sa_handler _signal_handlers._handler
|
||||
#if defined(_POSIX_REALTIME_SIGNALS)
|
||||
#define sa_sigaction _signal_handlers._sigaction
|
||||
#endif
|
||||
|
||||
#else /* defined(__rtems__) */
|
||||
|
||||
#define SA_NOCLDSTOP 1 /* only value supported now for sa_flags */
|
||||
|
||||
typedef void (*_sig_func_ptr)(int);
|
||||
|
||||
struct sigaction
|
||||
{
|
||||
_sig_func_ptr sa_handler;
|
||||
sigset_t sa_mask;
|
||||
int sa_flags;
|
||||
};
|
||||
#endif /* defined(__rtems__) */
|
||||
#endif /* defined(__CYGWIN__) */
|
||||
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809
|
||||
/*
|
||||
* Minimum and default signal stack constants. Allow for target overrides
|
||||
* from <sys/features.h>.
|
||||
*/
|
||||
#ifndef MINSIGSTKSZ
|
||||
#define MINSIGSTKSZ 2048
|
||||
#endif
|
||||
#ifndef SIGSTKSZ
|
||||
#define SIGSTKSZ 8192
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Possible values for ss_flags in stack_t below.
|
||||
*/
|
||||
#define SS_ONSTACK 0x1
|
||||
#define SS_DISABLE 0x2
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Structure used in sigaltstack call.
|
||||
*/
|
||||
typedef struct sigaltstack {
|
||||
void *ss_sp; /* Stack base or pointer. */
|
||||
int ss_flags; /* Flags. */
|
||||
size_t ss_size; /* Stack size. */
|
||||
} stack_t;
|
||||
|
||||
#if __POSIX_VISIBLE
|
||||
#define SIG_SETMASK 0 /* set mask with sigprocmask() */
|
||||
#define SIG_BLOCK 1 /* set of signals to block */
|
||||
#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */
|
||||
|
||||
int sigprocmask (int, const sigset_t *, sigset_t *);
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 199506
|
||||
int pthread_sigmask (int, const sigset_t *, sigset_t *);
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
int _kill (pid_t, int);
|
||||
#endif /* _LIBC */
|
||||
|
||||
#if __POSIX_VISIBLE
|
||||
int kill (pid_t, int);
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4
|
||||
int killpg (pid_t, int);
|
||||
#endif
|
||||
#if __POSIX_VISIBLE
|
||||
int sigaction (int, const struct sigaction *, struct sigaction *);
|
||||
int sigaddset (sigset_t *, const int);
|
||||
int sigdelset (sigset_t *, const int);
|
||||
int sigismember (const sigset_t *, int);
|
||||
int sigfillset (sigset_t *);
|
||||
int sigemptyset (sigset_t *);
|
||||
int sigpending (sigset_t *);
|
||||
int sigsuspend (const sigset_t *);
|
||||
int sigwait (const sigset_t *, int *);
|
||||
|
||||
#if !defined(__CYGWIN__) && !defined(__rtems__)
|
||||
/* These depend upon the type of sigset_t, which right now
|
||||
is always a long.. They're in the POSIX namespace, but
|
||||
are not ANSI. */
|
||||
#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0)
|
||||
#define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0)
|
||||
#define sigemptyset(what) (*(what) = 0, 0)
|
||||
#define sigfillset(what) (*(what) = ~(0), 0)
|
||||
#define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0)
|
||||
#endif /* !__CYGWIN__ && !__rtems__ */
|
||||
#endif /* __POSIX_VISIBLE */
|
||||
|
||||
/* There are two common sigpause variants, both of which take an int argument.
|
||||
If you request _XOPEN_SOURCE or _GNU_SOURCE, you get the System V version,
|
||||
which removes the given signal from the process's signal mask; otherwise
|
||||
you get the BSD version, which sets the process's signal mask to the given
|
||||
value. */
|
||||
#if __XSI_VISIBLE && !defined(__INSIDE_CYGWIN__)
|
||||
# ifdef __GNUC__
|
||||
int sigpause (int) __asm__ (__ASMNAME ("__xpg_sigpause"));
|
||||
# else
|
||||
int __xpg_sigpause (int);
|
||||
# define sigpause __xpg_sigpause
|
||||
# endif
|
||||
#elif __BSD_VISIBLE
|
||||
int sigpause (int);
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809
|
||||
int sigaltstack (const stack_t *__restrict, stack_t *__restrict);
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 199506
|
||||
int pthread_kill (pthread_t, int);
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 199309
|
||||
|
||||
/* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76
|
||||
NOTE: P1003.1c/D10, p. 39 adds sigwait(). */
|
||||
|
||||
int sigwaitinfo (const sigset_t *, siginfo_t *);
|
||||
int sigtimedwait (const sigset_t *, siginfo_t *, const struct timespec *);
|
||||
/* 3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78 */
|
||||
int sigqueue (pid_t, int, const union sigval);
|
||||
|
||||
#endif /* __POSIX_VISIBLE >= 199309 */
|
||||
|
||||
/* Using __MISC_VISIBLE until POSIX Issue 8 is officially released */
|
||||
#if __MISC_VISIBLE
|
||||
|
||||
/* POSIX Issue 8 adds sig2str() and str2sig() */
|
||||
|
||||
#if __SIZEOF_INT__ >= 4
|
||||
#define SIG2STR_MAX (sizeof("RTMAX+") + sizeof("4294967295") - 1)
|
||||
#else
|
||||
#define SIG2STR_MAX (sizeof("RTMAX+") + sizeof("65535") - 1)
|
||||
#endif
|
||||
|
||||
int sig2str(int, char *);
|
||||
int str2sig(const char *__restrict, int *__restrict);
|
||||
|
||||
#endif /* __MISC_VISIBLE */
|
||||
|
||||
#if defined(___AM29K__)
|
||||
/* These all need to be defined for ANSI C, but I don't think they are
|
||||
meaningful. */
|
||||
#define SIGABRT 1
|
||||
#define SIGFPE 1
|
||||
#define SIGILL 1
|
||||
#define SIGINT 1
|
||||
#define SIGSEGV 1
|
||||
#define SIGTERM 1
|
||||
/* These need to be defined for POSIX, and some others do too. */
|
||||
#define SIGHUP 1
|
||||
#define SIGQUIT 1
|
||||
#define NSIG 2
|
||||
#elif defined(__GO32__)
|
||||
#define SIGINT 1
|
||||
#define SIGKILL 2
|
||||
#define SIGPIPE 3
|
||||
#define SIGFPE 4
|
||||
#define SIGHUP 5
|
||||
#define SIGTERM 6
|
||||
#define SIGSEGV 7
|
||||
#define SIGTSTP 8
|
||||
#define SIGQUIT 9
|
||||
#define SIGTRAP 10
|
||||
#define SIGILL 11
|
||||
#define SIGEMT 12
|
||||
#define SIGALRM 13
|
||||
#define SIGBUS 14
|
||||
#define SIGLOST 15
|
||||
#define SIGSTOP 16
|
||||
#define SIGABRT 17
|
||||
#define SIGUSR1 18
|
||||
#define SIGUSR2 19
|
||||
#define NSIG 20
|
||||
#elif !defined(SIGTRAP)
|
||||
#define SIGHUP 1 /* hangup */
|
||||
#define SIGINT 2 /* interrupt */
|
||||
#define SIGQUIT 3 /* quit */
|
||||
#define SIGILL 4 /* illegal instruction (not reset when caught) */
|
||||
#define SIGTRAP 5 /* trace trap (not reset when caught) */
|
||||
#define SIGIOT 6 /* IOT instruction */
|
||||
#define SIGABRT 6 /* used by abort, replace SIGIOT in the future */
|
||||
#define SIGEMT 7 /* EMT instruction */
|
||||
#define SIGFPE 8 /* floating point exception */
|
||||
#define SIGKILL 9 /* kill (cannot be caught or ignored) */
|
||||
#define SIGBUS 10 /* bus error */
|
||||
#define SIGSEGV 11 /* segmentation violation */
|
||||
#define SIGSYS 12 /* bad argument to system call */
|
||||
#define SIGPIPE 13 /* write on a pipe with no one to read it */
|
||||
#define SIGALRM 14 /* alarm clock */
|
||||
#define SIGTERM 15 /* software termination signal from kill */
|
||||
|
||||
#if defined(__rtems__)
|
||||
#define SIGURG 16 /* urgent condition on IO channel */
|
||||
#define SIGSTOP 17 /* sendable stop signal not from tty */
|
||||
#define SIGTSTP 18 /* stop signal from tty */
|
||||
#define SIGCONT 19 /* continue a stopped process */
|
||||
#define SIGCHLD 20 /* to parent on child stop or exit */
|
||||
#define SIGCLD 20 /* System V name for SIGCHLD */
|
||||
#define SIGTTIN 21 /* to readers pgrp upon background tty read */
|
||||
#define SIGTTOU 22 /* like TTIN for output if (tp->t_local<OSTOP) */
|
||||
#define SIGIO 23 /* input/output possible signal */
|
||||
#define SIGPOLL SIGIO /* System V name for SIGIO */
|
||||
#define SIGWINCH 24 /* window changed */
|
||||
#define SIGUSR1 25 /* user defined signal 1 */
|
||||
#define SIGUSR2 26 /* user defined signal 2 */
|
||||
|
||||
/* Real-Time Signals Range, P1003.1b-1993, p. 61
|
||||
NOTE: By P1003.1b-1993, this should be at least RTSIG_MAX
|
||||
(which is a minimum of 8) signals.
|
||||
*/
|
||||
#define SIGRTMIN 27
|
||||
#define SIGRTMAX 31
|
||||
#define __SIGFIRSTNOTRT SIGHUP
|
||||
#define __SIGLASTNOTRT SIGUSR2
|
||||
|
||||
#define NSIG 32 /* signal 0 implied */
|
||||
|
||||
#elif defined(__svr4__)
|
||||
/* svr4 specifics. different signals above 15, and sigaction. */
|
||||
#define SIGUSR1 16
|
||||
#define SIGUSR2 17
|
||||
#define SIGCLD 18
|
||||
#define SIGPWR 19
|
||||
#define SIGWINCH 20
|
||||
#define SIGPOLL 22 /* 20 for x.out binaries!!!! */
|
||||
#define SIGSTOP 23 /* sendable stop signal not from tty */
|
||||
#define SIGTSTP 24 /* stop signal from tty */
|
||||
#define SIGCONT 25 /* continue a stopped process */
|
||||
#define SIGTTIN 26 /* to readers pgrp upon background tty read */
|
||||
#define SIGTTOU 27 /* like TTIN for output if (tp->t_local<OSTOP) */
|
||||
#define NSIG 28
|
||||
#else
|
||||
#define SIGURG 16 /* urgent condition on IO channel */
|
||||
#define SIGSTOP 17 /* sendable stop signal not from tty */
|
||||
#define SIGTSTP 18 /* stop signal from tty */
|
||||
#define SIGCONT 19 /* continue a stopped process */
|
||||
#define SIGCHLD 20 /* to parent on child stop or exit */
|
||||
#define SIGCLD 20 /* System V name for SIGCHLD */
|
||||
#define SIGTTIN 21 /* to readers pgrp upon background tty read */
|
||||
#define SIGTTOU 22 /* like TTIN for output if (tp->t_local<OSTOP) */
|
||||
#define SIGIO 23 /* input/output possible signal */
|
||||
#define SIGPOLL SIGIO /* System V name for SIGIO */
|
||||
#define SIGXCPU 24 /* exceeded CPU time limit */
|
||||
#define SIGXFSZ 25 /* exceeded file size limit */
|
||||
#define SIGVTALRM 26 /* virtual time alarm */
|
||||
#define SIGPROF 27 /* profiling time alarm */
|
||||
#define SIGWINCH 28 /* window changed */
|
||||
#define SIGLOST 29 /* resource lost (eg, record-lock lost) */
|
||||
#define SIGUSR1 30 /* user defined signal 1 */
|
||||
#define SIGUSR2 31 /* user defined signal 2 */
|
||||
#define NSIG 32 /* signal 0 implied */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__CYGWIN__)
|
||||
#if __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809
|
||||
#include <sys/ucontext.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _SIGNAL_H_
|
||||
/* Some applications take advantage of the fact that <sys/signal.h>
|
||||
* and <signal.h> are equivalent in glibc. Allow for that here. */
|
||||
#include <signal.h>
|
||||
#endif
|
||||
#endif /* _SYS_SIGNAL_H */
|
||||
179
prebuilts/gcc/arm-none-eabi/include/sys/stat.h
Normal file
179
prebuilts/gcc/arm-none-eabi/include/sys/stat.h
Normal file
@@ -0,0 +1,179 @@
|
||||
#ifndef _SYS_STAT_H
|
||||
#define _SYS_STAT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <_ansi.h>
|
||||
#include <time.h>
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/_timespec.h>
|
||||
|
||||
/* dj's stat defines _STAT_H_ */
|
||||
#ifndef _STAT_H_
|
||||
|
||||
/* It is intended that the layout of this structure not change when the
|
||||
sizes of any of the basic types change (short, int, long) [via a compile
|
||||
time option]. */
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
#include <cygwin/stat.h>
|
||||
#ifdef _LIBC
|
||||
#define stat64 stat
|
||||
#endif
|
||||
#else
|
||||
struct stat
|
||||
{
|
||||
dev_t st_dev;
|
||||
ino_t st_ino;
|
||||
mode_t st_mode;
|
||||
nlink_t st_nlink;
|
||||
uid_t st_uid;
|
||||
gid_t st_gid;
|
||||
dev_t st_rdev;
|
||||
off_t st_size;
|
||||
#if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)
|
||||
time_t st_atime;
|
||||
time_t st_mtime;
|
||||
time_t st_ctime;
|
||||
#else
|
||||
struct timespec st_atim;
|
||||
struct timespec st_mtim;
|
||||
struct timespec st_ctim;
|
||||
blksize_t st_blksize;
|
||||
blkcnt_t st_blocks;
|
||||
#if !defined(__rtems__)
|
||||
long st_spare4[2];
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
#if !(defined(__svr4__) && !defined(__PPC__) && !defined(__sun__))
|
||||
#define st_atime st_atim.tv_sec
|
||||
#define st_ctime st_ctim.tv_sec
|
||||
#define st_mtime st_mtim.tv_sec
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#define _IFMT 0170000 /* type of file */
|
||||
#define _IFDIR 0040000 /* directory */
|
||||
#define _IFCHR 0020000 /* character special */
|
||||
#define _IFBLK 0060000 /* block special */
|
||||
#define _IFREG 0100000 /* regular */
|
||||
#define _IFLNK 0120000 /* symbolic link */
|
||||
#define _IFSOCK 0140000 /* socket */
|
||||
#define _IFIFO 0010000 /* fifo */
|
||||
|
||||
#define S_BLKSIZE 1024 /* size of a block */
|
||||
|
||||
#define S_ISUID 0004000 /* set user id on execution */
|
||||
#define S_ISGID 0002000 /* set group id on execution */
|
||||
#define S_ISVTX 0001000 /* save swapped text even after use */
|
||||
#if __BSD_VISIBLE
|
||||
#define S_IREAD 0000400 /* read permission, owner */
|
||||
#define S_IWRITE 0000200 /* write permission, owner */
|
||||
#define S_IEXEC 0000100 /* execute/search permission, owner */
|
||||
#define S_ENFMT 0002000 /* enforcement-mode locking */
|
||||
#endif /* !_BSD_VISIBLE */
|
||||
|
||||
#define S_IFMT _IFMT
|
||||
#define S_IFDIR _IFDIR
|
||||
#define S_IFCHR _IFCHR
|
||||
#define S_IFBLK _IFBLK
|
||||
#define S_IFREG _IFREG
|
||||
#define S_IFLNK _IFLNK
|
||||
#define S_IFSOCK _IFSOCK
|
||||
#define S_IFIFO _IFIFO
|
||||
|
||||
#ifdef _WIN32
|
||||
/* The Windows header files define _S_ forms of these, so we do too
|
||||
for easier portability. */
|
||||
#define _S_IFMT _IFMT
|
||||
#define _S_IFDIR _IFDIR
|
||||
#define _S_IFCHR _IFCHR
|
||||
#define _S_IFIFO _IFIFO
|
||||
#define _S_IFREG _IFREG
|
||||
#define _S_IREAD 0000400
|
||||
#define _S_IWRITE 0000200
|
||||
#define _S_IEXEC 0000100
|
||||
#endif
|
||||
|
||||
#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
|
||||
#define S_IRUSR 0000400 /* read permission, owner */
|
||||
#define S_IWUSR 0000200 /* write permission, owner */
|
||||
#define S_IXUSR 0000100/* execute/search permission, owner */
|
||||
#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
|
||||
#define S_IRGRP 0000040 /* read permission, group */
|
||||
#define S_IWGRP 0000020 /* write permission, grougroup */
|
||||
#define S_IXGRP 0000010/* execute/search permission, group */
|
||||
#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
|
||||
#define S_IROTH 0000004 /* read permission, other */
|
||||
#define S_IWOTH 0000002 /* write permission, other */
|
||||
#define S_IXOTH 0000001/* execute/search permission, other */
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO) /* 0777 */
|
||||
#define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) /* 07777 */
|
||||
#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) /* 0666 */
|
||||
#endif
|
||||
|
||||
#define S_ISBLK(m) (((m)&_IFMT) == _IFBLK)
|
||||
#define S_ISCHR(m) (((m)&_IFMT) == _IFCHR)
|
||||
#define S_ISDIR(m) (((m)&_IFMT) == _IFDIR)
|
||||
#define S_ISFIFO(m) (((m)&_IFMT) == _IFIFO)
|
||||
#define S_ISREG(m) (((m)&_IFMT) == _IFREG)
|
||||
#define S_ISLNK(m) (((m)&_IFMT) == _IFLNK)
|
||||
#define S_ISSOCK(m) (((m)&_IFMT) == _IFSOCK)
|
||||
|
||||
#if defined(__CYGWIN__) || defined(__rtems__)
|
||||
/* Special tv_nsec values for futimens(2) and utimensat(2). */
|
||||
#define UTIME_NOW -2L
|
||||
#define UTIME_OMIT -1L
|
||||
#endif
|
||||
|
||||
int chmod (const char *__path, mode_t __mode );
|
||||
int fchmod (int __fd, mode_t __mode);
|
||||
int fstat (int __fd, struct stat *__sbuf );
|
||||
int mkdir (const char *_path, mode_t __mode );
|
||||
int mkfifo (const char *__path, mode_t __mode );
|
||||
int stat (const char *__restrict __path, struct stat *__restrict __sbuf );
|
||||
mode_t umask (mode_t __mask );
|
||||
|
||||
#if defined (__SPU__) || defined(__rtems__) || defined(__CYGWIN__)
|
||||
int lstat (const char *__restrict __path, struct stat *__restrict __buf );
|
||||
int mknod (const char *__path, mode_t __mode, dev_t __dev );
|
||||
#endif
|
||||
|
||||
#if __ATFILE_VISIBLE && !defined(__INSIDE_CYGWIN__)
|
||||
int fchmodat (int, const char *, mode_t, int);
|
||||
int fstatat (int, const char *__restrict , struct stat *__restrict, int);
|
||||
int mkdirat (int, const char *, mode_t);
|
||||
int mkfifoat (int, const char *, mode_t);
|
||||
int mknodat (int, const char *, mode_t, dev_t);
|
||||
int utimensat (int, const char *, const struct timespec [2], int);
|
||||
#endif
|
||||
#if __POSIX_VISIBLE >= 200809 && !defined(__INSIDE_CYGWIN__)
|
||||
int futimens (int, const struct timespec [2]);
|
||||
#endif
|
||||
|
||||
/* Provide prototypes for most of the _<systemcall> names that are
|
||||
provided in newlib for some compilers. */
|
||||
#ifdef _LIBC
|
||||
int _fstat (int __fd, struct stat *__sbuf );
|
||||
int _stat (const char *__restrict __path, struct stat *__restrict __sbuf );
|
||||
int _mkdir (const char *_path, mode_t __mode );
|
||||
#ifdef __LARGE64_FILES
|
||||
struct stat64;
|
||||
int _stat64 (const char *__restrict __path, struct stat64 *__restrict __sbuf );
|
||||
int _fstat64 (int __fd, struct stat64 *__sbuf );
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* !_STAT_H_ */
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* _SYS_STAT_H */
|
||||
27
prebuilts/gcc/arm-none-eabi/include/sys/stdio.h
Normal file
27
prebuilts/gcc/arm-none-eabi/include/sys/stdio.h
Normal file
@@ -0,0 +1,27 @@
|
||||
#ifndef _NEWLIB_STDIO_H
|
||||
#define _NEWLIB_STDIO_H
|
||||
|
||||
#include <sys/lock.h>
|
||||
#include <sys/reent.h>
|
||||
|
||||
/* Internal locking macros, used to protect stdio functions. In the
|
||||
general case, expand to nothing. Use __SSTR flag in FILE _flags to
|
||||
detect if FILE is private to sprintf/sscanf class of functions; if
|
||||
set then do nothing as lock is not initialised. */
|
||||
#if !defined(_flockfile)
|
||||
#ifndef __SINGLE_THREAD__
|
||||
# define _flockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_acquire_recursive((fp)->_lock))
|
||||
#else
|
||||
# define _flockfile(fp) ((void) 0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(_funlockfile)
|
||||
#ifndef __SINGLE_THREAD__
|
||||
# define _funlockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_release_recursive((fp)->_lock))
|
||||
#else
|
||||
# define _funlockfile(fp) ((void) 0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* _NEWLIB_STDIO_H */
|
||||
2
prebuilts/gcc/arm-none-eabi/include/sys/string.h
Normal file
2
prebuilts/gcc/arm-none-eabi/include/sys/string.h
Normal file
@@ -0,0 +1,2 @@
|
||||
/* This is a dummy <sys/string.h> used as a placeholder for
|
||||
systems that need to have a special header file. */
|
||||
61
prebuilts/gcc/arm-none-eabi/include/sys/syslimits.h
Normal file
61
prebuilts/gcc/arm-none-eabi/include/sys/syslimits.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) 1988, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)syslimits.h 8.1 (Berkeley) 6/2/93
|
||||
* $FreeBSD: src/sys/sys/syslimits.h,v 1.10 2001/06/18 20:24:54 wollman Exp $
|
||||
*/
|
||||
|
||||
#ifndef _SYS_SYSLIMITS_H_
|
||||
#define _SYS_SYSLIMITS_H_
|
||||
|
||||
#define ARG_MAX 65536 /* max bytes for an exec function */
|
||||
#ifndef CHILD_MAX
|
||||
#define CHILD_MAX 40 /* max simultaneous processes */
|
||||
#endif
|
||||
#define LINK_MAX 32767 /* max file link count */
|
||||
#define MAX_CANON 255 /* max bytes in term canon input line */
|
||||
#define MAX_INPUT 255 /* max bytes in terminal input */
|
||||
#define NAME_MAX 255 /* max bytes in a file name */
|
||||
#define NGROUPS_MAX 16 /* max supplemental group id's */
|
||||
#ifndef OPEN_MAX
|
||||
#define OPEN_MAX 64 /* max open files per process */
|
||||
#endif
|
||||
#define PATH_MAX 1024 /* max bytes in pathname */
|
||||
#define PIPE_BUF 512 /* max bytes for atomic pipe writes */
|
||||
#define IOV_MAX 1024 /* max elements in i/o vector */
|
||||
|
||||
#define BC_BASE_MAX 99 /* max ibase/obase values in bc(1) */
|
||||
#define BC_DIM_MAX 2048 /* max array elements in bc(1) */
|
||||
#define BC_SCALE_MAX 99 /* max scale value in bc(1) */
|
||||
#define BC_STRING_MAX 1000 /* max const string length in bc(1) */
|
||||
#define COLL_WEIGHTS_MAX 0 /* max weights for order keyword */
|
||||
#define EXPR_NEST_MAX 32 /* max expressions nested in expr(1) */
|
||||
#define LINE_MAX 2048 /* max bytes in an input line */
|
||||
#define RE_DUP_MAX 255 /* max RE's in interval notation */
|
||||
|
||||
#endif
|
||||
448
prebuilts/gcc/arm-none-eabi/include/sys/time.h
Normal file
448
prebuilts/gcc/arm-none-eabi/include/sys/time.h
Normal file
@@ -0,0 +1,448 @@
|
||||
/* time.h -- An implementation of the standard Unix <sys/time.h> file.
|
||||
Written by Geoffrey Noer <noer@cygnus.com>
|
||||
Public domain; no rights reserved. */
|
||||
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Copyright (c) 1982, 1986, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
||||
* $FreeBSD: head/sys/sys/time.h 346176 2019-04-13 04:46:35Z imp $
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TIME_H_
|
||||
#define _SYS_TIME_H_
|
||||
|
||||
#include <_ansi.h>
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_timeval.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/timespec.h>
|
||||
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
struct timezone {
|
||||
int tz_minuteswest; /* minutes west of Greenwich */
|
||||
int tz_dsttime; /* type of dst correction */
|
||||
};
|
||||
#define DST_NONE 0 /* not on dst */
|
||||
#define DST_USA 1 /* USA style dst */
|
||||
#define DST_AUST 2 /* Australian style dst */
|
||||
#define DST_WET 3 /* Western European dst */
|
||||
#define DST_MET 4 /* Middle European dst */
|
||||
#define DST_EET 5 /* Eastern European dst */
|
||||
#define DST_CAN 6 /* Canada */
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
struct bintime {
|
||||
time_t sec;
|
||||
uint64_t frac;
|
||||
};
|
||||
|
||||
static __inline void
|
||||
bintime_addx(struct bintime *_bt, uint64_t _x)
|
||||
{
|
||||
uint64_t _u;
|
||||
|
||||
_u = _bt->frac;
|
||||
_bt->frac += _x;
|
||||
if (_u > _bt->frac)
|
||||
_bt->sec++;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
bintime_add(struct bintime *_bt, const struct bintime *_bt2)
|
||||
{
|
||||
uint64_t _u;
|
||||
|
||||
_u = _bt->frac;
|
||||
_bt->frac += _bt2->frac;
|
||||
if (_u > _bt->frac)
|
||||
_bt->sec++;
|
||||
_bt->sec += _bt2->sec;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
bintime_sub(struct bintime *_bt, const struct bintime *_bt2)
|
||||
{
|
||||
uint64_t _u;
|
||||
|
||||
_u = _bt->frac;
|
||||
_bt->frac -= _bt2->frac;
|
||||
if (_u < _bt->frac)
|
||||
_bt->sec--;
|
||||
_bt->sec -= _bt2->sec;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
bintime_mul(struct bintime *_bt, u_int _x)
|
||||
{
|
||||
uint64_t _p1, _p2;
|
||||
|
||||
_p1 = (_bt->frac & 0xffffffffull) * _x;
|
||||
_p2 = (_bt->frac >> 32) * _x + (_p1 >> 32);
|
||||
_bt->sec *= _x;
|
||||
_bt->sec += (_p2 >> 32);
|
||||
_bt->frac = (_p2 << 32) | (_p1 & 0xffffffffull);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
bintime_shift(struct bintime *_bt, int _exp)
|
||||
{
|
||||
|
||||
if (_exp > 0) {
|
||||
_bt->sec <<= _exp;
|
||||
_bt->sec |= _bt->frac >> (64 - _exp);
|
||||
_bt->frac <<= _exp;
|
||||
} else if (_exp < 0) {
|
||||
_bt->frac >>= -_exp;
|
||||
_bt->frac |= (uint64_t)_bt->sec << (64 + _exp);
|
||||
_bt->sec >>= -_exp;
|
||||
}
|
||||
}
|
||||
|
||||
#define bintime_clear(a) ((a)->sec = (a)->frac = 0)
|
||||
#define bintime_isset(a) ((a)->sec || (a)->frac)
|
||||
#define bintime_cmp(a, b, cmp) \
|
||||
(((a)->sec == (b)->sec) ? \
|
||||
((a)->frac cmp (b)->frac) : \
|
||||
((a)->sec cmp (b)->sec))
|
||||
|
||||
#define SBT_1S ((sbintime_t)1 << 32)
|
||||
#define SBT_1M (SBT_1S * 60)
|
||||
#define SBT_1MS (SBT_1S / 1000)
|
||||
#define SBT_1US (SBT_1S / 1000000)
|
||||
#define SBT_1NS (SBT_1S / 1000000000) /* beware rounding, see nstosbt() */
|
||||
#define SBT_MAX 0x7fffffffffffffffLL
|
||||
|
||||
static __inline int
|
||||
sbintime_getsec(sbintime_t _sbt)
|
||||
{
|
||||
|
||||
return (_sbt >> 32);
|
||||
}
|
||||
|
||||
static __inline sbintime_t
|
||||
bttosbt(const struct bintime _bt)
|
||||
{
|
||||
|
||||
return (((sbintime_t)_bt.sec << 32) + (_bt.frac >> 32));
|
||||
}
|
||||
|
||||
static __inline struct bintime
|
||||
sbttobt(sbintime_t _sbt)
|
||||
{
|
||||
struct bintime _bt;
|
||||
|
||||
_bt.sec = _sbt >> 32;
|
||||
_bt.frac = _sbt << 32;
|
||||
return (_bt);
|
||||
}
|
||||
|
||||
/*
|
||||
* Decimal<->sbt conversions. Multiplying or dividing by SBT_1NS results in
|
||||
* large roundoff errors which sbttons() and nstosbt() avoid. Millisecond and
|
||||
* microsecond functions are also provided for completeness.
|
||||
*
|
||||
* These functions return the smallest sbt larger or equal to the
|
||||
* number of seconds requested so that sbttoX(Xtosbt(y)) == y. Unlike
|
||||
* top of second computations below, which require that we tick at the
|
||||
* top of second, these need to be rounded up so we do whatever for at
|
||||
* least as long as requested.
|
||||
*
|
||||
* The naive computation we'd do is this
|
||||
* ((unit * 2^64 / SIFACTOR) + 2^32-1) >> 32
|
||||
* However, that overflows. Instead, we compute
|
||||
* ((unit * 2^63 / SIFACTOR) + 2^31-1) >> 32
|
||||
* and use pre-computed constants that are the ceil of the 2^63 / SIFACTOR
|
||||
* term to ensure we are using exactly the right constant. We use the lesser
|
||||
* evil of ull rather than a uint64_t cast to ensure we have well defined
|
||||
* right shift semantics. With these changes, we get all the ns, us and ms
|
||||
* conversions back and forth right.
|
||||
*/
|
||||
static __inline int64_t
|
||||
sbttons(sbintime_t _sbt)
|
||||
{
|
||||
uint64_t ns;
|
||||
|
||||
ns = _sbt;
|
||||
if (ns >= SBT_1S)
|
||||
ns = (ns >> 32) * 1000000000;
|
||||
else
|
||||
ns = 0;
|
||||
|
||||
return (ns + (1000000000 * (_sbt & 0xffffffffu) >> 32));
|
||||
}
|
||||
|
||||
static __inline sbintime_t
|
||||
nstosbt(int64_t _ns)
|
||||
{
|
||||
sbintime_t sb = 0;
|
||||
|
||||
if (_ns >= SBT_1S) {
|
||||
sb = (_ns / 1000000000) * SBT_1S;
|
||||
_ns = _ns % 1000000000;
|
||||
}
|
||||
/* 9223372037 = ceil(2^63 / 1000000000) */
|
||||
sb += ((_ns * 9223372037ull) + 0x7fffffff) >> 31;
|
||||
return (sb);
|
||||
}
|
||||
|
||||
static __inline int64_t
|
||||
sbttous(sbintime_t _sbt)
|
||||
{
|
||||
|
||||
return ((1000000 * _sbt) >> 32);
|
||||
}
|
||||
|
||||
static __inline sbintime_t
|
||||
ustosbt(int64_t _us)
|
||||
{
|
||||
sbintime_t sb = 0;
|
||||
|
||||
if (_us >= SBT_1S) {
|
||||
sb = (_us / 1000000) * SBT_1S;
|
||||
_us = _us % 1000000;
|
||||
}
|
||||
/* 9223372036855 = ceil(2^63 / 1000000) */
|
||||
sb += ((_us * 9223372036855ull) + 0x7fffffff) >> 31;
|
||||
return (sb);
|
||||
}
|
||||
|
||||
static __inline int64_t
|
||||
sbttoms(sbintime_t _sbt)
|
||||
{
|
||||
|
||||
return ((1000 * _sbt) >> 32);
|
||||
}
|
||||
|
||||
static __inline sbintime_t
|
||||
mstosbt(int64_t _ms)
|
||||
{
|
||||
sbintime_t sb = 0;
|
||||
|
||||
if (_ms >= SBT_1S) {
|
||||
sb = (_ms / 1000) * SBT_1S;
|
||||
_ms = _ms % 1000;
|
||||
}
|
||||
/* 9223372036854776 = ceil(2^63 / 1000) */
|
||||
sb += ((_ms * 9223372036854776ull) + 0x7fffffff) >> 31;
|
||||
return (sb);
|
||||
}
|
||||
|
||||
/*-
|
||||
* Background information:
|
||||
*
|
||||
* When converting between timestamps on parallel timescales of differing
|
||||
* resolutions it is historical and scientific practice to round down rather
|
||||
* than doing 4/5 rounding.
|
||||
*
|
||||
* The date changes at midnight, not at noon.
|
||||
*
|
||||
* Even at 15:59:59.999999999 it's not four'o'clock.
|
||||
*
|
||||
* time_second ticks after N.999999999 not after N.4999999999
|
||||
*/
|
||||
|
||||
static __inline void
|
||||
bintime2timespec(const struct bintime *_bt, struct timespec *_ts)
|
||||
{
|
||||
|
||||
_ts->tv_sec = _bt->sec;
|
||||
_ts->tv_nsec = ((uint64_t)1000000000 *
|
||||
(uint32_t)(_bt->frac >> 32)) >> 32;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
timespec2bintime(const struct timespec *_ts, struct bintime *_bt)
|
||||
{
|
||||
|
||||
_bt->sec = _ts->tv_sec;
|
||||
/* 18446744073 = int(2^64 / 1000000000) */
|
||||
_bt->frac = _ts->tv_nsec * (uint64_t)18446744073LL;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
bintime2timeval(const struct bintime *_bt, struct timeval *_tv)
|
||||
{
|
||||
|
||||
_tv->tv_sec = _bt->sec;
|
||||
_tv->tv_usec = ((uint64_t)1000000 * (uint32_t)(_bt->frac >> 32)) >> 32;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
timeval2bintime(const struct timeval *_tv, struct bintime *_bt)
|
||||
{
|
||||
|
||||
_bt->sec = _tv->tv_sec;
|
||||
/* 18446744073709 = int(2^64 / 1000000) */
|
||||
_bt->frac = _tv->tv_usec * (uint64_t)18446744073709LL;
|
||||
}
|
||||
|
||||
static __inline struct timespec
|
||||
sbttots(sbintime_t _sbt)
|
||||
{
|
||||
struct timespec _ts;
|
||||
|
||||
_ts.tv_sec = _sbt >> 32;
|
||||
_ts.tv_nsec = sbttons((uint32_t)_sbt);
|
||||
return (_ts);
|
||||
}
|
||||
|
||||
static __inline sbintime_t
|
||||
tstosbt(struct timespec _ts)
|
||||
{
|
||||
|
||||
return (((sbintime_t)_ts.tv_sec << 32) + nstosbt(_ts.tv_nsec));
|
||||
}
|
||||
|
||||
static __inline struct timeval
|
||||
sbttotv(sbintime_t _sbt)
|
||||
{
|
||||
struct timeval _tv;
|
||||
|
||||
_tv.tv_sec = _sbt >> 32;
|
||||
_tv.tv_usec = sbttous((uint32_t)_sbt);
|
||||
return (_tv);
|
||||
}
|
||||
|
||||
static __inline sbintime_t
|
||||
tvtosbt(struct timeval _tv)
|
||||
{
|
||||
|
||||
return (((sbintime_t)_tv.tv_sec << 32) + ustosbt(_tv.tv_usec));
|
||||
}
|
||||
|
||||
/* Operations on timespecs */
|
||||
#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
|
||||
#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
|
||||
#define timespeccmp(tvp, uvp, cmp) \
|
||||
(((tvp)->tv_sec == (uvp)->tv_sec) ? \
|
||||
((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \
|
||||
((tvp)->tv_sec cmp (uvp)->tv_sec))
|
||||
|
||||
#define timespecadd(tsp, usp, vsp) \
|
||||
do { \
|
||||
(vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \
|
||||
(vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \
|
||||
if ((vsp)->tv_nsec >= 1000000000L) { \
|
||||
(vsp)->tv_sec++; \
|
||||
(vsp)->tv_nsec -= 1000000000L; \
|
||||
} \
|
||||
} while (0)
|
||||
#define timespecsub(tsp, usp, vsp) \
|
||||
do { \
|
||||
(vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \
|
||||
(vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \
|
||||
if ((vsp)->tv_nsec < 0) { \
|
||||
(vsp)->tv_sec--; \
|
||||
(vsp)->tv_nsec += 1000000000L; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#ifndef _KERNEL /* NetBSD/OpenBSD compatible interfaces */
|
||||
|
||||
#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
|
||||
#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
|
||||
#define timercmp(tvp, uvp, cmp) \
|
||||
(((tvp)->tv_sec == (uvp)->tv_sec) ? \
|
||||
((tvp)->tv_usec cmp (uvp)->tv_usec) : \
|
||||
((tvp)->tv_sec cmp (uvp)->tv_sec))
|
||||
#define timeradd(tvp, uvp, vvp) \
|
||||
do { \
|
||||
(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
|
||||
(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
|
||||
if ((vvp)->tv_usec >= 1000000) { \
|
||||
(vvp)->tv_sec++; \
|
||||
(vvp)->tv_usec -= 1000000; \
|
||||
} \
|
||||
} while (0)
|
||||
#define timersub(tvp, uvp, vvp) \
|
||||
do { \
|
||||
(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
|
||||
(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
|
||||
if ((vvp)->tv_usec < 0) { \
|
||||
(vvp)->tv_sec--; \
|
||||
(vvp)->tv_usec += 1000000; \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
/*
|
||||
* Names of the interval timers, and structure
|
||||
* defining a timer setting.
|
||||
*/
|
||||
#define ITIMER_REAL 0
|
||||
#define ITIMER_VIRTUAL 1
|
||||
#define ITIMER_PROF 2
|
||||
|
||||
struct itimerval {
|
||||
struct timeval it_interval; /* timer interval */
|
||||
struct timeval it_value; /* current value */
|
||||
};
|
||||
|
||||
#ifndef _KERNEL
|
||||
#include <time.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
int utimes (const char *, const struct timeval [2]);
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
int adjtime (const struct timeval *, struct timeval *);
|
||||
int futimes (int, const struct timeval [2]);
|
||||
int lutimes (const char *, const struct timeval [2]);
|
||||
int settimeofday (const struct timeval *, const struct timezone *);
|
||||
#endif
|
||||
|
||||
#if __MISC_VISIBLE || __XSI_VISIBLE
|
||||
int getitimer (int __which, struct itimerval *__value);
|
||||
int setitimer (int __which, const struct itimerval *__restrict __value,
|
||||
struct itimerval *__restrict __ovalue);
|
||||
#endif
|
||||
|
||||
int gettimeofday (struct timeval *__restrict __p,
|
||||
void *__restrict __tz);
|
||||
|
||||
#if __GNU_VISIBLE
|
||||
int futimesat (int, const char *, const struct timeval [2]);
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
int _gettimeofday (struct timeval *__p, void *__tz);
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_KERNEL */
|
||||
#include <machine/_time.h>
|
||||
|
||||
#endif /* !_SYS_TIME_H_ */
|
||||
40
prebuilts/gcc/arm-none-eabi/include/sys/timeb.h
Normal file
40
prebuilts/gcc/arm-none-eabi/include/sys/timeb.h
Normal file
@@ -0,0 +1,40 @@
|
||||
/* timeb.h -- An implementation of the standard Unix <sys/timeb.h> file.
|
||||
Written by Ian Lance Taylor <ian@cygnus.com>
|
||||
Public domain; no rights reserved.
|
||||
|
||||
<sys/timeb.h> declares the structure used by the ftime function, as
|
||||
well as the ftime function itself. Newlib does not provide an
|
||||
implementation of ftime. */
|
||||
|
||||
#ifndef _SYS_TIMEB_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define _SYS_TIMEB_H
|
||||
|
||||
#include <_ansi.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED)
|
||||
typedef _TIME_T_ time_t;
|
||||
#define __time_t_defined
|
||||
#define _TIME_T_DECLARED
|
||||
#endif
|
||||
|
||||
struct timeb
|
||||
{
|
||||
time_t time;
|
||||
unsigned short millitm;
|
||||
short timezone;
|
||||
short dstflag;
|
||||
};
|
||||
|
||||
extern int ftime (struct timeb *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ! defined (_SYS_TIMEB_H) */
|
||||
32
prebuilts/gcc/arm-none-eabi/include/sys/times.h
Normal file
32
prebuilts/gcc/arm-none-eabi/include/sys/times.h
Normal file
@@ -0,0 +1,32 @@
|
||||
#ifndef _SYS_TIMES_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define _SYS_TIMES_H
|
||||
|
||||
#include <_ansi.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
#if !defined(__clock_t_defined) && !defined(_CLOCK_T_DECLARED)
|
||||
typedef _CLOCK_T_ clock_t;
|
||||
#define __clock_t_defined
|
||||
#define _CLOCK_T_DECLARED
|
||||
#endif
|
||||
|
||||
/* Get Process Times, P1003.1b-1993, p. 92 */
|
||||
struct tms {
|
||||
clock_t tms_utime; /* user time */
|
||||
clock_t tms_stime; /* system time */
|
||||
clock_t tms_cutime; /* user time, children */
|
||||
clock_t tms_cstime; /* system time, children */
|
||||
};
|
||||
|
||||
clock_t times (struct tms *);
|
||||
#ifdef _LIBC
|
||||
clock_t _times (struct tms *);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* !_SYS_TIMES_H */
|
||||
63
prebuilts/gcc/arm-none-eabi/include/sys/timespec.h
Normal file
63
prebuilts/gcc/arm-none-eabi/include/sys/timespec.h
Normal file
@@ -0,0 +1,63 @@
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
||||
* from: FreeBSD: src/sys/sys/time.h,v 1.43 2000/03/20 14:09:05 phk Exp
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TIMESPEC_H_
|
||||
#define _SYS_TIMESPEC_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_timespec.h>
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#define TIMEVAL_TO_TIMESPEC(tv, ts) \
|
||||
do { \
|
||||
(ts)->tv_sec = (tv)->tv_sec; \
|
||||
(ts)->tv_nsec = (tv)->tv_usec * 1000; \
|
||||
} while (0)
|
||||
#define TIMESPEC_TO_TIMEVAL(tv, ts) \
|
||||
do { \
|
||||
(tv)->tv_sec = (ts)->tv_sec; \
|
||||
(tv)->tv_usec = (ts)->tv_nsec / 1000; \
|
||||
} while (0)
|
||||
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
/*
|
||||
* Structure defined by POSIX.1b to be like a itimerval, but with
|
||||
* timespecs. Used in the timer_*() system calls.
|
||||
*/
|
||||
struct itimerspec {
|
||||
struct timespec it_interval;
|
||||
struct timespec it_value;
|
||||
};
|
||||
|
||||
#endif /* _SYS_TIMESPEC_H_ */
|
||||
864
prebuilts/gcc/arm-none-eabi/include/sys/tree.h
Normal file
864
prebuilts/gcc/arm-none-eabi/include/sys/tree.h
Normal file
@@ -0,0 +1,864 @@
|
||||
/* $NetBSD: tree.h,v 1.8 2004/03/28 19:38:30 provos Exp $ */
|
||||
/* $OpenBSD: tree.h,v 1.7 2002/10/17 21:51:54 art Exp $ */
|
||||
/* $FreeBSD: head/sys/sys/tree.h 347360 2019-05-08 18:47:00Z trasz $ */
|
||||
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
|
||||
*
|
||||
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TREE_H_
|
||||
#define _SYS_TREE_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/*
|
||||
* This file defines data structures for different types of trees:
|
||||
* splay trees and red-black trees.
|
||||
*
|
||||
* A splay tree is a self-organizing data structure. Every operation
|
||||
* on the tree causes a splay to happen. The splay moves the requested
|
||||
* node to the root of the tree and partly rebalances it.
|
||||
*
|
||||
* This has the benefit that request locality causes faster lookups as
|
||||
* the requested nodes move to the top of the tree. On the other hand,
|
||||
* every lookup causes memory writes.
|
||||
*
|
||||
* The Balance Theorem bounds the total access time for m operations
|
||||
* and n inserts on an initially empty tree as O((m + n)lg n). The
|
||||
* amortized cost for a sequence of m accesses to a splay tree is O(lg n);
|
||||
*
|
||||
* A red-black tree is a binary search tree with the node color as an
|
||||
* extra attribute. It fulfills a set of conditions:
|
||||
* - every search path from the root to a leaf consists of the
|
||||
* same number of black nodes,
|
||||
* - each red node (except for the root) has a black parent,
|
||||
* - each leaf node is black.
|
||||
*
|
||||
* Every operation on a red-black tree is bounded as O(lg n).
|
||||
* The maximum height of a red-black tree is 2lg (n+1).
|
||||
*/
|
||||
|
||||
#define SPLAY_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *sph_root; /* root of the tree */ \
|
||||
}
|
||||
|
||||
#define SPLAY_INITIALIZER(root) \
|
||||
{ NULL }
|
||||
|
||||
#define SPLAY_INIT(root) do { \
|
||||
(root)->sph_root = NULL; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define SPLAY_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *spe_left; /* left element */ \
|
||||
struct type *spe_right; /* right element */ \
|
||||
}
|
||||
|
||||
#define SPLAY_LEFT(elm, field) (elm)->field.spe_left
|
||||
#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right
|
||||
#define SPLAY_ROOT(head) (head)->sph_root
|
||||
#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL)
|
||||
|
||||
/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */
|
||||
#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \
|
||||
SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \
|
||||
SPLAY_RIGHT(tmp, field) = (head)->sph_root; \
|
||||
(head)->sph_root = tmp; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \
|
||||
SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \
|
||||
SPLAY_LEFT(tmp, field) = (head)->sph_root; \
|
||||
(head)->sph_root = tmp; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define SPLAY_LINKLEFT(head, tmp, field) do { \
|
||||
SPLAY_LEFT(tmp, field) = (head)->sph_root; \
|
||||
tmp = (head)->sph_root; \
|
||||
(head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define SPLAY_LINKRIGHT(head, tmp, field) do { \
|
||||
SPLAY_RIGHT(tmp, field) = (head)->sph_root; \
|
||||
tmp = (head)->sph_root; \
|
||||
(head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \
|
||||
SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \
|
||||
SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field);\
|
||||
SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \
|
||||
SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
/* Generates prototypes and inline functions */
|
||||
|
||||
#define SPLAY_PROTOTYPE(name, type, field, cmp) \
|
||||
void name##_SPLAY(struct name *, struct type *); \
|
||||
void name##_SPLAY_MINMAX(struct name *, int); \
|
||||
struct type *name##_SPLAY_INSERT(struct name *, struct type *); \
|
||||
struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \
|
||||
\
|
||||
/* Finds the node with the same key as elm */ \
|
||||
static __unused __inline struct type * \
|
||||
name##_SPLAY_FIND(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
if (SPLAY_EMPTY(head)) \
|
||||
return(NULL); \
|
||||
name##_SPLAY(head, elm); \
|
||||
if ((cmp)(elm, (head)->sph_root) == 0) \
|
||||
return (head->sph_root); \
|
||||
return (NULL); \
|
||||
} \
|
||||
\
|
||||
static __unused __inline struct type * \
|
||||
name##_SPLAY_NEXT(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
name##_SPLAY(head, elm); \
|
||||
if (SPLAY_RIGHT(elm, field) != NULL) { \
|
||||
elm = SPLAY_RIGHT(elm, field); \
|
||||
while (SPLAY_LEFT(elm, field) != NULL) { \
|
||||
elm = SPLAY_LEFT(elm, field); \
|
||||
} \
|
||||
} else \
|
||||
elm = NULL; \
|
||||
return (elm); \
|
||||
} \
|
||||
\
|
||||
static __unused __inline struct type * \
|
||||
name##_SPLAY_MIN_MAX(struct name *head, int val) \
|
||||
{ \
|
||||
name##_SPLAY_MINMAX(head, val); \
|
||||
return (SPLAY_ROOT(head)); \
|
||||
}
|
||||
|
||||
/* Main splay operation.
|
||||
* Moves node close to the key of elm to top
|
||||
*/
|
||||
#define SPLAY_GENERATE(name, type, field, cmp) \
|
||||
struct type * \
|
||||
name##_SPLAY_INSERT(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
if (SPLAY_EMPTY(head)) { \
|
||||
SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \
|
||||
} else { \
|
||||
int __comp; \
|
||||
name##_SPLAY(head, elm); \
|
||||
__comp = (cmp)(elm, (head)->sph_root); \
|
||||
if(__comp < 0) { \
|
||||
SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field);\
|
||||
SPLAY_RIGHT(elm, field) = (head)->sph_root; \
|
||||
SPLAY_LEFT((head)->sph_root, field) = NULL; \
|
||||
} else if (__comp > 0) { \
|
||||
SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field);\
|
||||
SPLAY_LEFT(elm, field) = (head)->sph_root; \
|
||||
SPLAY_RIGHT((head)->sph_root, field) = NULL; \
|
||||
} else \
|
||||
return ((head)->sph_root); \
|
||||
} \
|
||||
(head)->sph_root = (elm); \
|
||||
return (NULL); \
|
||||
} \
|
||||
\
|
||||
struct type * \
|
||||
name##_SPLAY_REMOVE(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *__tmp; \
|
||||
if (SPLAY_EMPTY(head)) \
|
||||
return (NULL); \
|
||||
name##_SPLAY(head, elm); \
|
||||
if ((cmp)(elm, (head)->sph_root) == 0) { \
|
||||
if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \
|
||||
(head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);\
|
||||
} else { \
|
||||
__tmp = SPLAY_RIGHT((head)->sph_root, field); \
|
||||
(head)->sph_root = SPLAY_LEFT((head)->sph_root, field);\
|
||||
name##_SPLAY(head, elm); \
|
||||
SPLAY_RIGHT((head)->sph_root, field) = __tmp; \
|
||||
} \
|
||||
return (elm); \
|
||||
} \
|
||||
return (NULL); \
|
||||
} \
|
||||
\
|
||||
void \
|
||||
name##_SPLAY(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type __node, *__left, *__right, *__tmp; \
|
||||
int __comp; \
|
||||
\
|
||||
SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
|
||||
__left = __right = &__node; \
|
||||
\
|
||||
while ((__comp = (cmp)(elm, (head)->sph_root)) != 0) { \
|
||||
if (__comp < 0) { \
|
||||
__tmp = SPLAY_LEFT((head)->sph_root, field); \
|
||||
if (__tmp == NULL) \
|
||||
break; \
|
||||
if ((cmp)(elm, __tmp) < 0){ \
|
||||
SPLAY_ROTATE_RIGHT(head, __tmp, field); \
|
||||
if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
|
||||
break; \
|
||||
} \
|
||||
SPLAY_LINKLEFT(head, __right, field); \
|
||||
} else if (__comp > 0) { \
|
||||
__tmp = SPLAY_RIGHT((head)->sph_root, field); \
|
||||
if (__tmp == NULL) \
|
||||
break; \
|
||||
if ((cmp)(elm, __tmp) > 0){ \
|
||||
SPLAY_ROTATE_LEFT(head, __tmp, field); \
|
||||
if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
|
||||
break; \
|
||||
} \
|
||||
SPLAY_LINKRIGHT(head, __left, field); \
|
||||
} \
|
||||
} \
|
||||
SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \
|
||||
} \
|
||||
\
|
||||
/* Splay with either the minimum or the maximum element \
|
||||
* Used to find minimum or maximum element in tree. \
|
||||
*/ \
|
||||
void name##_SPLAY_MINMAX(struct name *head, int __comp) \
|
||||
{ \
|
||||
struct type __node, *__left, *__right, *__tmp; \
|
||||
\
|
||||
SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
|
||||
__left = __right = &__node; \
|
||||
\
|
||||
while (1) { \
|
||||
if (__comp < 0) { \
|
||||
__tmp = SPLAY_LEFT((head)->sph_root, field); \
|
||||
if (__tmp == NULL) \
|
||||
break; \
|
||||
if (__comp < 0){ \
|
||||
SPLAY_ROTATE_RIGHT(head, __tmp, field); \
|
||||
if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
|
||||
break; \
|
||||
} \
|
||||
SPLAY_LINKLEFT(head, __right, field); \
|
||||
} else if (__comp > 0) { \
|
||||
__tmp = SPLAY_RIGHT((head)->sph_root, field); \
|
||||
if (__tmp == NULL) \
|
||||
break; \
|
||||
if (__comp > 0) { \
|
||||
SPLAY_ROTATE_LEFT(head, __tmp, field); \
|
||||
if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
|
||||
break; \
|
||||
} \
|
||||
SPLAY_LINKRIGHT(head, __left, field); \
|
||||
} \
|
||||
} \
|
||||
SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \
|
||||
}
|
||||
|
||||
#define SPLAY_NEGINF -1
|
||||
#define SPLAY_INF 1
|
||||
|
||||
#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y)
|
||||
#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y)
|
||||
#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y)
|
||||
#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y)
|
||||
#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \
|
||||
: name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF))
|
||||
#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \
|
||||
: name##_SPLAY_MIN_MAX(x, SPLAY_INF))
|
||||
|
||||
#define SPLAY_FOREACH(x, name, head) \
|
||||
for ((x) = SPLAY_MIN(name, head); \
|
||||
(x) != NULL; \
|
||||
(x) = SPLAY_NEXT(name, head, x))
|
||||
|
||||
/* Macros that define a red-black tree */
|
||||
#define RB_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *rbh_root; /* root of the tree */ \
|
||||
}
|
||||
|
||||
#define RB_INITIALIZER(root) \
|
||||
{ NULL }
|
||||
|
||||
#define RB_INIT(root) do { \
|
||||
(root)->rbh_root = NULL; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define RB_BLACK 0
|
||||
#define RB_RED 1
|
||||
#define RB_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *rbe_left; /* left element */ \
|
||||
struct type *rbe_right; /* right element */ \
|
||||
struct type *rbe_parent; /* parent element */ \
|
||||
int rbe_color; /* node color */ \
|
||||
}
|
||||
|
||||
#define RB_LEFT(elm, field) (elm)->field.rbe_left
|
||||
#define RB_RIGHT(elm, field) (elm)->field.rbe_right
|
||||
#define RB_PARENT(elm, field) (elm)->field.rbe_parent
|
||||
#define RB_COLOR(elm, field) (elm)->field.rbe_color
|
||||
#define RB_ISRED(elm, field) ((elm) != NULL && RB_COLOR(elm, field) == RB_RED)
|
||||
#define RB_ROOT(head) (head)->rbh_root
|
||||
#define RB_EMPTY(head) (RB_ROOT(head) == NULL)
|
||||
|
||||
#define RB_SET_PARENT(dst, src, field) do { \
|
||||
RB_PARENT(dst, field) = src; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define RB_SET(elm, parent, field) do { \
|
||||
RB_SET_PARENT(elm, parent, field); \
|
||||
RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \
|
||||
RB_COLOR(elm, field) = RB_RED; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define RB_SET_BLACKRED(black, red, field) do { \
|
||||
RB_COLOR(black, field) = RB_BLACK; \
|
||||
RB_COLOR(red, field) = RB_RED; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
/*
|
||||
* Something to be invoked in a loop at the root of every modified subtree,
|
||||
* from the bottom up to the root, to update augmented node data.
|
||||
*/
|
||||
#ifndef RB_AUGMENT
|
||||
#define RB_AUGMENT(x) break
|
||||
#endif
|
||||
|
||||
#define RB_SWAP_CHILD(head, out, in, field) do { \
|
||||
if (RB_PARENT(out, field) == NULL) \
|
||||
RB_ROOT(head) = (in); \
|
||||
else if ((out) == RB_LEFT(RB_PARENT(out, field), field)) \
|
||||
RB_LEFT(RB_PARENT(out, field), field) = (in); \
|
||||
else \
|
||||
RB_RIGHT(RB_PARENT(out, field), field) = (in); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define RB_ROTATE_LEFT(head, elm, tmp, field) do { \
|
||||
(tmp) = RB_RIGHT(elm, field); \
|
||||
if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field)) != NULL) { \
|
||||
RB_SET_PARENT(RB_RIGHT(elm, field), elm, field); \
|
||||
} \
|
||||
RB_SET_PARENT(tmp, RB_PARENT(elm, field), field); \
|
||||
RB_SWAP_CHILD(head, elm, tmp, field); \
|
||||
RB_LEFT(tmp, field) = (elm); \
|
||||
RB_SET_PARENT(elm, tmp, field); \
|
||||
RB_AUGMENT(elm); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define RB_ROTATE_RIGHT(head, elm, tmp, field) do { \
|
||||
(tmp) = RB_LEFT(elm, field); \
|
||||
if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field)) != NULL) { \
|
||||
RB_SET_PARENT(RB_LEFT(elm, field), elm, field); \
|
||||
} \
|
||||
RB_SET_PARENT(tmp, RB_PARENT(elm, field), field); \
|
||||
RB_SWAP_CHILD(head, elm, tmp, field); \
|
||||
RB_RIGHT(tmp, field) = (elm); \
|
||||
RB_SET_PARENT(elm, tmp, field); \
|
||||
RB_AUGMENT(elm); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
/*
|
||||
* The RB_PARENT_ROTATE_LEFT() and RB_PARENT_ROTATE_RIGHT() rotations are
|
||||
* specialized versions of RB_ROTATE_LEFT() and RB_ROTATE_RIGHT() which may be
|
||||
* used if the parent node exists and the direction of the child element is
|
||||
* known.
|
||||
*/
|
||||
|
||||
#define RB_PARENT_ROTATE_LEFT(parent, left, tmp, field) do { \
|
||||
(tmp) = RB_RIGHT(left, field); \
|
||||
if ((RB_RIGHT(left, field) = RB_LEFT(tmp, field)) != NULL) { \
|
||||
RB_SET_PARENT(RB_RIGHT(left, field), left, field); \
|
||||
} \
|
||||
RB_SET_PARENT(tmp, parent, field); \
|
||||
RB_LEFT(parent, field) = (tmp); \
|
||||
RB_LEFT(tmp, field) = (left); \
|
||||
RB_SET_PARENT(left, tmp, field); \
|
||||
RB_AUGMENT(left); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define RB_PARENT_ROTATE_RIGHT(parent, right, tmp, field) do { \
|
||||
(tmp) = RB_LEFT(right, field); \
|
||||
if ((RB_LEFT(right, field) = RB_RIGHT(tmp, field)) != NULL) { \
|
||||
RB_SET_PARENT(RB_LEFT(right, field), right, field); \
|
||||
} \
|
||||
RB_SET_PARENT(tmp, parent, field); \
|
||||
RB_RIGHT(parent, field) = (tmp); \
|
||||
RB_RIGHT(tmp, field) = (right); \
|
||||
RB_SET_PARENT(right, tmp, field); \
|
||||
RB_AUGMENT(right); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
/*
|
||||
* The RB_RED_ROTATE_LEFT() and RB_RED_ROTATE_RIGHT() rotations are specialized
|
||||
* versions of RB_ROTATE_LEFT() and RB_ROTATE_RIGHT() which may be used if we
|
||||
* rotate an element with a red child which has a black sibling. Such a red
|
||||
* node must have at least two child nodes so that the following red-black tree
|
||||
* invariant is fulfilled:
|
||||
*
|
||||
* Every path from a given node to any of its descendant NULL nodes goes
|
||||
* through the same number of black nodes.
|
||||
*
|
||||
* elm (could be the root)
|
||||
* / \
|
||||
* BLACK RED (left or right child)
|
||||
* / \
|
||||
* BLACK BLACK
|
||||
*/
|
||||
|
||||
#define RB_RED_ROTATE_LEFT(head, elm, tmp, field) do { \
|
||||
(tmp) = RB_RIGHT(elm, field); \
|
||||
RB_RIGHT(elm, field) = RB_LEFT(tmp, field); \
|
||||
RB_SET_PARENT(RB_RIGHT(elm, field), elm, field); \
|
||||
RB_SET_PARENT(tmp, RB_PARENT(elm, field), field); \
|
||||
RB_SWAP_CHILD(head, elm, tmp, field); \
|
||||
RB_LEFT(tmp, field) = (elm); \
|
||||
RB_SET_PARENT(elm, tmp, field); \
|
||||
RB_AUGMENT(elm); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define RB_RED_ROTATE_RIGHT(head, elm, tmp, field) do { \
|
||||
(tmp) = RB_LEFT(elm, field); \
|
||||
RB_LEFT(elm, field) = RB_RIGHT(tmp, field); \
|
||||
RB_SET_PARENT(RB_LEFT(elm, field), elm, field); \
|
||||
RB_SET_PARENT(tmp, RB_PARENT(elm, field), field); \
|
||||
RB_SWAP_CHILD(head, elm, tmp, field); \
|
||||
RB_RIGHT(tmp, field) = (elm); \
|
||||
RB_SET_PARENT(elm, tmp, field); \
|
||||
RB_AUGMENT(elm); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
/* Generates prototypes and inline functions */
|
||||
#define RB_PROTOTYPE(name, type, field, cmp) \
|
||||
RB_PROTOTYPE_INTERNAL(name, type, field, cmp,)
|
||||
#define RB_PROTOTYPE_STATIC(name, type, field, cmp) \
|
||||
RB_PROTOTYPE_INTERNAL(name, type, field, cmp, __unused static)
|
||||
#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \
|
||||
RB_PROTOTYPE_INSERT_COLOR(name, type, attr); \
|
||||
RB_PROTOTYPE_REMOVE_COLOR(name, type, attr); \
|
||||
RB_PROTOTYPE_INSERT(name, type, attr); \
|
||||
RB_PROTOTYPE_REMOVE(name, type, attr); \
|
||||
RB_PROTOTYPE_FIND(name, type, attr); \
|
||||
RB_PROTOTYPE_NFIND(name, type, attr); \
|
||||
RB_PROTOTYPE_NEXT(name, type, attr); \
|
||||
RB_PROTOTYPE_PREV(name, type, attr); \
|
||||
RB_PROTOTYPE_MINMAX(name, type, attr); \
|
||||
RB_PROTOTYPE_REINSERT(name, type, attr);
|
||||
#define RB_PROTOTYPE_INSERT_COLOR(name, type, attr) \
|
||||
attr void name##_RB_INSERT_COLOR(struct name *, struct type *)
|
||||
#define RB_PROTOTYPE_REMOVE_COLOR(name, type, attr) \
|
||||
attr void name##_RB_REMOVE_COLOR(struct name *, struct type *)
|
||||
#define RB_PROTOTYPE_REMOVE(name, type, attr) \
|
||||
attr struct type *name##_RB_REMOVE(struct name *, struct type *)
|
||||
#define RB_PROTOTYPE_INSERT(name, type, attr) \
|
||||
attr struct type *name##_RB_INSERT(struct name *, struct type *)
|
||||
#define RB_PROTOTYPE_FIND(name, type, attr) \
|
||||
attr struct type *name##_RB_FIND(struct name *, struct type *)
|
||||
#define RB_PROTOTYPE_NFIND(name, type, attr) \
|
||||
attr struct type *name##_RB_NFIND(struct name *, struct type *)
|
||||
#define RB_PROTOTYPE_NEXT(name, type, attr) \
|
||||
attr struct type *name##_RB_NEXT(struct type *)
|
||||
#define RB_PROTOTYPE_PREV(name, type, attr) \
|
||||
attr struct type *name##_RB_PREV(struct type *)
|
||||
#define RB_PROTOTYPE_MINMAX(name, type, attr) \
|
||||
attr struct type *name##_RB_MINMAX(struct name *, int)
|
||||
#define RB_PROTOTYPE_REINSERT(name, type, attr) \
|
||||
attr struct type *name##_RB_REINSERT(struct name *, struct type *)
|
||||
|
||||
/* Main rb operation.
|
||||
* Moves node close to the key of elm to top
|
||||
*/
|
||||
#define RB_GENERATE(name, type, field, cmp) \
|
||||
RB_GENERATE_INTERNAL(name, type, field, cmp,)
|
||||
#define RB_GENERATE_STATIC(name, type, field, cmp) \
|
||||
RB_GENERATE_INTERNAL(name, type, field, cmp, __unused static)
|
||||
#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr) \
|
||||
RB_GENERATE_INSERT_COLOR(name, type, field, attr) \
|
||||
RB_GENERATE_REMOVE_COLOR(name, type, field, attr) \
|
||||
RB_GENERATE_INSERT(name, type, field, cmp, attr) \
|
||||
RB_GENERATE_REMOVE(name, type, field, attr) \
|
||||
RB_GENERATE_FIND(name, type, field, cmp, attr) \
|
||||
RB_GENERATE_NFIND(name, type, field, cmp, attr) \
|
||||
RB_GENERATE_NEXT(name, type, field, attr) \
|
||||
RB_GENERATE_PREV(name, type, field, attr) \
|
||||
RB_GENERATE_MINMAX(name, type, field, attr) \
|
||||
RB_GENERATE_REINSERT(name, type, field, cmp, attr)
|
||||
|
||||
|
||||
#define RB_GENERATE_INSERT_COLOR(name, type, field, attr) \
|
||||
attr void \
|
||||
name##_RB_INSERT_COLOR(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *parent, *gparent, *tmp; \
|
||||
while (RB_ISRED((parent = RB_PARENT(elm, field)), field)) { \
|
||||
gparent = RB_PARENT(parent, field); \
|
||||
if (parent == RB_LEFT(gparent, field)) { \
|
||||
tmp = RB_RIGHT(gparent, field); \
|
||||
if (RB_ISRED(tmp, field)) { \
|
||||
RB_COLOR(tmp, field) = RB_BLACK; \
|
||||
RB_SET_BLACKRED(parent, gparent, field);\
|
||||
elm = gparent; \
|
||||
continue; \
|
||||
} \
|
||||
if (RB_RIGHT(parent, field) == elm) { \
|
||||
RB_PARENT_ROTATE_LEFT(gparent, parent, \
|
||||
tmp, field); \
|
||||
tmp = parent; \
|
||||
parent = elm; \
|
||||
elm = tmp; \
|
||||
} \
|
||||
RB_SET_BLACKRED(parent, gparent, field); \
|
||||
RB_ROTATE_RIGHT(head, gparent, tmp, field); \
|
||||
} else { \
|
||||
tmp = RB_LEFT(gparent, field); \
|
||||
if (RB_ISRED(tmp, field)) { \
|
||||
RB_COLOR(tmp, field) = RB_BLACK; \
|
||||
RB_SET_BLACKRED(parent, gparent, field);\
|
||||
elm = gparent; \
|
||||
continue; \
|
||||
} \
|
||||
if (RB_LEFT(parent, field) == elm) { \
|
||||
RB_PARENT_ROTATE_RIGHT(gparent, parent, \
|
||||
tmp, field); \
|
||||
tmp = parent; \
|
||||
parent = elm; \
|
||||
elm = tmp; \
|
||||
} \
|
||||
RB_SET_BLACKRED(parent, gparent, field); \
|
||||
RB_ROTATE_LEFT(head, gparent, tmp, field); \
|
||||
} \
|
||||
} \
|
||||
RB_COLOR(head->rbh_root, field) = RB_BLACK; \
|
||||
}
|
||||
|
||||
#define RB_GENERATE_REMOVE_COLOR(name, type, field, attr) \
|
||||
attr void \
|
||||
name##_RB_REMOVE_COLOR(struct name *head, struct type *parent) \
|
||||
{ \
|
||||
struct type *elm, *tmp; \
|
||||
elm = NULL; \
|
||||
do { \
|
||||
if (RB_LEFT(parent, field) == elm) { \
|
||||
tmp = RB_RIGHT(parent, field); \
|
||||
if (RB_COLOR(tmp, field) == RB_RED) { \
|
||||
RB_SET_BLACKRED(tmp, parent, field); \
|
||||
RB_RED_ROTATE_LEFT(head, parent, tmp, field); \
|
||||
tmp = RB_RIGHT(parent, field); \
|
||||
} \
|
||||
if (RB_ISRED(RB_RIGHT(tmp, field), field)) \
|
||||
RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK; \
|
||||
else if (RB_ISRED(RB_LEFT(tmp, field), field)) { \
|
||||
struct type *oleft; \
|
||||
RB_PARENT_ROTATE_RIGHT(parent, tmp, \
|
||||
oleft, field); \
|
||||
RB_COLOR(oleft, field) = RB_BLACK; \
|
||||
tmp = oleft; \
|
||||
} else { \
|
||||
RB_COLOR(tmp, field) = RB_RED; \
|
||||
elm = parent; \
|
||||
parent = RB_PARENT(elm, field); \
|
||||
continue; \
|
||||
} \
|
||||
RB_COLOR(tmp, field) = RB_COLOR(parent, field); \
|
||||
RB_COLOR(parent, field) = RB_BLACK; \
|
||||
RB_ROTATE_LEFT(head, parent, tmp, field); \
|
||||
elm = RB_ROOT(head); \
|
||||
break; \
|
||||
} else { \
|
||||
tmp = RB_LEFT(parent, field); \
|
||||
if (RB_COLOR(tmp, field) == RB_RED) { \
|
||||
RB_SET_BLACKRED(tmp, parent, field); \
|
||||
RB_RED_ROTATE_RIGHT(head, parent, tmp, field); \
|
||||
tmp = RB_LEFT(parent, field); \
|
||||
} \
|
||||
if (RB_ISRED(RB_LEFT(tmp, field), field)) \
|
||||
RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK; \
|
||||
else if (RB_ISRED(RB_RIGHT(tmp, field), field)) { \
|
||||
struct type *oright; \
|
||||
RB_PARENT_ROTATE_LEFT(parent, tmp, \
|
||||
oright, field); \
|
||||
RB_COLOR(oright, field) = RB_BLACK; \
|
||||
tmp = oright; \
|
||||
} else { \
|
||||
RB_COLOR(tmp, field) = RB_RED; \
|
||||
elm = parent; \
|
||||
parent = RB_PARENT(elm, field); \
|
||||
continue; \
|
||||
} \
|
||||
RB_COLOR(tmp, field) = RB_COLOR(parent, field); \
|
||||
RB_COLOR(parent, field) = RB_BLACK; \
|
||||
RB_ROTATE_RIGHT(head, parent, tmp, field); \
|
||||
elm = RB_ROOT(head); \
|
||||
break; \
|
||||
} \
|
||||
} while (RB_COLOR(elm, field) == RB_BLACK && parent != NULL); \
|
||||
RB_COLOR(elm, field) = RB_BLACK; \
|
||||
}
|
||||
|
||||
#define RB_GENERATE_REMOVE(name, type, field, attr) \
|
||||
attr struct type * \
|
||||
name##_RB_REMOVE(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *child, *old, *parent, *right; \
|
||||
int color; \
|
||||
\
|
||||
old = elm; \
|
||||
parent = RB_PARENT(elm, field); \
|
||||
right = RB_RIGHT(elm, field); \
|
||||
color = RB_COLOR(elm, field); \
|
||||
if (RB_LEFT(elm, field) == NULL) \
|
||||
elm = child = right; \
|
||||
else if (right == NULL) \
|
||||
elm = child = RB_LEFT(elm, field); \
|
||||
else { \
|
||||
if ((child = RB_LEFT(right, field)) == NULL) { \
|
||||
child = RB_RIGHT(right, field); \
|
||||
RB_RIGHT(old, field) = child; \
|
||||
parent = elm = right; \
|
||||
} else { \
|
||||
do \
|
||||
elm = child; \
|
||||
while ((child = RB_LEFT(elm, field)) != NULL); \
|
||||
child = RB_RIGHT(elm, field); \
|
||||
parent = RB_PARENT(elm, field); \
|
||||
RB_LEFT(parent, field) = child; \
|
||||
RB_SET_PARENT(RB_RIGHT(old, field), elm, field); \
|
||||
} \
|
||||
RB_SET_PARENT(RB_LEFT(old, field), elm, field); \
|
||||
color = RB_COLOR(elm, field); \
|
||||
elm->field = old->field; \
|
||||
} \
|
||||
RB_SWAP_CHILD(head, old, elm, field); \
|
||||
if (child != NULL) { \
|
||||
RB_SET_PARENT(child, parent, field); \
|
||||
RB_COLOR(child, field) = RB_BLACK; \
|
||||
} else if (color != RB_RED && parent != NULL) \
|
||||
name##_RB_REMOVE_COLOR(head, parent); \
|
||||
while (parent != NULL) { \
|
||||
RB_AUGMENT(parent); \
|
||||
parent = RB_PARENT(parent, field); \
|
||||
} \
|
||||
return (old); \
|
||||
}
|
||||
|
||||
#define RB_GENERATE_INSERT(name, type, field, cmp, attr) \
|
||||
/* Inserts a node into the RB tree */ \
|
||||
attr struct type * \
|
||||
name##_RB_INSERT(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *tmp; \
|
||||
struct type *parent = NULL; \
|
||||
int comp = 0; \
|
||||
tmp = RB_ROOT(head); \
|
||||
while (tmp) { \
|
||||
parent = tmp; \
|
||||
comp = (cmp)(elm, parent); \
|
||||
if (comp < 0) \
|
||||
tmp = RB_LEFT(tmp, field); \
|
||||
else if (comp > 0) \
|
||||
tmp = RB_RIGHT(tmp, field); \
|
||||
else \
|
||||
return (tmp); \
|
||||
} \
|
||||
RB_SET(elm, parent, field); \
|
||||
if (parent != NULL) { \
|
||||
if (comp < 0) \
|
||||
RB_LEFT(parent, field) = elm; \
|
||||
else \
|
||||
RB_RIGHT(parent, field) = elm; \
|
||||
} else \
|
||||
RB_ROOT(head) = elm; \
|
||||
name##_RB_INSERT_COLOR(head, elm); \
|
||||
while (elm != NULL) { \
|
||||
RB_AUGMENT(elm); \
|
||||
elm = RB_PARENT(elm, field); \
|
||||
} \
|
||||
return (NULL); \
|
||||
}
|
||||
|
||||
#define RB_GENERATE_FIND(name, type, field, cmp, attr) \
|
||||
/* Finds the node with the same key as elm */ \
|
||||
attr struct type * \
|
||||
name##_RB_FIND(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *tmp = RB_ROOT(head); \
|
||||
int comp; \
|
||||
while (tmp) { \
|
||||
comp = cmp(elm, tmp); \
|
||||
if (comp < 0) \
|
||||
tmp = RB_LEFT(tmp, field); \
|
||||
else if (comp > 0) \
|
||||
tmp = RB_RIGHT(tmp, field); \
|
||||
else \
|
||||
return (tmp); \
|
||||
} \
|
||||
return (NULL); \
|
||||
}
|
||||
|
||||
#define RB_GENERATE_NFIND(name, type, field, cmp, attr) \
|
||||
/* Finds the first node greater than or equal to the search key */ \
|
||||
attr struct type * \
|
||||
name##_RB_NFIND(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *tmp = RB_ROOT(head); \
|
||||
struct type *res = NULL; \
|
||||
int comp; \
|
||||
while (tmp) { \
|
||||
comp = cmp(elm, tmp); \
|
||||
if (comp < 0) { \
|
||||
res = tmp; \
|
||||
tmp = RB_LEFT(tmp, field); \
|
||||
} \
|
||||
else if (comp > 0) \
|
||||
tmp = RB_RIGHT(tmp, field); \
|
||||
else \
|
||||
return (tmp); \
|
||||
} \
|
||||
return (res); \
|
||||
}
|
||||
|
||||
#define RB_GENERATE_NEXT(name, type, field, attr) \
|
||||
/* ARGSUSED */ \
|
||||
attr struct type * \
|
||||
name##_RB_NEXT(struct type *elm) \
|
||||
{ \
|
||||
if (RB_RIGHT(elm, field)) { \
|
||||
elm = RB_RIGHT(elm, field); \
|
||||
while (RB_LEFT(elm, field)) \
|
||||
elm = RB_LEFT(elm, field); \
|
||||
} else { \
|
||||
if (RB_PARENT(elm, field) && \
|
||||
(elm == RB_LEFT(RB_PARENT(elm, field), field))) \
|
||||
elm = RB_PARENT(elm, field); \
|
||||
else { \
|
||||
while (RB_PARENT(elm, field) && \
|
||||
(elm == RB_RIGHT(RB_PARENT(elm, field), field)))\
|
||||
elm = RB_PARENT(elm, field); \
|
||||
elm = RB_PARENT(elm, field); \
|
||||
} \
|
||||
} \
|
||||
return (elm); \
|
||||
}
|
||||
|
||||
#define RB_GENERATE_PREV(name, type, field, attr) \
|
||||
/* ARGSUSED */ \
|
||||
attr struct type * \
|
||||
name##_RB_PREV(struct type *elm) \
|
||||
{ \
|
||||
if (RB_LEFT(elm, field)) { \
|
||||
elm = RB_LEFT(elm, field); \
|
||||
while (RB_RIGHT(elm, field)) \
|
||||
elm = RB_RIGHT(elm, field); \
|
||||
} else { \
|
||||
if (RB_PARENT(elm, field) && \
|
||||
(elm == RB_RIGHT(RB_PARENT(elm, field), field))) \
|
||||
elm = RB_PARENT(elm, field); \
|
||||
else { \
|
||||
while (RB_PARENT(elm, field) && \
|
||||
(elm == RB_LEFT(RB_PARENT(elm, field), field)))\
|
||||
elm = RB_PARENT(elm, field); \
|
||||
elm = RB_PARENT(elm, field); \
|
||||
} \
|
||||
} \
|
||||
return (elm); \
|
||||
}
|
||||
|
||||
#define RB_GENERATE_MINMAX(name, type, field, attr) \
|
||||
attr struct type * \
|
||||
name##_RB_MINMAX(struct name *head, int val) \
|
||||
{ \
|
||||
struct type *tmp = RB_ROOT(head); \
|
||||
struct type *parent = NULL; \
|
||||
while (tmp) { \
|
||||
parent = tmp; \
|
||||
if (val < 0) \
|
||||
tmp = RB_LEFT(tmp, field); \
|
||||
else \
|
||||
tmp = RB_RIGHT(tmp, field); \
|
||||
} \
|
||||
return (parent); \
|
||||
}
|
||||
|
||||
#define RB_GENERATE_REINSERT(name, type, field, cmp, attr) \
|
||||
attr struct type * \
|
||||
name##_RB_REINSERT(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *cmpelm; \
|
||||
if (((cmpelm = RB_PREV(name, head, elm)) != NULL && \
|
||||
cmp(cmpelm, elm) >= 0) || \
|
||||
((cmpelm = RB_NEXT(name, head, elm)) != NULL && \
|
||||
cmp(elm, cmpelm) >= 0)) { \
|
||||
/* XXXLAS: Remove/insert is heavy handed. */ \
|
||||
RB_REMOVE(name, head, elm); \
|
||||
return (RB_INSERT(name, head, elm)); \
|
||||
} \
|
||||
return (NULL); \
|
||||
} \
|
||||
|
||||
#define RB_NEGINF -1
|
||||
#define RB_INF 1
|
||||
|
||||
#define RB_INSERT(name, x, y) name##_RB_INSERT(x, y)
|
||||
#define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y)
|
||||
#define RB_FIND(name, x, y) name##_RB_FIND(x, y)
|
||||
#define RB_NFIND(name, x, y) name##_RB_NFIND(x, y)
|
||||
#define RB_NEXT(name, x, y) name##_RB_NEXT(y)
|
||||
#define RB_PREV(name, x, y) name##_RB_PREV(y)
|
||||
#define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF)
|
||||
#define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF)
|
||||
#define RB_REINSERT(name, x, y) name##_RB_REINSERT(x, y)
|
||||
|
||||
#define RB_FOREACH(x, name, head) \
|
||||
for ((x) = RB_MIN(name, head); \
|
||||
(x) != NULL; \
|
||||
(x) = name##_RB_NEXT(x))
|
||||
|
||||
#define RB_FOREACH_FROM(x, name, y) \
|
||||
for ((x) = (y); \
|
||||
((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \
|
||||
(x) = (y))
|
||||
|
||||
#define RB_FOREACH_SAFE(x, name, head, y) \
|
||||
for ((x) = RB_MIN(name, head); \
|
||||
((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \
|
||||
(x) = (y))
|
||||
|
||||
#define RB_FOREACH_REVERSE(x, name, head) \
|
||||
for ((x) = RB_MAX(name, head); \
|
||||
(x) != NULL; \
|
||||
(x) = name##_RB_PREV(x))
|
||||
|
||||
#define RB_FOREACH_REVERSE_FROM(x, name, y) \
|
||||
for ((x) = (y); \
|
||||
((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \
|
||||
(x) = (y))
|
||||
|
||||
#define RB_FOREACH_REVERSE_SAFE(x, name, head, y) \
|
||||
for ((x) = RB_MAX(name, head); \
|
||||
((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \
|
||||
(x) = (y))
|
||||
|
||||
#endif /* _SYS_TREE_H_ */
|
||||
228
prebuilts/gcc/arm-none-eabi/include/sys/types.h
Normal file
228
prebuilts/gcc/arm-none-eabi/include/sys/types.h
Normal file
@@ -0,0 +1,228 @@
|
||||
/* unified sys/types.h:
|
||||
start with sef's sysvi386 version.
|
||||
merge go32 version -- a few ifdefs.
|
||||
h8300hms, h8300xray, and sysvnecv70 disagree on the following types:
|
||||
|
||||
typedef int gid_t;
|
||||
typedef int uid_t;
|
||||
typedef int dev_t;
|
||||
typedef int ino_t;
|
||||
typedef int mode_t;
|
||||
typedef int caddr_t;
|
||||
|
||||
however, these aren't "reasonable" values, the sysvi386 ones make far
|
||||
more sense, and should work sufficiently well (in particular, h8300
|
||||
doesn't have a stat, and the necv70 doesn't matter.) -- eichin
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TYPES_H
|
||||
|
||||
#include <_ansi.h>
|
||||
#include <sys/cdefs.h>
|
||||
#include <machine/_types.h>
|
||||
|
||||
/* BSD types permitted by POSIX and always exposed as in Glibc. Only provided
|
||||
for backward compatibility with BSD code. The uintN_t standard types should
|
||||
be preferred in new code. */
|
||||
#if ___int8_t_defined
|
||||
typedef __uint8_t u_int8_t;
|
||||
#endif
|
||||
#if ___int16_t_defined
|
||||
typedef __uint16_t u_int16_t;
|
||||
#endif
|
||||
#if ___int32_t_defined
|
||||
typedef __uint32_t u_int32_t;
|
||||
#endif
|
||||
#if ___int64_t_defined
|
||||
typedef __uint64_t u_int64_t;
|
||||
#endif
|
||||
typedef __intptr_t register_t;
|
||||
#define __BIT_TYPES_DEFINED__ 1
|
||||
|
||||
#ifndef __need_inttypes
|
||||
|
||||
#define _SYS_TYPES_H
|
||||
#include <sys/_types.h>
|
||||
#include <sys/_stdint.h>
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#include <machine/endian.h>
|
||||
#include <sys/select.h>
|
||||
# define physadr physadr_t
|
||||
# define quad quad_t
|
||||
|
||||
#ifndef _IN_ADDR_T_DECLARED
|
||||
typedef __uint32_t in_addr_t; /* base type for internet address */
|
||||
#define _IN_ADDR_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _IN_PORT_T_DECLARED
|
||||
typedef __uint16_t in_port_t;
|
||||
#define _IN_PORT_T_DECLARED
|
||||
#endif
|
||||
|
||||
typedef __uintptr_t u_register_t;
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
#if __MISC_VISIBLE
|
||||
#ifndef _BSDTYPES_DEFINED
|
||||
/* also defined in mingw/gmon.h and in w32api/winsock[2].h */
|
||||
#ifndef __u_char_defined
|
||||
typedef unsigned char u_char;
|
||||
#define __u_char_defined
|
||||
#endif
|
||||
#ifndef __u_short_defined
|
||||
typedef unsigned short u_short;
|
||||
#define __u_short_defined
|
||||
#endif
|
||||
#ifndef __u_int_defined
|
||||
typedef unsigned int u_int;
|
||||
#define __u_int_defined
|
||||
#endif
|
||||
#ifndef __u_long_defined
|
||||
typedef unsigned long u_long;
|
||||
#define __u_long_defined
|
||||
#endif
|
||||
#define _BSDTYPES_DEFINED
|
||||
#endif
|
||||
#endif /* __MISC_VISIBLE */
|
||||
|
||||
#if __MISC_VISIBLE
|
||||
typedef unsigned short ushort; /* System V compatibility */
|
||||
typedef unsigned int uint; /* System V compatibility */
|
||||
typedef unsigned long ulong; /* System V compatibility */
|
||||
#endif
|
||||
|
||||
#ifndef _BLKCNT_T_DECLARED
|
||||
typedef __blkcnt_t blkcnt_t;
|
||||
#define _BLKCNT_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _BLKSIZE_T_DECLARED
|
||||
typedef __blksize_t blksize_t;
|
||||
#define _BLKSIZE_T_DECLARED
|
||||
#endif
|
||||
|
||||
#if !defined(__clock_t_defined) && !defined(_CLOCK_T_DECLARED)
|
||||
typedef _CLOCK_T_ clock_t;
|
||||
#define __clock_t_defined
|
||||
#define _CLOCK_T_DECLARED
|
||||
#endif
|
||||
|
||||
#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED)
|
||||
typedef _TIME_T_ time_t;
|
||||
#define __time_t_defined
|
||||
#define _TIME_T_DECLARED
|
||||
#endif
|
||||
|
||||
typedef __daddr_t daddr_t;
|
||||
|
||||
#ifndef __caddr_t_defined
|
||||
typedef char * caddr_t;
|
||||
#define __caddr_t_defined
|
||||
#endif
|
||||
|
||||
#ifndef _FSBLKCNT_T_DECLARED /* for statvfs() */
|
||||
typedef __fsblkcnt_t fsblkcnt_t;
|
||||
typedef __fsfilcnt_t fsfilcnt_t;
|
||||
#define _FSBLKCNT_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _ID_T_DECLARED
|
||||
typedef __id_t id_t; /* can hold a uid_t or pid_t */
|
||||
#define _ID_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _INO_T_DECLARED
|
||||
typedef __ino_t ino_t; /* inode number */
|
||||
#define _INO_T_DECLARED
|
||||
#endif
|
||||
|
||||
#if defined(__i386__) && (defined(GO32) || defined(__MSDOS__))
|
||||
typedef char * addr_t;
|
||||
typedef unsigned long vm_offset_t;
|
||||
typedef unsigned long vm_size_t;
|
||||
#endif /* __i386__ && (GO32 || __MSDOS__) */
|
||||
|
||||
/*
|
||||
* All these should be machine specific - right now they are all broken.
|
||||
* However, for all of Cygnus' embedded targets, we want them to all be
|
||||
* the same. Otherwise things like sizeof (struct stat) might depend on
|
||||
* how the file was compiled (e.g. -mint16 vs -mint32, etc.).
|
||||
*/
|
||||
|
||||
#ifndef _OFF_T_DECLARED
|
||||
typedef __off_t off_t; /* file offset */
|
||||
#define _OFF_T_DECLARED
|
||||
#endif
|
||||
#ifndef _DEV_T_DECLARED
|
||||
typedef __dev_t dev_t; /* device number or struct cdev */
|
||||
#define _DEV_T_DECLARED
|
||||
#endif
|
||||
#ifndef _UID_T_DECLARED
|
||||
typedef __uid_t uid_t; /* user id */
|
||||
#define _UID_T_DECLARED
|
||||
#endif
|
||||
#ifndef _GID_T_DECLARED
|
||||
typedef __gid_t gid_t; /* group id */
|
||||
#define _GID_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _PID_T_DECLARED
|
||||
typedef __pid_t pid_t; /* process id */
|
||||
#define _PID_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _KEY_T_DECLARED
|
||||
typedef __key_t key_t; /* IPC key */
|
||||
#define _KEY_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _SSIZE_T_DECLARED
|
||||
typedef _ssize_t ssize_t;
|
||||
#define _SSIZE_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _MODE_T_DECLARED
|
||||
typedef __mode_t mode_t; /* permissions */
|
||||
#define _MODE_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _NLINK_T_DECLARED
|
||||
typedef __nlink_t nlink_t; /* link count */
|
||||
#define _NLINK_T_DECLARED
|
||||
#endif
|
||||
|
||||
#if !defined(__clockid_t_defined) && !defined(_CLOCKID_T_DECLARED)
|
||||
typedef __clockid_t clockid_t;
|
||||
#define __clockid_t_defined
|
||||
#define _CLOCKID_T_DECLARED
|
||||
#endif
|
||||
|
||||
#if !defined(__timer_t_defined) && !defined(_TIMER_T_DECLARED)
|
||||
typedef __timer_t timer_t;
|
||||
#define __timer_t_defined
|
||||
#define _TIMER_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _USECONDS_T_DECLARED
|
||||
typedef __useconds_t useconds_t; /* microseconds (unsigned) */
|
||||
#define _USECONDS_T_DECLARED
|
||||
#endif
|
||||
|
||||
#ifndef _SUSECONDS_T_DECLARED
|
||||
typedef __suseconds_t suseconds_t;
|
||||
#define _SUSECONDS_T_DECLARED
|
||||
#endif
|
||||
|
||||
typedef __int64_t sbintime_t;
|
||||
|
||||
#include <sys/features.h>
|
||||
#include <sys/_pthreadtypes.h>
|
||||
#include <machine/types.h>
|
||||
|
||||
#endif /* !__need_inttypes */
|
||||
|
||||
#undef __need_inttypes
|
||||
|
||||
#endif /* _SYS_TYPES_H */
|
||||
586
prebuilts/gcc/arm-none-eabi/include/sys/unistd.h
Normal file
586
prebuilts/gcc/arm-none-eabi/include/sys/unistd.h
Normal file
@@ -0,0 +1,586 @@
|
||||
#ifndef _SYS_UNISTD_H
|
||||
#define _SYS_UNISTD_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <_ansi.h>
|
||||
#define __need_size_t
|
||||
#define __need_ptrdiff_t
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/_types.h>
|
||||
#include <stddef.h>
|
||||
|
||||
extern char **environ;
|
||||
|
||||
void _exit (int __status) _ATTRIBUTE ((__noreturn__));
|
||||
|
||||
int access (const char *__path, int __amode);
|
||||
unsigned alarm (unsigned __secs);
|
||||
int chdir (const char *__path);
|
||||
int chmod (const char *__path, mode_t __mode);
|
||||
int chown (const char *__path, uid_t __owner, gid_t __group);
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112)
|
||||
int chroot (const char *__path);
|
||||
#endif
|
||||
int close (int __fildes);
|
||||
#if __POSIX_VISIBLE >= 199209
|
||||
size_t confstr (int __name, char *__buf, size_t __len);
|
||||
#endif
|
||||
#if __XSI_VISIBLE
|
||||
char * crypt (const char *__key, const char *__salt);
|
||||
#endif
|
||||
#if __XSI_VISIBLE && __XSI_VISIBLE < 700
|
||||
char * ctermid (char *__s);
|
||||
#endif
|
||||
#if __XSI_VISIBLE && __XSI_VISIBLE < 600
|
||||
char * cuserid (char *__s);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||
int daemon (int nochdir, int noclose);
|
||||
#endif
|
||||
int dup (int __fildes);
|
||||
int dup2 (int __fildes, int __fildes2);
|
||||
#if __GNU_VISIBLE
|
||||
int dup3 (int __fildes, int __fildes2, int flags);
|
||||
int eaccess (const char *__path, int __mode);
|
||||
#endif
|
||||
#if __XSI_VISIBLE
|
||||
void encrypt (char *__block, int __edflag);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||
void endusershell (void);
|
||||
#endif
|
||||
#if __GNU_VISIBLE
|
||||
int euidaccess (const char *__path, int __mode);
|
||||
#endif
|
||||
int execl (const char *__path, const char *, ...);
|
||||
int execle (const char *__path, const char *, ...);
|
||||
int execlp (const char *__file, const char *, ...);
|
||||
#if __MISC_VISIBLE
|
||||
int execlpe (const char *__file, const char *, ...);
|
||||
#endif
|
||||
int execv (const char *__path, char * const __argv[]);
|
||||
int execve (const char *__path, char * const __argv[], char * const __envp[]);
|
||||
int execvp (const char *__file, char * const __argv[]);
|
||||
#if __GNU_VISIBLE
|
||||
int execvpe (const char *__file, char * const __argv[], char * const __envp[]);
|
||||
#endif
|
||||
#if __ATFILE_VISIBLE
|
||||
int faccessat (int __dirfd, const char *__path, int __mode, int __flags);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809
|
||||
int fchdir (int __fildes);
|
||||
#endif
|
||||
#if __POSIX_VISIBLE >= 199309
|
||||
int fchmod (int __fildes, mode_t __mode);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809
|
||||
int fchown (int __fildes, uid_t __owner, gid_t __group);
|
||||
#endif
|
||||
#if __ATFILE_VISIBLE
|
||||
int fchownat (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags);
|
||||
#endif
|
||||
#if __POSIX_VISIBLE >= 200809
|
||||
int fexecve (int __fd, char * const __argv[], char * const __envp[]);
|
||||
#endif
|
||||
pid_t fork (void);
|
||||
long fpathconf (int __fd, int __name);
|
||||
int fsync (int __fd);
|
||||
#if __POSIX_VISIBLE >= 199309
|
||||
int fdatasync (int __fd);
|
||||
#endif
|
||||
#if __GNU_VISIBLE
|
||||
char * get_current_dir_name (void);
|
||||
#endif
|
||||
char * getcwd (char *__buf, size_t __size);
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||
int getdomainname (char *__name, size_t __len);
|
||||
#endif
|
||||
#if __BSD_VISIBLE
|
||||
int getentropy (void *, size_t);
|
||||
#endif
|
||||
gid_t getegid (void);
|
||||
uid_t geteuid (void);
|
||||
gid_t getgid (void);
|
||||
int getgroups (int __gidsetsize, gid_t __grouplist[]);
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4
|
||||
long gethostid (void);
|
||||
#endif
|
||||
char * getlogin (void);
|
||||
#if defined(_POSIX_THREAD_SAFE_FUNCTIONS)
|
||||
int getlogin_r (char *name, size_t namesize) ;
|
||||
#endif
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE && __POSIX_VISIBLE < 200112)
|
||||
char * getpass (const char *__prompt);
|
||||
int getpagesize (void);
|
||||
#endif
|
||||
#if __BSD_VISIBLE
|
||||
int getpeereid (int, uid_t *, gid_t *);
|
||||
#endif
|
||||
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 4
|
||||
pid_t getpgid (pid_t);
|
||||
#endif
|
||||
pid_t getpgrp (void);
|
||||
pid_t getpid (void);
|
||||
pid_t getppid (void);
|
||||
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 4
|
||||
pid_t getsid (pid_t);
|
||||
#endif
|
||||
uid_t getuid (void);
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||
char * getusershell (void);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200809)
|
||||
char * getwd (char *__buf);
|
||||
#endif
|
||||
#if __BSD_VISIBLE
|
||||
int iruserok (unsigned long raddr, int superuser, const char *ruser, const char *luser);
|
||||
#endif
|
||||
int isatty (int __fildes);
|
||||
#if __BSD_VISIBLE
|
||||
int issetugid (void);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809
|
||||
int lchown (const char *__path, uid_t __owner, gid_t __group);
|
||||
#endif
|
||||
int link (const char *__path1, const char *__path2);
|
||||
#if __ATFILE_VISIBLE
|
||||
int linkat (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags);
|
||||
#endif
|
||||
#if __MISC_VISIBLE || __XSI_VISIBLE
|
||||
int nice (int __nice_value);
|
||||
#endif
|
||||
#if !defined(__INSIDE_CYGWIN__)
|
||||
off_t lseek (int __fildes, off_t __offset, int __whence);
|
||||
#endif
|
||||
#if __MISC_VISIBLE || __XSI_VISIBLE >= 4
|
||||
#define F_ULOCK 0
|
||||
#define F_LOCK 1
|
||||
#define F_TLOCK 2
|
||||
#define F_TEST 3
|
||||
int lockf (int __fd, int __cmd, off_t __len);
|
||||
#endif
|
||||
long pathconf (const char *__path, int __name);
|
||||
int pause (void);
|
||||
#if __POSIX_VISIBLE >= 199506
|
||||
int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
|
||||
#endif
|
||||
int pipe (int __fildes[2]);
|
||||
#if __GNU_VISIBLE
|
||||
int pipe2 (int __fildes[2], int flags);
|
||||
#endif
|
||||
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 500
|
||||
ssize_t pread (int __fd, void *__buf, size_t __nbytes, off_t __offset);
|
||||
ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, off_t __offset);
|
||||
#endif
|
||||
_READ_WRITE_RETURN_TYPE read (int __fd, void *__buf, size_t __nbyte);
|
||||
#if __BSD_VISIBLE
|
||||
int rresvport (int *__alport);
|
||||
int revoke (char *__path);
|
||||
#endif
|
||||
int rmdir (const char *__path);
|
||||
#if __BSD_VISIBLE
|
||||
int ruserok (const char *rhost, int superuser, const char *ruser, const char *luser);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112)
|
||||
void * sbrk (ptrdiff_t __incr);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112
|
||||
int setegid (gid_t __gid);
|
||||
int seteuid (uid_t __uid);
|
||||
#endif
|
||||
int setgid (gid_t __gid);
|
||||
#if __BSD_VISIBLE
|
||||
int setgroups (int ngroups, const gid_t *grouplist);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||
int sethostname (const char *, size_t);
|
||||
#endif
|
||||
int setpgid (pid_t __pid, pid_t __pgid);
|
||||
#if __SVID_VISIBLE || __XSI_VISIBLE >= 500
|
||||
int setpgrp (void);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4
|
||||
int setregid (gid_t __rgid, gid_t __egid);
|
||||
int setreuid (uid_t __ruid, uid_t __euid);
|
||||
#endif
|
||||
pid_t setsid (void);
|
||||
int setuid (uid_t __uid);
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||
void setusershell (void);
|
||||
#endif
|
||||
unsigned sleep (unsigned int __seconds);
|
||||
#if __XSI_VISIBLE
|
||||
void swab (const void *__restrict, void *__restrict, ssize_t);
|
||||
#endif
|
||||
long sysconf (int __name);
|
||||
pid_t tcgetpgrp (int __fildes);
|
||||
int tcsetpgrp (int __fildes, pid_t __pgrp_id);
|
||||
char * ttyname (int __fildes);
|
||||
int ttyname_r (int, char *, size_t);
|
||||
int unlink (const char *__path);
|
||||
#if __XSI_VISIBLE >= 500 && __POSIX_VISIBLE < 200809 || __BSD_VISIBLE
|
||||
int usleep (useconds_t __useconds);
|
||||
#endif
|
||||
#if __BSD_VISIBLE
|
||||
int vhangup (void);
|
||||
#endif
|
||||
_READ_WRITE_RETURN_TYPE write (int __fd, const void *__buf, size_t __nbyte);
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
# define __UNISTD_GETOPT__
|
||||
# include <getopt.h>
|
||||
# undef __UNISTD_GETOPT__
|
||||
#else
|
||||
extern char *optarg; /* getopt(3) external variables */
|
||||
extern int optind, opterr, optopt;
|
||||
int getopt(int, char * const [], const char *);
|
||||
extern int optreset; /* getopt(3) external variable */
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200809)
|
||||
pid_t vfork (void);
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Provide prototypes for most of the _<systemcall> names that are
|
||||
provided in newlib for some compilers. */
|
||||
int _close (int __fildes);
|
||||
pid_t _fork (void);
|
||||
pid_t _getpid (void);
|
||||
int _isatty (int __fildes);
|
||||
int _link (const char *__path1, const char *__path2);
|
||||
_off_t _lseek (int __fildes, _off_t __offset, int __whence);
|
||||
#ifdef __LARGE64_FILES
|
||||
_off64_t _lseek64 (int __filedes, _off64_t __offset, int __whence);
|
||||
#endif
|
||||
_READ_WRITE_RETURN_TYPE _read (int __fd, void *__buf, size_t __nbyte);
|
||||
void * _sbrk (ptrdiff_t __incr);
|
||||
int _unlink (const char *__path);
|
||||
_READ_WRITE_RETURN_TYPE _write (int __fd, const void *__buf, size_t __nbyte);
|
||||
int _execve (const char *__path, char * const __argv[], char * const __envp[]);
|
||||
#endif
|
||||
|
||||
#if !defined(__INSIDE_CYGWIN__)
|
||||
#if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 500
|
||||
int ftruncate (int __fd, off_t __length);
|
||||
#endif
|
||||
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 500
|
||||
int truncate (const char *, off_t __length);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE < 200112
|
||||
int getdtablesize (void);
|
||||
#endif
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 500
|
||||
useconds_t ualarm (useconds_t __useconds, useconds_t __interval);
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 500
|
||||
#if !(defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS))
|
||||
/* winsock[2].h defines as __stdcall, and with int as 2nd arg */
|
||||
int gethostname (char *__name, size_t __len);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __MISC_VISIBLE
|
||||
int setdtablesize (int);
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 500
|
||||
void sync (void);
|
||||
#endif
|
||||
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 4
|
||||
ssize_t readlink (const char *__restrict __path,
|
||||
char *__restrict __buf, size_t __buflen);
|
||||
int symlink (const char *__name1, const char *__name2);
|
||||
#endif
|
||||
#if __ATFILE_VISIBLE
|
||||
ssize_t readlinkat (int __dirfd1, const char *__restrict __path,
|
||||
char *__restrict __buf, size_t __buflen);
|
||||
int symlinkat (const char *, int, const char *);
|
||||
int unlinkat (int, const char *, int);
|
||||
#endif
|
||||
|
||||
#define F_OK 0
|
||||
#define R_OK 4
|
||||
#define W_OK 2
|
||||
#define X_OK 1
|
||||
|
||||
# define SEEK_SET 0
|
||||
# define SEEK_CUR 1
|
||||
# define SEEK_END 2
|
||||
|
||||
#include <sys/features.h>
|
||||
|
||||
#define STDIN_FILENO 0 /* standard input file descriptor */
|
||||
#define STDOUT_FILENO 1 /* standard output file descriptor */
|
||||
#define STDERR_FILENO 2 /* standard error file descriptor */
|
||||
|
||||
/*
|
||||
* sysconf values per IEEE Std 1003.1, 2008 Edition
|
||||
*/
|
||||
|
||||
#define _SC_ARG_MAX 0
|
||||
#define _SC_CHILD_MAX 1
|
||||
#define _SC_CLK_TCK 2
|
||||
#define _SC_NGROUPS_MAX 3
|
||||
#define _SC_OPEN_MAX 4
|
||||
#define _SC_JOB_CONTROL 5
|
||||
#define _SC_SAVED_IDS 6
|
||||
#define _SC_VERSION 7
|
||||
#define _SC_PAGESIZE 8
|
||||
#define _SC_PAGE_SIZE _SC_PAGESIZE
|
||||
/* These are non-POSIX values we accidentally introduced in 2000 without
|
||||
guarding them. Keeping them unguarded for backward compatibility. */
|
||||
#define _SC_NPROCESSORS_CONF 9
|
||||
#define _SC_NPROCESSORS_ONLN 10
|
||||
#define _SC_PHYS_PAGES 11
|
||||
#define _SC_AVPHYS_PAGES 12
|
||||
/* End of non-POSIX values. */
|
||||
#define _SC_MQ_OPEN_MAX 13
|
||||
#define _SC_MQ_PRIO_MAX 14
|
||||
#define _SC_RTSIG_MAX 15
|
||||
#define _SC_SEM_NSEMS_MAX 16
|
||||
#define _SC_SEM_VALUE_MAX 17
|
||||
#define _SC_SIGQUEUE_MAX 18
|
||||
#define _SC_TIMER_MAX 19
|
||||
#define _SC_TZNAME_MAX 20
|
||||
#define _SC_ASYNCHRONOUS_IO 21
|
||||
#define _SC_FSYNC 22
|
||||
#define _SC_MAPPED_FILES 23
|
||||
#define _SC_MEMLOCK 24
|
||||
#define _SC_MEMLOCK_RANGE 25
|
||||
#define _SC_MEMORY_PROTECTION 26
|
||||
#define _SC_MESSAGE_PASSING 27
|
||||
#define _SC_PRIORITIZED_IO 28
|
||||
#define _SC_REALTIME_SIGNALS 29
|
||||
#define _SC_SEMAPHORES 30
|
||||
#define _SC_SHARED_MEMORY_OBJECTS 31
|
||||
#define _SC_SYNCHRONIZED_IO 32
|
||||
#define _SC_TIMERS 33
|
||||
#define _SC_AIO_LISTIO_MAX 34
|
||||
#define _SC_AIO_MAX 35
|
||||
#define _SC_AIO_PRIO_DELTA_MAX 36
|
||||
#define _SC_DELAYTIMER_MAX 37
|
||||
#define _SC_THREAD_KEYS_MAX 38
|
||||
#define _SC_THREAD_STACK_MIN 39
|
||||
#define _SC_THREAD_THREADS_MAX 40
|
||||
#define _SC_TTY_NAME_MAX 41
|
||||
#define _SC_THREADS 42
|
||||
#define _SC_THREAD_ATTR_STACKADDR 43
|
||||
#define _SC_THREAD_ATTR_STACKSIZE 44
|
||||
#define _SC_THREAD_PRIORITY_SCHEDULING 45
|
||||
#define _SC_THREAD_PRIO_INHERIT 46
|
||||
/* _SC_THREAD_PRIO_PROTECT was _SC_THREAD_PRIO_CEILING in early drafts */
|
||||
#define _SC_THREAD_PRIO_PROTECT 47
|
||||
#define _SC_THREAD_PRIO_CEILING _SC_THREAD_PRIO_PROTECT
|
||||
#define _SC_THREAD_PROCESS_SHARED 48
|
||||
#define _SC_THREAD_SAFE_FUNCTIONS 49
|
||||
#define _SC_GETGR_R_SIZE_MAX 50
|
||||
#define _SC_GETPW_R_SIZE_MAX 51
|
||||
#define _SC_LOGIN_NAME_MAX 52
|
||||
#define _SC_THREAD_DESTRUCTOR_ITERATIONS 53
|
||||
#define _SC_ADVISORY_INFO 54
|
||||
#define _SC_ATEXIT_MAX 55
|
||||
#define _SC_BARRIERS 56
|
||||
#define _SC_BC_BASE_MAX 57
|
||||
#define _SC_BC_DIM_MAX 58
|
||||
#define _SC_BC_SCALE_MAX 59
|
||||
#define _SC_BC_STRING_MAX 60
|
||||
#define _SC_CLOCK_SELECTION 61
|
||||
#define _SC_COLL_WEIGHTS_MAX 62
|
||||
#define _SC_CPUTIME 63
|
||||
#define _SC_EXPR_NEST_MAX 64
|
||||
#define _SC_HOST_NAME_MAX 65
|
||||
#define _SC_IOV_MAX 66
|
||||
#define _SC_IPV6 67
|
||||
#define _SC_LINE_MAX 68
|
||||
#define _SC_MONOTONIC_CLOCK 69
|
||||
#define _SC_RAW_SOCKETS 70
|
||||
#define _SC_READER_WRITER_LOCKS 71
|
||||
#define _SC_REGEXP 72
|
||||
#define _SC_RE_DUP_MAX 73
|
||||
#define _SC_SHELL 74
|
||||
#define _SC_SPAWN 75
|
||||
#define _SC_SPIN_LOCKS 76
|
||||
#define _SC_SPORADIC_SERVER 77
|
||||
#define _SC_SS_REPL_MAX 78
|
||||
#define _SC_SYMLOOP_MAX 79
|
||||
#define _SC_THREAD_CPUTIME 80
|
||||
#define _SC_THREAD_SPORADIC_SERVER 81
|
||||
#define _SC_TIMEOUTS 82
|
||||
#define _SC_TRACE 83
|
||||
#define _SC_TRACE_EVENT_FILTER 84
|
||||
#define _SC_TRACE_EVENT_NAME_MAX 85
|
||||
#define _SC_TRACE_INHERIT 86
|
||||
#define _SC_TRACE_LOG 87
|
||||
#define _SC_TRACE_NAME_MAX 88
|
||||
#define _SC_TRACE_SYS_MAX 89
|
||||
#define _SC_TRACE_USER_EVENT_MAX 90
|
||||
#define _SC_TYPED_MEMORY_OBJECTS 91
|
||||
#define _SC_V7_ILP32_OFF32 92
|
||||
#define _SC_V6_ILP32_OFF32 _SC_V7_ILP32_OFF32
|
||||
#define _SC_XBS5_ILP32_OFF32 _SC_V7_ILP32_OFF32
|
||||
#define _SC_V7_ILP32_OFFBIG 93
|
||||
#define _SC_V6_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
|
||||
#define _SC_XBS5_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
|
||||
#define _SC_V7_LP64_OFF64 94
|
||||
#define _SC_V6_LP64_OFF64 _SC_V7_LP64_OFF64
|
||||
#define _SC_XBS5_LP64_OFF64 _SC_V7_LP64_OFF64
|
||||
#define _SC_V7_LPBIG_OFFBIG 95
|
||||
#define _SC_V6_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
|
||||
#define _SC_XBS5_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
|
||||
#define _SC_XOPEN_CRYPT 96
|
||||
#define _SC_XOPEN_ENH_I18N 97
|
||||
#define _SC_XOPEN_LEGACY 98
|
||||
#define _SC_XOPEN_REALTIME 99
|
||||
#define _SC_STREAM_MAX 100
|
||||
#define _SC_PRIORITY_SCHEDULING 101
|
||||
#define _SC_XOPEN_REALTIME_THREADS 102
|
||||
#define _SC_XOPEN_SHM 103
|
||||
#define _SC_XOPEN_STREAMS 104
|
||||
#define _SC_XOPEN_UNIX 105
|
||||
#define _SC_XOPEN_VERSION 106
|
||||
#define _SC_2_CHAR_TERM 107
|
||||
#define _SC_2_C_BIND 108
|
||||
#define _SC_2_C_DEV 109
|
||||
#define _SC_2_FORT_DEV 110
|
||||
#define _SC_2_FORT_RUN 111
|
||||
#define _SC_2_LOCALEDEF 112
|
||||
#define _SC_2_PBS 113
|
||||
#define _SC_2_PBS_ACCOUNTING 114
|
||||
#define _SC_2_PBS_CHECKPOINT 115
|
||||
#define _SC_2_PBS_LOCATE 116
|
||||
#define _SC_2_PBS_MESSAGE 117
|
||||
#define _SC_2_PBS_TRACK 118
|
||||
#define _SC_2_SW_DEV 119
|
||||
#define _SC_2_UPE 120
|
||||
#define _SC_2_VERSION 121
|
||||
#define _SC_THREAD_ROBUST_PRIO_INHERIT 122
|
||||
#define _SC_THREAD_ROBUST_PRIO_PROTECT 123
|
||||
#define _SC_XOPEN_UUCP 124
|
||||
#define _SC_LEVEL1_ICACHE_SIZE 125
|
||||
#define _SC_LEVEL1_ICACHE_ASSOC 126
|
||||
#define _SC_LEVEL1_ICACHE_LINESIZE 127
|
||||
#define _SC_LEVEL1_DCACHE_SIZE 128
|
||||
#define _SC_LEVEL1_DCACHE_ASSOC 129
|
||||
#define _SC_LEVEL1_DCACHE_LINESIZE 130
|
||||
#define _SC_LEVEL2_CACHE_SIZE 131
|
||||
#define _SC_LEVEL2_CACHE_ASSOC 132
|
||||
#define _SC_LEVEL2_CACHE_LINESIZE 133
|
||||
#define _SC_LEVEL3_CACHE_SIZE 134
|
||||
#define _SC_LEVEL3_CACHE_ASSOC 135
|
||||
#define _SC_LEVEL3_CACHE_LINESIZE 136
|
||||
#define _SC_LEVEL4_CACHE_SIZE 137
|
||||
#define _SC_LEVEL4_CACHE_ASSOC 138
|
||||
#define _SC_LEVEL4_CACHE_LINESIZE 139
|
||||
#define _SC_POSIX_26_VERSION 140
|
||||
|
||||
/*
|
||||
* pathconf values per IEEE Std 1003.1, 2008 Edition
|
||||
*/
|
||||
|
||||
#define _PC_LINK_MAX 0
|
||||
#define _PC_MAX_CANON 1
|
||||
#define _PC_MAX_INPUT 2
|
||||
#define _PC_NAME_MAX 3
|
||||
#define _PC_PATH_MAX 4
|
||||
#define _PC_PIPE_BUF 5
|
||||
#define _PC_CHOWN_RESTRICTED 6
|
||||
#define _PC_NO_TRUNC 7
|
||||
#define _PC_VDISABLE 8
|
||||
#define _PC_ASYNC_IO 9
|
||||
#define _PC_PRIO_IO 10
|
||||
#define _PC_SYNC_IO 11
|
||||
#define _PC_FILESIZEBITS 12
|
||||
#define _PC_2_SYMLINKS 13
|
||||
#define _PC_SYMLINK_MAX 14
|
||||
#define _PC_ALLOC_SIZE_MIN 15
|
||||
#define _PC_REC_INCR_XFER_SIZE 16
|
||||
#define _PC_REC_MAX_XFER_SIZE 17
|
||||
#define _PC_REC_MIN_XFER_SIZE 18
|
||||
#define _PC_REC_XFER_ALIGN 19
|
||||
#define _PC_TIMESTAMP_RESOLUTION 20
|
||||
#ifdef __CYGWIN__
|
||||
/* Ask for POSIX permission bits support. */
|
||||
#define _PC_POSIX_PERMISSIONS 90
|
||||
/* Ask for full POSIX permission support including uid/gid settings. */
|
||||
#define _PC_POSIX_SECURITY 91
|
||||
#define _PC_CASE_INSENSITIVE 92
|
||||
#endif
|
||||
|
||||
/*
|
||||
* confstr values per IEEE Std 1003.1, 2004 Edition
|
||||
*/
|
||||
|
||||
/* Only defined on Cygwin and RTEMS for now. */
|
||||
#if defined (__CYGWIN__) || defined(__rtems__)
|
||||
#define _CS_PATH 0
|
||||
#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1
|
||||
#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
|
||||
#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
|
||||
#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS 2
|
||||
#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
|
||||
#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
|
||||
#define _CS_POSIX_V7_ILP32_OFF32_LIBS 3
|
||||
#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
|
||||
#define _CS_XBS5_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
|
||||
#define _CS_XBS5_ILP32_OFF32_LINTFLAGS 4
|
||||
#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS 5
|
||||
#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
|
||||
#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
|
||||
#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS 6
|
||||
#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
|
||||
#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
|
||||
#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS 7
|
||||
#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
|
||||
#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
|
||||
#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS 8
|
||||
#define _CS_POSIX_V7_LP64_OFF64_CFLAGS 9
|
||||
#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
|
||||
#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
|
||||
#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS 10
|
||||
#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
|
||||
#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
|
||||
#define _CS_POSIX_V7_LP64_OFF64_LIBS 11
|
||||
#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
|
||||
#define _CS_XBS5_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
|
||||
#define _CS_XBS5_LP64_OFF64_LINTFLAGS 12
|
||||
#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS 13
|
||||
#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
|
||||
#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
|
||||
#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS 14
|
||||
#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
|
||||
#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
|
||||
#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS 15
|
||||
#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
|
||||
#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
|
||||
#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS 16
|
||||
#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS 17
|
||||
#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
|
||||
#define _CS_XBS5_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
|
||||
#define _CS_POSIX_V7_THREADS_CFLAGS 18
|
||||
#define _CS_POSIX_V7_THREADS_LDFLAGS 19
|
||||
#define _CS_V7_ENV 20
|
||||
#define _CS_V6_ENV _CS_V7_ENV
|
||||
#define _CS_LFS_CFLAGS 21
|
||||
#define _CS_LFS_LDFLAGS 22
|
||||
#define _CS_LFS_LIBS 23
|
||||
#define _CS_LFS_LINTFLAGS 24
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#if __SSP_FORTIFY_LEVEL > 0
|
||||
#include <ssp/unistd.h>
|
||||
#endif
|
||||
|
||||
#endif /* _SYS_UNISTD_H */
|
||||
22
prebuilts/gcc/arm-none-eabi/include/sys/utime.h
Normal file
22
prebuilts/gcc/arm-none-eabi/include/sys/utime.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#ifndef _SYS_UTIME_H
|
||||
#define _SYS_UTIME_H
|
||||
|
||||
/* This is a dummy <sys/utime.h> file, not customized for any
|
||||
particular system. If there is a utime.h in libc/sys/SYSDIR/sys,
|
||||
it will override this one. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct utimbuf
|
||||
{
|
||||
time_t actime;
|
||||
time_t modtime;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* _SYS_UTIME_H */
|
||||
44
prebuilts/gcc/arm-none-eabi/include/sys/wait.h
Normal file
44
prebuilts/gcc/arm-none-eabi/include/sys/wait.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#ifndef _SYS_WAIT_H
|
||||
#define _SYS_WAIT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#define WNOHANG 1
|
||||
#define WUNTRACED 2
|
||||
|
||||
/* A status looks like:
|
||||
<1 byte info> <1 byte code>
|
||||
|
||||
<code> == 0, child has exited, info is the exit value
|
||||
<code> == 1..7e, child has exited, info is the signal number.
|
||||
<code> == 7f, child has stopped, info was the signal number.
|
||||
<code> == 80, there was a core dump.
|
||||
*/
|
||||
|
||||
#define WIFEXITED(w) (((w) & 0xff) == 0)
|
||||
#define WIFSIGNALED(w) (((w) & 0x7f) > 0 && (((w) & 0x7f) < 0x7f))
|
||||
#define WIFSTOPPED(w) (((w) & 0xff) == 0x7f)
|
||||
#define WEXITSTATUS(w) (((w) >> 8) & 0xff)
|
||||
#define WTERMSIG(w) ((w) & 0x7f)
|
||||
#define WSTOPSIG WEXITSTATUS
|
||||
|
||||
pid_t wait (int *);
|
||||
pid_t waitpid (pid_t, int *, int);
|
||||
|
||||
#ifdef _LIBC
|
||||
pid_t _wait (int *);
|
||||
#endif
|
||||
|
||||
/* Provide prototypes for most of the _<systemcall> names that are
|
||||
provided in newlib for some compilers. */
|
||||
pid_t _wait (int *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user