[U-Boot] where is (eg) "BOOT_TARGET_DEVICES_references_MMC_without_CONFIG_CMD_MMC" defined?

Rick Altherr raltherr at google.com
Mon Feb 6 16:56:35 UTC 2017


include/config_distro_bootcmd.h:65 defines BOOTENV_DEV_MMC when
CONFIG_CMD_MMC is defined.  Otherwise, line 69 does.  In the former case,
BOOTENV_DEV_MMC is defined to BOOTENV_DEV_BLKDEV which is a macro that
takes 3 arguments.  In the latter case, BOOTENV_DEV_MMC is defined
to BOOT_TARGET_DEVICES_references_MMC_without_CONFIG_CMD_MMC which is not
defined at all.  Since there isn't a macro of that name and it takes
arguments, the compiler assumes it must be a function.  Depending on
compiler, flags, etc, that will either compile (assuming int return type,
etc) or not.  If it does compile, it will fail to link as that symbol is
never defined.

On Mon, Feb 6, 2017 at 4:06 AM, Robert P. J. Day <rpjday at crashcourse.ca>
wrote:

>
>   i'm sure i'm missing something obvious, but i'm perusing
> "include/config_distro_bootcmd.h" for the first time, and i can
> understand the *principle* behind:
>
> /*
>  * A note on error handling: It is possible for BOOT_TARGET_DEVICES to
>  * reference a device that is not enabled in the U-Boot configuration, e.g.
>  * it may include MMC in the list without CONFIG_CMD_MMC being enabled.
> Given
>  * that BOOT_TARGET_DEVICES is a macro that's expanded by the C
> pre-processor
>  * at compile time, it's not  possible to detect and report such problems
> via
>  * a simple #ifdef/#error combination. Still, the code needs to report
> errors.
>  * The best way I've found to do this is to make BOOT_TARGET_DEVICES
> expand to
>  * reference a non-existent symbol, and have the name of that symbol encode
>  * the error message. Consequently, this file contains references to e.g.
>  * BOOT_TARGET_DEVICES_references_MMC_without_CONFIG_CMD_MMC. Given the
>  * prevalence of capitals here, this looks like a pre-processor macro and
>  * hence seems like it should be all capitals, but it's really an error
>  * message that includes some other pre-processor symbols in the text.
>  */
>
> but, still, how is that name resolved to the corresponding error
> message? what am i missing here?
>
> rday
>
> --
>
> ========================================================================
> Robert P. J. Day                                 Ottawa, Ontario, CANADA
>                         http://crashcourse.ca
>
> Twitter:                                       http://twitter.com/rpjday
> LinkedIn:                               http://ca.linkedin.com/in/rpjday
> ========================================================================
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>


More information about the U-Boot mailing list