Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Jan 2017 23:10:55 +0100
From:      Dimitry Andric <dim@FreeBSD.org>
To:        Ian Lepore <ian@FreeBSD.org>
Cc:        Ngie Cooper <yaneurabeya@gmail.com>, "src-committers@freebsd.org" <src-committers@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>
Subject:   Re: svn commit: r311929 - head/sys/boot/common
Message-ID:  <8EF36240-8CD0-449E-AA9C-EFFB7BF0C111@FreeBSD.org>
In-Reply-To: <1484170956.86335.17.camel@freebsd.org>
References:  <201701111847.v0BIl0Mg013954@repo.freebsd.org> <CAGHfRMBy7KPP=vLjEpyfRuf_u4S%2B2mO_W3US9WodMf=ckRJKBQ@mail.gmail.com> <1484170956.86335.17.camel@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--Apple-Mail=_96E7DCCF-5558-4B57-AE01-E03A43495047
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=iso-8859-1

On 11 Jan 2017, at 22:42, Ian Lepore <ian@FreeBSD.org> wrote:
> 
> On Wed, 2017-01-11 at 13:35 -0800, Ngie Cooper wrote:
>> On Wed, Jan 11, 2017 at 10:47 AM, Dimitry Andric <dim@freebsd.org>
>> wrote:
>>> 
>>> Author: dim
>>> Date: Wed Jan 11 18:47:00 2017
>>> New Revision: 311929
>>> URL: https://svnweb.freebsd.org/changeset/base/311929
>>> 
>>> Log:
>>>   Don't include <errno.h> in reloc_elf.c, as it includes <stand.h>
>>> just
>>>   after it, which has a conflicting definition of errno.  This
>>> leads to
>>>   the following warning with clang 4.0.0:
>>> 
>>>       In file included from sys/boot/common/reloc_elf32.c:6:
>>>       In file included from sys/boot/common/reloc_elf.c:37:
>>>       /usr/obj/usr/src/tmp/usr/include/stand.h:155:12: error: this
>>> function declaration is not a prototype [-Werror,-Wstrict-
>>> prototypes]
>>>       extern int errno;
>>>                  ^
>>>       sys/sys/errno.h:46:26: note: expanded from macro 'errno'
>>>       #define errno           (* __error())
>> It seems like libstand (once again) should be fixed, not the
>> "offending code".
>> -Ngie
>> 
> 
> In this case it's not the library that's in error.  Libstand is the
> thing that implements errno, so it's the thing that must define it.
> 
> The code that includes both errno.h and libstand.h was wrong.  errno.h
> is a standard header file used with libc, and the loader code doesn't
> link with libc.
> 
> The thing that amazes me is the usual:  how did this ever work with gcc
> 4.2?

The line:

    extern int errno;

expanded to:

    extern int (* __error());

which is a declaration of an external function pointer called __error
(albeit with an empty parameter list).  Since nobody actually refers to
this symbol in libstand, there are no later complaints.

Interestingly, reloc_elf.c does not use errno at all, so I have no idea
why the include was originally added.

-Dimitry


--Apple-Mail=_96E7DCCF-5558-4B57-AE01-E03A43495047
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename=signature.asc
Content-Type: application/pgp-signature;
	name=signature.asc
Content-Description: Message signed with OpenPGP using GPGMail

-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.30

iEYEARECAAYFAlh2rXcACgkQsF6jCi4glqP8zQCeINInEOUVS5IPMGmWXEYQ5zon
wR0AoMw7WEJJOqE8t3in9Fe5L35F87Ll
=lVEX
-----END PGP SIGNATURE-----

--Apple-Mail=_96E7DCCF-5558-4B57-AE01-E03A43495047--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8EF36240-8CD0-449E-AA9C-EFFB7BF0C111>