about summary refs log tree commit diff
path: root/misc/sys
diff options
context:
space:
mode:
Diffstat (limited to 'misc/sys')
-rw-r--r--misc/sys/cdefs.h34
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