Hi Simon,
On Mon, 22 Dec 2014 21:46:26 -0700 Simon Glass <[email protected]> wrote: > Hi Masahiro, > > On 22 December 2014 at 03:16, Masahiro Yamada <[email protected]> > wrote: > > CONFIG_USE_STDINT was introduced to use compiler-provided types for > > fixed-width variables. > > This must be consistent everywhere to avoid warnings/errors > > including printf() and friends. > > > > Assume the code below > > > > uint32_t foo; > > > > printf("foo= %x\n", foo); > > > > If <stdint.h> is included, uint32_t is defined by the compiler. > > The code above only works on compilers that define "uint32_t" > > as "unsigned int". Actually there exist compilers that define > > "uint32_t" as "unsigned long". > > > > Going forward, to print out fixed-width variables, we always have > > to use PRIxN like this > > > > uint32_t foo; > > > > printf("foo= " PRIx32 "\n", foo); > > > > Notice, > > > > - Typedefs ( uint32_t, int32_t etc.) are provided by <stdint.h> > > - Printf formats ( PRIx32, PRId32 etc.) are provided by <inttypes.h> > > > > Also notice, it makes sense only when <stdint.h> and <inttypes.h> are > > provided by > > the same compiler. > > ^^^^^^^^^^^^^^^^^^ > > > > Commit 4166ecb24 (Add some standard headers external code might need) added > > hard-coded include/inttypes.h. > > It provides hard-coded PRIx32 "x", but it does not make sense. > > Some compiler's <stdint.h> define "uint32_t" as "unsigned long" > > and expect the format string "lx" to print out "uint32_t" variable. > > > > This commit: > > - Adds scripts/gcc-have-stdint.sh to check if the compiler is > > providing both <stdint.h> and <inttypes.h> > > > > - Modifies config.mk to error-out if CONFIG_USE_STDINT is enabled, > > but <stdint.h> or <inttyps.h> is missing > > > > - Modifies the top Makefile to delete "-nostdinc" option and allow to > > include compiler-provided <inttypes.h> > > > > - Remove hard-coded include/inttypes.h > > This patch looks good to me except that I don't understand why you are > removing inttypes.h? Where will the PRI defines come from? Or is it > because you are fixing things such that the defines are not needed > anymore? According to this question, I am afraid you are not understanding <inttypes.h> very well. Maybe is this page useful? http://pubs.opengroup.org/onlinepubs/009695399/basedefs/inttypes.h.html My commit description has also answered your question: Notice, - Typedefs ( uint32_t, int32_t etc.) are provided by <stdint.h> - Printf formats ( PRIx32, PRId32 etc.) are provided by <inttypes.h> Also notice, it makes sense only when <stdint.h> and <inttypes.h> are provided by the same compiler. Best Regards Masahiro Yamada _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

