From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeroen Hofstee Date: Fri, 10 Oct 2014 22:40:48 +0200 Subject: [U-Boot] Discussion topics / issues In-Reply-To: References: <201410071445.50854.marex@denx.de> <20141010122229.B60DC38352B@gemini.denx.de> <5437E778.3050306@myspectrum.nl> <201410101626.41944.marex@denx.de> <543804AF.9050101@myspectrum.nl> Message-ID: <54384450.3000204@myspectrum.nl> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Albert, On 10-10-14 21:51, Albert ARIBAUD wrote: > Hi Jeroen, > > On Fri, 10 Oct 2014 18:09:19 +0200, Jeroen Hofstee > 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. > 1) 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. > 2) 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