Patchwork [U-Boot,1/7] MIPS: add unified u-boot.lds file

login
register
mail settings
Submitter Gabor Juhos
Date Jan. 29, 2013, 8:31 a.m.
Message ID <1359448308-8808-1-git-send-email-juhosg@openwrt.org>
Download mbox | patch
Permalink /patch/216459/
State Superseded
Delegated to: Daniel Schwierzeck
Headers show

Comments

Gabor Juhos - Jan. 29, 2013, 8:31 a.m.
The patch adds an unified linker script file which
can be used for all currently supported MIPS targets.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Cc: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
Cc: Vlad Lungu <vlad@comsys.ro>
Cc: Thomas Sailer <sailer@scs.ch>
Cc: Stefan Roese <sr@denx.de>
Cc: Wolfgang Denk <wd@denx.de>
Cc: Thomas Lange <thomas@corelatus.se>
Cc: Xiangfu Liu <xiangfu@openmobilefree.net>
---
 arch/mips/cpu/u-boot.lds |   90 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 90 insertions(+)
 create mode 100644 arch/mips/cpu/u-boot.lds
Daniel Schwierzeck - Jan. 29, 2013, 10:44 a.m.
2013/1/29 Gabor Juhos <juhosg@openwrt.org>:
> The patch adds an unified linker script file which
> can be used for all currently supported MIPS targets.
>
> Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
> Cc: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
> Cc: Vlad Lungu <vlad@comsys.ro>
> Cc: Thomas Sailer <sailer@scs.ch>
> Cc: Stefan Roese <sr@denx.de>
> Cc: Wolfgang Denk <wd@denx.de>
> Cc: Thomas Lange <thomas@corelatus.se>
> Cc: Xiangfu Liu <xiangfu@openmobilefree.net>

AFAIK you can remove Vlad Lungu and Thomas Lange from the list of
board maintainers

> ---
>  arch/mips/cpu/u-boot.lds |   90 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 90 insertions(+)
>  create mode 100644 arch/mips/cpu/u-boot.lds
>
> diff --git a/arch/mips/cpu/u-boot.lds b/arch/mips/cpu/u-boot.lds
> new file mode 100644
> index 0000000..988764d
> --- /dev/null
> +++ b/arch/mips/cpu/u-boot.lds
> @@ -0,0 +1,90 @@
> +/*
> + * (C) Copyright 2003
> + * Wolfgang Denk Engineering, <wd@denx.de>
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#if defined(CONFIG_64BIT)
> +#define ELF_FMT                elf64
> +#define PTR_COUNT_SHIFT        3
> +#else
> +#define ELF_FMT                elf32
> +#define PTR_COUNT_SHIFT        2
> +#endif
> +
> +#if defined(CONFIG_SYS_LITTLE_ENDIAN)
> +#define ELF_ENDIAN     tradlittlemips
> +#else
> +#define ELF_ENDIAN     tradbigmips
> +#endif
> +
> +#define _MIPS_FORMAT2(x)       #x
> +#define _MIPS_FORMAT(x,y)      _MIPS_FORMAT2(x-y)
> +
> +#define MIPS_FORMAT            _MIPS_FORMAT(ELF_FMT,ELF_ENDIAN)
> +
> +OUTPUT_FORMAT(MIPS_FORMAT, MIPS_FORMAT, MIPS_FORMAT)

we need to get rid of OUTPUT_FORMAT. This was always misused due to
some endianess and toolchain problems which have been resolved in the meantime.

We should use gcc flags like it is done in linux kernel. The config.mk
of mips64 already
has those flags. Mips32 and xburst need to be extended with:

PLATFORM_CPPFLAGS += -mabi=32 -DCONFIG_32BIT
ifdef CONFIG_SYS_BIG_ENDIAN
PLATFORM_LDFLAGS  += -m elf32btsmip
else
PLATFORM_LDFLAGS  += -m elf32ltsmip
endif

> +OUTPUT_ARCH(mips)
> +ENTRY(_start)
> +SECTIONS
> +{
> +       . = 0x00000000;
> +
> +       . = ALIGN(4);
> +       .text       :
> +       {
> +         *(.text*)
> +       }

please fix the style globally to

.text : {
        *(.text*)
}

> +
> +       . = ALIGN(4);
> +       .rodata  : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
> +
> +       . = ALIGN(4);
> +       .data  : { *(.data*) }
> +
> +       . = .;
> +       _gp = ALIGN(16) +0x7ff0;
> +
> +       .got  : {
> +               __got_start = .;
> +               *(.got)
> +               __got_end = .;
> +       }
> +
> +       . = ALIGN(4);
> +       .sdata  : { *(.sdata*) }

*(.sdata*) should be merged with .data

> +
> +       . = ALIGN(4);
> +       .u_boot_list : {
> +               #include <u-boot.lst>
> +       }
> +
> +       uboot_end_data = .;
> +
> +       num_got_entries = (__got_end - __got_start) >> PTR_COUNT_SHIFT;
> +
> +       . = ALIGN(4);
> +       .sbss  : { *(.sbss*) }
> +       .bss : {
> +               *(.bss*)
> +               . = ALIGN(4);
> +       }

. = ALIGN(4);
.bss : {
        *(.bss*)
        *(.sbss*)
        . = ALIGN(4);
}

> +       uboot_end = .;
> +}
> --
> 1.7.10
>
Gabor Juhos - Jan. 29, 2013, 5:13 p.m.
2013.01.29. 11:44 keltezéssel, Daniel Schwierzeck írta:
> 2013/1/29 Gabor Juhos <juhosg@openwrt.org>:
>> The patch adds an unified linker script file which
>> can be used for all currently supported MIPS targets.
>>
>> Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
>> Cc: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
>> Cc: Vlad Lungu <vlad@comsys.ro>
>> Cc: Thomas Sailer <sailer@scs.ch>
>> Cc: Stefan Roese <sr@denx.de>
>> Cc: Wolfgang Denk <wd@denx.de>
>> Cc: Thomas Lange <thomas@corelatus.se>
>> Cc: Xiangfu Liu <xiangfu@openmobilefree.net>
> 
> AFAIK you can remove Vlad Lungu and Thomas Lange from the list of
> board maintainers

Ok. I will remove Thomas Sailer as well because his e-mail address bounces.

>> ---
>>  arch/mips/cpu/u-boot.lds |   90 ++++++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 90 insertions(+)
>>  create mode 100644 arch/mips/cpu/u-boot.lds
>>

<...>

>> +OUTPUT_FORMAT(MIPS_FORMAT, MIPS_FORMAT, MIPS_FORMAT)
> 
> we need to get rid of OUTPUT_FORMAT. This was always misused due to
> some endianess and toolchain problems which have been resolved in the meantime.
> 
> We should use gcc flags like it is done in linux kernel. The config.mk
> of mips64 already
> has those flags. Mips32 and xburst need to be extended with:
> 
> PLATFORM_CPPFLAGS += -mabi=32 -DCONFIG_32BIT
> ifdef CONFIG_SYS_BIG_ENDIAN
> PLATFORM_LDFLAGS  += -m elf32btsmip
> else
> PLATFORM_LDFLAGS  += -m elf32ltsmip
> endif

Makes sense. However I would do that in a separate change. Either before or
after the current series.

> 
>> +OUTPUT_ARCH(mips)
>> +ENTRY(_start)
>> +SECTIONS
>> +{
>> +       . = 0x00000000;
>> +
>> +       . = ALIGN(4);
>> +       .text       :
>> +       {
>> +         *(.text*)
>> +       }
> 
> please fix the style globally to
> 
> .text : {
>         *(.text*)
> }

Ok, will change it.

> 
>> +
>> +       . = ALIGN(4);
>> +       .rodata  : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
>> +
>> +       . = ALIGN(4);
>> +       .data  : { *(.data*) }
>> +
>> +       . = .;
>> +       _gp = ALIGN(16) +0x7ff0;
>> +
>> +       .got  : {
>> +               __got_start = .;
>> +               *(.got)
>> +               __got_end = .;
>> +       }
>> +
>> +       . = ALIGN(4);
>> +       .sdata  : { *(.sdata*) }
> 
> *(.sdata*) should be merged with .data

This is separated in all current linker scripts, so the merge should be done in
a separate patch IMHO.

> 
>> +
>> +       . = ALIGN(4);
>> +       .u_boot_list : {
>> +               #include <u-boot.lst>
>> +       }
>> +
>> +       uboot_end_data = .;
>> +
>> +       num_got_entries = (__got_end - __got_start) >> PTR_COUNT_SHIFT;
>> +
>> +       . = ALIGN(4);
>> +       .sbss  : { *(.sbss*) }
>> +       .bss : {
>> +               *(.bss*)
>> +               . = ALIGN(4);
>> +       }
> 
> . = ALIGN(4);
> .bss : {
>         *(.bss*)
>         *(.sbss*)
>         . = ALIGN(4);
> }

Same as above.

Thank you for the review!

-Gabor
Andrew Dyer - Jan. 29, 2013, 8:50 p.m.
On Tue, Jan 29, 2013 at 11:13 AM, Gabor Juhos <juhosg@openwrt.org> wrote:

> 2013.01.29. 11:44 keltezéssel, Daniel Schwierzeck írta:
> > 2013/1/29 Gabor Juhos <juhosg@openwrt.org>:
> >> The patch adds an unified linker script file which
> >> can be used for all currently supported MIPS targets.
> >>
> >> Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
> >> Cc: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
> >> Cc: Vlad Lungu <vlad@comsys.ro>
> >> Cc: Thomas Sailer <sailer@scs.ch>
> >> Cc: Stefan Roese <sr@denx.de>
> >> Cc: Wolfgang Denk <wd@denx.de>
> >> Cc: Thomas Lange <thomas@corelatus.se>
> >> Cc: Xiangfu Liu <xiangfu@openmobilefree.net>
> >
> > AFAIK you can remove Vlad Lungu and Thomas Lange from the list of
> > board maintainers
>
> Ok. I will remove Thomas Sailer as well because his e-mail address bounces.
>
> >> ---
> >>  arch/mips/cpu/u-boot.lds |   90
> ++++++++++++++++++++++++++++++++++++++++++++++
> >>  1 file changed, 90 insertions(+)
> >>  create mode 100644 arch/mips/cpu/u-boot.lds
> >>
>
> <...>
>
> >> +OUTPUT_FORMAT(MIPS_FORMAT, MIPS_FORMAT, MIPS_FORMAT)
> >
> > we need to get rid of OUTPUT_FORMAT. This was always misused due to
> > some endianess and toolchain problems which have been resolved in the
> meantime.
> >
> > We should use gcc flags like it is done in linux kernel. The config.mk
> > of mips64 already
> > has those flags. Mips32 and xburst need to be extended with:
> >
> > PLATFORM_CPPFLAGS += -mabi=32 -DCONFIG_32BIT
> > ifdef CONFIG_SYS_BIG_ENDIAN
> > PLATFORM_LDFLAGS  += -m elf32btsmip
> > else
> > PLATFORM_LDFLAGS  += -m elf32ltsmip
> > endif
>
> Makes sense. However I would do that in a separate change. Either before or
> after the current series.
>
> >
> >> +OUTPUT_ARCH(mips)
> >> +ENTRY(_start)
> >> +SECTIONS
> >> +{
> >> +       . = 0x00000000;
> >> +
> >> +       . = ALIGN(4);
> >> +       .text       :
> >> +       {
> >> +         *(.text*)
> >> +       }
> >
> > please fix the style globally to
> >
> > .text : {
> >         *(.text*)
> > }
>
> Ok, will change it.
>
> >
> >> +
> >> +       . = ALIGN(4);
> >> +       .rodata  : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
> >> +
> >> +       . = ALIGN(4);
> >> +       .data  : { *(.data*) }
> >> +
> >> +       . = .;
> >> +       _gp = ALIGN(16) +0x7ff0;
> >> +
> >> +       .got  : {
> >> +               __got_start = .;
> >> +               *(.got)
> >> +               __got_end = .;
> >> +       }
> >> +
> >> +       . = ALIGN(4);
> >> +       .sdata  : { *(.sdata*) }
> >
> > *(.sdata*) should be merged with .data
>
> This is separated in all current linker scripts, so the merge should be
> done in
> a separate patch IMHO.
>

IIRC, If you put .sdata in with .data, you also have to adjust the _gp
initialization so the .sdata section is within the signed 16 bit address
offset allowed.


> >
> >> +
> >> +       . = ALIGN(4);
> >> +       .u_boot_list : {
> >> +               #include <u-boot.lst>
> >> +       }
> >> +
> >> +       uboot_end_data = .;
> >> +
> >> +       num_got_entries = (__got_end - __got_start) >> PTR_COUNT_SHIFT;
> >> +
> >> +       . = ALIGN(4);
> >> +       .sbss  : { *(.sbss*) }
> >> +       .bss : {
> >> +               *(.bss*)
> >> +               . = ALIGN(4);
> >> +       }
> >
> > . = ALIGN(4);
> > .bss : {
> >         *(.bss*)
> >         *(.sbss*)
> >         . = ALIGN(4);
> > }
>
> Same as above.
>
> Thank you for the review!
>
> -Gabor
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>

Patch

diff --git a/arch/mips/cpu/u-boot.lds b/arch/mips/cpu/u-boot.lds
new file mode 100644
index 0000000..988764d
--- /dev/null
+++ b/arch/mips/cpu/u-boot.lds
@@ -0,0 +1,90 @@ 
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk Engineering, <wd@denx.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#if defined(CONFIG_64BIT)
+#define ELF_FMT		elf64
+#define PTR_COUNT_SHIFT	3
+#else
+#define ELF_FMT		elf32
+#define PTR_COUNT_SHIFT	2
+#endif
+
+#if defined(CONFIG_SYS_LITTLE_ENDIAN)
+#define ELF_ENDIAN	tradlittlemips
+#else
+#define ELF_ENDIAN	tradbigmips
+#endif
+
+#define _MIPS_FORMAT2(x)	#x
+#define _MIPS_FORMAT(x,y)	_MIPS_FORMAT2(x-y)
+
+#define MIPS_FORMAT		_MIPS_FORMAT(ELF_FMT,ELF_ENDIAN)
+
+OUTPUT_FORMAT(MIPS_FORMAT, MIPS_FORMAT, MIPS_FORMAT)
+OUTPUT_ARCH(mips)
+ENTRY(_start)
+SECTIONS
+{
+	. = 0x00000000;
+
+	. = ALIGN(4);
+	.text       :
+	{
+	  *(.text*)
+	}
+
+	. = ALIGN(4);
+	.rodata  : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+
+	. = ALIGN(4);
+	.data  : { *(.data*) }
+
+	. = .;
+	_gp = ALIGN(16) +0x7ff0;
+
+	.got  : {
+		__got_start = .;
+		*(.got)
+		__got_end = .;
+	}
+
+	. = ALIGN(4);
+	.sdata  : { *(.sdata*) }
+
+	. = ALIGN(4);
+	.u_boot_list : {
+		#include <u-boot.lst>
+	}
+
+	uboot_end_data = .;
+
+	num_got_entries = (__got_end - __got_start) >> PTR_COUNT_SHIFT;
+
+	. = ALIGN(4);
+	.sbss  : { *(.sbss*) }
+	.bss : {
+		*(.bss*)
+		. = ALIGN(4);
+	}
+	uboot_end = .;
+}