Index: sys/cdefs.h
===================================================================
RCS file: /home/apb/netbsd/REPO/cvsmirror/cvsroot/src/sys/sys/cdefs.h,v
retrieving revision 1.113
diff -d -p -u -r1.113 cdefs.h
--- sys/cdefs.h	16 Oct 2013 19:31:43 -0000	1.113
+++ sys/cdefs.h	24 Oct 2013 15:10:15 -0000
@@ -250,18 +250,65 @@
 #define	__noclone	/* nothing */
 #endif
 
+/*
+ * __unused: Note that variable might be unused.
+ * Do not warn if variable is unused.
+ */
 #if __GNUC_PREREQ__(2, 7)
 #define	__unused	__attribute__((__unused__))
 #else
 #define	__unused	/* delete */
 #endif
 
+/*
+ * __used: Note that variable is needed, even if it appears to be unused.
+ * Valid only for static variables.  Do not optimise variable away.
+ * Do not warn if variable is unused.
+ */
 #if __GNUC_PREREQ__(3, 1)
 #define	__used		__attribute__((__used__))
 #else
 #define	__used		__unused
 #endif
 
+/*
+ * __diagused: Note that variable is used in diagnostic code, but may be
+ * unused in non-diagnostic code.
+ *
+ * In the kernel, variables that are used when DIAGNOSTIC is defined,
+ * but unused when DIAGNOSTIC is not defined, may be declared with
+ * __diagused.  In userland, variables that are used when NDEBUG is not
+ * defined, but unused when NDEBUG is defined, may be declared with
+ * __diagused.
+ *
+ * Variables used only in assert(3) or KASSERT(9) macros are likely
+ * candidates for being declared with __diagused.
+ */
+#if (defined(_KERNEL) && defined(DIAGNOSTIC)) \
+ || (!defined(_KERNEL) && !defined(NDEBUG))
+#define __diagused	/* empty */
+#else
+#define	__diagused	__unused
+#endif
+
+/*
+ * __debugused: Note that variable is used in debug code, but may be
+ * unused in non-debug code.
+ *
+ * In either the kernel or userland, variables that are used when DEBUG
+ * is defined, but unused when DEBUG is not defined, may be marked with
+ * __debugused.
+ *
+ * In the kernel, variables used only in KDASSERT(9) macros are likely
+ * candidates for being declared with __debugused.  There is no
+ * established convention for the use of DEBUG in userland code.
+ */
+#if defined(DEBUG)
+#define __debugused	/* empty */
+#else
+#define	__debugused	__unused
+#endif
+
 #if __GNUC_PREREQ__(3, 1)
 #define	__noprofile	__attribute__((__no_instrument_function__))
 #else
