[U-Boot] [PATCH 02/32] x86: Align config.mk and linker scripts with other arches
=?//TRANSLIT?Q?Lo=EFc?= Minier
lool at dooz.org
Thu Feb 10 02:05:36 CET 2011
On Fri, Feb 04, 2011, Graeme Russ wrote:
> diff --git a/arch/i386/config.mk b/arch/i386/config.mk
> index 3fb97c1..77a33dd 100644
> --- a/arch/i386/config.mk
> +++ b/arch/i386/config.mk
> @@ -21,8 +21,6 @@
> # MA 02111-1307 USA
> #
>
> -CROSS_COMPILE ?= i386-linux-
> -
> STANDALONE_LOAD_ADDR = 0x40000
>
> PLATFORM_CPPFLAGS += -fno-strict-aliasing
> @@ -33,8 +31,13 @@ PLATFORM_CPPFLAGS += $(call cc-option, -ffreestanding)
> PLATFORM_CPPFLAGS += $(call cc-option, -fno-toplevel-reorder, $(call cc-option, -fno-unit-at-a-time))
> PLATFORM_CPPFLAGS += $(call cc-option, -fno-stack-protector)
> PLATFORM_CPPFLAGS += $(call cc-option, -mpreferred-stack-boundary=2)
> -PLATFORM_CPPFLAGS += -DCONFIG_I386 -D__I386__
> +PLATFORM_CPPFLAGS += -fno-dwarf2-cfi-asm
> +
> +PLATFORM_RELFLAGS += -ffunction-sections -fvisibility=hidden
> +
> +PLATFORM_LDFLAGS += --emit-relocs -Bsymbolic -Bsymbolic-functions
>
> LDFLAGS += --cref
> -LDFLAGS_u-boot += --gc-sections
> -PLATFORM_RELFLAGS += -ffunction-sections
> +LDFLAGS_u-boot += --gc-sections -pie
> +LDSCRIPT := $(SRCTREE)/$(CPUDIR)/u-boot.lds
> +
> diff --git a/arch/i386/cpu/config.mk b/arch/i386/cpu/config.mk
> index 16a160d..ec1d102 100644
> --- a/arch/i386/cpu/config.mk
> +++ b/arch/i386/cpu/config.mk
> @@ -21,6 +21,6 @@
> # MA 02111-1307 USA
> #
>
> -PLATFORM_RELFLAGS +=
> +CROSS_COMPILE ?= i386-linux-
>
> -PLATFORM_CPPFLAGS += -march=i386 -Werror
> +PLATFORM_CPPFLAGS += -DCONFIG_I386 -D__I386__ -march=i386 -Werror
> diff --git a/arch/i386/cpu/u-boot.lds b/arch/i386/cpu/u-boot.lds
> new file mode 100644
> index 0000000..3eeb2a2
> --- /dev/null
> +++ b/arch/i386/cpu/u-boot.lds
> @@ -0,0 +1,104 @@
> +/*
> + * (C) Copyright 2002
> + * Daniel Engström, Omicron Ceti AB, daniel at omicron.se.
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
> +OUTPUT_ARCH(i386)
> +ENTRY(_start)
> +
> +SECTIONS
> +{
> + . = CONFIG_SYS_TEXT_BASE; /* Location of bootcode in flash */
> + __text_start = .;
> + .text : { *(.text*); }
> +
> + . = ALIGN(4);
> + __u_boot_cmd_start = .;
> + .u_boot_cmd : { *(.u_boot_cmd) }
> + . = ALIGN(4);
> + __u_boot_cmd_end = .;
> +
> + . = ALIGN(4);
> + .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
> +
> + . = ALIGN(4);
> + .data : { *(.data*) }
> +
> + . = ALIGN(4);
> + .dynsym : { *(.dynsym*) }
> +
> + . = ALIGN(4);
> + .hash : { *(.hash*) }
> +
> + . = ALIGN(4);
> + .got : { *(.got*) }
> +
> + . = ALIGN(4);
> + __data_end = .;
> +
> + . = ALIGN(4);
> + __bss_start = ABSOLUTE(.);
> + .bss (NOLOAD) : { *(.bss) }
> + . = ALIGN(4);
> + __bss_end = ABSOLUTE(.);
> +
> + . = ALIGN(4);
> + __rel_dyn_start = .;
> + .rel.dyn : { *(.rel.dyn) }
> + __rel_dyn_end = .;
> +
> + /DISCARD/ : { *(.dynstr*) }
> + /DISCARD/ : { *(.dynamic*) }
> + /DISCARD/ : { *(.plt*) }
> + /DISCARD/ : { *(.interp*) }
> + /DISCARD/ : { *(.gnu*) }
> +
> + /* 16bit realmode trampoline code */
> + .realmode 0x7c0 : AT ( LOADADDR(.rel.dyn) + SIZEOF(.rel.dyn) ) { KEEP(*(.realmode)) }
> +
> + __realmode_start = LOADADDR(.realmode);
> + __realmode_size = SIZEOF(.realmode);
> +
> + /* 16bit BIOS emulation code (just enough to boot Linux) */
> + .bios 0 : AT ( LOADADDR(.realmode) + SIZEOF(.realmode) ) { KEEP(*(.bios)) }
> +
> + __bios_start = LOADADDR(.bios);
> + __bios_size = SIZEOF(.bios);
> +
> + /* The load addresses below assumes that the flash
> + * will be mapped so that 0x387f0000 == 0xffff0000
> + * at reset time
> + *
> + * The fe00 and ff00 offsets of the start32 and start16
> + * segments are arbitrary, the just have to be mapped
> + * at reset and the code have to fit.
> + * The fff0 offset of resetvec is important, however.
> + */
> + . = 0xfffffe00;
> + .start32 : AT (CONFIG_SYS_TEXT_BASE + 0x3fe00) { KEEP(*(.start32)); }
> +
> + . = 0xf800;
> + .start16 : AT (CONFIG_SYS_TEXT_BASE + 0x3f800) { KEEP(*(.start16)); }
> +
> + . = 0xfff0;
> + .resetvec : AT (CONFIG_SYS_TEXT_BASE + 0x3fff0) { KEEP(*(.resetvec)); }
> +}
> diff --git a/board/eNET/config.mk b/board/eNET/config.mk
> index c4242ad..ce575ab 100644
> --- a/board/eNET/config.mk
> +++ b/board/eNET/config.mk
> @@ -22,7 +22,3 @@
> #
>
> CONFIG_SYS_TEXT_BASE = 0x06000000
> -CFLAGS_common/dlmalloc.o += -Wa,--no-warn -fno-strict-aliasing
> -PLATFORM_RELFLAGS += -fvisibility=hidden
> -PLATFORM_CPPFLAGS += -fno-dwarf2-cfi-asm
> -PLATFORM_LDFLAGS += -pic --emit-relocs -Bsymbolic -Bsymbolic-functions
> diff --git a/board/eNET/u-boot.lds b/board/eNET/u-boot.lds
> deleted file mode 100644
> index 3eeb2a2..0000000
> --- a/board/eNET/u-boot.lds
> +++ /dev/null
> @@ -1,104 +0,0 @@
> -/*
> - * (C) Copyright 2002
> - * Daniel Engström, Omicron Ceti AB, daniel at omicron.se.
> - *
> - * See file CREDITS for list of people who contributed to this
> - * project.
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License as
> - * published by the Free Software Foundation; either version 2 of
> - * the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> - * MA 02111-1307 USA
> - */
> -
> -OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
> -OUTPUT_ARCH(i386)
> -ENTRY(_start)
> -
> -SECTIONS
> -{
> - . = CONFIG_SYS_TEXT_BASE; /* Location of bootcode in flash */
> - __text_start = .;
> - .text : { *(.text*); }
> -
> - . = ALIGN(4);
> - __u_boot_cmd_start = .;
> - .u_boot_cmd : { *(.u_boot_cmd) }
> - . = ALIGN(4);
> - __u_boot_cmd_end = .;
> -
> - . = ALIGN(4);
> - .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
> -
> - . = ALIGN(4);
> - .data : { *(.data*) }
> -
> - . = ALIGN(4);
> - .dynsym : { *(.dynsym*) }
> -
> - . = ALIGN(4);
> - .hash : { *(.hash*) }
> -
> - . = ALIGN(4);
> - .got : { *(.got*) }
> -
> - . = ALIGN(4);
> - __data_end = .;
> -
> - . = ALIGN(4);
> - __bss_start = ABSOLUTE(.);
> - .bss (NOLOAD) : { *(.bss) }
> - . = ALIGN(4);
> - __bss_end = ABSOLUTE(.);
> -
> - . = ALIGN(4);
> - __rel_dyn_start = .;
> - .rel.dyn : { *(.rel.dyn) }
> - __rel_dyn_end = .;
> -
> - /DISCARD/ : { *(.dynstr*) }
> - /DISCARD/ : { *(.dynamic*) }
> - /DISCARD/ : { *(.plt*) }
> - /DISCARD/ : { *(.interp*) }
> - /DISCARD/ : { *(.gnu*) }
> -
> - /* 16bit realmode trampoline code */
> - .realmode 0x7c0 : AT ( LOADADDR(.rel.dyn) + SIZEOF(.rel.dyn) ) { KEEP(*(.realmode)) }
> -
> - __realmode_start = LOADADDR(.realmode);
> - __realmode_size = SIZEOF(.realmode);
> -
> - /* 16bit BIOS emulation code (just enough to boot Linux) */
> - .bios 0 : AT ( LOADADDR(.realmode) + SIZEOF(.realmode) ) { KEEP(*(.bios)) }
> -
> - __bios_start = LOADADDR(.bios);
> - __bios_size = SIZEOF(.bios);
> -
> - /* The load addresses below assumes that the flash
> - * will be mapped so that 0x387f0000 == 0xffff0000
> - * at reset time
> - *
> - * The fe00 and ff00 offsets of the start32 and start16
> - * segments are arbitrary, the just have to be mapped
> - * at reset and the code have to fit.
> - * The fff0 offset of resetvec is important, however.
> - */
> - . = 0xfffffe00;
> - .start32 : AT (CONFIG_SYS_TEXT_BASE + 0x3fe00) { KEEP(*(.start32)); }
> -
> - . = 0xf800;
> - .start16 : AT (CONFIG_SYS_TEXT_BASE + 0x3f800) { KEEP(*(.start16)); }
> -
> - . = 0xfff0;
> - .resetvec : AT (CONFIG_SYS_TEXT_BASE + 0x3fff0) { KEEP(*(.resetvec)); }
> -}
Acked-By: Loïc Minier <loic.minier at linaro.org>
Build-tested on Debian i386 (native); fixes the build failure with tip
--
Loïc Minier
More information about the U-Boot
mailing list