Messages in this thread | | | Subject | Re: [PATCH v2] vsprintf: introduce %dE for error constants | From | Juergen Gross <> | Date | Thu, 29 Aug 2019 10:27:04 +0200 |
| |
On 29.08.19 10:12, Petr Mladek wrote: > On Wed 2019-08-28 21:18:37, Uwe Kleine-König wrote: >> Hello Petr, >> >> On 8/28/19 1:32 PM, Petr Mladek wrote: >>> On Tue 2019-08-27 23:12:44, Uwe Kleine-König wrote: >>>> Petr Mladek had some concerns: >>>>> There are ideas to make the code even more tricky to reduce >>>>> the size, keep it fast. >>>> >>>> I think Enrico Weigelt's suggestion to use a case is the best >>>> performance-wise so that's what I picked up. Also I hope that >>>> performance isn't that important because the need to print an error >>>> should not be so common that it really hurts in production. > > This is contadicting. The "best" performance-wise solution was > choosen in favor of space. The next sentence says that performance > is not important. > >>> I personally do not like switch/case. It is a lot of code. >>> I wonder if it even saved some space. >> >> I guess we have to die either way. Either it is quick or it is space >> efficient. > > I am more concerned about the size. Well, array of strings will > be both fast and size efficient. > >> With the big case I trust the compiler to pick something >> sensible expecting that it adapts for example to -Osize. > > I am not sure what are the expectations here. I can't imagine > another translation than: > > if (val == 1) > str = "EPERM"; > else if (val == 2) > str = "ENOENT" > else if (val == 3) > str = "ESRCH" > ... > > It means that all constans will be hardcoded in the code instead > of in data section. Plus there will be instructions for each > if/else part. > >>> If you want to safe space, I would use u16 to store the numbers. >>> Or I would use array of strings. There will be only few holes. >>> >>> You might also consider handling only the most commonly >>> used codes from errno.h and errno-base.h (1..133). There will >>> be no holes and the codes are stable. >> >> I'd like to postpone the discussion about "how" until we agreed about >> the "if at all". > > It seems that all people like this feature.
Hmm, what about already existing format strings conatining "%dE"?
Yes, I could find only one (drivers/staging/speakup/speakup_bns.c), but nevertheless...
> > BTW: I though more about generating or cut&pasting the arrary. > I can't find any reasonable way how to generate it.
Generate the array and errno.h/errno-base.h from the same source?
Juergen
| |