mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 13:34:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			188 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 3aa2c28ff4271e9232b6c98ba000804de3ed3f33 Mon Sep 17 00:00:00 2001
 | |
| From: Kurt Mahan <kmahan@freescale.com>
 | |
| Date: Mon, 26 Nov 2007 23:41:23 -0700
 | |
| Subject: [PATCH] Rewrite coldfire linker script.
 | |
| 
 | |
| LTIBName: mcfv4e-linker-script-update
 | |
| Signed-off-by: Kurt Mahan <kmahan@freescale.com>
 | |
| ---
 | |
|  arch/m68k/coldfire/vmlinux-cf.lds |  107 ++++++++++++++++++++++++-------------
 | |
|  arch/m68k/kernel/vmlinux.lds.S    |    3 +-
 | |
|  2 files changed, 72 insertions(+), 38 deletions(-)
 | |
| 
 | |
| --- a/arch/m68k/coldfire/vmlinux-cf.lds
 | |
| +++ b/arch/m68k/coldfire/vmlinux-cf.lds
 | |
| @@ -1,76 +1,115 @@
 | |
| -/* ld script to make m68k Coldfire Linux kernel */
 | |
| +/* ld script to make m68k Coldfire Linux kernel
 | |
| + *
 | |
| + * Derived from arch/m68k/kernel/vmlinux-std.lds
 | |
| + *
 | |
| + * Updated 11/26/2007 for new CodeSourcery toolset
 | |
| + *     by Kurt Mahan <kmahan@freescale.com>
 | |
| + */
 | |
| +
 | |
| +#define	LOAD_OFFSET	0x00000000
 | |
|  
 | |
|  #include <asm-generic/vmlinux.lds.h>
 | |
| +#include <asm/page_offset.h>
 | |
| +
 | |
| +#define	START_OFFSET	0x00020000
 | |
| +#define	IMAGE_START	PAGE_OFFSET_RAW + START_OFFSET
 | |
|  
 | |
|  OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
 | |
|  OUTPUT_ARCH(m68k)
 | |
|  ENTRY(_stext)
 | |
|  jiffies = jiffies_64 + 4;
 | |
| +
 | |
|  SECTIONS
 | |
|  {
 | |
| -  . = 0xC0020000;
 | |
| -  _text = .;			/* Text and read-only data */
 | |
| -  .text : {
 | |
| +  . = IMAGE_START;
 | |
| +  .text.head : AT(ADDR(.text.head) - LOAD_OFFSET) {
 | |
| +  	_text = .;			/* Text and read-only data */
 | |
|  	*(.text.head)
 | |
| +  } :text = 0x4e75
 | |
| +
 | |
| +  .text : AT(ADDR(.text) - LOAD_OFFSET) {
 | |
|  	TEXT_TEXT
 | |
|  	SCHED_TEXT
 | |
|  	LOCK_TEXT
 | |
|  	*(.fixup)
 | |
|  	*(.gnu.warning)
 | |
| -	} :text = 0x4e75
 | |
| -
 | |
| +  } :text = 0x4e75
 | |
|    _etext = .;			/* End of text section */
 | |
|  
 | |
|    . = ALIGN(16);
 | |
| -  __start___ex_table = .;
 | |
| -  __ex_table : { *(__ex_table) }
 | |
| -  __stop___ex_table = .;
 | |
| +  __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
 | |
| +	__start___ex_table = .;
 | |
| +	*(__ex_table)
 | |
| +	__stop___ex_table = .;
 | |
| +  }
 | |
|  
 | |
|    RODATA
 | |
|  
 | |
| -  .data : {			/* Data */
 | |
| +  . = ALIGN(8192);
 | |
| +  .data : AT(ADDR(.data) - LOAD_OFFSET) {	/* Data */
 | |
|  	DATA_DATA
 | |
|  	CONSTRUCTORS
 | |
| -	}
 | |
| +  } :data
 | |
|  
 | |
| -  .bss : { *(.bss) }		/* BSS */
 | |
| +  .bss : AT(ADDR(.bss) - LOAD_OFFSET) {		/* BSS */
 | |
| +	*(.bss)
 | |
| +  }
 | |
|  
 | |
|    . = ALIGN(16);
 | |
| -  .data.cacheline_aligned : { *(.data.cacheline_aligned) } :data
 | |
| +  .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET ) {
 | |
| +	*(.data.cacheline_aligned)
 | |
| +  } :data
 | |
|  
 | |
|    _edata = .;			/* End of data section */
 | |
|  
 | |
|    . = ALIGN(8192);		/* Initrd */
 | |
| -  __init_begin = .;
 | |
| -  .init.text : {
 | |
| +  .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
 | |
| +  	__init_begin = .;
 | |
|  	_sinittext = .;
 | |
|  	*(.init.text)
 | |
|  	_einittext = .;
 | |
|    }
 | |
| -  .init.data : { *(.init.data) }
 | |
| +
 | |
| +  .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
 | |
| +	*(.init.data)
 | |
| +  }
 | |
| +
 | |
|    . = ALIGN(16);
 | |
| -  __setup_start = .;
 | |
| -  .init.setup : { *(.init.setup) }
 | |
| -  __setup_end = .;
 | |
| -  __initcall_start = .;
 | |
| -  .initcall.init : {
 | |
| +  .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
 | |
| +	__setup_start = .;
 | |
| +	*(.init.setup)
 | |
| +  	__setup_end = .;
 | |
| +  }
 | |
| +
 | |
| +  .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
 | |
| +	__initcall_start = .;
 | |
|  	INITCALLS
 | |
| +	__initcall_end = .;
 | |
|    }
 | |
| -  __initcall_end = .;
 | |
| -  __con_initcall_start = .;
 | |
| -  .con_initcall.init : { *(.con_initcall.init) }
 | |
| -  __con_initcall_end = .;
 | |
| +
 | |
| +  .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
 | |
| +	__con_initcall_start = .;
 | |
| +	*(.con_initcall.init)
 | |
| +	__con_initcall_end = .;
 | |
| +  }
 | |
| +
 | |
|    SECURITY_INIT
 | |
| +
 | |
|  #ifdef CONFIG_BLK_DEV_INITRD
 | |
|    . = ALIGN(8192);
 | |
| -  __initramfs_start = .;
 | |
| -  .init.ramfs : { *(.init.ramfs) }
 | |
| -  __initramfs_end = .;
 | |
| +  .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
 | |
| +	__initramfs_start = .;
 | |
| +	*(.init.ramfs)
 | |
| +	__initramfs_end = .;
 | |
| +  }
 | |
|  #endif
 | |
| +
 | |
|    . = ALIGN(8192);
 | |
|    __init_end = .;
 | |
|  
 | |
| -  .data.init_task : { *(.data.init_task) }	/* The initial task and kernel stack */
 | |
| +  .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
 | |
| +	*(.data.init_task)	/* The initial task and kernel stack */
 | |
| +  }
 | |
|  
 | |
|    _end = . ;
 | |
|  
 | |
| @@ -79,14 +118,8 @@ SECTIONS
 | |
|  	*(.exit.text)
 | |
|  	*(.exit.data)
 | |
|  	*(.exitcall.exit)
 | |
| -	}
 | |
| +  }
 | |
|  
 | |
|    /* Stabs debugging sections.  */
 | |
| -  .stab 0 : { *(.stab) }
 | |
| -  .stabstr 0 : { *(.stabstr) }
 | |
| -  .stab.excl 0 : { *(.stab.excl) }
 | |
| -  .stab.exclstr 0 : { *(.stab.exclstr) }
 | |
| -  .stab.index 0 : { *(.stab.index) }
 | |
| -  .stab.indexstr 0 : { *(.stab.indexstr) }
 | |
| -  .comment 0 : { *(.comment) }
 | |
| +  STABS_DEBUG
 | |
|  }
 | |
| --- a/arch/m68k/kernel/vmlinux.lds.S
 | |
| +++ b/arch/m68k/kernel/vmlinux.lds.S
 | |
| @@ -1,6 +1,7 @@
 | |
|  PHDRS
 | |
|  {
 | |
| -  text PT_LOAD FILEHDR PHDRS FLAGS (7);
 | |
| +  headers PT_PHDR PHDRS ;
 | |
| +  text PT_LOAD FILEHDR PHDRS FLAGS (5);
 | |
|    data PT_LOAD FLAGS (7);
 | |
|  }
 | |
|  #ifdef CONFIG_SUN3
 |