svn commit: r354672 - head/lib/libc/secure

Warner Losh imp at bsdimp.com
Wed Nov 13 04:44:49 UTC 2019


On Tue, Nov 12, 2019 at 9:20 PM Kyle Evans <kevans at freebsd.org> wrote:

>
>
> On Tue, Nov 12, 2019, 22:04 Pedro Giffuni <pfg at freebsd.org> wrote:
>
>>
>> On 12/11/2019 22:00, Kyle Evans wrote:
>>
>> Author: kevans
>> Date: Wed Nov 13 03:00:32 2019
>> New Revision: 354672
>> URL: https://svnweb.freebsd.org/changeset/base/354672
>>
>> Log:
>>   ssp: rework the logic to use priority=200 on clang builds
>>
>>   The preproc logic was added at the last minute to appease GCC 4.2, and
>>   kevans@ did clearly not go back and double-check that the logic worked out
>>   for clang builds to use the new variant.
>>
>>   It turns out that clang defines __GNUC__ == 4. Flip it around and check
>>   __clang__ as well, leaving a note to remove it later.
>>
>>
>> clang reports itself as GCC 4.2, the priority argument was introduced in
>> GCC 4.3.
>>
>>   Reported by:	cem
>>
>> Modified:
>>   head/lib/libc/secure/stack_protector.c
>>
>> Modified: head/lib/libc/secure/stack_protector.c
>> ==============================================================================
>> --- head/lib/libc/secure/stack_protector.c	Wed Nov 13 02:22:00 2019	(r354671)
>> +++ head/lib/libc/secure/stack_protector.c	Wed Nov 13 03:00:32 2019	(r354672)
>> @@ -47,13 +47,15 @@ __FBSDID("$FreeBSD$");
>>   * they're either not usually statically linked or they simply don't do things
>>   * in constructors that would be adversely affected by their positioning with
>>   * respect to this initialization.
>> + *
>> + * This conditional should be removed when GCC 4.2 is removed.
>>   */
>> -#if defined(__GNUC__) && __GNUC__ <= 4
>> -#define	_GUARD_SETUP_CTOR_ATTR	\
>> -    __attribute__((__constructor__, __used__));
>> -#else
>> +#if defined(__clang__) || (defined(__GNUC__) && __GNUC__ > 4)
>>  #define	_GUARD_SETUP_CTOR_ATTR	 \
>>      __attribute__((__constructor__ (200), __used__));
>> +#else
>> +#define	_GUARD_SETUP_CTOR_ATTR	\
>> +    __attribute__((__constructor__, __used__));
>>  #endif
>>
>>  extern int __sysctl(const int *name, u_int namelen, void *oldp,
>>
>> Please fix properly. Assuming clang always supported it, something like:
>>
>> #if __GNUC_PREREQ__(4, 3) || __has_attribute(__constructor__)
>>
>> should work
>>
>> Cheers,
>>
>
> I considered something of this sort, but searching for information on the
> priority argument in the first place was annoying enough that I had too
> much search-fatigue to figure out when GCC actually corrected this, thus
> assuming that GCC5 (which seemed to be an all-around good release if memory
> serves) and later (since I confirmed GCC6) was sufficient.
>
> I'll fix it in the morning (~8 hours) if I receive no further objections
> to address.
>

Soon enough this can be removed entirely... Getting it pedantically right
in the mean time has little value. We don't really support gcc5 at the
moment. gcc6 and later have good support, but anything new between 4.3 and
6.0 likely is poorly tagged...

Warner


More information about the svn-src-all mailing list