[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