[U-Boot] [PATCH] MIPS: Introduce --gc-sections for MIPS

All architectures but MIPS are using --gc-sections on final linking. This patch introduces that feature for MIPS to reduce the memory and flash footprint.
Signed-off-by: Daniel Schwierzeck daniel.schwierzeck@googlemail.com Cc: Shinya Kuribayashi skuribay@pobox.com Cc: Wolfgang Denk wd@denx.de Cc: Stefan Roese sr@denx.de Cc: Thomas Lange thomas@corelatus.se Cc: Vlad Lungu vlad.lungu@windriver.com --- Tested with ELDK-4.1 and self-built gcc-4.3.3/binutils-2.19.1 on my boards. I could not test the other boards so I would appreciate it if the maintainers in CC could do a quick test on their boards.
arch/mips/config.mk | 2 ++ board/dbau1x00/u-boot.lds | 10 +++++----- board/gth2/u-boot.lds | 10 +++++----- board/incaip/u-boot.lds | 10 +++++----- board/micronas/vct/u-boot.lds | 10 +++++----- board/pb1x00/u-boot.lds | 10 +++++----- board/qemu-mips/u-boot.lds | 10 +++++----- board/tb0229/u-boot.lds | 10 +++++----- examples/standalone/mips.lds | 10 +++++----- 9 files changed, 42 insertions(+), 40 deletions(-)
diff --git a/arch/mips/config.mk b/arch/mips/config.mk index 318d34b..6ab8acd 100644 --- a/arch/mips/config.mk +++ b/arch/mips/config.mk @@ -50,3 +50,5 @@ PLATFORM_CPPFLAGS += -DCONFIG_MIPS -D__MIPS__ PLATFORM_CPPFLAGS += -G 0 -mabicalls -fpic PLATFORM_CPPFLAGS += -msoft-float PLATFORM_LDFLAGS += -G 0 -static -n -nostdlib +PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections +LDFLAGS_FINAL += --gc-sections diff --git a/board/dbau1x00/u-boot.lds b/board/dbau1x00/u-boot.lds index 3c4fbe3..4a59cea 100644 --- a/board/dbau1x00/u-boot.lds +++ b/board/dbau1x00/u-boot.lds @@ -34,14 +34,14 @@ SECTIONS . = ALIGN(4); .text : { - *(.text) + *(.text*) }
. = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4); - .data : { *(.data) } + .data : { *(.data*) }
. = .; _gp = ALIGN(16) + 0x7ff0; @@ -52,7 +52,7 @@ SECTIONS __got_end = .; }
- .sdata : { *(.sdata) } + .sdata : { *(.sdata*) }
.u_boot_cmd : { __u_boot_cmd_start = .; @@ -64,7 +64,7 @@ SECTIONS num_got_entries = (__got_end - __got_start) >> 2;
. = ALIGN(4); - .sbss (NOLOAD) : { *(.sbss) } - .bss (NOLOAD) : { *(.bss) . = ALIGN(4); } + .sbss (NOLOAD) : { *(.sbss*) } + .bss (NOLOAD) : { *(.bss*) . = ALIGN(4); } uboot_end = .; } diff --git a/board/gth2/u-boot.lds b/board/gth2/u-boot.lds index aeb0fcc..9fc417f 100644 --- a/board/gth2/u-boot.lds +++ b/board/gth2/u-boot.lds @@ -34,14 +34,14 @@ SECTIONS . = ALIGN(4); .text : { - *(.text) + *(.text*) }
. = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4); - .data : { *(.data) } + .data : { *(.data*) }
. = .; _gp = ALIGN(16) + 0x7ff0; @@ -52,7 +52,7 @@ SECTIONS __got_end = .; }
- .sdata : { *(.sdata) } + .sdata : { *(.sdata*) }
.u_boot_cmd : { __u_boot_cmd_start = .; @@ -64,7 +64,7 @@ SECTIONS num_got_entries = (__got_end - __got_start) >> 2;
. = ALIGN(4); - .sbss (NOLOAD) : { *(.sbss) } - .bss (NOLOAD) : { *(.bss) . = ALIGN(4); } + .sbss (NOLOAD) : { *(.sbss*) } + .bss (NOLOAD) : { *(.bss*) . = ALIGN(4); } uboot_end = .; } diff --git a/board/incaip/u-boot.lds b/board/incaip/u-boot.lds index 3c4fbe3..4a59cea 100644 --- a/board/incaip/u-boot.lds +++ b/board/incaip/u-boot.lds @@ -34,14 +34,14 @@ SECTIONS . = ALIGN(4); .text : { - *(.text) + *(.text*) }
. = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4); - .data : { *(.data) } + .data : { *(.data*) }
. = .; _gp = ALIGN(16) + 0x7ff0; @@ -52,7 +52,7 @@ SECTIONS __got_end = .; }
- .sdata : { *(.sdata) } + .sdata : { *(.sdata*) }
.u_boot_cmd : { __u_boot_cmd_start = .; @@ -64,7 +64,7 @@ SECTIONS num_got_entries = (__got_end - __got_start) >> 2;
. = ALIGN(4); - .sbss (NOLOAD) : { *(.sbss) } - .bss (NOLOAD) : { *(.bss) . = ALIGN(4); } + .sbss (NOLOAD) : { *(.sbss*) } + .bss (NOLOAD) : { *(.bss*) . = ALIGN(4); } uboot_end = .; } diff --git a/board/micronas/vct/u-boot.lds b/board/micronas/vct/u-boot.lds index b90b186..3a05ef9 100644 --- a/board/micronas/vct/u-boot.lds +++ b/board/micronas/vct/u-boot.lds @@ -31,14 +31,14 @@ SECTIONS . = ALIGN(4); .text : { - *(.text) + *(.text*) }
. = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4); - .data : { *(.data) } + .data : { *(.data*) }
. = .; _gp = ALIGN(16) + 0x7ff0; @@ -50,7 +50,7 @@ SECTIONS }
. = ALIGN(4); - .sdata : { *(.sdata) } + .sdata : { *(.sdata*) }
. = ALIGN(4); .u_boot_cmd : { @@ -64,8 +64,8 @@ SECTIONS num_got_entries = (__got_end - __got_start) >> 2;
. = ALIGN(4); - .sbss (NOLOAD) : { *(.sbss) } + .sbss (NOLOAD) : { *(.sbss*) } . = ALIGN(4); - .bss (NOLOAD) : { *(.bss) } + .bss (NOLOAD) : { *(.bss*) } uboot_end = .; } diff --git a/board/pb1x00/u-boot.lds b/board/pb1x00/u-boot.lds index 358cc54..bd0dee1 100644 --- a/board/pb1x00/u-boot.lds +++ b/board/pb1x00/u-boot.lds @@ -34,14 +34,14 @@ SECTIONS . = ALIGN(4); .text : { - *(.text) + *(.text*) }
. = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4); - .data : { *(.data) } + .data : { *(.data*) }
. = .; _gp = ALIGN(16) + 0x7ff0; @@ -52,7 +52,7 @@ SECTIONS __got_end = .; }
- .sdata : { *(.sdata) } + .sdata : { *(.sdata*) }
.u_boot_cmd : { __u_boot_cmd_start = .; @@ -64,7 +64,7 @@ SECTIONS num_got_entries = (__got_end - __got_start) >> 2;
. = ALIGN(4); - .sbss (NOLOAD) : { *(.sbss) } - .bss (NOLOAD) : { *(.bss) . = ALIGN(4); } + .sbss (NOLOAD) : { *(.sbss*) } + .bss (NOLOAD) : { *(.bss*) . = ALIGN(4); } uboot_end = .; } diff --git a/board/qemu-mips/u-boot.lds b/board/qemu-mips/u-boot.lds index bd16786..9460b20 100644 --- a/board/qemu-mips/u-boot.lds +++ b/board/qemu-mips/u-boot.lds @@ -34,14 +34,14 @@ SECTIONS . = ALIGN(4); .text : { - *(.text) + *(.text*) }
. = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4); - .data : { *(.data) } + .data : { *(.data*) }
. = .; _gp = ALIGN(16) +0x7ff0; @@ -53,7 +53,7 @@ SECTIONS }
. = ALIGN(4); - .sdata : { *(.sdata) } + .sdata : { *(.sdata*) }
. = .; .u_boot_cmd : { @@ -66,7 +66,7 @@ SECTIONS num_got_entries = (__got_end - __got_start) >> 2;
. = ALIGN(4); - .sbss : { *(.sbss) } - .bss : { *(.bss) . = ALIGN(4); } + .sbss : { *(.sbss*) } + .bss : { *(.bss*) . = ALIGN(4); } uboot_end = .; } diff --git a/board/tb0229/u-boot.lds b/board/tb0229/u-boot.lds index 56d7c25..5ea1094 100644 --- a/board/tb0229/u-boot.lds +++ b/board/tb0229/u-boot.lds @@ -34,14 +34,14 @@ SECTIONS . = ALIGN(4); .text : { - *(.text) + *(.text*) }
. = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4); - .data : { *(.data) } + .data : { *(.data*) }
. = .; _gp = ALIGN(16) + 0x7ff0; @@ -52,7 +52,7 @@ SECTIONS __got_end = .; }
- .sdata : { *(.sdata) } + .sdata : { *(.sdata*) }
.u_boot_cmd : { __u_boot_cmd_start = .; @@ -64,7 +64,7 @@ SECTIONS num_got_entries = (__got_end - __got_start) >> 2;
. = ALIGN(4); - .sbss (NOLOAD) : { *(.sbss) } - .bss (NOLOAD) : { *(.bss) . = ALIGN(4); } + .sbss (NOLOAD) : { *(.sbss*) } + .bss (NOLOAD) : { *(.bss*) . = ALIGN(4); } uboot_end = .; } diff --git a/examples/standalone/mips.lds b/examples/standalone/mips.lds index 63a1c92..5f766ed 100644 --- a/examples/standalone/mips.lds +++ b/examples/standalone/mips.lds @@ -30,14 +30,14 @@ SECTIONS { .text : { - *(.text) + *(.text*) }
. = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4); - .data : { *(.data) } + .data : { *(.data*) }
. = .; _gp = ALIGN(16) + 0x7ff0; @@ -48,12 +48,12 @@ SECTIONS __got_end = .; }
- .sdata : { *(.sdata) } + .sdata : { *(.sdata*) }
. = ALIGN(4); __bss_start = .; - .sbss (NOLOAD) : { *(.sbss) } - .bss (NOLOAD) : { *(.bss) . = ALIGN(4); } + .sbss (NOLOAD) : { *(.sbss*) } + .bss (NOLOAD) : { *(.bss*) . = ALIGN(4); }
_end = .; } -- 1.7.4.3

On 04/16/2011 12:16 AM, daniel.schwierzeck@googlemail.com wrote:
All architectures but MIPS are using --gc-sections on final linking. This patch introduces that feature for MIPS to reduce the memory and flash footprint.
Signed-off-by: Daniel Schwierzeck daniel.schwierzeck@googlemail.com Cc: Shinya Kuribayashi skuribay@pobox.com Cc: Wolfgang Denk wd@denx.de Cc: Stefan Roese sr@denx.de Cc: Thomas Lange thomas@corelatus.se Cc: Vlad Lungu vlad.lungu@windriver.com
Tested with ELDK-4.1 and self-built gcc-4.3.3/binutils-2.19.1 on my boards. I could not test the other boards so I would appreciate it if the maintainers in CC could do a quick test on their boards.
arch/mips/config.mk | 2 ++ board/dbau1x00/u-boot.lds | 10 +++++----- board/gth2/u-boot.lds | 10 +++++----- board/incaip/u-boot.lds | 10 +++++----- board/micronas/vct/u-boot.lds | 10 +++++----- board/pb1x00/u-boot.lds | 10 +++++----- board/qemu-mips/u-boot.lds | 10 +++++----- board/tb0229/u-boot.lds | 10 +++++----- examples/standalone/mips.lds | 10 +++++----- 9 files changed, 42 insertions(+), 40 deletions(-)
Basically, changes made look good. I'm going to apply after a couple of weeks (or a month) of interval, even without reports from the maintainers. As the patch has been proposed in the last minutes during the merge window, we'll make it in the v2011.06 release, thanks.

I just tried it for our Octeon boards and saw a noticeable reduction in size. Our bootloader shrank from 1107840 to 941600 bytes. Size isn't too big of an issue for us, though it's nice to see it shrink to under 1MB again.
-Aaron
On Friday, April 15, 2011 08:50:57 AM Shinya Kuribayashi wrote:
On 04/16/2011 12:16 AM, daniel.schwierzeck@googlemail.com wrote:
All architectures but MIPS are using --gc-sections on final linking. This patch introduces that feature for MIPS to reduce the memory and flash footprint.
Signed-off-by: Daniel Schwierzeck daniel.schwierzeck@googlemail.com Cc: Shinya Kuribayashi skuribay@pobox.com Cc: Wolfgang Denk wd@denx.de Cc: Stefan Roese sr@denx.de Cc: Thomas Lange thomas@corelatus.se Cc: Vlad Lungu vlad.lungu@windriver.com
Tested with ELDK-4.1 and self-built gcc-4.3.3/binutils-2.19.1 on my boards. I could not test the other boards so I would appreciate it if the maintainers in CC could do a quick test on their boards.
arch/mips/config.mk | 2 ++ board/dbau1x00/u-boot.lds | 10 +++++----- board/gth2/u-boot.lds | 10 +++++----- board/incaip/u-boot.lds | 10 +++++----- board/micronas/vct/u-boot.lds | 10 +++++----- board/pb1x00/u-boot.lds | 10 +++++----- board/qemu-mips/u-boot.lds | 10 +++++----- board/tb0229/u-boot.lds | 10 +++++----- examples/standalone/mips.lds | 10 +++++----- 9 files changed, 42 insertions(+), 40 deletions(-)
Basically, changes made look good. I'm going to apply after a couple of weeks (or a month) of interval, even without reports from the maintainers. As the patch has been proposed in the last minutes during the merge window, we'll make it in the v2011.06 release, thanks.

Hi Daniel,
On 04/16/2011 12:16 AM, daniel.schwierzeck@googlemail.com wrote:
All architectures but MIPS are using --gc-sections on final linking. This patch introduces that feature for MIPS to reduce the memory and flash footprint.
Signed-off-by: Daniel Schwierzeck daniel.schwierzeck@googlemail.com Cc: Shinya Kuribayashi skuribay@pobox.com Cc: Wolfgang Denk wd@denx.de Cc: Stefan Roese sr@denx.de Cc: Thomas Lange thomas@corelatus.se Cc: Vlad Lungu vlad.lungu@windriver.com
Tested with ELDK-4.1 and self-built gcc-4.3.3/binutils-2.19.1 on my boards. I could not test the other boards so I would appreciate it if the maintainers in CC could do a quick test on their boards.
arch/mips/config.mk | 2 ++ board/dbau1x00/u-boot.lds | 10 +++++----- board/gth2/u-boot.lds | 10 +++++----- board/incaip/u-boot.lds | 10 +++++----- board/micronas/vct/u-boot.lds | 10 +++++----- board/pb1x00/u-boot.lds | 10 +++++----- board/qemu-mips/u-boot.lds | 10 +++++----- board/tb0229/u-boot.lds | 10 +++++----- examples/standalone/mips.lds | 10 +++++----- 9 files changed, 42 insertions(+), 40 deletions(-)
Thanks for the work, now pushed to u-boot-mips/master.
By the way, would you do me a favor. In your mail header,
From: daniel.schwierzeck@googlemail.com
Please provide this in the form of, From: Your Name your@address
This helps patch maintainer(s) to avoid manually fixing Author: field, which is wrongly set when importing patches from E-mails using git-am. I noticed this when we got patches from you for the first time around this February or March and fixed manually at that time, but forgot to tell about that.
participants (3)
-
Aaron Williams
-
daniel.schwierzeck@googlemail.com
-
Shinya Kuribayashi