mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] Allow compilation with -ffunction-sections
@ 2002-10-16 13:51 Matthew Wilcox
  2002-10-16 16:43 ` Kai Germaschewski
  0 siblings, 1 reply; 2+ messages in thread
From: Matthew Wilcox @ 2002-10-16 13:51 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-kernel, Russell King


If you compile the kernel with -ffunction-sections, each function gets
put in a section .text.function_name.  This collides with our current use
of .text.init.  So here's a patch which converts x86 to use .init.text
instead.

I've tested it on x86 and it still frees 120k of ram, so it seems to work.
Other architectures will need to change their vmlinux.lds appropriately,
and may need other changes (arm, m68k seem to use .text.init verbatim).

diff -urpNX dontdiff linux-2.5.43/arch/i386/vmlinux.lds.S linux-2.5.43-willy/arch/i386/vmlinux.lds.S
--- linux-2.5.43/arch/i386/vmlinux.lds.S	2002-10-11 05:23:56.000000000 -0700
+++ linux-2.5.43-willy/arch/i386/vmlinux.lds.S	2002-10-16 06:34:00.000000000 -0700
@@ -41,11 +41,11 @@ SECTIONS
 
   . = ALIGN(4096);		/* Init code and data */
   __init_begin = .;
-  .text.init : { *(.text.init) }
-  .data.init : { *(.data.init) }
+  .init.text : { *(.init.text) }
+  .init.data : { *(.init.data) }
   . = ALIGN(16);
   __setup_start = .;
-  .setup.init : { *(.setup.init) }
+  .init.setup : { *(.init.setup) }
   __setup_end = .;
   __initcall_start = .;
   .initcall.init : {
@@ -89,8 +89,8 @@ SECTIONS
 
   /* Sections to be discarded */
   /DISCARD/ : {
-	*(.text.exit)
-	*(.data.exit)
+	*(.exit.text)
+	*(.exit.data)
 	*(.exitcall.exit)
 	}
 
diff -urpNX dontdiff linux-2.5.43/include/linux/init.h linux-2.5.43-willy/include/linux/init.h
--- linux-2.5.43/include/linux/init.h	2002-08-13 19:54:03.000000000 -0700
+++ linux-2.5.43-willy/include/linux/init.h	2002-10-16 06:00:22.000000000 -0700
@@ -93,18 +93,18 @@ extern struct kernel_param __setup_start
  * Mark functions and data as being only used at initialization
  * or exit time.
  */
-#define __init		__attribute__ ((__section__ (".text.init")))
-#define __exit		__attribute__ ((unused, __section__(".text.exit")))
-#define __initdata	__attribute__ ((__section__ (".data.init")))
-#define __exitdata	__attribute__ ((unused, __section__ (".data.exit")))
-#define __initsetup	__attribute__ ((unused,__section__ (".setup.init")))
+#define __init		__attribute__ ((__section__ (".init.text")))
+#define __exit		__attribute__ ((unused, __section__(".exit.text")))
+#define __initdata	__attribute__ ((__section__ (".init.data")))
+#define __exitdata	__attribute__ ((unused, __section__ (".exit.data")))
+#define __initsetup	__attribute__ ((unused,__section__ (".init.setup")))
 #define __init_call(level)  __attribute__ ((unused,__section__ (".initcall" level ".init")))
 #define __exit_call	__attribute__ ((unused,__section__ (".exitcall.exit")))
 
 /* For assembly routines */
-#define __INIT		.section	".text.init","ax"
+#define __INIT		.section	".init.text","ax"
 #define __FINIT		.previous
-#define __INITDATA	.section	".data.init","aw"
+#define __INITDATA	.section	".init.data","aw"
 
 /**
  * module_init() - driver initialization entry point

-- 
Revolutions do not require corporate support.

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Allow compilation with -ffunction-sections
  2002-10-16 13:51 [PATCH] Allow compilation with -ffunction-sections Matthew Wilcox
@ 2002-10-16 16:43 ` Kai Germaschewski
  0 siblings, 0 replies; 2+ messages in thread
From: Kai Germaschewski @ 2002-10-16 16:43 UTC (permalink / raw)
  To: Matthew Wilcox; +Cc: Linus Torvalds, linux-kernel, Russell King

On Wed, 16 Oct 2002, Matthew Wilcox wrote:

> If you compile the kernel with -ffunction-sections, each function gets
> put in a section .text.function_name.  This collides with our current use
> of .text.init.  So here's a patch which converts x86 to use .init.text
> instead.
> 
> I've tested it on x86 and it still frees 120k of ram, so it seems to work.
> Other architectures will need to change their vmlinux.lds appropriately,
> and may need other changes (arm, m68k seem to use .text.init verbatim).

Just in case anybody feels bored, maybe someone wants to come up with a
include/asm-generic/vmlinux.lds.S (or a better name) which has the common 
part of all the arch's vmlinux.lds.S - so we could make such changes like
you're proposing at one place in the future.

Since all vmlinux.lds.S get preprocessed by the C preprocessor, putting
an "#include <asm-generic/vmlinux.lds.S>" in there should be easy enough 
instead of all the current duplication.

--Kai



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-10-16 16:38 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-16 13:51 [PATCH] Allow compilation with -ffunction-sections Matthew Wilcox
2002-10-16 16:43 ` Kai Germaschewski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®