On 14-06-10 11:45 PM, Albert ARIBAUD wrote:
Hi Wolfgang,

On Wed, 11 Jun 2014 06:49:28 +0200, Wolfgang Denk <w...@denx.de> wrote:

Dear Steve,

In message <53979199.5010...@broadcom.com> you wrote:

OK - I think that one of the alternate proposals would be to
conditionally reserve a "32 byte block" prior to the _start symbol (in
"arch/arm/cpu/armv8/start.S") which would then be filled in by a
post-processing step... This could be implemented by:

Yes, that illustrates the idea.  However, this implementation suffers
from the use of an #ifdef where none is actually needed.  Instead, you
can create your own source file which defines the header; this could
be then even in it's own segment, say:

your_header.c:

struct your_header {
        u_int32[8];
} your_header __attribute__ ((__section__ (".your_hdr")));

All that is needed then is to make the linker place this segment in
front of the text segment.

This avoids an ugly #ifdef, and also modifications in the common code.

Agreed and seconded.

Plus, using a dedicated 'header' section and a separate C source file
for the header makes it automatic that if no input 'header' section
were provided then no output 'header' section would be emitted; IOW,
we would not need two different linker scripts, a single one would be
useable for both 'headerless' and 'headerful' image types.

Also, the alignment constraint should be configurable.

Best regards,

Wolfgang Denk

Amicalement,


Albert, Wolfgang, et al.

I didn't know about the automatic handling of "conditional" sections in the linker script file - Thanks!!!

So if I add a "your_header.c" as above, then

(1) I need to modify "arch/arm/cpu/armv8/u-boot.lds":
        . = 0x00000000;

+       . = ALIGN(8);
+       .your_hdr : {
+               KEEP(*(.your_hdr*));
+       }
+
        . = ALIGN(8);
        .text :
        {

(2) then (I believe) I need to modify the "Makefile" to define the start address of this new section:
+LDFLAGS_u-boot += --section-start=".your_hdr"=CONFIG_YOUR_HEADER_ADDR

(3) and (I believe) I need to modify the OBJCOPYFLAGS (somewhere) in order to include this new section in the u-boot.bin:
+OBJCOPYFLAGS += -j .your_hdr

(... I don't actually have this working yet; so I suspect more changes are required ...)

And in the end, (I believe) I am just going to have a block (likely 4096 bytes) prepended to the "original" u-boot.bin; which I can do today with no code changes at all....

Remember that original design request was effectively a two line change:
+       gd->mon_len += CONFIG_SYS_TEXT_BASE % 4096;
and
+       gd->relocaddr += CONFIG_SYS_TEXT_BASE % 4096;

Regrettably, since this is not going to be accepted, I am abandoning this change.
Thanks, Steve
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to