[U-Boot] [PATCH v2 1/2] RFC: create u-boot-common.lds

Graeme Russ graeme.russ at gmail.com
Wed Feb 8 02:21:02 CET 2012


Hi Tony,

On Wed, Feb 8, 2012 at 11:49 AM, Troy Kisky
<troy.kisky at boundarydevices.com> wrote:
> On 2/7/2012 5:39 PM, Graeme Russ wrote:
>>
>> Hi Troy,
>>
>> On Wed, Feb 8, 2012 at 11:20 AM, Troy Kisky
>> <troy.kisky at boundarydevices.com>  wrote:
>>>
>>> This makes adding linker defined tables easier
>>> as only 1 lds file (include/u-boot-common.lds)
>>> will need to be touched instead of 193 files.
>>>
>>> Signed-off-by: Troy Kisky<troy.kisky at boundarydevices.com>
>>> ---
>>
>>
>>> diff --git a/arch/arm/cpu/arm1136/u-boot.lds
>>> b/arch/arm/cpu/arm1136/u-boot.lds
>>> index d1e2851..fe07097 100644
>>> --- a/arch/arm/cpu/arm1136/u-boot.lds
>>> +++ b/arch/arm/cpu/arm1136/u-boot.lds
>>> @@ -52,12 +52,7 @@ SECTIONS
>>>                *(.data)
>>>        }
>>>
>>> -       . = ALIGN(4);
>>> -
>>> -       . = .;
>>> -       __u_boot_cmd_start = .;
>>> -       .u_boot_cmd : { *(.u_boot_cmd) }
>>> -       __u_boot_cmd_end = .;
>>> +#include<u-boot-common.lds>
>>>
>>>        . = ALIGN(4);
>>>
>> Ick! A #define in the middle of a file :(
>>
>> I would rather see the code block you are replacing #defined in
>> include/u-boot-common.lds.h and then use the define at the desired
>> location in the arch lds file. This will allow multiple 'functional
>> linker blocks' to be defined that the acrch scripts can arrange as they
>> see fit.
>>
>> Also, ALIGN(4) may not always be a given, so maybe we should pass that in
>> as a parameter?
>>
>> Hmmm....maybe something like (most likely not syntactically correct):
>>
>> #define U_BOOT_LDS_SECTION(section, alignment) \
>>        . = ALIGN(alignment); \
>>        U_BOOT_LDS_SYMBOL(section ## _start) = .;
>>        . ## section : { KEEP(*(. ## section)) }
>>        U_BOOT_LDS_SYMBOL(section ## _end) = .;
>>
>>
>> So we can simply, in the arch lds:
>>
>>        U_BOOT_LDS_SECTION(text, 4)
>>        U_BOOT_LDS_SECTION(u_boot_cmd, 4)
>>        U_BOOT_LDS_SECTION(rodata, 4)
>>        U_BOOT_LDS_SECTION(data, 4)
>>        U_BOOT_LDS_SECTION(dynsym, 4)
>>
>> Regards,
>>
>> Graeme
>>
> That works fine for existing sections.. i.e
>
> U_BOOT_LDS_SECTION(u_boot_cmd, 4)
>
>
> but what about the next patch in the series?
> Do you want me to change all lds files again?

Ah, and therein lies the rub...

By adding 'phy_entry' into the common lds file, you have inflicted it on
everyone, and forced it to be after u_boot_cmd. What if I don't need the
phy_entry section (no network support) or don't want it hard-placed after
u_boot_cmd?

> I hope you have a better idea for how to handle patch 2/2.

Add  U_BOOT_LDS_SECTION(phy_entry, 4) to all the linker scripts

Hmm, and this gets me to thinking that this process is going to be very
useful for my INIT_CALL series - At the moment, I collect all the
INIT_CALL declerations in a section, but I need a dedicated linker script
to create a file which only includes that section - With a slight tweak to
U_BOOT_LDS_SECTION, I should be able to selectively switch between the two
link modes (INIT_CALL versus 'final' link)

Regards,

Graeme


More information about the U-Boot mailing list