> The purpose was to define common stuff in a single place.
> Ask Rusty Russell if it is fun to add the same section to > 50
> .lds files.
> 
> Based on the feedback I will try to come up with a lighter proposal,
> that does not hurt readability.
> I still want the common stuff separated away.
I second this, though I also agree that your first cut was hiding away 
stuff more than necessary.
I would suggest an approach like the following, of course showing only a 
first simple step. A series of steps like this should allow for a serious 
reduction in size of arch/*/vmlinux.lds.S already, while being obviously 
correct and allowing archs to do their own special thing if necessary (in 
particular, IA64 seems to differ from all the other archs).
--Kai
--- /dev/null	Thu Apr 11 09:25:15 2002
+++ include/asm-generic/vmlinux.lds.h	Mon Jan 13 12:52:56 2003
@@ -0,0 +1,6 @@
+#define EXTABLE                                                               \
+  . = ALIGN(16);                                                              \
+  __start___ex_table = .;                                                     \
+  __ex_table : { *(__ex_table) }                                              \
+  __stop___ex_table = .;                                                      \
+
===== arch/alpha/vmlinux.lds.S 1.14 vs edited =====
--- 1.14/arch/alpha/vmlinux.lds.S	Sun Jan 12 19:12:21 2003
+++ edited/arch/alpha/vmlinux.lds.S	Mon Jan 13 12:53:59 2003
@@ -1,4 +1,5 @@
 #include <linux/config.h>
+#include <asm-generic/vmlinux.lds.h>
 
 OUTPUT_FORMAT("elf64-alpha")
 ENTRY(__start)
@@ -18,12 +19,7 @@
 	_etext = .;
   } :kernel
 
-  /* Exception table */
-  __ex_table ALIGN(16) : {
-	__start___ex_table = .;
-	*(__ex_table)
-	__stop___ex_table = .;
-  }
+  EXTABLE
 
   /* Kernel symbol table */
   __ksymtab ALIGN(8) : {
===== arch/arm/vmlinux-armo.lds.in 1.11 vs edited =====
--- 1.11/arch/arm/vmlinux-armo.lds.in	Sun Jan 12 19:12:21 2003
+++ edited/arch/arm/vmlinux-armo.lds.in	Mon Jan 13 12:55:04 2003
@@ -2,6 +2,9 @@
  * taken from the i386 version by Russell King
  * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
  */
+
+#include <asm-generic/vmlinux.lds.h>
+	
 OUTPUT_ARCH(arm)
 ENTRY(stext)
 jiffies = jiffies_64;
@@ -65,12 +68,7 @@
 
 	.kstrtab : { *(.kstrtab) }
 
-	. = ALIGN(16);
-	__ex_table : {			/* Exception table		*/
-		__start___ex_table = .;
-			*(__ex_table)
-		__stop___ex_table = .;
-	}
+	EXTABLE
 
 	__ksymtab : {			/* Kernel symbol table		*/
 		__start___ksymtab = .;
===== arch/arm/vmlinux-armv.lds.in 1.18 vs edited =====
--- 1.18/arch/arm/vmlinux-armv.lds.in	Sun Jan 12 22:21:35 2003
+++ edited/arch/arm/vmlinux-armv.lds.in	Mon Jan 13 12:55:31 2003
@@ -2,6 +2,9 @@
  * taken from the i386 version by Russell King
  * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
  */
+
+#include <asm-generic/vmlinux.lds.h>
+	
 OUTPUT_ARCH(arm)
 ENTRY(stext)
 jiffies = jiffies_64;
@@ -68,12 +71,7 @@
 
 	.kstrtab : { *(.kstrtab) }
 
-	. = ALIGN(16);
-	__ex_table : {			/* Exception table		*/
-		__start___ex_table = .;
-			*(__ex_table)
-		__stop___ex_table = .;
-	}
+	EXTABLE
 
 	__gpl_ksymtab : {		/* GPL Kernel symbol table	*/
 		__start___gpl_ksymtab = .;
===== arch/cris/vmlinux.lds.S 1.13 vs edited =====
--- 1.13/arch/cris/vmlinux.lds.S	Sun Jan 12 19:12:21 2003
+++ edited/arch/cris/vmlinux.lds.S	Mon Jan 13 12:56:26 2003
@@ -9,7 +9,8 @@
  */	
 
 #include <linux/config.h>
-	
+#include <asm-generic/vmlinux.lds.h>
+
 jiffies = jiffies_64;
 SECTIONS
 {
@@ -34,10 +35,7 @@
 	.rodata : { *(.rodata) *(.rodata.__*) }
 	.kstrtab : { *(.kstrtab) }
 
-	. = ALIGN(4);                /* Exception table */
-  	__start___ex_table = .;
-  	__ex_table : { *(__ex_table) }
-  	__stop___ex_table = .;
+	EXTABLE
 
   	__start___ksymtab = .;        /* Kernel symbol table */
   	__ksymtab : { *(__ksymtab) }
===== arch/i386/vmlinux.lds.S 1.22 vs edited =====
--- 1.22/arch/i386/vmlinux.lds.S	Sun Jan 12 19:12:21 2003
+++ edited/arch/i386/vmlinux.lds.S	Mon Jan 13 12:54:19 2003
@@ -1,6 +1,9 @@
 /* ld script to make i386 Linux kernel
  * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>;
  */
+
+#include <asm-generic/vmlinux.lds.h>
+	
 OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
 OUTPUT_ARCH(i386)
 ENTRY(_start)
@@ -21,10 +24,7 @@
   .rodata : { *(.rodata) *(.rodata.*) }
   .kstrtab : { *(.kstrtab) }
 
-  . = ALIGN(16);		/* Exception table */
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE
 
   . = ALIGN(64);
   __start___ksymtab = .;	/* Kernel symbol table */
===== arch/m68k/vmlinux-std.lds 1.12 vs edited =====
--- 1.12/arch/m68k/vmlinux-std.lds	Sun Jan 12 19:12:21 2003
+++ edited/arch/m68k/vmlinux-std.lds	Mon Jan 13 12:59:13 2003
@@ -1,4 +1,7 @@
 /* ld script to make m68k Linux kernel */
+
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
 OUTPUT_ARCH(m68k)
 ENTRY(_start)
@@ -15,10 +18,7 @@
   .rodata : { *(.rodata) *(.rodata.*) }
   .kstrtab : { *(.kstrtab) }
 
-  . = ALIGN(16);		/* Exception table */
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE
 
   __start___ksymtab = .;	/* Kernel symbol table */
   __ksymtab : { *(__ksymtab) }
===== arch/m68k/vmlinux-sun3.lds 1.9 vs edited =====
--- 1.9/arch/m68k/vmlinux-sun3.lds	Sun Jan 12 19:12:21 2003
+++ edited/arch/m68k/vmlinux-sun3.lds	Mon Jan 13 12:58:44 2003
@@ -1,4 +1,7 @@
 /* ld script to make m68k Linux kernel */
+
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
 OUTPUT_ARCH(m68k)
 ENTRY(_start)
@@ -23,10 +26,7 @@
 	*(.rodata.*)
 	*(.data)
 	CONSTRUCTORS
-  	. = ALIGN(16);		/* Exception table */
-  	__start___ex_table = .;
-  	*(__ex_table) 
-  	__stop___ex_table = .;
+	EXTABLE
   	__start___ksymtab = .;	/* Kernel symbol table */
   	*(__ksymtab) 
   	__stop___ksymtab = .;
===== arch/mips/vmlinux.lds.S 1.5 vs edited =====
--- 1.5/arch/mips/vmlinux.lds.S	Sun Jan 12 19:12:22 2003
+++ edited/arch/mips/vmlinux.lds.S	Mon Jan 13 13:08:00 2003
@@ -1,3 +1,5 @@
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_ARCH(mips)
 ENTRY(kernel_entry)
 SECTIONS
@@ -16,10 +18,7 @@
   } =0
   .kstrtab : { *(.kstrtab) }
 
-  . = ALIGN(16);		/* Exception table */
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE
 
   __start___dbe_table = .;	/* Exception table for data bus errors */
   __dbe_table : { *(__dbe_table) }
===== arch/mips64/vmlinux.lds.S 1.4 vs edited =====
--- 1.4/arch/mips64/vmlinux.lds.S	Fri Aug 16 22:08:39 2002
+++ edited/arch/mips64/vmlinux.lds.S	Mon Jan 13 13:07:57 2003
@@ -1,3 +1,5 @@
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_ARCH(mips)
 ENTRY(kernel_entry)
 SECTIONS
@@ -15,10 +17,7 @@
   } =0
   .kstrtab : { *(.kstrtab) }
 
-  . = ALIGN(16);		/* Exception table */
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE
 
   __start___dbe_table = .;	/* Exception table for data bus errors */
   __dbe_table : { *(__dbe_table) }
===== arch/parisc/vmlinux.lds.S 1.8 vs edited =====
--- 1.8/arch/parisc/vmlinux.lds.S	Sun Jan 12 19:12:22 2003
+++ edited/arch/parisc/vmlinux.lds.S	Mon Jan 13 13:00:53 2003
@@ -1,5 +1,6 @@
 #include <linux/config.h>
-
+#include <asm-generic/vmlinux.lds.h>
+	
 /* ld script to make hppa Linux kernel */
 #ifndef CONFIG_PARISC64
 OUTPUT_FORMAT("elf32-hppa-linux")
@@ -40,11 +41,8 @@
 	*(.data)
 	}
 
-  . = ALIGN(16);		/* Exception table */
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
-
+  EXTABLE
+	
   __start___ksymtab = .;	/* Kernel symbol table */
   __ksymtab : { *(__ksymtab) }
   __stop___ksymtab = .;
===== arch/ppc/vmlinux.lds.S 1.15 vs edited =====
--- 1.15/arch/ppc/vmlinux.lds.S	Sun Jan 12 19:12:22 2003
+++ edited/arch/ppc/vmlinux.lds.S	Mon Jan 13 13:01:40 2003
@@ -1,3 +1,5 @@
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_ARCH(powerpc)
 SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
 /* Do we need any of these for elf?
@@ -53,9 +55,7 @@
 
   .fixup   : { *(.fixup) }
 
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE
 
   __start___ksymtab = .;	/* Kernel symbol table */
   __ksymtab : { *(__ksymtab) }
===== arch/ppc64/vmlinux.lds.S 1.11 vs edited =====
--- 1.11/arch/ppc64/vmlinux.lds.S	Sun Jan 12 19:12:22 2003
+++ edited/arch/ppc64/vmlinux.lds.S	Mon Jan 13 13:02:06 2003
@@ -1,3 +1,5 @@
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_ARCH(powerpc:common64)
 /* Do we need any of these for elf?
    __DYNAMIC = 0;    */
@@ -61,9 +63,7 @@
   _edata  =  .;
   PROVIDE (edata = .);
 
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE	
 
   __start___ksymtab = .;        /* Kernel symbol table */
   __ksymtab : { *(__ksymtab) }
===== arch/s390/vmlinux.lds.S 1.6 vs edited =====
--- 1.6/arch/s390/vmlinux.lds.S	Sun Jan 12 19:12:22 2003
+++ edited/arch/s390/vmlinux.lds.S	Mon Jan 13 13:03:08 2003
@@ -1,6 +1,9 @@
 /* ld script to make s390 Linux kernel
  * Written by Martin Schwidefsky (schwidefsky@de.ibm.com)
  */
+
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390")
 OUTPUT_ARCH(s390)
 ENTRY(_start)
@@ -20,10 +23,7 @@
   .rodata : { *(.rodata) *(.rodata.*) }
   .kstrtab : { *(.kstrtab) }
 
-  . = ALIGN(16);		/* Exception table */
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE
 
   . = ALIGN(64);
   __start___ksymtab = .;	/* Kernel symbol table */
===== arch/s390x/vmlinux.lds.S 1.6 vs edited =====
--- 1.6/arch/s390x/vmlinux.lds.S	Sun Jan 12 19:12:22 2003
+++ edited/arch/s390x/vmlinux.lds.S	Mon Jan 13 13:03:27 2003
@@ -1,6 +1,9 @@
 /*	
  * Written by Martin Schwidefsky (schwidefsky@de.ibm.com)
  */
+
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
 OUTPUT_ARCH(s390:64-bit)
 ENTRY(_start)
@@ -20,10 +23,7 @@
   .rodata : { *(.rodata) *(.rodata.*) }
   .kstrtab : { *(.kstrtab) }
 
-  . = ALIGN(16);		/* Exception table */
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE
 
   . = ALIGN(64);
   __start___ksymtab = .;	/* Kernel symbol table */
===== arch/sh/vmlinux.lds.S 1.7 vs edited =====
--- 1.7/arch/sh/vmlinux.lds.S	Sun Jan 12 19:12:22 2003
+++ edited/arch/sh/vmlinux.lds.S	Mon Jan 13 13:03:55 2003
@@ -3,6 +3,8 @@
  * Written by Niibe Yutaka
  */
 #include <linux/config.h>
+#include <asm-generic/vmlinux.lds.h>
+
 #ifdef CONFIG_CPU_LITTLE_ENDIAN
 OUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
 jiffies = jiffies_64;        
@@ -28,10 +30,7 @@
   .rodata : { *(.rodata) *(.rodata.*) }
   .kstrtab : { *(.kstrtab) }
 
-  . = ALIGN(16);		/* Exception table */
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE	
 
   __start___ksymtab = .;	/* Kernel symbol table */
   __ksymtab : { *(__ksymtab) }
===== arch/sparc/vmlinux.lds.S 1.13 vs edited =====
--- 1.13/arch/sparc/vmlinux.lds.S	Sun Jan 12 19:12:22 2003
+++ edited/arch/sparc/vmlinux.lds.S	Mon Jan 13 13:04:28 2003
@@ -1,4 +1,7 @@
 /* ld script to make SparcLinux kernel */
+
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
 OUTPUT_ARCH(sparc)
 ENTRY(_start)
@@ -26,9 +29,8 @@
   __start___fixup = .;
   .fixup   : { *(.fixup) }
   __stop___fixup = .;
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+
+  EXTABLE
 
   . = ALIGN(64);
   __start___ksymtab = .;
===== arch/sparc64/vmlinux.lds.S 1.14 vs edited =====
--- 1.14/arch/sparc64/vmlinux.lds.S	Sun Jan 12 19:12:22 2003
+++ edited/arch/sparc64/vmlinux.lds.S	Mon Jan 13 13:05:01 2003
@@ -1,4 +1,7 @@
 /* ld script to make UltraLinux kernel */
+
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
 OUTPUT_ARCH(sparc:v9a)
 ENTRY(_start)
@@ -30,10 +33,7 @@
   PROVIDE (edata = .);
   .fixup   : { *(.fixup) }
 
-  . = ALIGN(16);
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE
 
   . = ALIGN(64);
   __start___ksymtab = .;
===== arch/v850/vmlinux.lds.S 1.4 vs edited =====
--- 1.4/arch/v850/vmlinux.lds.S	Thu Jan  9 00:27:41 2003
+++ edited/arch/v850/vmlinux.lds.S	Mon Jan 13 13:06:04 2003
@@ -12,6 +12,7 @@
  */
 
 #include <linux/config.h>
+#include <asm-generic/vmlinux.lds.h>
 
 
 /* The following macros contain the usual definitions for various data areas.
@@ -44,10 +45,7 @@
 		. = ALIGN (4) ;						      \
 		    	*(.call_table_data)				      \
 			*(.call_table_text)				      \
-		. = ALIGN (16) ;	/* Exception table.  */		      \
-		___start___ex_table = . ;				      \
-			*(__ex_table)					      \
-		___stop___ex_table = . ;				      \
+		EXTABLE                                                       \
 		___start___ksymtab = . ;/* Kernel symbol table.  */	      \
 			*(__ksymtab)					      \
 		___stop___ksymtab = . ;					      \
===== arch/x86_64/vmlinux.lds.S 1.9 vs edited =====
--- 1.9/arch/x86_64/vmlinux.lds.S	Sun Jan 12 19:12:22 2003
+++ edited/arch/x86_64/vmlinux.lds.S	Mon Jan 13 12:58:00 2003
@@ -1,6 +1,9 @@
 /* ld script to make x86-64 Linux kernel
  * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>;
  */
+
+#include <asm-generic/vmlinux.lds.h>
+
 OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
 OUTPUT_ARCH(i386:x86-64)
 ENTRY(_start)
@@ -21,10 +24,7 @@
   .rodata : { *(.rodata) *(.rodata.*) }
   .kstrtab : { *(.kstrtab) }
 
-  . = ALIGN(16);		/* Exception table */
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
+  EXTABLE
 
   . = ALIGN(64); 
   __start___ksymtab = .;	/* Kernel symbol table */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/