svn commit: r282987 - head/sys/sys

Pedro Giffuni pfg at FreeBSD.org
Fri May 15 20:54:14 UTC 2015



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.



More information about the svn-src-all mailing list