Hi Simon,

Le 21/02/2012 07:17, Simon Glass a écrit :
Most ARM CPUs use a very similar link script. This adds a basic
script that can be used by most CPUs.

Two new symbols are introduced which are intended to eventually be
defined on all architectures to make things easier for generic relocation
and reduce special-case code for each architecture:

__text_start is the start of the text area (equivalent to the existing
_start on ARM). It marks the start of the region which must be copied
to a new location during relocation.

Please name it _image_copy_start, not __text_start

__image_copy_end is the end of the region which must be copied to a new
location during relocation. It is normally equal to the start of the BSS
region, but this can vary in some cases (SPL?). Making this an explicit
symbol on its own removes any ambiguity and permits common code to always
do the right thing.

This new script makes use of CPUDIR, now defined by both Makefile and
spl/Makefile, to find the directory containing the start.o object file,
which is always placed first in the image.

To permit MMU setup prior to relocation (as used by pxa) we add an area
to the link script which contains space for this. This is taken
from commit 7f4cfcf. CPUs can put the contents in there using their
start.S file. BTW, shouldn't that area be 16KB-aligned?

Signed-off-by: Simon Glass<s...@chromium.org>
---
Changes in v3:
- Add more comments in the commit message
- Add section for MMU area, as required by pxa

  arch/arm/cpu/u-boot.lds |   91 +++++++++++++++++++++++++++++++++++++++++++++++
  1 files changed, 91 insertions(+), 0 deletions(-)
  create mode 100644 arch/arm/cpu/u-boot.lds

diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
new file mode 100644
index 0000000..7a859fc
--- /dev/null
+++ b/arch/arm/cpu/u-boot.lds
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2004-2008 Texas Instruments
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering,<ga...@denx.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+       . = 0x00000000;
+
+       . = ALIGN(4);
+       .text :
+       {
+               __text_start = .;
+               CPUDIR/start.o (.text)
+               *(.text)
+       }
+
+       . = ALIGN(4);
+       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+
+       . = ALIGN(4);
+       .data : {
+               *(.data)
+       }
+
+       . = ALIGN(4);
+
+       . = .;
+       __u_boot_cmd_start = .;
+       .u_boot_cmd : { *(.u_boot_cmd) }
+       __u_boot_cmd_end = .;
+
+       . = ALIGN(4);

This "ALIGN(4)" is what upsets my edminiv2 build and makes it not binary-identical. It is not in the current arm926ejs liner script. I will check if adding it to the current arm926ejs script produces a working and binary-identical u-boot.

+       __image_copy_end = .;
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       _end = .;

Below is what I assume to be the reservation for MMU.

+       . = ALIGN(4096);
+
+       .mmutable : {
+               *(.mmutable)
+       }

... and I don't like it at all, more so if it is going to be actually 16 KB, because it seems to me we're wasting memory and creating a hole in the middle of our in-RAM binary, and I'm not sure we need to do it here in the first place. Do we need to have that MMU region mapped over DDR? And if so, do we need to have it mapped in the middle of u-boot? Plus you're placing it after .dynsym and .rel.dyn, but possibly overlaid with .bss. Normally this area should have gone by the time we get to use BSS, but assumption is the mother of all screw-ups.

+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               __bss_end__ = .;
+       }
+
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
+}

Amicalement,
--
Albert.
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to