Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/sun2/conf use -ffunction-sections -fdata-sections -...



details:   https://anonhg.NetBSD.org/src/rev/6fd2dcc7579f
branches:  trunk
changeset: 1023242:6fd2dcc7579f
user:      christos <christos%NetBSD.org@localhost>
date:      Mon Aug 30 18:59:57 2021 +0000

description:
use -ffunction-sections -fdata-sections --gc-sections with an ldscript
that keeps _start. This deletes all unused code and shrinks the RAMDISK
kernel enough to be able to boot again:

-rwxr-xr-x  1 root  src  2519436 Aug 30 06:38 RAMDISK.1/netbsd*
-rwxr-xr-x  1 root  src  2104440 Aug 30 07:41 RAMDISK/netbsd*

   text    data     bss     dec     hex filename
   1525412  686252   63552 2275216  22b790 RAMDISK.1/netbsd
   1098524  686400   67008 1851932  1c421c RAMDISK/netbsd

diffstat:

 sys/arch/sun2/conf/Makefile.sun2 |   4 +-
 sys/arch/sun2/conf/RAMDISK       |   6 +-
 sys/arch/sun2/conf/kern.ldscript |  88 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 95 insertions(+), 3 deletions(-)

diffs (130 lines):

diff -r 56f42dbd18fa -r 6fd2dcc7579f sys/arch/sun2/conf/Makefile.sun2
--- a/sys/arch/sun2/conf/Makefile.sun2  Mon Aug 30 18:33:37 2021 +0000
+++ b/sys/arch/sun2/conf/Makefile.sun2  Mon Aug 30 18:59:57 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.sun2,v 1.27 2020/10/05 10:42:53 rin Exp $
+# $NetBSD: Makefile.sun2,v 1.28 2021/08/30 18:59:57 christos Exp $
 
 # Makefile for NetBSD
 #
@@ -34,6 +34,8 @@
 CPPFLAGS+=     -Dsun2
 CFLAGS+=       -msoft-float -fno-defer-pop
 AFLAGS+=       -x assembler-with-cpp
+KERNLDSCRIPT?= ${SUN2}/conf/kern.ldscript
+
 
 # XXX
 COPTS.promlib.c+=${${ACTIVE_CC} == "gcc" && ${HAVE_GCC:U0} >= 9:? -Wno-error=array-bounds :}
diff -r 56f42dbd18fa -r 6fd2dcc7579f sys/arch/sun2/conf/RAMDISK
--- a/sys/arch/sun2/conf/RAMDISK        Mon Aug 30 18:33:37 2021 +0000
+++ b/sys/arch/sun2/conf/RAMDISK        Mon Aug 30 18:59:57 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: RAMDISK,v 1.60 2019/04/03 16:30:28 christos Exp $
+# $NetBSD: RAMDISK,v 1.61 2021/08/30 18:59:57 christos Exp $
 
 # RAMDISK: Root/swap on ramdisk
 # This kernel is used to:
@@ -13,7 +13,9 @@
 
 #options       INCLUDE_CONFIG_FILE     # embed config file in kernel binary
 
-makeoptions    COPTS="-Os"     # optimize for size
+makeoptions    COPTS="-Os -ffunction-sections -fdata-sections" # optimize for size
+makeoptions    EXTRA_LINKFLAGS="--gc-sections"
+makeoptions    KERNLDSCRIPT="${SUN2}/conf/kern.ldscript"
 
 # Machines to be supported by this kernel
 #options       FPU_EMULATE
diff -r 56f42dbd18fa -r 6fd2dcc7579f sys/arch/sun2/conf/kern.ldscript
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/sun2/conf/kern.ldscript  Mon Aug 30 18:59:57 2021 +0000
@@ -0,0 +1,88 @@
+/*     $NetBSD: kern.ldscript,v 1.1 2021/08/30 18:59:57 christos Exp $ */
+
+#include "assym.h"
+
+__PAGE_SIZE = 0x1000 ;
+
+ENTRY(_start)
+SECTIONS
+{
+       .text : AT (ADDR(.text) & 0x0fffffff)
+       {
+               KEEP(*(.text._start));
+               . = ALIGN(__PAGE_SIZE);
+               __text_user_start = . ;
+               *(.text.user)
+               . = ALIGN(__PAGE_SIZE);
+               __text_user_end = . ;
+
+               *(.text)
+               *(.text.*)
+               *(.stub)
+               . = ALIGN(__PAGE_SIZE);
+       } =0xCC
+       _etext = . ;
+       PROVIDE (etext = .) ;
+
+       /*
+        * Push the rodata segment up to the next large page boundary so that we
+        * can map the text segment with large pages.
+        */
+       . = ALIGN(__PAGE_SIZE);
+
+       __rodata_start = . ;
+
+       .rodata :
+       {
+               *(.rodata)
+               *(.rodata.*)
+               . = ALIGN(COHERENCY_UNIT);
+               __CTOR_LIST__ = .;
+               *(.ctors)
+               __CTOR_END__ = .;
+       }
+
+       . = ALIGN(__PAGE_SIZE);
+
+       __data_start = . ;
+       .data :
+       {
+               *(.data)
+       }
+
+       . = ALIGN(COHERENCY_UNIT);
+       .data.cacheline_aligned :
+       {
+               *(.data.cacheline_aligned)
+       }
+       . = ALIGN(COHERENCY_UNIT);
+       .data.read_mostly :
+       {
+               *(.data.read_mostly)
+       }
+       . = ALIGN(COHERENCY_UNIT);
+
+       _edata = . ;
+       PROVIDE (edata = .) ;
+       __bss_start = . ;
+       .bss :
+       {
+               *(.bss)
+               *(.bss.*)
+               *(COMMON)
+               . = ALIGN(__PAGE_SIZE);
+       }
+
+       . = ALIGN(__PAGE_SIZE);
+
+       /* End of the kernel image */
+       __kernel_end = . ;
+
+       _end = . ;
+       PROVIDE (end = .) ;
+       .note.netbsd.ident :
+       {
+               KEEP(*(.note.netbsd.ident));
+       }
+}
+



Home | Main Index | Thread Index | Old Index