The patch below adds a config option for compiling the kernel with -Os.
Compared to the last patch, the option moved to the embedded to the
General Setup menu and depends on EXPERIMENTAL instead of EMBEDDED
(retionale: it might even produce a faster kernel but it's less tested).
I removed the special cases in the arm, arm26 and h8300 Makefiles, users
on these architectures can now use OPTIMIZE_FOR_SIZE.
Compiling with this option enabled produced a working kernel for me on
i386.
cu
Adrian
--- linux-2.6.0-test4/init/Kconfig.old 2003-08-24 14:51:15.000000000 +0200
+++ linux-2.6.0-test4/init/Kconfig 2003-08-24 14:55:45.000000000 +0200
@@ -48,6 +48,15 @@
menu "General setup"
+config OPTIMIZE_FOR_SIZE
+ bool "Optimize for size" if EXPERIMENTAL
+ default n
+ help
+ Enabling this option will pass "-Os" instead of "-O2" to gcc
+ resulting in a smaller kernel.
+
+ If unsure, say N.
+
config SWAP
bool "Support for paging of anonymous memory"
depends on MMU
--- linux-2.6.0-test3/Makefile.old 2003-08-11 01:34:41.000000000 +0200
+++ linux-2.6.0-test3/Makefile 2003-08-11 01:37:16.000000000 +0200
@@ -223,7 +223,7 @@
NOSTDINC_FLAGS = -nostdinc -iwithprefix include
CPPFLAGS := -D__KERNEL__ -Iinclude
-CFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
+CFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs \
-fno-strict-aliasing -fno-common
AFLAGS := -D__ASSEMBLY__
@@ -318,6 +318,12 @@
-include .config.cmd
+ifdef CONFIG_OPTIMIZE_FOR_SIZE
+CFLAGS += -Os
+else
+CFLAGS += -O2
+endif
+
ifndef CONFIG_FRAME_POINTER
CFLAGS += -fomit-frame-pointer
endif
--- linux-2.6.0-test4/arch/arm26/Makefile.old 2003-08-24 14:50:45.000000000 +0200
+++ linux-2.6.0-test4/arch/arm26/Makefile 2003-08-24 14:56:15.000000000 +0200
@@ -13,7 +13,6 @@
OBJCOPYFLAGS :=-O binary -R .note -R .comment -S
GZFLAGS :=-9
#CFLAGS +=-pipe
-CFLAGS :=$(CFLAGS:-O2=-Os)
ifeq ($(CONFIG_FRAME_POINTER),y)
CFLAGS +=-fno-omit-frame-pointer -mno-sched-prolog
--- linux-2.6.0-test4/arch/arm/Makefile.old 2003-08-24 14:56:41.000000000 +0200
+++ linux-2.6.0-test4/arch/arm/Makefile 2003-08-24 14:56:57.000000000 +0200
@@ -14,8 +14,6 @@
GZFLAGS :=-9
#CFLAGS +=-pipe
-CFLAGS :=$(CFLAGS:-O2=-Os)
-
ifeq ($(CONFIG_FRAME_POINTER),y)
CFLAGS +=-fno-omit-frame-pointer -mapcs -mno-sched-prolog
endif
--- linux-2.6.0-test4/arch/h8300/Makefile.old 2003-08-24 14:59:42.000000000 +0200
+++ linux-2.6.0-test4/arch/h8300/Makefile 2003-08-24 15:00:18.000000000 +0200
@@ -34,7 +34,7 @@
ldflags-$(CONFIG_CPU_H8S) := -mh8300self
CFLAGS += $(cflags-y)
-CFLAGS += -mint32 -fno-builtin -Os
+CFLAGS += -mint32 -fno-builtin
CFLAGS += -g
CFLAGS += -D__linux__
CFLAGS += -DUTS_SYSNAME=\"uClinux\"
At Tue, 26 Aug 2003 00:47:17 +0200,
Adrian Bunk wrote:
>
> The patch below adds a config option for compiling the kernel with -Os.
>
> Compared to the last patch, the option moved to the embedded to the
> General Setup menu and depends on EXPERIMENTAL instead of EMBEDDED
> (retionale: it might even produce a faster kernel but it's less tested).
>
> I removed the special cases in the arm, arm26 and h8300 Makefiles, users
> on these architectures can now use OPTIMIZE_FOR_SIZE.
>
> Compiling with this option enabled produced a working kernel for me on
> i386.
>
An idea do not change -O2, and to add specification of -Os to with "OPTIMIZE_SIZE" ?
If there are a few the ones, degradation of speed means.
vmlinux size of h8300
-O2 -Os -O2&-Os
.text 561200 554368 555088
.data 59148 58612 58868
.bss 45244 45260 45244
total 665592 658240 659200
--
Yoshinori Sato
<[email protected]>
On Tue, 26 Aug 2003 23:41:09 +0900, Yoshinori Sato said:
> -O2 -Os -O2&-Os
> .text 561200 554368 555088
> .data 59148 58612 58868
> .bss 45244 45260 45244
> total 665592 658240 659200
Note that specifying -O2 *and* -Os together is probably counter-productive.
'info gcc' says:
If you use multiple `-O' options, with or without level numbers,
the last such option is the one that is effective.
You might want to investigate why the 3rd column of numbers is different
from both of the first two.