]> git.neil.brown.name Git - history.git/commitdiff
kbuild: Fix up CRIS vmlinux.lds.S
authorKai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
Tue, 17 Sep 2002 13:37:55 +0000 (08:37 -0500)
committerKai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
Tue, 17 Sep 2002 13:37:55 +0000 (08:37 -0500)
Untested, but at least it should show how to adapt the cris arch.

arch/cris/Makefile
arch/cris/cris.ld [deleted file]
arch/cris/vmlinux.lds.S [new file with mode: 0644]

index 1b5c9af76fdd91bdcc7fd30899e287c4a24251f0..b0ec2ec5a71f194cbe5aa184cac1be63f0af349b 100644 (file)
 # License.  See the file "COPYING" in the main directory of this archive
 # for more details.
 
-LD_SCRIPT=$(TOPDIR)/arch/cris/cris.ld
-
 # A bug in ld prevents us from having a (constant-value) symbol in a
-# "ORIGIN =" or "LENGTH =" expression.  We fix that by generating a
-# linker file with the symbolic part of those expressions evaluated.
-#  Unfortunately, there is trouble making vmlinux depend on anything we
-# generate here, so we *always* regenerate the final linker script and
-# replace the LD macro to get what we want.  Thankfully(?) vmlinux is
-# always rebuilt (due to calling make recursively and not knowing if
-# anything was rebuilt).
-#  The shell script to build in some kind of dependency is really not
-# necessary for reasons of speed.  It's there because always
-# regenerating stuff (even for incremental linking of subsystems!) is
-# even more nauseating.
-LD = if [ ! -e $(LD_SCRIPT).tmp -o $(LD_SCRIPT) -nt $(LD_SCRIPT).tmp ]; then \
-          sed -e s/@CONFIG_ETRAX_DRAM_VIRTUAL_BASE@/0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE)/ \
-              -e s/@CONFIG_ETRAX_DRAM_SIZE_M@/$(CONFIG_ETRAX_DRAM_SIZE)/ \
-              < $(LD_SCRIPT) > $(LD_SCRIPT).tmp; \
-     else true; \
-     fi && $(CROSS_COMPILE)ld -mcrislinux
-
-LDFLAGS_vmlinux = -T $(LD_SCRIPT).tmp
+# "ORIGIN =" or "LENGTH =" expression.
+
+LD = $(CROSS_COMPILE)ld -mcrislinux
+
+LDFLAGS_vmlinux = -T arch/$(ARCH)/vmlinux.lds.s
 
 # objcopy is used to make binary images from the resulting linked file
 
@@ -63,6 +47,8 @@ LIBS := $(TOPDIR)/arch/cris/lib/lib.a $(LIBS) $(TOPDIR)/arch/cris/lib/lib.a $(LI
 
 MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot
 
+vmlinux: arch/$(ARCH)/vmlinux.lds.s
+
 vmlinux.bin: vmlinux
        $(OBJCOPY) $(OBJCOPYFLAGS) vmlinux vmlinux.bin
 
diff --git a/arch/cris/cris.ld b/arch/cris/cris.ld
deleted file mode 100644 (file)
index edf1fa3..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/* ld script to make the Linux/CRIS kernel
- * Authors: Bjorn Wesen (bjornw@axis.com)
- *
- * It is VERY DANGEROUS to fiddle around with the symbols in this
- * script. It is for example quite vital that all generated sections
- * that are used are actually named here, otherwise the linker will
- * put them at the end, where the init stuff is which is FREED after
- * the kernel has booted. 
- */    
-
-jiffies = jiffies_64;
-SECTIONS
-{
-       . = @CONFIG_ETRAX_DRAM_VIRTUAL_BASE@;
-       dram_start = .;
-       ibr_start = .;
-       . = . + 0x4000; /* see head.S and pages reserved at the start */
-
-       _text = .;                    /* Text and read-only data */
-       text_start = .;              /* lots of aliases */
-       _stext = .;
-       __stext = .;
-       .text : {
-               *(.text)
-               *(.fixup)
-               *(.text.__*)
-       }
-
-       _etext = . ;                  /* End of text section */ 
-       __etext = .;
-
-       .rodata : { *(.rodata) *(.rodata.__*) }
-       .kstrtab : { *(.kstrtab) }
-
-       . = ALIGN(4);                /* Exception table */
-       __start___ex_table = .;
-       __ex_table : { *(__ex_table) }
-       __stop___ex_table = .;
-
-       __start___ksymtab = .;        /* Kernel symbol table */
-       __ksymtab : { *(__ksymtab) }
-       __stop___ksymtab = .;
-
-       . = ALIGN (4);
-       ___data_start = . ;
-       __Sdata = . ;
-       .data : {                     /* Data */
-               *(.data)
-       }
-       __edata = . ;                 /* End of data section */
-       _edata = . ;
-
-       . = ALIGN(8192);              /* init_task and stack, must be aligned */
-       .data.init_task : { *(.data.init_task) }
-
-       . = ALIGN(8192);              /* Init code and data */
-       __init_begin = .;
-       .text.init : { *(.text.init) }
-       .data.init : { *(.data.init) }
-       . = ALIGN(16);
-       __setup_start = .;
-       .setup.init : { *(.setup.init) }
-       __setup_end = .;
-       .initcall.init : {
-               __initcall_start = .;
-               *(.initcall1.init);
-               *(.initcall2.init);
-               *(.initcall3.init);
-               *(.initcall4.init);
-               *(.initcall5.init);
-               *(.initcall6.init);
-               *(.initcall7.init);
-               __initcall_end = .;
-
-               /* We fill to the next page, so we can discard all init
-                  pages without needing to consider what payload might be
-                  appended to the kernel image.  */
-               FILL (0);
-               . = ALIGN (8192);
-       }
-       __vmlinux_end = .;            /* last address of the physical file */
-       __init_end = .;
-
-       __data_end = . ;              /* Move to _edata ? */
-       __bss_start = .;              /* BSS */
-       .bss : {
-               *(COMMON)
-               *(.bss)
-       }
-
-       . =  ALIGN (0x20);
-       _end = .;
-       __end = .;
-
-       /* Sections to be discarded */
-       /DISCARD/ : {
-               *(.text.exit)
-               *(.data.exit)
-               *(.exitcall.exit)
-        }
-
-       dram_end = dram_start + @CONFIG_ETRAX_DRAM_SIZE_M@*1024*1024;
-}
diff --git a/arch/cris/vmlinux.lds.S b/arch/cris/vmlinux.lds.S
new file mode 100644 (file)
index 0000000..74ac779
--- /dev/null
@@ -0,0 +1,105 @@
+/* ld script to make the Linux/CRIS kernel
+ * Authors: Bjorn Wesen (bjornw@axis.com)
+ *
+ * It is VERY DANGEROUS to fiddle around with the symbols in this
+ * script. It is for example quite vital that all generated sections
+ * that are used are actually named here, otherwise the linker will
+ * put them at the end, where the init stuff is which is FREED after
+ * the kernel has booted. 
+ */    
+
+#include <linux/config.h>
+       
+jiffies = jiffies_64;
+SECTIONS
+{
+       . = 0x ## CONFIG_ETRAX_DRAM_VIRTUAL_BASE;
+       dram_start = .;
+       ibr_start = .;
+       . = . + 0x4000; /* see head.S and pages reserved at the start */
+
+       _text = .;                    /* Text and read-only data */
+       text_start = .;              /* lots of aliases */
+       _stext = .;
+       __stext = .;
+       .text : {
+               *(.text)
+               *(.fixup)
+               *(.text.__*)
+       }
+
+       _etext = . ;                  /* End of text section */ 
+       __etext = .;
+
+       .rodata : { *(.rodata) *(.rodata.__*) }
+       .kstrtab : { *(.kstrtab) }
+
+       . = ALIGN(4);                /* Exception table */
+       __start___ex_table = .;
+       __ex_table : { *(__ex_table) }
+       __stop___ex_table = .;
+
+       __start___ksymtab = .;        /* Kernel symbol table */
+       __ksymtab : { *(__ksymtab) }
+       __stop___ksymtab = .;
+
+       . = ALIGN (4);
+       ___data_start = . ;
+       __Sdata = . ;
+       .data : {                     /* Data */
+               *(.data)
+       }
+       __edata = . ;                 /* End of data section */
+       _edata = . ;
+
+       . = ALIGN(8192);              /* init_task and stack, must be aligned */
+       .data.init_task : { *(.data.init_task) }
+
+       . = ALIGN(8192);              /* Init code and data */
+       __init_begin = .;
+       .text.init : { *(.text.init) }
+       .data.init : { *(.data.init) }
+       . = ALIGN(16);
+       __setup_start = .;
+       .setup.init : { *(.setup.init) }
+       __setup_end = .;
+       .initcall.init : {
+               __initcall_start = .;
+               *(.initcall1.init);
+               *(.initcall2.init);
+               *(.initcall3.init);
+               *(.initcall4.init);
+               *(.initcall5.init);
+               *(.initcall6.init);
+               *(.initcall7.init);
+               __initcall_end = .;
+
+               /* We fill to the next page, so we can discard all init
+                  pages without needing to consider what payload might be
+                  appended to the kernel image.  */
+               FILL (0);
+               . = ALIGN (8192);
+       }
+       __vmlinux_end = .;            /* last address of the physical file */
+       __init_end = .;
+
+       __data_end = . ;              /* Move to _edata ? */
+       __bss_start = .;              /* BSS */
+       .bss : {
+               *(COMMON)
+               *(.bss)
+       }
+
+       . =  ALIGN (0x20);
+       _end = .;
+       __end = .;
+
+       /* Sections to be discarded */
+       /DISCARD/ : {
+               *(.text.exit)
+               *(.data.exit)
+               *(.exitcall.exit)
+        }
+
+       dram_end = dram_start + CONFIG_ETRAX_DRAM_SIZE*1024*1024;
+}