[U-Boot] [PATCH v2] arm: Correct build error introduced by getenv_ulong() patch

Simon Glass sjg at chromium.org
Tue Nov 8 23:28:56 CET 2011


Hi Albert,

On Tue, Nov 8, 2011 at 11:46 AM, Albert ARIBAUD
<albert.u.boot at aribaud.net> wrote:
> Le 08/11/2011 16:57, Simon Glass a écrit :
>>
>> Hi Detlev,
>>
>> On Tue, Nov 8, 2011 at 1:20 AM, Detlev Zundel<dzu at denx.de>  wrote:
>>>
>>> Hi Mike,
>>>
>>>> On Monday 31 October 2011 17:06:46 Simon Glass wrote:
>>>>>
>>>>> On Sun, Oct 30, 2011 at 5:44 PM, Mike Frysinger wrote:
>>>>>>
>>>>>> On Sunday 23 October 2011 23:44:35 Simon Glass wrote:
>>>>>>>
>>>>>>> --- a/arch/arm/lib/board.c
>>>>>>> +++ b/arch/arm/lib/board.c
>>>>>>>
>>>>>>>       flash_size = flash_init();
>>>>>>>       if (flash_size>  0) {
>>>>>>>  # ifdef CONFIG_SYS_FLASH_CHECKSUM
>>>>>>> +             char *s = getenv("flashchecksum");
>>>>>>> +
>>>>>>>               print_size(flash_size, "");
>>>>>>>               /*
>>>>>>>                * Compute and print flash CRC if flashchecksum is set
>>>>>>> to
>>>>>>> 'y' *
>>>>>>>                * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
>>>>>>>                */
>>>>>>> -             s = getenv("flashchecksum");
>>>>>>>               if (s&&  (*s == 'y')) {
>>>>>>>                       printf("  CRC: %08X", crc32(0,
>>>>>>>                               (const unsigned char *)
>>>>>>> CONFIG_SYS_FLASH_BASE, @@ -566,9 +567,12 @@ void board_init_r(gd_t
>>>>>>> *id,
>>>>>>> ulong dest_addr) /* Initialize from environment */
>>>>>>>       load_addr = getenv_ulong("loadaddr", 16, load_addr);
>>>>>>>  #if defined(CONFIG_CMD_NET)
>>>>>>> -     s = getenv("bootfile");
>>>>>>> -     if (s != NULL)
>>>>>>> -             copy_filename(BootFile, s, sizeof(BootFile));
>>>>>>> +     {
>>>>>>> +             char *s = getenv("bootfile");
>>>>>>> +
>>>>>>> +             if (s != NULL)
>>>>>>> +                     copy_filename(BootFile, s, sizeof(BootFile));
>>>>>>> +     }
>>>>>>>  #endif
>>>>>>
>>>>>> seems like a better solution would be to use at the top:
>>>>>>        __maybe_unused char *s;
>>>>>>
>>>>>> also, shouldn't these be "const char *s" ?
>>>>>
>>>>> We can certainly do this and I agree it is easier than #ifdefs. Does
>>>>> it introduce the possibility that one day the code will stop using the
>>>>> variable but it will still be declared? Is the fact that we need the
>>>>> #ifdefs an indication that the function should be too long and should
>>>>> be refactored? it in fact better to have these explicit so we can see
>>>>> them for the ugliness they are?
>>>>
>>>> yes, you're right that it does leave the door open to the variable being
>>>> declared, never used, and gcc not emitting a warning about it.
>>>>
>>>> both setups suck, but i'd lean towards the less-ifdef state ... wonder
>>>> if
>>>> Wolfgang has a preference.
>>>
>>> Personally, I think that the nuisance of a potential unused variable is
>>> less of an issue than the actual _problems_ that ifdefs induce.
>>
>> Yes the #ifdefs are a pain. I am working on a replacement for board.c
>> - so far I have split things into functions. Next I need to look at
>> Graeme's initcall patch.
>
> I don't think 'ifdefs are' necessarily 'a pain'. They cater for a need, that
> is, to mark that some code depends on some condition. I find it *normal*
> that a checksum-related variable is conditioned on the checksum macro being
> defined.
>

This discussion was regarding the need to #ifdef the variable declaration, viz:

#if defined(THING1) || defined(THING2)
const char *cat;
#endif

...


#ifdef THING1
   cat = getenv("cat");

   send_back(cat);
#endif

....

#ifdef THING2
   cat = check_outside("cat");

   if (cat)
      wibble(cat);
#endif


and whether the top bit would be better as:

__maybe_unused const char *cat;

But more generally, lots of #ifdefs do make the code harder to read,
and potentially more brittle in the face of config changes.

Regards,
Simon

>
> Amicalement,
> --
> Albert.
>


More information about the U-Boot mailing list