From mboxrd@z Thu Jan 1 00:00:00 1970 From: Troy Kisky Date: Tue, 07 Feb 2012 18:56:07 -0700 Subject: [U-Boot] [PATCH v2 1/2] RFC: create u-boot-common.lds In-Reply-To: References: <1328660414-7551-1-git-send-email-troy.kisky@boundarydevices.com> <4F31C68D.5020400@boundarydevices.com> Message-ID: <4F31D637.2070008@boundarydevices.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 2/7/2012 6:21 PM, Graeme Russ wrote: > Hi Tony, > > On Wed, Feb 8, 2012 at 11:49 AM, Troy Kisky > wrote: >> On 2/7/2012 5:39 PM, Graeme Russ wrote: >>> Hi Troy, >>> >>> On Wed, Feb 8, 2012 at 11:20 AM, Troy Kisky >>> 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 >>>> --- >>> >>>> 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 >>>> >>>> . = 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 at the start of each lds file, and #include 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," that still means far fewer files to change and less risk of typos. Troy