PageRenderTime 913ms CodeModel.GetById 38ms RepoModel.GetById 0ms app.codeStats 0ms

/sys/sys/cdefs.h

http://github.com/davshao/dflygsocdrm
C Header | 528 lines | 279 code | 45 blank | 204 comment | 18 complexity | 56331bd0e7077e645dc1e60b1b2cc2b1 MD5 | raw file
Possible License(s): AGPL-1.0, CC-BY-SA-3.0, LGPL-2.0, GPL-3.0, LGPL-2.1, LGPL-3.0, MPL-2.0-no-copyleft-exception, 0BSD, BSD-3-Clause, GPL-2.0
  1. /*
  2. * Copyright (c) 1991, 1993
  3. * The Regents of the University of California. All rights reserved.
  4. *
  5. * This code is derived from software contributed to Berkeley by
  6. * Berkeley Software Design, Inc.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. * 1. Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. * 2. Redistributions in binary form must reproduce the above copyright
  14. * notice, this list of conditions and the following disclaimer in the
  15. * documentation and/or other materials provided with the distribution.
  16. * 3. All advertising materials mentioning features or use of this software
  17. * must display the following acknowledgement:
  18. * This product includes software developed by the University of
  19. * California, Berkeley and its contributors.
  20. * 4. Neither the name of the University nor the names of its contributors
  21. * may be used to endorse or promote products derived from this software
  22. * without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  25. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  28. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  30. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  31. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  32. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  33. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  34. * SUCH DAMAGE.
  35. *
  36. * @(#)cdefs.h 8.8 (Berkeley) 1/9/95
  37. * $FreeBSD: src/sys/sys/cdefs.h,v 1.28.2.8 2002/09/18 04:05:13 mikeh Exp $
  38. */
  39. #ifndef _SYS_CDEFS_H_
  40. #define _SYS_CDEFS_H_
  41. /*
  42. * Macro to test if we are using a specific version of gcc or later.
  43. */
  44. #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
  45. #define __GNUC_PREREQ__(ma, mi) \
  46. (__GNUC__ > (ma) || __GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))
  47. #else
  48. #define __GNUC_PREREQ__(ma, mi) 0
  49. #endif
  50. #if defined(__cplusplus)
  51. #if __GNUC_PREREQ__(4, 0)
  52. #define __BEGIN_DECLS _Pragma("GCC visibility push(default)") extern "C" {
  53. #define __END_DECLS } _Pragma("GCC visibility pop")
  54. #else
  55. #define __BEGIN_DECLS extern "C" {
  56. #define __END_DECLS }
  57. #endif
  58. #else
  59. #define __BEGIN_DECLS
  60. #define __END_DECLS
  61. #endif
  62. /*
  63. * The __VM_CACHELINE_SIZE macro defines the common cache line alignment
  64. * size that can be found across most recent and somewhat latest Intel
  65. * hardware, i.e. L1 cache sizes etc.
  66. *
  67. * If needed, this value can be TUNED. Suitable values for this macro
  68. * are 32, 64 and 128 bytes. The unit of measurement for this macro is
  69. * bytes.
  70. *
  71. * XXX: This macro and related macros will eventually move to a MD
  72. * header, but currently, we do need such a hierarchy.
  73. */
  74. #define __VM_CACHELINE_SIZE 64
  75. #define __VM_CACHELINE_ALIGN(n) \
  76. (((n) + __VM_CACHELINE_SIZE - 1) / __VM_CACHELINE_SIZE)
  77. /*
  78. * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
  79. * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
  80. * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
  81. * mode -- there must be no spaces between its arguments, and for nested
  82. * __CONCAT's, all the __CONCAT's must be at the left. __CONCAT can also
  83. * concatenate double-quoted strings produced by the __STRING macro, but
  84. * this only works with ANSI C.
  85. *
  86. * __XSTRING is like __STRING, but it expands any macros in its argument
  87. * first. It is only available with ANSI C.
  88. */
  89. #if defined(__STDC__) || defined(__cplusplus)
  90. #define __P(protos) protos /* full-blown ANSI C */
  91. #define __CONCAT1(x,y) x ## y
  92. #define __CONCAT(x,y) __CONCAT1(x,y)
  93. #define __STRING(x) #x /* stringify without expanding x */
  94. #define __XSTRING(x) __STRING(x) /* expand x, then stringify */
  95. #define __const const /* define reserved names to standard */
  96. #define __signed signed
  97. #define __volatile volatile
  98. #if defined(__cplusplus)
  99. #define __inline inline /* convert to C++ keyword */
  100. #else
  101. #ifndef __GNUC__
  102. #define __inline /* delete GCC keyword */
  103. #endif /* !__GNUC__ */
  104. #endif /* !__cplusplus */
  105. #else /* !(__STDC__ || __cplusplus) */
  106. #define __P(protos) () /* traditional C preprocessor */
  107. #define __CONCAT(x,y) x/**/y
  108. #define __STRING(x) "x"
  109. #ifndef __GNUC__
  110. #define __const /* delete pseudo-ANSI C keywords */
  111. #define __inline
  112. #define __signed
  113. #define __volatile
  114. /*
  115. * In non-ANSI C environments, new programs will want ANSI-only C keywords
  116. * deleted from the program and old programs will want them left alone.
  117. * When using a compiler other than gcc, programs using the ANSI C keywords
  118. * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
  119. * When using "gcc -traditional", we assume that this is the intent; if
  120. * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
  121. */
  122. #ifndef NO_ANSI_KEYWORDS
  123. #define const /* delete ANSI C keywords */
  124. #define inline
  125. #define signed
  126. #define volatile
  127. #endif /* !NO_ANSI_KEYWORDS */
  128. #endif /* !__GNUC__ */
  129. #endif /* !(__STDC__ || __cplusplus) */
  130. /*
  131. * Compiler-dependent macros to help declare dead (non-returning) and
  132. * pure (no side effects) functions, and unused variables. They are
  133. * null except for versions of gcc that are known to support the features
  134. * properly (old versions of gcc-2 supported the dead and pure features
  135. * in a different (wrong) way).
  136. */
  137. #ifdef lint
  138. #define __dead2
  139. #define __pure
  140. #define __pure2
  141. #define __unused
  142. #define __packed
  143. #define __aligned(x)
  144. #define __section(x)
  145. #define __always_inline
  146. #define __nonnull(x)
  147. #else
  148. #if !__GNUC_PREREQ__(2, 7)
  149. #define __dead2
  150. #define __pure2
  151. #define __unused
  152. #endif
  153. #if __GNUC_PREREQ__(2, 7)
  154. #define __dead2 __attribute__((__noreturn__))
  155. #define __pure2 __attribute__((__const__))
  156. #define __unused __attribute__((__unused__))
  157. #define __packed __attribute__((__packed__))
  158. #define __aligned(x) __attribute__((__aligned__(x)))
  159. #define __section(x) __attribute__((__section__(x)))
  160. #endif
  161. #if __GNUC_PREREQ__(2, 96)
  162. #define __pure __attribute__((__pure__))
  163. #else
  164. #define __pure __pure2
  165. #endif
  166. #if __GNUC_PREREQ__(3, 1)
  167. #define __always_inline __attribute__((__always_inline__))
  168. #define __noinline __attribute__((__noinline__))
  169. #else
  170. #define __always_inline
  171. #define __noinline
  172. #endif
  173. #if __GNUC_PREREQ__(3, 3)
  174. #define __nonnull(x) __attribute__((__nonnull__(x)))
  175. #define __used __attribute__((__used__))
  176. #else
  177. #define __nonnull(x)
  178. #define __used __unused
  179. #endif
  180. #endif /* LINT */
  181. #if !__GNUC_PREREQ__(2, 7) && __STDC_VERSION < 199901
  182. #define __func__ NULL
  183. #endif
  184. #if (__GNUC_PREREQ__(2, 0) && !defined(__STRICT_ANSI)) || \
  185. __STDC_VERSION__ >= 199901
  186. #define __LONG_LONG_SUPPORTED
  187. #endif
  188. /*
  189. * GNU C version 2.96 adds explicit branch prediction so that
  190. * the CPU back-end can hint the processor and also so that
  191. * code blocks can be reordered such that the predicted path
  192. * sees a more linear flow, thus improving cache behavior, etc.
  193. *
  194. * The following two macros provide us with a way to utilize this
  195. * compiler feature. Use __predict_true() if you expect the expression
  196. * to evaluate to true, and __predict_false() if you expect the
  197. * expression to evaluate to false.
  198. *
  199. * A few notes about usage:
  200. *
  201. * * Generally, __predict_false() error condition checks (unless
  202. * you have some _strong_ reason to do otherwise, in which case
  203. * document it), and/or __predict_true() `no-error' condition
  204. * checks, assuming you want to optimize for the no-error case.
  205. *
  206. * * Other than that, if you don't know the likelihood of a test
  207. * succeeding from empirical or other `hard' evidence, don't
  208. * make predictions.
  209. *
  210. * * These are meant to be used in places that are run `a lot'.
  211. * It is wasteful to make predictions in code that is run
  212. * seldomly (e.g. at subsystem initialization time) as the
  213. * basic block reordering that this affects can often generate
  214. * larger code.
  215. */
  216. #if __GNUC_PREREQ__(2, 96)
  217. #define __predict_true(exp) __builtin_expect((exp), 1)
  218. #define __predict_false(exp) __builtin_expect((exp), 0)
  219. #else
  220. #define __predict_true(exp) (exp)
  221. #define __predict_false(exp) (exp)
  222. #endif
  223. /*
  224. * GCC 2.95 and later provides `__restrict' as an extention to C90 to support
  225. * the C99-specific `restrict' type qualifier. We happen to use `__restrict'
  226. * as a way to define the `restrict' type qualifier without disturbing older
  227. * software that is unaware of C99 keywords.
  228. */
  229. #if !__GNUC_PREREQ__(2, 95)
  230. #if __STDC_VERSION__ < 199901
  231. #define __restrict
  232. #else
  233. #define __restrict restrict
  234. #endif
  235. #endif
  236. /*
  237. * Compiler-dependent macros to declare that functions take printf-like
  238. * or scanf-like arguments. They are null except for versions of gcc
  239. * that are known to support the features properly (old versions of gcc-2
  240. * didn't permit keeping the keywords out of the application namespace).
  241. *
  242. * The printf0like macro for GCC 2 uses DragonFly specific compiler extensions.
  243. */
  244. #if !__GNUC_PREREQ__(2, 7)
  245. #define __printflike(fmtarg, firstvararg)
  246. #define __scanflike(fmtarg, firstvararg)
  247. #define __printf0like(fmtarg, firstvararg)
  248. #define __format_arg(fmtarg)
  249. #elif __GNUC_PREREQ__(3, 0)
  250. #define __printflike(fmtarg, firstvararg) \
  251. __attribute__((__nonnull__(fmtarg), \
  252. __format__ (__printf__, fmtarg, firstvararg)))
  253. #define __printf0like(fmtarg, firstvararg) \
  254. __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
  255. #define __scanflike(fmtarg, firstvararg) \
  256. __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
  257. #define __format_arg(fmtarg) \
  258. __attribute__((__format_arg__ (fmtarg)))
  259. #else
  260. #define __printflike(fmtarg, firstvararg) \
  261. __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
  262. #define __printf0like(fmtarg, firstvararg) \
  263. __attribute__((__format__ (__printf0__, fmtarg, firstvararg)))
  264. #define __scanflike(fmtarg, firstvararg) \
  265. __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
  266. #define __format_arg(fmtarg) \
  267. __attribute__((__format_arg__ (fmtarg)))
  268. #endif
  269. #if !__GNUC_PREREQ__(3, 0)
  270. #define __ARRAY_ZERO 0
  271. #else
  272. #define __ARRAY_ZERO
  273. #endif
  274. #if __GNUC_PREREQ__(4, 0)
  275. #define __dso_public __attribute__((__visibility__("default")))
  276. #define __dso_hidden __attribute__((__visibility__("hidden")))
  277. #else
  278. #define __dso_public
  279. #define __dso_hidden
  280. #endif
  281. /*
  282. * A convenient constructor macro, GCC 4.3.0 added priority support to
  283. * constructors, provide a compatible interface for both.
  284. */
  285. #if __GNUC_PREREQ__(4, 3)
  286. #define __constructor(prio) __attribute__((constructor(prio)))
  287. #else
  288. #define __constructor(prio) __attribute__((constructor))
  289. #endif
  290. /*
  291. * Handy GCC based macros:
  292. *
  293. * __cachealign:
  294. *
  295. * The __cachealign macro can be used for cache line aligning structures
  296. * of small to medium size. It aligns the particular structure or
  297. * storage type to a system default cache line alignment, thus giving us
  298. * a much more better cache utilization by making the hardware work at
  299. * its best burst speeds.
  300. *
  301. * __usereg:
  302. *
  303. * The __usereg macro can/should be used when a function contains
  304. * arguments not more than 3. It can be very useful to us due to the
  305. * message-passing nature of the kernel.
  306. *
  307. * !!NOTE - USAGE INFORMATION!!
  308. *
  309. * The __cachealign macro should not be used for data structures that are
  310. * as big struct proc, struct vnode, struct thread, and other structs which
  311. * are as big as them; simply because it will be useless in that case.
  312. *
  313. * The __usereg macro should be used whenever possible, i.e., when a function
  314. * does not exceed more than 3 arguments, and should not be used for vararg
  315. * type functions.
  316. *
  317. * In other words, AVOID MISUSE OF THESE MACROS. :-)
  318. */
  319. #ifdef __GNUC__
  320. #define __cachealign __attribute__((__aligned__(__VM_CACHELINE_SIZE)))
  321. #define __usereg __attribute__((__regparm__(3)))
  322. #else
  323. #define __cachealign
  324. #define __usereg
  325. #endif
  326. #ifdef __GNUC__
  327. #define __strong_reference(sym,aliassym) \
  328. extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)));
  329. #define __weak_reference(sym,alias) \
  330. __asm__(".weak " #alias); \
  331. __asm__(".equ " #alias ", " #sym)
  332. #define __warn_references(sym,msg) \
  333. __asm__(".section .gnu.warning." #sym); \
  334. __asm__(".asciz \"" msg "\""); \
  335. __asm__(".previous")
  336. #endif /* __GNUC__ */
  337. #if defined(__GNUC__)
  338. #define __IDSTRING(name,string) __asm__(".ident\t\"" string "\"")
  339. #endif
  340. #ifndef __RCSID
  341. #define __RCSID(s) __IDSTRING(rcsid,s)
  342. #endif
  343. #ifndef __RCSID_SOURCE
  344. #define __RCSID_SOURCE(s) __IDSTRING(rcsid_source,s)
  345. #endif
  346. #ifndef __COPYRIGHT
  347. #define __COPYRIGHT(s) __IDSTRING(copyright,s)
  348. #endif
  349. #ifndef __DECONST
  350. #define __DECONST(type, var) ((type)(uintptr_t)(const void *)(var))
  351. #endif
  352. #ifndef __DEVOLATILE
  353. #define __DEVOLATILE(type, var) ((type)(uintptr_t)(volatile void *)(var))
  354. #endif
  355. #ifndef __DEQUALIFY
  356. #define __DEQUALIFY(type, var) ((type)(uintptr_t)(const volatile void *)(var))
  357. #endif
  358. /*-
  359. * The following definitions are an extension of the behavior originally
  360. * implemented in <sys/_posix.h>, but with a different level of granularity.
  361. * POSIX.1 requires that the macros we test be defined before any standard
  362. * header file is included.
  363. *
  364. * Here's a quick run-down of the versions:
  365. * defined(_POSIX_SOURCE) 1003.1-1988
  366. * _POSIX_C_SOURCE == 1 1003.1-1990
  367. * _POSIX_C_SOURCE == 2 1003.2-1992 C Language Binding Option
  368. * _POSIX_C_SOURCE == 199309 1003.1b-1993
  369. * _POSIX_C_SOURCE == 199506 1003.1c-1995, 1003.1i-1995,
  370. * and the omnibus ISO/IEC 9945-1: 1996
  371. * _POSIX_C_SOURCE == 200112 1003.1-2001
  372. * _POSIX_C_SOURCE == 200809 1003.1-2008
  373. *
  374. * In addition, the X/Open Portability Guide, which is now the Single UNIX
  375. * Specification, defines a feature-test macro which indicates the version of
  376. * that specification, and which subsumes _POSIX_C_SOURCE.
  377. *
  378. * Our macros begin with two underscores to avoid namespace screwage.
  379. */
  380. /*
  381. * If no special macro was specified, make the DragonFly extensions
  382. * available. Also make them available when requested so.
  383. */
  384. #if (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE) && \
  385. !defined(_ANSI_SOURCE) && !defined(_C99_SOURCE)) || \
  386. defined(_DRAGONFLY_SOURCE) || defined(_NETBSD_SOURCE)
  387. #define __DF_VISIBLE 1
  388. #else
  389. #define __DF_VISIBLE 0
  390. #endif
  391. /* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */
  392. #if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE - 0) == 1
  393. #undef _POSIX_C_SOURCE /* Probably illegal, but beyond caring now. */
  394. #define _POSIX_C_SOURCE 199009
  395. #endif
  396. /* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */
  397. #if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE - 0) == 2
  398. #undef _POSIX_C_SOURCE
  399. #define _POSIX_C_SOURCE 199209
  400. #endif
  401. /* Deal with various X/Open Portability Guides and Single UNIX Spec. */
  402. #ifdef _XOPEN_SOURCE
  403. #if _XOPEN_SOURCE - 0 >= 700
  404. #define __XSI_VISIBLE 700
  405. #undef _POSIX_C_SOURCE
  406. #define _POSIX_C_SOURCE 200809
  407. #elif _XOPEN_SOURCE - 0 >= 600
  408. #define __XSI_VISIBLE 600
  409. #undef _POSIX_C_SOURCE
  410. #define _POSIX_C_SOURCE 200112
  411. #elif _XOPEN_SOURCE - 0 >= 500
  412. #define __XSI_VISIBLE 500
  413. #undef _POSIX_C_SOURCE
  414. #define _POSIX_C_SOURCE 199506
  415. #endif
  416. #endif
  417. /*
  418. * Deal with all versions of POSIX. The ordering relative to the tests above is
  419. * important.
  420. */
  421. #if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
  422. #define _POSIX_C_SOURCE 198808
  423. #endif
  424. #ifdef _POSIX_C_SOURCE
  425. #if (_POSIX_C_SOURCE - 0) >= 200809
  426. #define __POSIX_VISIBLE 200809
  427. #define __ISO_C_VISIBLE 1999
  428. #elif (_POSIX_C_SOURCE - 0) >= 200112
  429. #define __POSIX_VISIBLE 200112
  430. #define __ISO_C_VISIBLE 1999
  431. #elif (_POSIX_C_SOURCE - 0) >= 199506
  432. #define __POSIX_VISIBLE 199506
  433. #define __ISO_C_VISIBLE 1990
  434. #elif (_POSIX_C_SOURCE - 0) >= 199309
  435. #define __POSIX_VISIBLE 199309
  436. #define __ISO_C_VISIBLE 1990
  437. #elif (_POSIX_C_SOURCE - 0) >= 199209
  438. #define __POSIX_VISIBLE 199209
  439. #define __ISO_C_VISIBLE 1990
  440. #elif (_POSIX_C_SOURCE - 0) >= 199009
  441. #define __POSIX_VISIBLE 199009
  442. #define __ISO_C_VISIBLE 1990
  443. #else
  444. #define __POSIX_VISIBLE 198808
  445. #define __ISO_C_VISIBLE 0
  446. #endif /* _POSIX_C_SOURCE */
  447. #else
  448. /*-
  449. * Deal with _ANSI_SOURCE:
  450. * If it is defined, and no other compilation environment is explicitly
  451. * requested, then define our internal feature-test macros to zero. This
  452. * makes no difference to the preprocessor (undefined symbols in preprocessing
  453. * expressions are defined to have value zero), but makes it more convenient for
  454. * a test program to print out the values.
  455. *
  456. * If a program mistakenly defines _ANSI_SOURCE and some other macro such as
  457. * _POSIX_C_SOURCE, we will assume that it wants the broader compilation
  458. * environment (and in fact we will never get here).
  459. */
  460. #ifdef _ANSI_SOURCE /* Hide almost everything. */
  461. #define __POSIX_VISIBLE 0
  462. #define __XSI_VISIBLE 0
  463. #define __BSD_VISIBLE 0
  464. #define __ISO_C_VISIBLE 1990
  465. #elif defined(_C99_SOURCE) /* Localism to specify strict C99 env. */
  466. #define __POSIX_VISIBLE 0
  467. #define __XSI_VISIBLE 0
  468. #define __BSD_VISIBLE 0
  469. #define __ISO_C_VISIBLE 1999
  470. #else /* Default environment: show everything. */
  471. #define __POSIX_VISIBLE 200112
  472. #define __XSI_VISIBLE 600
  473. #define __BSD_VISIBLE 1
  474. #define __ISO_C_VISIBLE 1999
  475. #endif
  476. #endif
  477. /*
  478. * GLOBL macro exists to preserve __start_set_* and __stop_set_* sections
  479. * of kernel modules which are discarded from binutils 2.17.50+ otherwise.
  480. */
  481. #define __GLOBL1(sym) __asm__(".globl " #sym)
  482. #define __GLOBL(sym) __GLOBL1(sym)
  483. #endif /* !_SYS_CDEFS_H_ */