[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