
Hello Albert,
On 10-10-14 21:51, Albert ARIBAUD wrote:
Hi Jeroen,
On Fri, 10 Oct 2014 18:09:19 +0200, Jeroen Hofstee jeroen@myspectrum.nl wrote:
Hello Marek,
On 10-10-14 16:26, Marek Vasut wrote:
On Friday, October 10, 2014 at 04:04:40 PM, Jeroen Hofstee wrote:
Hello Wolfgang,
On 10-10-14 14:22, Wolfgang Denk wrote:
It does not mention puts() vs. printf(), if it is indeed meant to be u-boot policy.
This is not just U-Boot philosophy, but something that I would consider a matter of course when writing code - using the appropriate tools for the task at hand. If all you want to do is sendout a constant string to the utput device, there is no need to invoke a function that provides fancy formatting options.
Don't we always try to use the smallest, most efficient tool that is suited for a task?
calling printf("%s\n", "string") gets translated into puts by the compiler. There should be no difference in the binary
Is this LLVM specific or does GCC do that too ? This is interesting information.
I was talking about gcc, it has been doing such since ages ago (unless you purposely disable it). clang does it as well.
That's a good thing, but generally speaking, I think that just because the compiler is being clever doesn't mean we are allowed to rely on that, because if we do take a habit of relying on the compiler being clever, two things will happen:
Why can't this be relied on, I gave up digging if this is a gcc 3 or 2 feature. It is old at least, museum stuff if it is not supported.
- we will keep thinking the compiler is being clever even when for
some reason it will stop being clever -- for instance, because someone decided to disable the clever feature;
If you ask to disable it, it is good if it does so, don't see a problem with that. Anyway, it is not an u-boot issue, anything below -O2 is not supported anyway.
- we will begin thinking the compiler is clever in situations where it
never has and never will.
I would almost take this as an insult, I hope u-boot folks know or at least check before they assume a compiler does XYZ. And yes compilers will replace simple printf call with their simpler equivalent and has been doing so for quite a while (and that is an understatement).
IMO, a quick cost/benefit comparison of choosing between manually turning printf() into puts whenever doable vs letting the compiler do the changes automatically, the manual option wins -- it's bit like Pascal's Wager: you don't lose much but you can only win.
No it is the other way around; why on earth do you want demand patch submitters to make changes which result in the exactly same binary; you waste time of reviewers / patch submitter and it doesn't serve a goal.
So to turn it around: just use printf: "you don't lose much but you can only win."
Regards, Jeroen