[U-Boot] [PATCH v2 1/2] RFC: create u-boot-common.lds
Troy Kisky
troy.kisky at boundarydevices.com
Wed Feb 8 02:56:07 CET 2012
On 2/7/2012 6:21 PM, Graeme Russ wrote:
> 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?
Inflicted? I doubt that I added any bytes at all to boards that don't
use phylib.
>> 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
The entire reason for me for patch 1/2 was to support 2/2.
What about #include <u-boot-comon.lds.h>
at the start of each lds file,
and
#include<u-boot-common.lds>
in the middle?
If people really want to control the relative ordering of u_boot_cmd, and phy_entry,
they are not forced to include u-boot-common.lds here.
I can even throw in an unnecessary ifdef in u-boot-common.lds
#ifdef CONFIG_PHYLIB
U_BOOT_LDS_SECTION(phy_entry, 4)
#endif
This will make it easier for developers to add a table without having
to change 192 lds files. If a few boards opt not to use
"#include<u-boot-common.lds>," that still means far fewer files
to change and less risk of typos.
Troy
More information about the U-Boot
mailing list