As discussed previously, it seems a good idea to create a new init
section .init.bss that store uninitialized data used only at boot
time. That way, we can avoid to embed these uninitialized data in the
Linux image since it's totaly useless.
As a good candidate for using this, is tlbex.c. This file allocates a
couple of big arrays that don't need to be part of the init data
section since they're not initialized and they're currently only used
at boot time.
So this patchset does this but the result looks weird: I tried to
apply this patch on top of the patchset:
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
index a61246d..8271eab 100644
@@ -743,11 +743,11 @@ il_bgez(u32 **p, struct reloc **r, unsigned int reg, enum
* We deliberately chose a buffer size of 128, so we won't scribble
* over anything important on overflow before we panic.
-static __initdata u32 tlb_handler;
+static __initbss u32 tlb_handler;
/* simply assume worst case size for labels and relocs */
-static __initdata struct label labels;
-static __initdata struct reloc relocs;
+static __initbss struct label labels;
+static __initbss struct reloc relocs;
and the kernel image is bigger after the patch is applied !
$ ls -l vmlinux*
-rwxrwxr-x 1 fbuihuu fbuihuu 2503324 2007-10-11 11:41 vmlinux*
-rwxrwxr-x 1 fbuihuu fbuihuu 2503264 2007-10-11 11:41 vmlinux~old*
Could anybody explain me why ? The time is missing and I probably
couldn't investigate into this until this weekend.
Also not that with the current patchset applied, there are now 2
segments that need to be loaded, hopefully it won't cause any issues
with any bootloaders out there that would assume that an image has
only one segment...
Other question: I noticed that the exit.data section is not
discarded. Could anybody give me the reason why ?