diff mbox

[U-Boot,1/2] RFC: create u-boot-common.lds

Message ID 1328410966-13946-1-git-send-email-troy.kisky@boundarydevices.com
State RFC
Headers show

Commit Message

Troy Kisky Feb. 5, 2012, 3:02 a.m. UTC
This makes adding linker defined tables easier
as far fewer lds files will need to be touched.

Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>

Series based on Stefano's u-boot-imx
Close inspection of

board/mousse/u-boot.lds.ram
arch/blackfin/cpu/u-boot.lds

is warranted.

./MAKEALL -a arm
Boards compiled: 216
Boards with warnings or errors: 71



---
 arch/arm/cpu/arm1136/u-boot.lds                  |    7 +------
 arch/arm/cpu/arm1176/u-boot.lds                  |    5 +----
 arch/arm/cpu/arm720t/u-boot.lds                  |    7 +------
 arch/arm/cpu/arm920t/ep93xx/u-boot.lds           |    5 +----
 arch/arm/cpu/arm920t/u-boot.lds                  |    7 +------
 arch/arm/cpu/arm925t/u-boot.lds                  |    7 +------
 arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds       |    5 +----
 arch/arm/cpu/arm926ejs/u-boot.lds                |    7 +------
 arch/arm/cpu/arm946es/u-boot.lds                 |    7 +------
 arch/arm/cpu/arm_intcm/u-boot.lds                |    7 +------
 arch/arm/cpu/armv7/u-boot.lds                    |    8 ++------
 arch/arm/cpu/ixp/u-boot.lds                      |    7 +------
 arch/arm/cpu/lh7a40x/u-boot.lds                  |    7 +------
 arch/arm/cpu/pxa/u-boot.lds                      |    7 +------
 arch/arm/cpu/s3c44b0/u-boot.lds                  |    7 +------
 arch/arm/cpu/sa1100/u-boot.lds                   |    7 +------
 arch/avr32/cpu/u-boot.lds                        |    8 +-------
 arch/blackfin/cpu/u-boot.lds                     |   15 ++++++---------
 arch/nds32/cpu/n1213/u-boot.lds                  |    5 +----
 arch/nios2/cpu/u-boot.lds                        |    8 ++------
 arch/powerpc/cpu/74xx_7xx/u-boot.lds             |   11 +----------
 arch/powerpc/cpu/mpc512x/u-boot.lds              |   11 +----------
 arch/powerpc/cpu/mpc5xx/u-boot.lds               |   11 +----------
 arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds |   11 +----------
 arch/powerpc/cpu/mpc5xxx/u-boot.lds              |   11 +----------
 arch/powerpc/cpu/mpc8220/u-boot.lds              |   11 +----------
 arch/powerpc/cpu/mpc824x/u-boot.lds              |   11 +----------
 arch/powerpc/cpu/mpc8260/u-boot.lds              |   11 +----------
 arch/powerpc/cpu/mpc83xx/u-boot.lds              |   11 +----------
 arch/powerpc/cpu/mpc85xx/u-boot-nand.lds         |   10 +---------
 arch/powerpc/cpu/mpc85xx/u-boot.lds              |   10 +---------
 arch/powerpc/cpu/mpc86xx/u-boot.lds              |   10 +---------
 arch/powerpc/cpu/ppc4xx/u-boot.lds               |   10 +---------
 arch/sandbox/cpu/u-boot.lds                      |    4 +---
 arch/sh/cpu/sh2/u-boot.lds                       |    9 ++-------
 arch/sh/cpu/sh3/u-boot.lds                       |   10 +++-------
 arch/sh/cpu/sh4/u-boot.lds                       |    9 ++-------
 arch/x86/cpu/u-boot.lds                          |    6 +-----
 board/BuS/EB+MCF-EV123/u-boot.lds                |   10 +---------
 board/LEOX/elpt860/u-boot.lds                    |   10 +---------
 board/LEOX/elpt860/u-boot.lds.debug              |    4 +---
 board/RPXClassic/u-boot.lds                      |   11 +----------
 board/RPXClassic/u-boot.lds.debug                |    9 +--------
 board/RPXlite/u-boot.lds                         |   11 +----------
 board/RPXlite/u-boot.lds.debug                   |    9 +--------
 board/RPXlite_dw/u-boot.lds                      |   11 +----------
 board/RPXlite_dw/u-boot.lds.debug                |    9 +--------
 board/RRvision/u-boot.lds                        |   11 +----------
 board/actux1/u-boot.lds                          |    8 ++------
 board/actux2/u-boot.lds                          |    8 ++------
 board/actux3/u-boot.lds                          |    8 ++------
 board/adder/u-boot.lds                           |   11 +----------
 board/altera/nios2-generic/u-boot.lds            |    8 ++------
 board/amcc/acadia/u-boot-nand.lds                |   11 +----------
 board/amcc/bamboo/u-boot-nand.lds                |   11 +----------
 board/amcc/canyonlands/u-boot-nand.lds           |   11 +----------
 board/amcc/kilauea/u-boot-nand.lds               |   11 +----------
 board/amcc/sequoia/u-boot-nand.lds               |   11 +----------
 board/amcc/sequoia/u-boot-ram.lds                |   11 +----------
 board/amirix/ap1000/u-boot.lds                   |    9 +--------
 board/astro/mcf5373l/u-boot.lds                  |   11 +----------
 board/c2mon/u-boot.lds                           |   11 +----------
 board/c2mon/u-boot.lds.debug                     |    9 +--------
 board/cobra5272/u-boot.lds                       |   10 +---------
 board/cogent/u-boot.lds                          |   11 +----------
 board/cogent/u-boot.lds.debug                    |    9 +--------
 board/cray/L1/u-boot.lds.debug                   |    9 +--------
 board/dave/PPChameleonEVB/u-boot.lds             |   10 +---------
 board/dbau1x00/u-boot.lds                        |    6 +-----
 board/dvlhost/u-boot.lds                         |    8 ++------
 board/eltec/mhpc/u-boot.lds                      |   11 +----------
 board/eltec/mhpc/u-boot.lds.debug                |    9 +--------
 board/emk/top860/u-boot.lds                      |   12 +-----------
 board/emk/top860/u-boot.lds.debug                |    4 +---
 board/ep88x/u-boot.lds                           |   11 +----------
 board/esd/dasa_sim/u-boot.lds                    |   11 +----------
 board/esd/pmc440/u-boot-nand.lds                 |   11 +----------
 board/esd/tasreg/u-boot.lds                      |   10 +---------
 board/esteem192e/u-boot.lds                      |   11 +----------
 board/etx094/u-boot.lds                          |   11 +----------
 board/evb64260/u-boot.lds                        |   11 +----------
 board/fads/u-boot.lds                            |   11 +----------
 board/flagadm/u-boot.lds                         |   11 +----------
 board/flagadm/u-boot.lds.debug                   |    9 +--------
 board/freescale/m5208evbe/u-boot.lds             |   10 +---------
 board/freescale/m52277evb/u-boot.lds             |   10 +---------
 board/freescale/m5235evb/u-boot.lds              |   10 +---------
 board/freescale/m5249evb/u-boot.lds              |   10 +---------
 board/freescale/m5253demo/u-boot.lds             |   10 +---------
 board/freescale/m5253evbe/u-boot.lds             |   10 +---------
 board/freescale/m5271evb/u-boot.lds              |   10 +---------
 board/freescale/m5272c3/u-boot.lds               |   10 +---------
 board/freescale/m5275evb/u-boot.lds              |   10 +---------
 board/freescale/m5282evb/u-boot.lds              |   10 +---------
 board/freescale/m53017evb/u-boot.lds             |   10 +---------
 board/freescale/m5329evb/u-boot.lds              |   10 +---------
 board/freescale/m5373evb/u-boot.lds              |   10 +---------
 board/freescale/m54451evb/u-boot.lds             |   10 +---------
 board/freescale/m54455evb/u-boot.lds             |   10 +---------
 board/freescale/m547xevb/u-boot.lds              |   10 +---------
 board/freescale/m548xevb/u-boot.lds              |   10 +---------
 board/freescale/mx31ads/u-boot.lds               |    5 +----
 board/gaisler/gr_cpci_ax2000/u-boot.lds          |    6 +-----
 board/gaisler/gr_ep2s60/u-boot.lds               |    6 +-----
 board/gaisler/gr_xc3s_1500/u-boot.lds            |    6 +-----
 board/gaisler/grsim/u-boot.lds                   |    6 +-----
 board/gaisler/grsim_leon2/u-boot.lds             |    6 +-----
 board/gen860t/u-boot-flashenv.lds                |   10 +---------
 board/gen860t/u-boot.lds                         |   11 +----------
 board/genietv/u-boot.lds                         |   11 +----------
 board/genietv/u-boot.lds.debug                   |    9 +--------
 board/gth2/u-boot.lds                            |    6 +-----
 board/hermes/u-boot.lds                          |   11 +----------
 board/hermes/u-boot.lds.debug                    |    9 +--------
 board/hymod/u-boot.lds                           |   11 +----------
 board/hymod/u-boot.lds.debug                     |    9 +--------
 board/icu862/u-boot.lds                          |   11 +----------
 board/icu862/u-boot.lds.debug                    |    9 +--------
 board/idmr/u-boot.lds                            |   10 +---------
 board/incaip/u-boot.lds                          |    6 +-----
 board/ip860/u-boot.lds                           |   11 +----------
 board/ip860/u-boot.lds.debug                     |    9 +--------
 board/ivm/u-boot.lds                             |   11 +----------
 board/ivm/u-boot.lds.debug                       |    9 +--------
 board/jornada/u-boot.lds                         |    6 +-----
 board/korat/u-boot-F7FC.lds                      |   11 +----------
 board/kup/kup4k/u-boot.lds                       |   11 +----------
 board/kup/kup4k/u-boot.lds.debug                 |    9 +--------
 board/kup/kup4x/u-boot.lds                       |   11 +----------
 board/kup/kup4x/u-boot.lds.debug                 |    9 +--------
 board/lantec/u-boot.lds                          |   11 +----------
 board/lantec/u-boot.lds.debug                    |    9 +--------
 board/lwmon/u-boot.lds                           |   11 +----------
 board/lwmon/u-boot.lds.debug                     |    9 +--------
 board/manroland/uc100/u-boot.lds                 |   11 +----------
 board/matrix_vision/mvsmr/u-boot.lds             |   11 +----------
 board/mbx8xx/u-boot.lds                          |   11 +----------
 board/mbx8xx/u-boot.lds.debug                    |    9 +--------
 board/micronas/vct/u-boot.lds                    |    7 +------
 board/ml2/u-boot.lds                             |   11 +----------
 board/ml2/u-boot.lds.debug                       |    9 +--------
 board/mousse/u-boot.lds                          |   11 +----------
 board/mousse/u-boot.lds.ram                      |    9 +--------
 board/mousse/u-boot.lds.rom                      |    8 +-------
 board/mpl/pip405/u-boot.lds.debug                |    9 +--------
 board/mvblue/u-boot.lds                          |   11 +----------
 board/netphone/u-boot.lds                        |   11 +----------
 board/netphone/u-boot.lds.debug                  |    9 +--------
 board/netta/u-boot.lds                           |   11 +----------
 board/netta/u-boot.lds.debug                     |    9 +--------
 board/netta2/u-boot.lds                          |   11 +----------
 board/netta2/u-boot.lds.debug                    |    9 +--------
 board/netvia/u-boot.lds                          |   11 +----------
 board/netvia/u-boot.lds.debug                    |    9 +--------
 board/nx823/u-boot.lds                           |   11 +----------
 board/nx823/u-boot.lds.debug                     |    9 +--------
 board/openrisc/openrisc-generic/u-boot.lds       |    4 +---
 board/pb1x00/u-boot.lds                          |    6 +-----
 board/qemu-mips/u-boot.lds                       |    7 +------
 board/qi/qi_lb60/u-boot.lds                      |    4 +---
 board/quantum/u-boot.lds                         |   11 +----------
 board/quantum/u-boot.lds.debug                   |    4 +---
 board/r360mpi/u-boot.lds                         |   11 +----------
 board/rbc823/u-boot.lds                          |   10 +---------
 board/renesas/sh7757lcr/u-boot.lds               |   10 +++-------
 board/rsdproto/u-boot.lds                        |   11 +----------
 board/samsung/smdk6400/u-boot-nand.lds           |    4 +---
 board/sandburst/karef/u-boot.lds.debug           |    9 +--------
 board/sandburst/metrobox/u-boot.lds.debug        |    9 +--------
 board/sandpoint/u-boot.lds                       |   11 +----------
 board/siemens/IAD210/u-boot.lds                  |   11 +----------
 board/sixnet/u-boot.lds                          |   11 +----------
 board/snmc/qs850/u-boot.lds                      |   11 +----------
 board/snmc/qs860t/u-boot.lds                     |   11 +----------
 board/spc1920/u-boot.lds                         |   11 +----------
 board/spd8xx/u-boot.lds                          |   11 +----------
 board/spd8xx/u-boot.lds.debug                    |    9 +--------
 board/stx/stxxtc/u-boot.lds                      |   11 +----------
 board/stx/stxxtc/u-boot.lds.debug                |    9 +--------
 board/svm_sc8xx/u-boot.lds                       |   11 +----------
 board/svm_sc8xx/u-boot.lds.debug                 |    4 +---
 board/tqc/tqm8xx/u-boot.lds                      |   11 +----------
 board/v37/u-boot.lds                             |   11 +----------
 board/w7o/u-boot.lds.debug                       |    9 +--------
 board/westel/amx860/u-boot.lds                   |   11 +----------
 board/westel/amx860/u-boot.lds.debug             |    9 +--------
 board/xes/xpedite1000/u-boot.lds.debug           |    9 +--------
 board/xilinx/microblaze-generic/u-boot.lds       |    8 +-------
 board/zipitz2/u-boot.lds                         |    5 +----
 doc/README.commands                              |    5 +++++
 nand_spl/board/freescale/mx31pdk/Makefile        |    2 +-
 nand_spl/board/freescale/mx31pdk/u-boot.lds      |    5 +----
 nand_spl/board/karo/tx25/Makefile                |    2 +-
 nand_spl/board/karo/tx25/u-boot.lds              |    5 +----
 nand_spl/board/samsung/smdk6400/Makefile         |    2 +-
 nand_spl/board/samsung/smdk6400/u-boot.lds       |    4 +---
 spl/Makefile                                     |    3 ++-
 u-boot-common.lds                                |   14 ++++++++++++++
 198 files changed, 234 insertions(+), 1554 deletions(-)
 create mode 100644 u-boot-common.lds

Comments

Mike Frysinger Feb. 5, 2012, 9:01 p.m. UTC | #1
On Saturday 04 February 2012 22:02:45 Troy Kisky wrote:
> arch/blackfin/cpu/u-boot.lds
> is warranted.

yes, this change will break Blackfin boards for sure

> --- a/arch/blackfin/cpu/u-boot.lds
> +++ b/arch/blackfin/cpu/u-boot.lds
>
>  MEMORY
>  {
>  #if CONFIG_MEM_SIZE
> -	ram     : ORIGIN = CONFIG_SYS_MONITOR_BASE, LENGTH = CONFIG_SYS_MONITOR_LEN
>  # define ram_code ram
>  # define ram_data ram
> +	ram (rwx)    : ORIGIN = CONFIG_SYS_MONITOR_BASE, LENGTH = CONFIG_SYS_MONITOR_LEN
> +	l1_code : ORIGIN = L1_CODE_ORIGIN,         LENGTH = L1_INST_SRAM_SIZE
> +	l1_data : ORIGIN = L1_DATA_B_SRAM,         LENGTH = L1_DATA_B_SRAM_SIZE
>  #else
>  # define ram_code l1_code
>  # define ram_data l1_data
> +	l1_code (rx)  : ORIGIN = L1_CODE_ORIGIN,          LENGTH = L1_INST_SRAM_SIZE
> +	l1_data (!rx) : ORIGIN = L1_DATA_B_SRAM,         LENGTH = L1_DATA_B_SRAM_SIZE
>  #endif
> -	l1_code : ORIGIN = L1_CODE_ORIGIN,          LENGTH = L1_INST_SRAM_SIZE
> -	l1_data : ORIGIN = L1_DATA_B_SRAM,          LENGTH = L1_DATA_B_SRAM_SIZE
>  }

i don't understand ... why is this change necessary ?

i'm not sure the attr's are correct ... the manual says "r" is "read-only"
while "w" is "read/write".  so i'd expect:
	ram (wx)
	l1_code (x)
	l1_data (w)

> +	INCLUDE u-boot-common.lds

since we preprocess our linker scripts now, i'd suggest using #include rather
than INCLUDE

> --- /dev/null
> +++ b/u-boot-common.lds
>
> +	. = ALIGN(4);
> +	__u_boot_cmd_start = .;
> +	.u_boot_cmd : {
> +		KEEP(*(.u_boot_cmd))
> +	}
> +	__u_boot_cmd_end = .;

rather than storing this in the top level dir, i'd suggest going the linux
route and add a include/asm-generic/u-boot.lds.h header.  then we can migrate
people over time and piece by piece without having to worry about breaking
everyone at once ...

that also allows us to cater to arches (like Blackfin) that have a symbol prefix
(underscore in the Blackfin case).  add the VMLINUX_SYMBOL() macro, and then
this code will look like:
	VMLINUX_SYMBOL(__u_boot_cmd_end) = .;
(i picked VMLINUX_SYMBOL() only because that's what Linux already has defined)
-mike
Graeme Russ Feb. 5, 2012, 10:07 p.m. UTC | #2
Hi Mike,

On Mon, Feb 6, 2012 at 8:01 AM, Mike Frysinger <vapier@gentoo.org> wrote:
> On Saturday 04 February 2012 22:02:45 Troy Kisky wrote:
>
> since we preprocess our linker scripts now, i'd suggest using #include rather
> than INCLUDE

+1


>> --- /dev/null
>> +++ b/u-boot-common.lds
>>
>> +     . = ALIGN(4);
>> +     __u_boot_cmd_start = .;
>> +     .u_boot_cmd : {
>> +             KEEP(*(.u_boot_cmd))
>> +     }
>> +     __u_boot_cmd_end = .;
>
> rather than storing this in the top level dir, i'd suggest going the linux
> route and add a include/asm-generic/u-boot.lds.h header.  then we can migrate

Except it's not a 'header' :) - include/asm-generic/u-boot.lds (or maybe
u-boot.lds.common) should be what is included in u-boot.lds and
include/asm-generic/u-boot.lds.h should be the externs for the symbols
exported from the linker script

> people over time and piece by piece without having to worry about breaking
> everyone at once ...

Here we go again ;) - Queue the 'what incentive will maintainers have to
migrate to the common case' discussion...

On a (related) side not, do we need to lay down some ground rules for
migrating to 'common' case? There seems to be a fair amount of new 'common
code' or 'common architecture' being developed, but only being applied to
one arch. I'm guilty too - my init sequence cleanups which lay the
foundation for a common init sequence are only implemented for x86.

> that also allows us to cater to arches (like Blackfin) that have a symbol prefix
> (underscore in the Blackfin case).  add the VMLINUX_SYMBOL() macro, and then
> this code will look like:
>        VMLINUX_SYMBOL(__u_boot_cmd_end) = .;
> (i picked VMLINUX_SYMBOL() only because that's what Linux already has defined)

How about U_BOOT_LDS_SYMBOL()?

Regards,

Graeme
Mike Frysinger Feb. 6, 2012, 3:24 a.m. UTC | #3
On Sunday 05 February 2012 17:07:41 Graeme Russ wrote:
> On Mon, Feb 6, 2012 at 8:01 AM, Mike Frysinger wrote:
> > On Saturday 04 February 2012 22:02:45 Troy Kisky wrote:
> >> --- /dev/null
> >> +++ b/u-boot-common.lds
> >> 
> >> +     . = ALIGN(4);
> >> +     __u_boot_cmd_start = .;
> >> +     .u_boot_cmd : {
> >> +             KEEP(*(.u_boot_cmd))
> >> +     }
> >> +     __u_boot_cmd_end = .;
> > 
> > rather than storing this in the top level dir, i'd suggest going the
> > linux route and add a include/asm-generic/u-boot.lds.h header.  then we
> > can migrate
> 
> Except it's not a 'header' :)

what Troy has posted isn't a header, but what i'm suggesting is.  Linux's 
vmlinux.lds.h does things like:
	#define DISCARDS \
		/DISCARDS/ : { \
		EXIT_TEXT \
		*(.discard) \
		}

and then the arch linker scripts just use:
	DISCARDS

> > people over time and piece by piece without having to worry about
> > breaking everyone at once ...
> 
> Here we go again ;) - Queue the 'what incentive will maintainers have to
> migrate to the common case' discussion...

it isn't just that.  i don't think a single u-boot.lds for every arch is 
feasible.  the kernel method allows all the common pieces to be in a common 
header, and then the arches to expand the specific pieces in the specific order.
-mike
Graeme Russ Feb. 6, 2012, 3:43 a.m. UTC | #4
Hi Mike,

On Mon, Feb 6, 2012 at 2:24 PM, Mike Frysinger <vapier@gentoo.org> wrote:
> On Sunday 05 February 2012 17:07:41 Graeme Russ wrote:
>> On Mon, Feb 6, 2012 at 8:01 AM, Mike Frysinger wrote:
>> > On Saturday 04 February 2012 22:02:45 Troy Kisky wrote:
>> >> --- /dev/null
>> >> +++ b/u-boot-common.lds
>> >>
>> >> +     . = ALIGN(4);
>> >> +     __u_boot_cmd_start = .;
>> >> +     .u_boot_cmd : {
>> >> +             KEEP(*(.u_boot_cmd))
>> >> +     }
>> >> +     __u_boot_cmd_end = .;
>> >
>> > rather than storing this in the top level dir, i'd suggest going the
>> > linux route and add a include/asm-generic/u-boot.lds.h header.  then we
>> > can migrate
>>
>> Except it's not a 'header' :)
>
> what Troy has posted isn't a header, but what i'm suggesting is.  Linux's
> vmlinux.lds.h does things like:
>        #define DISCARDS \
>                /DISCARDS/ : { \
>                EXIT_TEXT \
>                *(.discard) \
>                }
>
> and then the arch linker scripts just use:
>        DISCARDS

Ah, I see. So we could have

#define LDS_U_BOOT_CMD \
	__u_boot_cmd_start = .; \
	.u_boot_cmd : { \
		KEEP(*(.u_boot_cmd)) \
	} \
	__u_boot_cmd_end = .;

And each arch linker script would just have

	. = ALIGN(4);
	LDS_U_BOOT_CMD

Or some such


>> > people over time and piece by piece without having to worry about
>> > breaking everyone at once ...
>>
>> Here we go again ;) - Queue the 'what incentive will maintainers have to
>> migrate to the common case' discussion...
>
> it isn't just that.  i don't think a single u-boot.lds for every arch is
> feasible.  the kernel method allows all the common pieces to be in a common
> header, and then the arches to expand the specific pieces in the specific order.

I can't say I'm a fan of the 'common bits' approach - It really does reduce
the readability of the linker script IMHO. It took me long enough to deal
with the fact that the lds file is pre-processed for TEXT_BASE ;)

Regards,

Graeme
Mike Frysinger Feb. 6, 2012, 4:27 a.m. UTC | #5
On Sunday 05 February 2012 22:43:33 Graeme Russ wrote:
> On Mon, Feb 6, 2012 at 2:24 PM, Mike Frysinger wrote:
> > it isn't just that.  i don't think a single u-boot.lds for every arch is
> > feasible.  the kernel method allows all the common pieces to be in a
> > common header, and then the arches to expand the specific pieces in the
> > specific order.
> 
> I can't say I'm a fan of the 'common bits' approach - It really does reduce
> the readability of the linker script IMHO. It took me long enough to deal
> with the fact that the lds file is pre-processed for TEXT_BASE ;)

yes, it does make the linker scripts a bit more opaque, but since each arch is 
doing something unique, it's fairly hard to merge them into a single file.  the 
Linux approach represents what we can do in the real world -- get beyond 
board-specific linker scripts and to one linker script per arch.  then the 
vmlinux.lds.h merges a lot of the stuff that can be shared between arches.

i've unified all the board/SoC linker scripts for Blackfin and now there is just 
one -- arch/blackfin/cpu/u-boot.lds.
-mike
Graeme Russ Feb. 6, 2012, 4:34 a.m. UTC | #6
Hi Mike,

On Mon, Feb 6, 2012 at 3:27 PM, Mike Frysinger <vapier@gentoo.org> wrote:
> On Sunday 05 February 2012 22:43:33 Graeme Russ wrote:
>> On Mon, Feb 6, 2012 at 2:24 PM, Mike Frysinger wrote:
>> > it isn't just that.  i don't think a single u-boot.lds for every arch is
>> > feasible.  the kernel method allows all the common pieces to be in a
>> > common header, and then the arches to expand the specific pieces in the
>> > specific order.
>>
>> I can't say I'm a fan of the 'common bits' approach - It really does reduce
>> the readability of the linker script IMHO. It took me long enough to deal
>> with the fact that the lds file is pre-processed for TEXT_BASE ;)
>
> yes, it does make the linker scripts a bit more opaque, but since each arch is
> doing something unique, it's fairly hard to merge them into a single file.  the
> Linux approach represents what we can do in the real world -- get beyond
> board-specific linker scripts and to one linker script per arch.  then the
> vmlinux.lds.h merges a lot of the stuff that can be shared between arches.
>
> i've unified all the board/SoC linker scripts for Blackfin and now there is just
> one -- arch/blackfin/cpu/u-boot.lds.

Ditto for x86

Maybe we should wait until all the arches have unified linker scripts
before looking at a global script (parallels with 'skip relocation')?

Regards,

Graeme
Mike Frysinger Feb. 6, 2012, 5:48 a.m. UTC | #7
On Sunday 05 February 2012 23:34:27 Graeme Russ wrote:
> On Mon, Feb 6, 2012 at 3:27 PM, Mike Frysinger wrote:
> > On Sunday 05 February 2012 22:43:33 Graeme Russ wrote:
> >> On Mon, Feb 6, 2012 at 2:24 PM, Mike Frysinger wrote:
> >> > it isn't just that.  i don't think a single u-boot.lds for every arch
> >> > is feasible.  the kernel method allows all the common pieces to be in
> >> > a common header, and then the arches to expand the specific pieces in
> >> > the specific order.
> >> 
> >> I can't say I'm a fan of the 'common bits' approach - It really does
> >> reduce the readability of the linker script IMHO. It took me long
> >> enough to deal with the fact that the lds file is pre-processed for
> >> TEXT_BASE ;)
> > 
> > yes, it does make the linker scripts a bit more opaque, but since each
> > arch is doing something unique, it's fairly hard to merge them into a
> > single file.  the Linux approach represents what we can do in the real
> > world -- get beyond board-specific linker scripts and to one linker
> > script per arch.  then the vmlinux.lds.h merges a lot of the stuff that
> > can be shared between arches.
> > 
> > i've unified all the board/SoC linker scripts for Blackfin and now there
> > is just one -- arch/blackfin/cpu/u-boot.lds.
> 
> Ditto for x86
> 
> Maybe we should wait until all the arches have unified linker scripts
> before looking at a global script (parallels with 'skip relocation')?

i don't think we need to wait for that.  if we have a header with defines, then 
any linker script can be converted to that.  the arches that have cleaned up 
can convert over now.

seems like the big offenders in the tree are arm/m68k/mips/ppc.  i have a hard 
time seeing them merging into their arch/ anytime soon.
-mike
diff mbox

Patch

diff --git a/arch/arm/cpu/arm1136/u-boot.lds b/arch/arm/cpu/arm1136/u-boot.lds
index d1e2851..cd7927c 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);
 
diff --git a/arch/arm/cpu/arm1176/u-boot.lds b/arch/arm/cpu/arm1176/u-boot.lds
index 27d6638..9852b0a 100644
--- a/arch/arm/cpu/arm1176/u-boot.lds
+++ b/arch/arm/cpu/arm1176/u-boot.lds
@@ -43,10 +43,7 @@  SECTIONS
 		*(.data)
 	}
 
-	. = .;
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN(4);
 
diff --git a/arch/arm/cpu/arm720t/u-boot.lds b/arch/arm/cpu/arm720t/u-boot.lds
index 9370fad..647e457 100644
--- a/arch/arm/cpu/arm720t/u-boot.lds
+++ b/arch/arm/cpu/arm720t/u-boot.lds
@@ -42,12 +42,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);
 
diff --git a/arch/arm/cpu/arm920t/ep93xx/u-boot.lds b/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
index dc6ba34..7a8c3af 100644
--- a/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
+++ b/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
@@ -47,10 +47,7 @@  SECTIONS
 	. = ALIGN(4);
 	.got : { *(.got) }
 
-	. = .;
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN(4);
 	__bss_start = .;
diff --git a/arch/arm/cpu/arm920t/u-boot.lds b/arch/arm/cpu/arm920t/u-boot.lds
index 17ba604..b6c3e59 100644
--- a/arch/arm/cpu/arm920t/u-boot.lds
+++ b/arch/arm/cpu/arm920t/u-boot.lds
@@ -51,12 +51,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);
 
diff --git a/arch/arm/cpu/arm925t/u-boot.lds b/arch/arm/cpu/arm925t/u-boot.lds
index 64e76f5..c73b5c9 100644
--- a/arch/arm/cpu/arm925t/u-boot.lds
+++ b/arch/arm/cpu/arm925t/u-boot.lds
@@ -46,12 +46,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);
 
diff --git a/arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds b/arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds
index 0fccd52..6a7d4c7 100644
--- a/arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds
+++ b/arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds
@@ -49,10 +49,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);
 
diff --git a/arch/arm/cpu/arm926ejs/u-boot.lds b/arch/arm/cpu/arm926ejs/u-boot.lds
index 1480e0c..3cf1840 100644
--- a/arch/arm/cpu/arm926ejs/u-boot.lds
+++ b/arch/arm/cpu/arm926ejs/u-boot.lds
@@ -43,12 +43,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);
 
diff --git a/arch/arm/cpu/arm946es/u-boot.lds b/arch/arm/cpu/arm946es/u-boot.lds
index ff938e4..7311292 100644
--- a/arch/arm/cpu/arm946es/u-boot.lds
+++ b/arch/arm/cpu/arm946es/u-boot.lds
@@ -43,12 +43,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);
 
diff --git a/arch/arm/cpu/arm_intcm/u-boot.lds b/arch/arm/cpu/arm_intcm/u-boot.lds
index f4a146c..938c597 100644
--- a/arch/arm/cpu/arm_intcm/u-boot.lds
+++ b/arch/arm/cpu/arm_intcm/u-boot.lds
@@ -43,12 +43,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);
 
diff --git a/arch/arm/cpu/armv7/u-boot.lds b/arch/arm/cpu/armv7/u-boot.lds
index 40ecf78..8ed42c4 100644
--- a/arch/arm/cpu/armv7/u-boot.lds
+++ b/arch/arm/cpu/armv7/u-boot.lds
@@ -31,6 +31,7 @@  SECTIONS
 {
 	. = 0x00000000;
 
+
 	. = ALIGN(4);
 	.text	:
 	{
@@ -46,12 +47,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);
 
diff --git a/arch/arm/cpu/ixp/u-boot.lds b/arch/arm/cpu/ixp/u-boot.lds
index 7199de4..c613e47 100644
--- a/arch/arm/cpu/ixp/u-boot.lds
+++ b/arch/arm/cpu/ixp/u-boot.lds
@@ -43,12 +43,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);
 
diff --git a/arch/arm/cpu/lh7a40x/u-boot.lds b/arch/arm/cpu/lh7a40x/u-boot.lds
index 30934ff..794635f 100644
--- a/arch/arm/cpu/lh7a40x/u-boot.lds
+++ b/arch/arm/cpu/lh7a40x/u-boot.lds
@@ -43,12 +43,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);
 
diff --git a/arch/arm/cpu/pxa/u-boot.lds b/arch/arm/cpu/pxa/u-boot.lds
index e86e781..b7cbb93 100644
--- a/arch/arm/cpu/pxa/u-boot.lds
+++ b/arch/arm/cpu/pxa/u-boot.lds
@@ -43,12 +43,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);
 
diff --git a/arch/arm/cpu/s3c44b0/u-boot.lds b/arch/arm/cpu/s3c44b0/u-boot.lds
index 74a259c..8613ef6 100644
--- a/arch/arm/cpu/s3c44b0/u-boot.lds
+++ b/arch/arm/cpu/s3c44b0/u-boot.lds
@@ -43,12 +43,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);
 
diff --git a/arch/arm/cpu/sa1100/u-boot.lds b/arch/arm/cpu/sa1100/u-boot.lds
index e6381da..3cc2db4 100644
--- a/arch/arm/cpu/sa1100/u-boot.lds
+++ b/arch/arm/cpu/sa1100/u-boot.lds
@@ -46,12 +46,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);
 
diff --git a/arch/avr32/cpu/u-boot.lds b/arch/avr32/cpu/u-boot.lds
index 0e532f2..b52f668 100644
--- a/arch/avr32/cpu/u-boot.lds
+++ b/arch/avr32/cpu/u-boot.lds
@@ -45,13 +45,7 @@  SECTIONS
 		*(.data)
 		*(.data.*)
 	}
-
-	. = ALIGN(4);
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : {
-		KEEP(*(.u_boot_cmd))
-	}
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN(4);
 	_got = .;
diff --git a/arch/blackfin/cpu/u-boot.lds b/arch/blackfin/cpu/u-boot.lds
index 2b8d285..11545bc 100644
--- a/arch/blackfin/cpu/u-boot.lds
+++ b/arch/blackfin/cpu/u-boot.lds
@@ -61,15 +61,17 @@  OUTPUT_ARCH(bfin)
 MEMORY
 {
 #if CONFIG_MEM_SIZE
-	ram     : ORIGIN = CONFIG_SYS_MONITOR_BASE, LENGTH = CONFIG_SYS_MONITOR_LEN
 # define ram_code ram
 # define ram_data ram
+	ram (rwx)    : ORIGIN = CONFIG_SYS_MONITOR_BASE, LENGTH = CONFIG_SYS_MONITOR_LEN
+	l1_code : ORIGIN = L1_CODE_ORIGIN,          LENGTH = L1_INST_SRAM_SIZE
+	l1_data : ORIGIN = L1_DATA_B_SRAM,          LENGTH = L1_DATA_B_SRAM_SIZE
 #else
 # define ram_code l1_code
 # define ram_data l1_data
+	l1_code (rx)  : ORIGIN = L1_CODE_ORIGIN,          LENGTH = L1_INST_SRAM_SIZE
+	l1_data (!rx) : ORIGIN = L1_DATA_B_SRAM,          LENGTH = L1_DATA_B_SRAM_SIZE
 #endif
-	l1_code : ORIGIN = L1_CODE_ORIGIN,          LENGTH = L1_INST_SRAM_SIZE
-	l1_data : ORIGIN = L1_DATA_B_SRAM,          LENGTH = L1_DATA_B_SRAM_SIZE
 }
 
 ENTRY(_start)
@@ -112,12 +114,7 @@  SECTIONS
 		CONSTRUCTORS
 	} >ram_data
 
-	.u_boot_cmd :
-	{
-		___u_boot_cmd_start = .;
-		*(.u_boot_cmd)
-		___u_boot_cmd_end = .;
-	} >ram_data
+	INCLUDE u-boot-common.lds
 
 	.text_l1 :
 	{
diff --git a/arch/nds32/cpu/n1213/u-boot.lds b/arch/nds32/cpu/n1213/u-boot.lds
index 1903420..1417827 100644
--- a/arch/nds32/cpu/n1213/u-boot.lds
+++ b/arch/nds32/cpu/n1213/u-boot.lds
@@ -51,10 +51,7 @@  SECTIONS
 		__got_end = .;
 	}
 
-	. = .;
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN(4);
 
diff --git a/arch/nios2/cpu/u-boot.lds b/arch/nios2/cpu/u-boot.lds
index 4856bd3..17ab214 100644
--- a/arch/nios2/cpu/u-boot.lds
+++ b/arch/nios2/cpu/u-boot.lds
@@ -45,13 +45,9 @@  SECTIONS
 	 * the initialization code relocates the command table as
 	 * well -- admittedly, this is just pure laziness ;-)
 	 */
-	__u_boot_cmd_start = .;
-	.u_boot_cmd :
-	{
-	  *(.u_boot_cmd)
-	}
+	INCLUDE u-boot-common.lds
+
 	. = ALIGN(4);
-	__u_boot_cmd_end = .;
 
 	/* INIT DATA sections - "Small" data (see the gcc -G option)
 	 * is always gp-relative. Here we make all init data sections
diff --git a/arch/powerpc/cpu/74xx_7xx/u-boot.lds b/arch/powerpc/cpu/74xx_7xx/u-boot.lds
index 24823cd..219e265 100644
--- a/arch/powerpc/cpu/74xx_7xx/u-boot.lds
+++ b/arch/powerpc/cpu/74xx_7xx/u-boot.lds
@@ -61,16 +61,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc512x/u-boot.lds b/arch/powerpc/cpu/mpc512x/u-boot.lds
index 7a4d927..3d0f805 100644
--- a/arch/powerpc/cpu/mpc512x/u-boot.lds
+++ b/arch/powerpc/cpu/mpc512x/u-boot.lds
@@ -56,16 +56,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc5xx/u-boot.lds b/arch/powerpc/cpu/mpc5xx/u-boot.lds
index e02b213..91c4957 100644
--- a/arch/powerpc/cpu/mpc5xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc5xx/u-boot.lds
@@ -64,16 +64,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds b/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds
index 0c6c54e..c0d8976 100644
--- a/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds
+++ b/arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc5xxx/u-boot.lds b/arch/powerpc/cpu/mpc5xxx/u-boot.lds
index 5dcaec1..5370c41 100644
--- a/arch/powerpc/cpu/mpc5xxx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc5xxx/u-boot.lds
@@ -59,16 +59,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc8220/u-boot.lds b/arch/powerpc/cpu/mpc8220/u-boot.lds
index 39bb42e..a045604 100644
--- a/arch/powerpc/cpu/mpc8220/u-boot.lds
+++ b/arch/powerpc/cpu/mpc8220/u-boot.lds
@@ -58,16 +58,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc824x/u-boot.lds b/arch/powerpc/cpu/mpc824x/u-boot.lds
index b30ce76..5181044 100644
--- a/arch/powerpc/cpu/mpc824x/u-boot.lds
+++ b/arch/powerpc/cpu/mpc824x/u-boot.lds
@@ -59,16 +59,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc8260/u-boot.lds b/arch/powerpc/cpu/mpc8260/u-boot.lds
index 60b71ec..853f413 100644
--- a/arch/powerpc/cpu/mpc8260/u-boot.lds
+++ b/arch/powerpc/cpu/mpc8260/u-boot.lds
@@ -58,16 +58,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc83xx/u-boot.lds b/arch/powerpc/cpu/mpc83xx/u-boot.lds
index 2f4b9ad..3623783 100644
--- a/arch/powerpc/cpu/mpc83xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc83xx/u-boot.lds
@@ -57,16 +57,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds b/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
index 04bc731..1e571d0 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
@@ -68,15 +68,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot.lds b/arch/powerpc/cpu/mpc85xx/u-boot.lds
index efe34b7..976731e 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot.lds
@@ -76,15 +76,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/mpc86xx/u-boot.lds b/arch/powerpc/cpu/mpc86xx/u-boot.lds
index 121e529..f87f1da 100644
--- a/arch/powerpc/cpu/mpc86xx/u-boot.lds
+++ b/arch/powerpc/cpu/mpc86xx/u-boot.lds
@@ -63,15 +63,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/arch/powerpc/cpu/ppc4xx/u-boot.lds b/arch/powerpc/cpu/ppc4xx/u-boot.lds
index 2466b79..85bc286 100644
--- a/arch/powerpc/cpu/ppc4xx/u-boot.lds
+++ b/arch/powerpc/cpu/ppc4xx/u-boot.lds
@@ -77,15 +77,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/arch/sandbox/cpu/u-boot.lds b/arch/sandbox/cpu/u-boot.lds
index 2d2e50f..1149641 100644
--- a/arch/sandbox/cpu/u-boot.lds
+++ b/arch/sandbox/cpu/u-boot.lds
@@ -24,9 +24,7 @@ 
 
 SECTIONS
 {
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
   __bss_start = .;
 
 }
diff --git a/arch/sh/cpu/sh2/u-boot.lds b/arch/sh/cpu/sh2/u-boot.lds
index b86a822..258f6ce 100644
--- a/arch/sh/cpu/sh2/u-boot.lds
+++ b/arch/sh/cpu/sh2/u-boot.lds
@@ -72,13 +72,8 @@  SECTIONS
 	}
 	PROVIDE (_egot = .);
 
-	PROVIDE (__u_boot_cmd_start = .);
-	.u_boot_cmd :
-	{
-		*(.u_boot_cmd)
-		. = ALIGN(4);
-	}
-	PROVIDE (__u_boot_cmd_end = .);
+	INCLUDE u-boot-common.lds
+	. = ALIGN(4);
 
 	PROVIDE (reloc_dst_end = .);
 
diff --git a/arch/sh/cpu/sh3/u-boot.lds b/arch/sh/cpu/sh3/u-boot.lds
index 9bf8503..e2674fd 100644
--- a/arch/sh/cpu/sh3/u-boot.lds
+++ b/arch/sh/cpu/sh3/u-boot.lds
@@ -78,13 +78,9 @@  SECTIONS
 	}
 	PROVIDE (_egot = .);
 
-	PROVIDE (__u_boot_cmd_start = .);
-	.u_boot_cmd :
-	{
-		*(.u_boot_cmd)
-		. = ALIGN(4);
-	}
-	PROVIDE (__u_boot_cmd_end = .);
+	INCLUDE u-boot-common.lds
+
+	. = ALIGN(4);
 
 	PROVIDE (reloc_dst_end = .);
 	/* _reloc_dst_end = .; */
diff --git a/arch/sh/cpu/sh4/u-boot.lds b/arch/sh/cpu/sh4/u-boot.lds
index d9c70bc..b656711 100644
--- a/arch/sh/cpu/sh4/u-boot.lds
+++ b/arch/sh/cpu/sh4/u-boot.lds
@@ -75,14 +75,9 @@  SECTIONS
 	}
 	PROVIDE (_egot = .);
 
-	PROVIDE (__u_boot_cmd_start = .);
-	.u_boot_cmd :
-	{
-		*(.u_boot_cmd)
-		. = ALIGN(4);
-	}
-	PROVIDE (__u_boot_cmd_end = .);
+	INCLUDE u-boot-common.lds
 
+	. = ALIGN(4);
 	PROVIDE (reloc_dst_end = .);
 	/* _reloc_dst_end = .; */
 
diff --git a/arch/x86/cpu/u-boot.lds b/arch/x86/cpu/u-boot.lds
index fe28030..cb085cb 100644
--- a/arch/x86/cpu/u-boot.lds
+++ b/arch/x86/cpu/u-boot.lds
@@ -32,11 +32,7 @@  SECTIONS
 	__text_start = .;
 	.text  : { *(.text*); }
 
-	. = ALIGN(4);
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	. = ALIGN(4);
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN(4);
 	.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
diff --git a/board/BuS/EB+MCF-EV123/u-boot.lds b/board/BuS/EB+MCF-EV123/u-boot.lds
index 4ba1964..99fc5c8 100644
--- a/board/BuS/EB+MCF-EV123/u-boot.lds
+++ b/board/BuS/EB+MCF-EV123/u-boot.lds
@@ -64,15 +64,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/LEOX/elpt860/u-boot.lds b/board/LEOX/elpt860/u-boot.lds
index 5aaf6b3..b26d711 100644
--- a/board/LEOX/elpt860/u-boot.lds
+++ b/board/LEOX/elpt860/u-boot.lds
@@ -85,15 +85,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/LEOX/elpt860/u-boot.lds.debug b/board/LEOX/elpt860/u-boot.lds.debug
index 92901b1..0c797a9 100644
--- a/board/LEOX/elpt860/u-boot.lds.debug
+++ b/board/LEOX/elpt860/u-boot.lds.debug
@@ -115,9 +115,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/RPXClassic/u-boot.lds b/board/RPXClassic/u-boot.lds
index d0b60cf..a6b6939 100644
--- a/board/RPXClassic/u-boot.lds
+++ b/board/RPXClassic/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/RPXClassic/u-boot.lds.debug b/board/RPXClassic/u-boot.lds.debug
index 99c48f2..706211c 100644
--- a/board/RPXClassic/u-boot.lds.debug
+++ b/board/RPXClassic/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/RPXlite/u-boot.lds b/board/RPXlite/u-boot.lds
index d0b60cf..a6b6939 100644
--- a/board/RPXlite/u-boot.lds
+++ b/board/RPXlite/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/RPXlite/u-boot.lds.debug b/board/RPXlite/u-boot.lds.debug
index 99c48f2..706211c 100644
--- a/board/RPXlite/u-boot.lds.debug
+++ b/board/RPXlite/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/RPXlite_dw/u-boot.lds b/board/RPXlite_dw/u-boot.lds
index d0b60cf..a6b6939 100644
--- a/board/RPXlite_dw/u-boot.lds
+++ b/board/RPXlite_dw/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/RPXlite_dw/u-boot.lds.debug b/board/RPXlite_dw/u-boot.lds.debug
index 4491edd..11710ca 100644
--- a/board/RPXlite_dw/u-boot.lds.debug
+++ b/board/RPXlite_dw/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/RRvision/u-boot.lds b/board/RRvision/u-boot.lds
index 8385373..5a1878e 100644
--- a/board/RRvision/u-boot.lds
+++ b/board/RRvision/u-boot.lds
@@ -70,16 +70,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/actux1/u-boot.lds b/board/actux1/u-boot.lds
index 9dbaa6f..834aaf5 100644
--- a/board/actux1/u-boot.lds
+++ b/board/actux1/u-boot.lds
@@ -53,12 +53,8 @@  SECTIONS
 	.got : {
 		*(.got)
 	}
-	. =.;
-	__u_boot_cmd_start =.;
-	.u_boot_cmd : {
-		*(.u_boot_cmd)
-	}
-	__u_boot_cmd_end =.;
+
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN (4);
 	.rel.dyn : {
diff --git a/board/actux2/u-boot.lds b/board/actux2/u-boot.lds
index 3575ed9..918e8d5 100644
--- a/board/actux2/u-boot.lds
+++ b/board/actux2/u-boot.lds
@@ -53,12 +53,8 @@  SECTIONS
 	.got : {
 		*(.got)
 	}
-	. =.;
-	__u_boot_cmd_start =.;
-	.u_boot_cmd : {
-		*(.u_boot_cmd)
-	}
-	__u_boot_cmd_end =.;
+
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN (4);
 	.rel.dyn : {
diff --git a/board/actux3/u-boot.lds b/board/actux3/u-boot.lds
index 35aab29..77b0880 100644
--- a/board/actux3/u-boot.lds
+++ b/board/actux3/u-boot.lds
@@ -53,12 +53,8 @@  SECTIONS
 	.got : {
 		*(.got)
 	}
-	. =.;
-	__u_boot_cmd_start =.;
-	.u_boot_cmd : {
-		*(.u_boot_cmd)
-	}
-	__u_boot_cmd_end =.;
+
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN (4);
 	.rel.dyn : {
diff --git a/board/adder/u-boot.lds b/board/adder/u-boot.lds
index a762769..9fb8133 100644
--- a/board/adder/u-boot.lds
+++ b/board/adder/u-boot.lds
@@ -61,16 +61,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/altera/nios2-generic/u-boot.lds b/board/altera/nios2-generic/u-boot.lds
index 88ced62..e0d9528 100644
--- a/board/altera/nios2-generic/u-boot.lds
+++ b/board/altera/nios2-generic/u-boot.lds
@@ -46,13 +46,9 @@  SECTIONS
 	 * the initialization code relocates the command table as
 	 * well -- admittedly, this is just pure laziness ;-)
 	 */
-	__u_boot_cmd_start = .;
-	.u_boot_cmd :
-	{
-	  *(.u_boot_cmd)
-	}
+	INCLUDE u-boot-common.lds
+
 	. = ALIGN(4);
-	__u_boot_cmd_end = .;
 
 	/* INIT DATA sections - "Small" data (see the gcc -G option)
 	 * is always gp-relative. Here we make all init data sections
diff --git a/board/amcc/acadia/u-boot-nand.lds b/board/amcc/acadia/u-boot-nand.lds
index ab67de2..d1215cd 100644
--- a/board/amcc/acadia/u-boot-nand.lds
+++ b/board/amcc/acadia/u-boot-nand.lds
@@ -71,16 +71,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/amcc/bamboo/u-boot-nand.lds b/board/amcc/bamboo/u-boot-nand.lds
index 3ad8709..eee17ed 100644
--- a/board/amcc/bamboo/u-boot-nand.lds
+++ b/board/amcc/bamboo/u-boot-nand.lds
@@ -72,16 +72,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/amcc/canyonlands/u-boot-nand.lds b/board/amcc/canyonlands/u-boot-nand.lds
index 76f89f1..1a54c32 100644
--- a/board/amcc/canyonlands/u-boot-nand.lds
+++ b/board/amcc/canyonlands/u-boot-nand.lds
@@ -72,16 +72,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/amcc/kilauea/u-boot-nand.lds b/board/amcc/kilauea/u-boot-nand.lds
index ab67de2..d1215cd 100644
--- a/board/amcc/kilauea/u-boot-nand.lds
+++ b/board/amcc/kilauea/u-boot-nand.lds
@@ -71,16 +71,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/amcc/sequoia/u-boot-nand.lds b/board/amcc/sequoia/u-boot-nand.lds
index 07ae8b1..5055dcd 100644
--- a/board/amcc/sequoia/u-boot-nand.lds
+++ b/board/amcc/sequoia/u-boot-nand.lds
@@ -72,16 +72,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/amcc/sequoia/u-boot-ram.lds b/board/amcc/sequoia/u-boot-ram.lds
index 423400a..d3805b6 100644
--- a/board/amcc/sequoia/u-boot-ram.lds
+++ b/board/amcc/sequoia/u-boot-ram.lds
@@ -63,16 +63,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/amirix/ap1000/u-boot.lds b/board/amirix/ap1000/u-boot.lds
index cd8f5ce..27b87cb 100644
--- a/board/amirix/ap1000/u-boot.lds
+++ b/board/amirix/ap1000/u-boot.lds
@@ -67,14 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/astro/mcf5373l/u-boot.lds b/board/astro/mcf5373l/u-boot.lds
index a1d8e0f..7aa98b4 100644
--- a/board/astro/mcf5373l/u-boot.lds
+++ b/board/astro/mcf5373l/u-boot.lds
@@ -108,16 +108,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/c2mon/u-boot.lds b/board/c2mon/u-boot.lds
index b9b8e3c..12da280 100644
--- a/board/c2mon/u-boot.lds
+++ b/board/c2mon/u-boot.lds
@@ -73,16 +73,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/c2mon/u-boot.lds.debug b/board/c2mon/u-boot.lds.debug
index c771102..03c0c24 100644
--- a/board/c2mon/u-boot.lds.debug
+++ b/board/c2mon/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/cobra5272/u-boot.lds b/board/cobra5272/u-boot.lds
index c4039ed..ad9fbd2 100644
--- a/board/cobra5272/u-boot.lds
+++ b/board/cobra5272/u-boot.lds
@@ -67,15 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/cogent/u-boot.lds b/board/cogent/u-boot.lds
index 2393d8d..af85c97 100644
--- a/board/cogent/u-boot.lds
+++ b/board/cogent/u-boot.lds
@@ -69,16 +69,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/cogent/u-boot.lds.debug b/board/cogent/u-boot.lds.debug
index 99c48f2..706211c 100644
--- a/board/cogent/u-boot.lds.debug
+++ b/board/cogent/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/cray/L1/u-boot.lds.debug b/board/cray/L1/u-boot.lds.debug
index fcf8ebb..240f77c 100644
--- a/board/cray/L1/u-boot.lds.debug
+++ b/board/cray/L1/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/dave/PPChameleonEVB/u-boot.lds b/board/dave/PPChameleonEVB/u-boot.lds
index 3b10114..058ffdc 100644
--- a/board/dave/PPChameleonEVB/u-boot.lds
+++ b/board/dave/PPChameleonEVB/u-boot.lds
@@ -73,15 +73,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/dbau1x00/u-boot.lds b/board/dbau1x00/u-boot.lds
index 4a59cea..dafd8a0 100644
--- a/board/dbau1x00/u-boot.lds
+++ b/board/dbau1x00/u-boot.lds
@@ -54,11 +54,7 @@  SECTIONS
 
 	.sdata  : { *(.sdata*) }
 
-	.u_boot_cmd : {
-	  __u_boot_cmd_start = .;
-	  *(.u_boot_cmd)
-	  __u_boot_cmd_end = .;
-	}
+	INCLUDE u-boot-common.lds
 
 	uboot_end_data = .;
 	num_got_entries = (__got_end - __got_start) >> 2;
diff --git a/board/dvlhost/u-boot.lds b/board/dvlhost/u-boot.lds
index 01ec390..f6f72ed 100644
--- a/board/dvlhost/u-boot.lds
+++ b/board/dvlhost/u-boot.lds
@@ -53,12 +53,8 @@  SECTIONS
 	.got : {
 		*(.got)
 	}
-	. =.;
-	__u_boot_cmd_start =.;
-	.u_boot_cmd : {
-		*(.u_boot_cmd)
-	}
-	__u_boot_cmd_end =.;
+
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN (4);
 	.rel.dyn : {
diff --git a/board/eltec/mhpc/u-boot.lds b/board/eltec/mhpc/u-boot.lds
index fd4e8a5..41d1c6f 100644
--- a/board/eltec/mhpc/u-boot.lds
+++ b/board/eltec/mhpc/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/eltec/mhpc/u-boot.lds.debug b/board/eltec/mhpc/u-boot.lds.debug
index c771102..03c0c24 100644
--- a/board/eltec/mhpc/u-boot.lds.debug
+++ b/board/eltec/mhpc/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/emk/top860/u-boot.lds b/board/emk/top860/u-boot.lds
index fb06648..a6b6939 100644
--- a/board/emk/top860/u-boot.lds
+++ b/board/emk/top860/u-boot.lds
@@ -65,17 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/emk/top860/u-boot.lds.debug b/board/emk/top860/u-boot.lds.debug
index 39807d4..5d9e8f7 100644
--- a/board/emk/top860/u-boot.lds.debug
+++ b/board/emk/top860/u-boot.lds.debug
@@ -107,9 +107,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/ep88x/u-boot.lds b/board/ep88x/u-boot.lds
index 332b35a..605effc 100644
--- a/board/ep88x/u-boot.lds
+++ b/board/ep88x/u-boot.lds
@@ -61,16 +61,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/esd/dasa_sim/u-boot.lds b/board/esd/dasa_sim/u-boot.lds
index b15948d..c41d994 100644
--- a/board/esd/dasa_sim/u-boot.lds
+++ b/board/esd/dasa_sim/u-boot.lds
@@ -72,16 +72,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/esd/pmc440/u-boot-nand.lds b/board/esd/pmc440/u-boot-nand.lds
index 71f0fd2..135518d 100644
--- a/board/esd/pmc440/u-boot-nand.lds
+++ b/board/esd/pmc440/u-boot-nand.lds
@@ -101,16 +101,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/esd/tasreg/u-boot.lds b/board/esd/tasreg/u-boot.lds
index f697ccd..e3fae2a 100644
--- a/board/esd/tasreg/u-boot.lds
+++ b/board/esd/tasreg/u-boot.lds
@@ -64,15 +64,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/esteem192e/u-boot.lds b/board/esteem192e/u-boot.lds
index 163b83d..26ee28d 100644
--- a/board/esteem192e/u-boot.lds
+++ b/board/esteem192e/u-boot.lds
@@ -74,16 +74,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/etx094/u-boot.lds b/board/etx094/u-boot.lds
index b00d2b3..ae3edde 100644
--- a/board/etx094/u-boot.lds
+++ b/board/etx094/u-boot.lds
@@ -75,16 +75,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/evb64260/u-boot.lds b/board/evb64260/u-boot.lds
index 2d031ef..d1638be 100644
--- a/board/evb64260/u-boot.lds
+++ b/board/evb64260/u-boot.lds
@@ -69,16 +69,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/fads/u-boot.lds b/board/fads/u-boot.lds
index 9ea0674..5d6cdb2 100644
--- a/board/fads/u-boot.lds
+++ b/board/fads/u-boot.lds
@@ -67,16 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/flagadm/u-boot.lds b/board/flagadm/u-boot.lds
index fd4e8a5..41d1c6f 100644
--- a/board/flagadm/u-boot.lds
+++ b/board/flagadm/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/flagadm/u-boot.lds.debug b/board/flagadm/u-boot.lds.debug
index c771102..03c0c24 100644
--- a/board/flagadm/u-boot.lds.debug
+++ b/board/flagadm/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/freescale/m5208evbe/u-boot.lds b/board/freescale/m5208evbe/u-boot.lds
index 6e39be1..f40a959 100644
--- a/board/freescale/m5208evbe/u-boot.lds
+++ b/board/freescale/m5208evbe/u-boot.lds
@@ -68,15 +68,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m52277evb/u-boot.lds b/board/freescale/m52277evb/u-boot.lds
index 3e9f4c3..fd1c051 100644
--- a/board/freescale/m52277evb/u-boot.lds
+++ b/board/freescale/m52277evb/u-boot.lds
@@ -67,15 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m5235evb/u-boot.lds b/board/freescale/m5235evb/u-boot.lds
index d39e734..234b774 100644
--- a/board/freescale/m5235evb/u-boot.lds
+++ b/board/freescale/m5235evb/u-boot.lds
@@ -67,15 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m5249evb/u-boot.lds b/board/freescale/m5249evb/u-boot.lds
index c4039ed..ad9fbd2 100644
--- a/board/freescale/m5249evb/u-boot.lds
+++ b/board/freescale/m5249evb/u-boot.lds
@@ -67,15 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m5253demo/u-boot.lds b/board/freescale/m5253demo/u-boot.lds
index cbd2831..c4e254f 100644
--- a/board/freescale/m5253demo/u-boot.lds
+++ b/board/freescale/m5253demo/u-boot.lds
@@ -68,15 +68,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m5253evbe/u-boot.lds b/board/freescale/m5253evbe/u-boot.lds
index c4039ed..ad9fbd2 100644
--- a/board/freescale/m5253evbe/u-boot.lds
+++ b/board/freescale/m5253evbe/u-boot.lds
@@ -67,15 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m5271evb/u-boot.lds b/board/freescale/m5271evb/u-boot.lds
index 4717036..813668b 100644
--- a/board/freescale/m5271evb/u-boot.lds
+++ b/board/freescale/m5271evb/u-boot.lds
@@ -67,15 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m5272c3/u-boot.lds b/board/freescale/m5272c3/u-boot.lds
index c4039ed..ad9fbd2 100644
--- a/board/freescale/m5272c3/u-boot.lds
+++ b/board/freescale/m5272c3/u-boot.lds
@@ -67,15 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m5275evb/u-boot.lds b/board/freescale/m5275evb/u-boot.lds
index 6c2dfe8..254ed11 100644
--- a/board/freescale/m5275evb/u-boot.lds
+++ b/board/freescale/m5275evb/u-boot.lds
@@ -67,15 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m5282evb/u-boot.lds b/board/freescale/m5282evb/u-boot.lds
index 4ba1964..99fc5c8 100644
--- a/board/freescale/m5282evb/u-boot.lds
+++ b/board/freescale/m5282evb/u-boot.lds
@@ -64,15 +64,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m53017evb/u-boot.lds b/board/freescale/m53017evb/u-boot.lds
index 80935f2..f74e334 100644
--- a/board/freescale/m53017evb/u-boot.lds
+++ b/board/freescale/m53017evb/u-boot.lds
@@ -70,15 +70,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m5329evb/u-boot.lds b/board/freescale/m5329evb/u-boot.lds
index 40af8bc..39ae0cc 100644
--- a/board/freescale/m5329evb/u-boot.lds
+++ b/board/freescale/m5329evb/u-boot.lds
@@ -68,15 +68,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m5373evb/u-boot.lds b/board/freescale/m5373evb/u-boot.lds
index 19342ac..2b4772f 100644
--- a/board/freescale/m5373evb/u-boot.lds
+++ b/board/freescale/m5373evb/u-boot.lds
@@ -68,15 +68,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m54451evb/u-boot.lds b/board/freescale/m54451evb/u-boot.lds
index 45924b7..472f3f5 100644
--- a/board/freescale/m54451evb/u-boot.lds
+++ b/board/freescale/m54451evb/u-boot.lds
@@ -65,15 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m54455evb/u-boot.lds b/board/freescale/m54455evb/u-boot.lds
index f341449..59611ba 100644
--- a/board/freescale/m54455evb/u-boot.lds
+++ b/board/freescale/m54455evb/u-boot.lds
@@ -65,15 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m547xevb/u-boot.lds b/board/freescale/m547xevb/u-boot.lds
index 5472689..ea3b84b 100644
--- a/board/freescale/m547xevb/u-boot.lds
+++ b/board/freescale/m547xevb/u-boot.lds
@@ -65,15 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/m548xevb/u-boot.lds b/board/freescale/m548xevb/u-boot.lds
index cf3f38c..99211d4 100644
--- a/board/freescale/m548xevb/u-boot.lds
+++ b/board/freescale/m548xevb/u-boot.lds
@@ -65,15 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/freescale/mx31ads/u-boot.lds b/board/freescale/mx31ads/u-boot.lds
index 79eb7ac..ab68a95 100644
--- a/board/freescale/mx31ads/u-boot.lds
+++ b/board/freescale/mx31ads/u-boot.lds
@@ -56,10 +56,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);
 
diff --git a/board/gaisler/gr_cpci_ax2000/u-boot.lds b/board/gaisler/gr_cpci_ax2000/u-boot.lds
index 87cb8e3..88a0213 100644
--- a/board/gaisler/gr_cpci_ax2000/u-boot.lds
+++ b/board/gaisler/gr_cpci_ax2000/u-boot.lds
@@ -84,11 +84,7 @@  SECTIONS
 	_etext = .;
 
 	/* CMD Table */
-
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	. = ALIGN(4);
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	.data	:
 	{
diff --git a/board/gaisler/gr_ep2s60/u-boot.lds b/board/gaisler/gr_ep2s60/u-boot.lds
index 2fb44aa..8b71ee6 100644
--- a/board/gaisler/gr_ep2s60/u-boot.lds
+++ b/board/gaisler/gr_ep2s60/u-boot.lds
@@ -84,11 +84,7 @@  SECTIONS
 	_etext = .;
 
 	/* CMD Table */
-
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	. = ALIGN(4);
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	.data	:
 	{
diff --git a/board/gaisler/gr_xc3s_1500/u-boot.lds b/board/gaisler/gr_xc3s_1500/u-boot.lds
index 8719e97..0600a1e 100644
--- a/board/gaisler/gr_xc3s_1500/u-boot.lds
+++ b/board/gaisler/gr_xc3s_1500/u-boot.lds
@@ -84,11 +84,7 @@  SECTIONS
 	_etext = .;
 
 	/* CMD Table */
-
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	. = ALIGN(4);
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	.data	:
 	{
diff --git a/board/gaisler/grsim/u-boot.lds b/board/gaisler/grsim/u-boot.lds
index 33890b5..f5e8b85 100644
--- a/board/gaisler/grsim/u-boot.lds
+++ b/board/gaisler/grsim/u-boot.lds
@@ -83,11 +83,7 @@  SECTIONS
 	_etext = .;
 
 	/* CMD Table */
-
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	. = ALIGN(4);
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	.data	:
 	{
diff --git a/board/gaisler/grsim_leon2/u-boot.lds b/board/gaisler/grsim_leon2/u-boot.lds
index cf6e502..f4e53ae 100644
--- a/board/gaisler/grsim_leon2/u-boot.lds
+++ b/board/gaisler/grsim_leon2/u-boot.lds
@@ -83,11 +83,7 @@  SECTIONS
 	_etext = .;
 
 	/* CMD Table */
-
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	. = ALIGN(4);
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	.data	:
 	{
diff --git a/board/gen860t/u-boot-flashenv.lds b/board/gen860t/u-boot-flashenv.lds
index 5bb6c62..ec26803 100644
--- a/board/gen860t/u-boot-flashenv.lds
+++ b/board/gen860t/u-boot-flashenv.lds
@@ -70,15 +70,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/gen860t/u-boot.lds b/board/gen860t/u-boot.lds
index be99b51..d93b805 100644
--- a/board/gen860t/u-boot.lds
+++ b/board/gen860t/u-boot.lds
@@ -70,16 +70,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/genietv/u-boot.lds b/board/genietv/u-boot.lds
index 1d66a9b..6fa88ef 100644
--- a/board/genietv/u-boot.lds
+++ b/board/genietv/u-boot.lds
@@ -79,16 +79,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/genietv/u-boot.lds.debug b/board/genietv/u-boot.lds.debug
index cfa4ef3..ca6b4d6 100644
--- a/board/genietv/u-boot.lds.debug
+++ b/board/genietv/u-boot.lds.debug
@@ -107,14 +107,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/gth2/u-boot.lds b/board/gth2/u-boot.lds
index 9fc417f..5f5afb6 100644
--- a/board/gth2/u-boot.lds
+++ b/board/gth2/u-boot.lds
@@ -54,11 +54,7 @@  SECTIONS
 
 	.sdata  : { *(.sdata*) }
 
-	.u_boot_cmd : {
-	  __u_boot_cmd_start = .;
-	  *(.u_boot_cmd)
-	  __u_boot_cmd_end = .;
-	}
+	INCLUDE u-boot-common.lds
 
 	uboot_end_data = .;
 	num_got_entries = (__got_end - __got_start) >> 2;
diff --git a/board/hermes/u-boot.lds b/board/hermes/u-boot.lds
index ca97115..2541de2 100644
--- a/board/hermes/u-boot.lds
+++ b/board/hermes/u-boot.lds
@@ -71,16 +71,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/hermes/u-boot.lds.debug b/board/hermes/u-boot.lds.debug
index 8a197de..38270a9 100644
--- a/board/hermes/u-boot.lds.debug
+++ b/board/hermes/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/hymod/u-boot.lds b/board/hymod/u-boot.lds
index 1309f20..25c61ab 100644
--- a/board/hymod/u-boot.lds
+++ b/board/hymod/u-boot.lds
@@ -109,16 +109,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/hymod/u-boot.lds.debug b/board/hymod/u-boot.lds.debug
index 99c48f2..706211c 100644
--- a/board/hymod/u-boot.lds.debug
+++ b/board/hymod/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/icu862/u-boot.lds b/board/icu862/u-boot.lds
index 93c79a6..59162d9 100644
--- a/board/icu862/u-boot.lds
+++ b/board/icu862/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/icu862/u-boot.lds.debug b/board/icu862/u-boot.lds.debug
index 91d3e67..9671b6d 100644
--- a/board/icu862/u-boot.lds.debug
+++ b/board/icu862/u-boot.lds.debug
@@ -107,14 +107,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/idmr/u-boot.lds b/board/idmr/u-boot.lds
index f697ccd..e3fae2a 100644
--- a/board/idmr/u-boot.lds
+++ b/board/idmr/u-boot.lds
@@ -64,15 +64,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/incaip/u-boot.lds b/board/incaip/u-boot.lds
index 4a59cea..dafd8a0 100644
--- a/board/incaip/u-boot.lds
+++ b/board/incaip/u-boot.lds
@@ -54,11 +54,7 @@  SECTIONS
 
 	.sdata  : { *(.sdata*) }
 
-	.u_boot_cmd : {
-	  __u_boot_cmd_start = .;
-	  *(.u_boot_cmd)
-	  __u_boot_cmd_end = .;
-	}
+	INCLUDE u-boot-common.lds
 
 	uboot_end_data = .;
 	num_got_entries = (__got_end - __got_start) >> 2;
diff --git a/board/ip860/u-boot.lds b/board/ip860/u-boot.lds
index d0b60cf..a6b6939 100644
--- a/board/ip860/u-boot.lds
+++ b/board/ip860/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/ip860/u-boot.lds.debug b/board/ip860/u-boot.lds.debug
index 2f61b11..f824ee7 100644
--- a/board/ip860/u-boot.lds.debug
+++ b/board/ip860/u-boot.lds.debug
@@ -107,14 +107,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/ivm/u-boot.lds b/board/ivm/u-boot.lds
index 1e843eb..d5f6f52 100644
--- a/board/ivm/u-boot.lds
+++ b/board/ivm/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/ivm/u-boot.lds.debug b/board/ivm/u-boot.lds.debug
index 732a46f..a7b3dde 100644
--- a/board/ivm/u-boot.lds.debug
+++ b/board/ivm/u-boot.lds.debug
@@ -107,14 +107,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/jornada/u-boot.lds b/board/jornada/u-boot.lds
index c75b21f..02484c5 100644
--- a/board/jornada/u-boot.lds
+++ b/board/jornada/u-boot.lds
@@ -45,11 +45,7 @@  SECTIONS
 	. = ALIGN(4);
 	.got : { *(.got) }
 
-
-	. = .;
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN(4);
 	__bss_start = .;
diff --git a/board/korat/u-boot-F7FC.lds b/board/korat/u-boot-F7FC.lds
index 6a017e3..1e342e4 100644
--- a/board/korat/u-boot-F7FC.lds
+++ b/board/korat/u-boot-F7FC.lds
@@ -107,16 +107,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/kup/kup4k/u-boot.lds b/board/kup/kup4k/u-boot.lds
index d0b60cf..a6b6939 100644
--- a/board/kup/kup4k/u-boot.lds
+++ b/board/kup/kup4k/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/kup/kup4k/u-boot.lds.debug b/board/kup/kup4k/u-boot.lds.debug
index 4491edd..11710ca 100644
--- a/board/kup/kup4k/u-boot.lds.debug
+++ b/board/kup/kup4k/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/kup/kup4x/u-boot.lds b/board/kup/kup4x/u-boot.lds
index d0b60cf..a6b6939 100644
--- a/board/kup/kup4x/u-boot.lds
+++ b/board/kup/kup4x/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/kup/kup4x/u-boot.lds.debug b/board/kup/kup4x/u-boot.lds.debug
index 4491edd..11710ca 100644
--- a/board/kup/kup4x/u-boot.lds.debug
+++ b/board/kup/kup4x/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/lantec/u-boot.lds b/board/lantec/u-boot.lds
index de0b355..c5d6425 100644
--- a/board/lantec/u-boot.lds
+++ b/board/lantec/u-boot.lds
@@ -74,16 +74,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/lantec/u-boot.lds.debug b/board/lantec/u-boot.lds.debug
index 856a99b..af83ad6 100644
--- a/board/lantec/u-boot.lds.debug
+++ b/board/lantec/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/lwmon/u-boot.lds b/board/lwmon/u-boot.lds
index 8bf7324..1ca90fe 100644
--- a/board/lwmon/u-boot.lds
+++ b/board/lwmon/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/lwmon/u-boot.lds.debug b/board/lwmon/u-boot.lds.debug
index 2412234..dffe7c5 100644
--- a/board/lwmon/u-boot.lds.debug
+++ b/board/lwmon/u-boot.lds.debug
@@ -107,14 +107,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/manroland/uc100/u-boot.lds b/board/manroland/uc100/u-boot.lds
index 731cec9..aac4312 100644
--- a/board/manroland/uc100/u-boot.lds
+++ b/board/manroland/uc100/u-boot.lds
@@ -68,16 +68,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/matrix_vision/mvsmr/u-boot.lds b/board/matrix_vision/mvsmr/u-boot.lds
index 57c37de..8e46a5e 100644
--- a/board/matrix_vision/mvsmr/u-boot.lds
+++ b/board/matrix_vision/mvsmr/u-boot.lds
@@ -73,16 +73,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/mbx8xx/u-boot.lds b/board/mbx8xx/u-boot.lds
index d0b60cf..a6b6939 100644
--- a/board/mbx8xx/u-boot.lds
+++ b/board/mbx8xx/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/mbx8xx/u-boot.lds.debug b/board/mbx8xx/u-boot.lds.debug
index a95c47f..5d9e8f7 100644
--- a/board/mbx8xx/u-boot.lds.debug
+++ b/board/mbx8xx/u-boot.lds.debug
@@ -107,14 +107,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/micronas/vct/u-boot.lds b/board/micronas/vct/u-boot.lds
index 3a05ef9..417661b 100644
--- a/board/micronas/vct/u-boot.lds
+++ b/board/micronas/vct/u-boot.lds
@@ -52,12 +52,7 @@  SECTIONS
 	. = ALIGN(4);
 	.sdata  : { *(.sdata*) }
 
-	. = ALIGN(4);
-	.u_boot_cmd : {
-	  __u_boot_cmd_start = .;
-	  *(.u_boot_cmd)
-	  __u_boot_cmd_end = .;
-	}
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN(4);
 	uboot_end_data = .;
diff --git a/board/ml2/u-boot.lds b/board/ml2/u-boot.lds
index 9f9ddb8..aa4b16a 100644
--- a/board/ml2/u-boot.lds
+++ b/board/ml2/u-boot.lds
@@ -63,16 +63,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/ml2/u-boot.lds.debug b/board/ml2/u-boot.lds.debug
index fcf8ebb..240f77c 100644
--- a/board/ml2/u-boot.lds.debug
+++ b/board/ml2/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/mousse/u-boot.lds b/board/mousse/u-boot.lds
index dae2cfc..3e63555 100644
--- a/board/mousse/u-boot.lds
+++ b/board/mousse/u-boot.lds
@@ -59,16 +59,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/mousse/u-boot.lds.ram b/board/mousse/u-boot.lds.ram
index b3364be..782755b 100644
--- a/board/mousse/u-boot.lds.ram
+++ b/board/mousse/u-boot.lds.ram
@@ -85,14 +85,7 @@  SECTIONS
   } > ram
   */
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-   __start___ex_table = .;
-    __ex_table : { *(__ex_table) } > ram
-    __stop___ex_table = .;
-
+  INCLUDE u-boot-common.lds
 
   .ppcenv	:
   {
diff --git a/board/mousse/u-boot.lds.rom b/board/mousse/u-boot.lds.rom
index b4b9e02..7c9040f 100644
--- a/board/mousse/u-boot.lds.rom
+++ b/board/mousse/u-boot.lds.rom
@@ -102,13 +102,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/mpl/pip405/u-boot.lds.debug b/board/mpl/pip405/u-boot.lds.debug
index fcf8ebb..240f77c 100644
--- a/board/mpl/pip405/u-boot.lds.debug
+++ b/board/mpl/pip405/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/mvblue/u-boot.lds b/board/mvblue/u-boot.lds
index 11624d2..772ec37 100644
--- a/board/mvblue/u-boot.lds
+++ b/board/mvblue/u-boot.lds
@@ -69,16 +69,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/netphone/u-boot.lds b/board/netphone/u-boot.lds
index a949e4f..310ad2d 100644
--- a/board/netphone/u-boot.lds
+++ b/board/netphone/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/netphone/u-boot.lds.debug b/board/netphone/u-boot.lds.debug
index a001f3f..be45472 100644
--- a/board/netphone/u-boot.lds.debug
+++ b/board/netphone/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/netta/u-boot.lds b/board/netta/u-boot.lds
index a949e4f..310ad2d 100644
--- a/board/netta/u-boot.lds
+++ b/board/netta/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/netta/u-boot.lds.debug b/board/netta/u-boot.lds.debug
index a001f3f..be45472 100644
--- a/board/netta/u-boot.lds.debug
+++ b/board/netta/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/netta2/u-boot.lds b/board/netta2/u-boot.lds
index a949e4f..310ad2d 100644
--- a/board/netta2/u-boot.lds
+++ b/board/netta2/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/netta2/u-boot.lds.debug b/board/netta2/u-boot.lds.debug
index a001f3f..be45472 100644
--- a/board/netta2/u-boot.lds.debug
+++ b/board/netta2/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/netvia/u-boot.lds b/board/netvia/u-boot.lds
index a949e4f..310ad2d 100644
--- a/board/netvia/u-boot.lds
+++ b/board/netvia/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/netvia/u-boot.lds.debug b/board/netvia/u-boot.lds.debug
index 6c7d698..f71dea1 100644
--- a/board/netvia/u-boot.lds.debug
+++ b/board/netvia/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/nx823/u-boot.lds b/board/nx823/u-boot.lds
index fd4e8a5..41d1c6f 100644
--- a/board/nx823/u-boot.lds
+++ b/board/nx823/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/nx823/u-boot.lds.debug b/board/nx823/u-boot.lds.debug
index c771102..03c0c24 100644
--- a/board/nx823/u-boot.lds.debug
+++ b/board/nx823/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/openrisc/openrisc-generic/u-boot.lds b/board/openrisc/openrisc-generic/u-boot.lds
index 1aed197..5c7556f 100644
--- a/board/openrisc/openrisc-generic/u-boot.lds
+++ b/board/openrisc/openrisc-generic/u-boot.lds
@@ -26,9 +26,7 @@  SECTIONS
 		_endtext = .;
 	}  > ram
 
-	 __u_boot_cmd_start = .;
-	 .u_boot_cmd : { *(.u_boot_cmd) } > ram
-	 __u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	.rodata : {
 		*(.rodata);
diff --git a/board/pb1x00/u-boot.lds b/board/pb1x00/u-boot.lds
index bd0dee1..86107f0 100644
--- a/board/pb1x00/u-boot.lds
+++ b/board/pb1x00/u-boot.lds
@@ -54,11 +54,7 @@  SECTIONS
 
 	.sdata  : { *(.sdata*) }
 
-	.u_boot_cmd : {
-	  __u_boot_cmd_start = .;
-	  *(.u_boot_cmd)
-	  __u_boot_cmd_end = .;
-	}
+	INCLUDE u-boot-common.lds
 
 	uboot_end_data = .;
 	num_got_entries = (__got_end - __got_start) >> 2;
diff --git a/board/qemu-mips/u-boot.lds b/board/qemu-mips/u-boot.lds
index 9460b20..5279103 100644
--- a/board/qemu-mips/u-boot.lds
+++ b/board/qemu-mips/u-boot.lds
@@ -55,12 +55,7 @@  SECTIONS
 	. = ALIGN(4);
 	.sdata  : { *(.sdata*) }
 
-	. = .;
-	.u_boot_cmd : {
-	__u_boot_cmd_start = .;
-	*(.u_boot_cmd)
-	__u_boot_cmd_end = .;
-	}
+	INCLUDE u-boot-common.lds
 
 	uboot_end_data = .;
 	num_got_entries = (__got_end - __got_start) >> 2;
diff --git a/board/qi/qi_lb60/u-boot.lds b/board/qi/qi_lb60/u-boot.lds
index 7317652..9038db9 100644
--- a/board/qi/qi_lb60/u-boot.lds
+++ b/board/qi/qi_lb60/u-boot.lds
@@ -47,9 +47,7 @@  SECTIONS
 
 	.sdata  : { *(.sdata*) }
 
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	uboot_end_data = .;
 	num_got_entries = (__got_end - __got_start) >> 2;
diff --git a/board/quantum/u-boot.lds b/board/quantum/u-boot.lds
index d0b60cf..a6b6939 100644
--- a/board/quantum/u-boot.lds
+++ b/board/quantum/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/quantum/u-boot.lds.debug b/board/quantum/u-boot.lds.debug
index abc4640..706211c 100644
--- a/board/quantum/u-boot.lds.debug
+++ b/board/quantum/u-boot.lds.debug
@@ -106,9 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/r360mpi/u-boot.lds b/board/r360mpi/u-boot.lds
index 2fa085a..681b46b 100644
--- a/board/r360mpi/u-boot.lds
+++ b/board/r360mpi/u-boot.lds
@@ -67,16 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/rbc823/u-boot.lds b/board/rbc823/u-boot.lds
index d943fb6..34898a1 100644
--- a/board/rbc823/u-boot.lds
+++ b/board/rbc823/u-boot.lds
@@ -76,15 +76,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/renesas/sh7757lcr/u-boot.lds b/board/renesas/sh7757lcr/u-boot.lds
index 38ebe88..201338c 100644
--- a/board/renesas/sh7757lcr/u-boot.lds
+++ b/board/renesas/sh7757lcr/u-boot.lds
@@ -77,13 +77,9 @@  SECTIONS
 	}
 	PROVIDE (_egot = .);
 
-	PROVIDE (__u_boot_cmd_start = .);
-	.u_boot_cmd :
-	{
-		*(.u_boot_cmd)
-		. = ALIGN(4);
-	}
-	PROVIDE (__u_boot_cmd_end = .);
+	INCLUDE u-boot-common.lds
+
+	. = ALIGN(4);
 
 	PROVIDE (reloc_dst_end = .);
 	/* _reloc_dst_end = .; */
diff --git a/board/rsdproto/u-boot.lds b/board/rsdproto/u-boot.lds
index a729c52..f77e20a 100644
--- a/board/rsdproto/u-boot.lds
+++ b/board/rsdproto/u-boot.lds
@@ -96,16 +96,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/samsung/smdk6400/u-boot-nand.lds b/board/samsung/smdk6400/u-boot-nand.lds
index f162815..94e00ba 100644
--- a/board/samsung/smdk6400/u-boot-nand.lds
+++ b/board/samsung/smdk6400/u-boot-nand.lds
@@ -47,9 +47,7 @@  SECTIONS
 	. = ALIGN(4);
 	.got : { *(.got) }
 
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN(4);
 	.mmudata : { *(.mmudata) }
diff --git a/board/sandburst/karef/u-boot.lds.debug b/board/sandburst/karef/u-boot.lds.debug
index 31746e3..75eda9b 100644
--- a/board/sandburst/karef/u-boot.lds.debug
+++ b/board/sandburst/karef/u-boot.lds.debug
@@ -115,14 +115,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/sandburst/metrobox/u-boot.lds.debug b/board/sandburst/metrobox/u-boot.lds.debug
index 4922bd2..0574121 100644
--- a/board/sandburst/metrobox/u-boot.lds.debug
+++ b/board/sandburst/metrobox/u-boot.lds.debug
@@ -115,14 +115,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/sandpoint/u-boot.lds b/board/sandpoint/u-boot.lds
index e382fd1..1127e57 100644
--- a/board/sandpoint/u-boot.lds
+++ b/board/sandpoint/u-boot.lds
@@ -67,16 +67,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/siemens/IAD210/u-boot.lds b/board/siemens/IAD210/u-boot.lds
index 0e78e4f..28b81fc 100644
--- a/board/siemens/IAD210/u-boot.lds
+++ b/board/siemens/IAD210/u-boot.lds
@@ -74,16 +74,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/sixnet/u-boot.lds b/board/sixnet/u-boot.lds
index 02d1980..0982f80 100644
--- a/board/sixnet/u-boot.lds
+++ b/board/sixnet/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/snmc/qs850/u-boot.lds b/board/snmc/qs850/u-boot.lds
index 9ab248a..cb094b0 100644
--- a/board/snmc/qs850/u-boot.lds
+++ b/board/snmc/qs850/u-boot.lds
@@ -68,16 +68,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/snmc/qs860t/u-boot.lds b/board/snmc/qs860t/u-boot.lds
index d0b60cf..a6b6939 100644
--- a/board/snmc/qs860t/u-boot.lds
+++ b/board/snmc/qs860t/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/spc1920/u-boot.lds b/board/spc1920/u-boot.lds
index d0b60cf..a6b6939 100644
--- a/board/spc1920/u-boot.lds
+++ b/board/spc1920/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/spd8xx/u-boot.lds b/board/spd8xx/u-boot.lds
index a84e7fd..b8f861e 100644
--- a/board/spd8xx/u-boot.lds
+++ b/board/spd8xx/u-boot.lds
@@ -74,16 +74,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/spd8xx/u-boot.lds.debug b/board/spd8xx/u-boot.lds.debug
index a95c47f..5d9e8f7 100644
--- a/board/spd8xx/u-boot.lds.debug
+++ b/board/spd8xx/u-boot.lds.debug
@@ -107,14 +107,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/stx/stxxtc/u-boot.lds b/board/stx/stxxtc/u-boot.lds
index a949e4f..310ad2d 100644
--- a/board/stx/stxxtc/u-boot.lds
+++ b/board/stx/stxxtc/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/stx/stxxtc/u-boot.lds.debug b/board/stx/stxxtc/u-boot.lds.debug
index a001f3f..be45472 100644
--- a/board/stx/stxxtc/u-boot.lds.debug
+++ b/board/stx/stxxtc/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/svm_sc8xx/u-boot.lds b/board/svm_sc8xx/u-boot.lds
index c65f022..abbb359 100644
--- a/board/svm_sc8xx/u-boot.lds
+++ b/board/svm_sc8xx/u-boot.lds
@@ -82,16 +82,7 @@  SECTIONS
   PROVIDE (edata = .);
 
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/svm_sc8xx/u-boot.lds.debug b/board/svm_sc8xx/u-boot.lds.debug
index abc4640..706211c 100644
--- a/board/svm_sc8xx/u-boot.lds.debug
+++ b/board/svm_sc8xx/u-boot.lds.debug
@@ -106,9 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/tqc/tqm8xx/u-boot.lds b/board/tqc/tqm8xx/u-boot.lds
index 4f08be6..009b2c7 100644
--- a/board/tqc/tqm8xx/u-boot.lds
+++ b/board/tqc/tqm8xx/u-boot.lds
@@ -82,16 +82,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/v37/u-boot.lds b/board/v37/u-boot.lds
index e62d53d..ae8b465 100644
--- a/board/v37/u-boot.lds
+++ b/board/v37/u-boot.lds
@@ -65,16 +65,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/w7o/u-boot.lds.debug b/board/w7o/u-boot.lds.debug
index 1c67b30..3f485d7 100644
--- a/board/w7o/u-boot.lds.debug
+++ b/board/w7o/u-boot.lds.debug
@@ -106,14 +106,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/westel/amx860/u-boot.lds b/board/westel/amx860/u-boot.lds
index 3470b43..4c7dc81 100644
--- a/board/westel/amx860/u-boot.lds
+++ b/board/westel/amx860/u-boot.lds
@@ -74,16 +74,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  . = .;
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  . = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/westel/amx860/u-boot.lds.debug b/board/westel/amx860/u-boot.lds.debug
index 91d3e67..9671b6d 100644
--- a/board/westel/amx860/u-boot.lds.debug
+++ b/board/westel/amx860/u-boot.lds.debug
@@ -107,14 +107,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(4096);
   __init_begin = .;
diff --git a/board/xes/xpedite1000/u-boot.lds.debug b/board/xes/xpedite1000/u-boot.lds.debug
index e2e66ae..a368d0c 100644
--- a/board/xes/xpedite1000/u-boot.lds.debug
+++ b/board/xes/xpedite1000/u-boot.lds.debug
@@ -111,14 +111,7 @@  SECTIONS
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __u_boot_cmd_start = .;
-  .u_boot_cmd : { *(.u_boot_cmd) }
-  __u_boot_cmd_end = .;
-
-
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  INCLUDE u-boot-common.lds
 
   . = ALIGN(256);
   __init_begin = .;
diff --git a/board/xilinx/microblaze-generic/u-boot.lds b/board/xilinx/microblaze-generic/u-boot.lds
index ee41145..3dd36dd 100644
--- a/board/xilinx/microblaze-generic/u-boot.lds
+++ b/board/xilinx/microblaze-generic/u-boot.lds
@@ -49,13 +49,7 @@  SECTIONS
 		__data_end = .;
 	}
 
-	.u_boot_cmd ALIGN(0x4):
-	{
-		. = .;
-		__u_boot_cmd_start = .;
-		*(.u_boot_cmd)
-		__u_boot_cmd_end = .;
-	}
+	INCLUDE u-boot-common.lds
 
 	.bss ALIGN(0x4):
 	{
diff --git a/board/zipitz2/u-boot.lds b/board/zipitz2/u-boot.lds
index e1a1ff1..8002c2a 100644
--- a/board/zipitz2/u-boot.lds
+++ b/board/zipitz2/u-boot.lds
@@ -44,10 +44,7 @@  SECTIONS
 	. = ALIGN(4);
 	.got : { *(.got) }
 
-	. = .;
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN(4);
 	__bss_start = .;
diff --git a/doc/README.commands b/doc/README.commands
index d678992..7453ebf 100644
--- a/doc/README.commands
+++ b/doc/README.commands
@@ -29,3 +29,8 @@  by writing in u-boot.lds ($(TOPDIR)/board/boardname/u-boot.lds) these
 	__u_boot_cmd_start = .;
 	.u_boot_cmd : { *(.u_boot_cmd) }
 	__u_boot_cmd_end = .;
+
+	or
+
+	INCLUDE u-boot-common.lds
+
diff --git a/nand_spl/board/freescale/mx31pdk/Makefile b/nand_spl/board/freescale/mx31pdk/Makefile
index 87784d2..ac92cdc 100644
--- a/nand_spl/board/freescale/mx31pdk/Makefile
+++ b/nand_spl/board/freescale/mx31pdk/Makefile
@@ -6,7 +6,7 @@  include $(TOPDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
-LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
+LDFLAGS := -L$(TOPDIR) -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
 	   $(LDFLAGS_FINAL)
 AFLAGS	+= -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL
 CFLAGS	+= -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL
diff --git a/nand_spl/board/freescale/mx31pdk/u-boot.lds b/nand_spl/board/freescale/mx31pdk/u-boot.lds
index d2b08f6..ac29811 100644
--- a/nand_spl/board/freescale/mx31pdk/u-boot.lds
+++ b/nand_spl/board/freescale/mx31pdk/u-boot.lds
@@ -45,10 +45,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);
 
diff --git a/nand_spl/board/karo/tx25/Makefile b/nand_spl/board/karo/tx25/Makefile
index 0336346..29ca30c 100644
--- a/nand_spl/board/karo/tx25/Makefile
+++ b/nand_spl/board/karo/tx25/Makefile
@@ -27,7 +27,7 @@  include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
-LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
+LDFLAGS := -L$(TOPDIR) -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
 	   $(LDFLAGS_FINAL)
 AFLAGS	+= -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL
 CFLAGS	+= -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL
diff --git a/nand_spl/board/karo/tx25/u-boot.lds b/nand_spl/board/karo/tx25/u-boot.lds
index d2b08f6..ac29811 100644
--- a/nand_spl/board/karo/tx25/u-boot.lds
+++ b/nand_spl/board/karo/tx25/u-boot.lds
@@ -45,10 +45,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);
 
diff --git a/nand_spl/board/samsung/smdk6400/Makefile b/nand_spl/board/samsung/smdk6400/Makefile
index c9e75ba..9a2a8d3 100644
--- a/nand_spl/board/samsung/smdk6400/Makefile
+++ b/nand_spl/board/samsung/smdk6400/Makefile
@@ -32,7 +32,7 @@  include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
 nandobj	:= $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
-LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
+LDFLAGS := -L$(TOPDIR) -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
 		$(LDFLAGS_FINAL) -gc-sections
 AFLAGS	+= -DCONFIG_NAND_SPL
 CFLAGS	+= -DCONFIG_NAND_SPL -ffunction-sections
diff --git a/nand_spl/board/samsung/smdk6400/u-boot.lds b/nand_spl/board/samsung/smdk6400/u-boot.lds
index 567f635..1c550c0 100644
--- a/nand_spl/board/samsung/smdk6400/u-boot.lds
+++ b/nand_spl/board/samsung/smdk6400/u-boot.lds
@@ -50,9 +50,7 @@  SECTIONS
 	. = ALIGN(4);
 	.got : { *(.got) }
 
-	__u_boot_cmd_start = .;
-	.u_boot_cmd : { *(.u_boot_cmd) }
-	__u_boot_cmd_end = .;
+	INCLUDE u-boot-common.lds
 
 	. = ALIGN(4);
 
diff --git a/spl/Makefile b/spl/Makefile
index 3262e22..1848a86 100644
--- a/spl/Makefile
+++ b/spl/Makefile
@@ -124,7 +124,8 @@  $(obj)u-boot-spl.bin:	$(obj)u-boot-spl
 GEN_UBOOT = \
 	UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) | \
 	sed  -n -e 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
-	cd $(obj) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) $$UNDEF_SYM $(__START) \
+	cd $(obj) && $(LD) -L$(TOPDIR) $(LDFLAGS) $(LDFLAGS_$(@F)) \
+		$$UNDEF_SYM $(__START) \
 		--start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
 		-Map u-boot-spl.map -o u-boot-spl
 
diff --git a/u-boot-common.lds b/u-boot-common.lds
new file mode 100644
index 0000000..e9a5fc9
--- /dev/null
+++ b/u-boot-common.lds
@@ -0,0 +1,14 @@ 
+	. = ALIGN(4);
+	__u_boot_cmd_start = .;
+	.u_boot_cmd : {
+		KEEP(*(.u_boot_cmd))
+	}
+	__u_boot_cmd_end = .;
+
+	/* powerpc specific, but harmless for others */
+	. = ALIGN(4);
+	__start___ex_table = .;
+	__ex_table : {
+		KEEP(*(__ex_table))
+	}
+	__stop___ex_table = .;