[cfe-dev] Another Newlib v2.5.0 tweak
Martin J. O'Riordan via cfe-dev
cfe-dev at lists.llvm.org
Mon Jul 10 09:29:14 PDT 2017
Recently I had noticed a significant change in the handling of Locales and
Newlib v2.5.0, and this has been address in recent patches to the head
revision of CLang.
But I have come across a more subtle change in the handling of '<stdint.h>'
and the '<inttypes.h>' header with Newlib v2.5.0 versus v2.2.0.
In this case the "portable" formatting macros such as 'PRIx64' suddenly
stopped working when I switched to Newlib v2.5.0 from Newlib v2.2.0 for our
"free-standing" target.
Most of the ISO C headers we use come from Newlib, but the '<stdint.h>' that
we use comes from CLang ('clang/lib/Headers/stdint.h'), and this has a
subtle incompatibility with the other headers from Newlib v2.5.0 such as
'<inttypes.h>', in that the macro '__int64_t_defined' is no longer defined
as a consequence of other changes in Newlib, but which is defined if I use
the Newlib version of '<stdint.h>'. However, I find the CLang version of
this header more reliable and prefer to use it.
There is a very simple change which can be made to CLang's '<stdint.h>' that
works with Newlib v2.5.0 and which is also backward compatible with older
versions of Newlib, and that is to add the following to CLang's '<stdint.h>'
in the '#else' clause for the Free-standing vs Hosted check (Line 104 in the
CLang v4.0.0 release sources):
#ifdef __NEWLIB__
# include <sys/_stdint.h>
#endif /* __NEWLIB__ */
I have tested this with Newlib v2.2.0 and v2.5.0, and after visual
inspection I see no reason that it will not work for all versions of Newlib
in between. I have not checked older versions of Newlib. Also, since I am
not building a Hosted compiler, I have not checked if a similar change is
necessary for the hosted case.
All the best,
MartinO
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170710/1f5a5d59/attachment.html>
More information about the cfe-dev
mailing list