On 05/15/15 15:35, John Baldwin wrote:
On Friday, May 15, 2015 07:51:06 PM Pedro F. Giffuni wrote:
Author: pfg
Date: Fri May 15 19:51:05 2015
New Revision: 282987
URL: https://svnweb.freebsd.org/changeset/base/282987

Log:
   Break apart the gnu_inline attribute and use "artificial" if available.
In general it is bad practice to use the gnu_inline attribute but we
   will need it in special cases like FORTIFY_SOURCE. In this specific
   case it is also useful to have the "artificial" attribute:
"This attribute is useful for small inline wrappers which if possible
   should appear during debugging as a unit, depending on the debug info
   format it will either mean marking the function as artificial or using the
   caller location for all instructions within the inlined body."
This attribute appears to be currently implemented only in GCC. Use it
   only in conjuntion with gnu_inline in the cases where it is available,
   which is similar in spirit in how it's used in glibc.

Modified:
   head/sys/sys/cdefs.h

Modified: head/sys/sys/cdefs.h
==============================================================================
--- head/sys/sys/cdefs.h        Fri May 15 19:37:17 2015        (r282986)
+++ head/sys/sys/cdefs.h        Fri May 15 19:51:05 2015        (r282987)
@@ -375,10 +375,8 @@
  #endif
#if __GNUC_PREREQ__(4, 1)
-#define        __gnu_inline    __attribute__((__gnu_inline__))
  #define       __returns_twice __attribute__((__returns_twice__))
  #else
-#define        __gnu_inline
  #define       __returns_twice
  #endif
@@ -538,6 +536,21 @@
            __attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
  #endif
+/*
+ * FORTIFY_SOURCE, and perhaps other compiler-specific features, require
+ * the use of non-standard inlining.  In general we should try to avoid
+ * using these but GCC-compatible compilers tend to support the extensions
+ * well enough to use them in limited cases.
+ */
+#if __GNUC_PREREQ__(4, 1)
+#if __has_attribute(artificial) || __GNUC_PREREQ__(4, 3)
+#define        __gnu_inline    __attribute__((__gnu_inline__, __artificial__))
+#else
+#define        __gnu_inline    __attribute__((__gnu_inline__))
^^^^ missing an #endif here?

I'm getting this error from buildworld:

/usr/obj/usr/src/tmp/usr/include/sys/cdefs.h:550:2: error: #else after #else
#else
  ^
/usr/obj/usr/src/tmp/usr/include/sys/cdefs.h:36:2: error: unterminated 
conditional directive
#ifndef _SYS_CDEFS_H_
  ^
14 errors generated.
mkdep: compile failed

(Bah... you guys beat my tinderbox.)

Fixed sorry.

Pedro.

_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to