diff options
Diffstat (limited to 'misc/sys/cdefs.h')
-rw-r--r-- | misc/sys/cdefs.h | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index 5f40a0a45d..c0c442e011 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -95,15 +95,39 @@ # define __END_DECLS #endif -/* GCC2 has various useful declarations that can be made with the +/* __asm__ ("xyz") is used throughout the headers to rename functions + at the assembly language level. This is wrapped by the __REDIRECT + macro, in order to support compilers that can do this some other + way. When compilers don't support asm-names at all, we have to do + preprocessor tricks instead (which don't have exactly the right + semantics, but it's the best we can do). + + Example: + int __REDIRECT(setpgrp, __P((__pid_t pid, __pid_t pgrp)), setpgid); */ + +#if defined __GNUC__ && __GNUC__ >= 2 + +# define __REDIRECT(name, proto, asname) name proto __asm__ (#asname) + +/* +#elif __SOME_OTHER_COMPILER__ + +# define __attribute__(xyz) +# define __ALIAS(name, proto, asname) name proto; \ + _Pragma("let " #name " = " #asname) +*/ +#endif + +/* GCC has various useful declarations that can be made with the `__attribute__' syntax. All of the ways we use this do fine if - they are omitted for compilers that don't understand it. */ + they are omitted for compilers that don't understand it. */ #if !defined __GNUC__ || __GNUC__ < 2 -# define __attribute__(xyz) /* Ignore. */ -#endif +# define __attribute__(xyz) /* Ignore. */ + +#endif -/* For now no version of gcc knows the `restrict' keyword. Define it +/* No current version of gcc knows the `restrict' keyword. Define it for now unconditionally to the empty string. */ #define __restrict |