mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 06:18:54 +00:00 
			
		
		
		
	 ca967258b6
			
		
	
	
		ca967258b6
		
	
	
	
	
		
			
			With this consolidation we can now modify the .data section definition in one spot for all archs. Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
		
			
				
	
	
		
			307 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			307 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  * arch/v850/vmlinux.lds.S -- kernel linker script for v850 platforms
 | |
|  *
 | |
|  *  Copyright (C) 2002,03,04,05  NEC Electronics Corporation
 | |
|  *  Copyright (C) 2002,03,04,05  Miles Bader <miles@gnu.org>
 | |
|  *
 | |
|  * This file is subject to the terms and conditions of the GNU General
 | |
|  * Public License.  See the file COPYING in the main directory of this
 | |
|  * archive for more details.
 | |
|  *
 | |
|  * Written by Miles Bader <miles@gnu.org>
 | |
|  */
 | |
| 
 | |
| 
 | |
| #define VMLINUX_SYMBOL(_sym_) _##_sym_
 | |
| #include <asm-generic/vmlinux.lds.h>
 | |
| 
 | |
| /* For most platforms, this will define useful things like RAM addr/size.  */
 | |
| #include <asm/machdep.h>
 | |
| 
 | |
| 
 | |
| /* The following macros contain the usual definitions for various data areas.
 | |
|    The prefix `RAMK_' is used to indicate macros suitable for kernels loaded
 | |
|    into RAM, and similarly `ROMK_' for ROM-resident kernels.  Note that all
 | |
|    symbols are prefixed with an extra `_' for compatibility with the v850
 | |
|    toolchain.  */
 | |
| 
 | |
| 	
 | |
| /* Interrupt vectors.  */
 | |
| #define INTV_CONTENTS							      \
 | |
| 		. = ALIGN (0x10) ;					      \
 | |
| 		__intv_start = . ;					      \
 | |
| 			*(.intv.reset)	/* Reset vector */		      \
 | |
| 		. = __intv_start + 0x10 ;				      \
 | |
| 			*(.intv.common)	/* Vectors common to all v850e proc */\
 | |
| 		. = __intv_start + 0x80 ;				      \
 | |
| 			*(.intv.mach)	/* Machine-specific int. vectors.  */ \
 | |
| 		__intv_end = . ;
 | |
| 
 | |
| #define RODATA_CONTENTS							      \
 | |
| 		. = ALIGN (16) ;					      \
 | |
| 			*(.rodata) *(.rodata.*)				      \
 | |
| 			*(__vermagic)		/* Kernel version magic */    \
 | |
| 			*(.rodata1)					      \
 | |
| 		/* PCI quirks */					      \
 | |
| 		___start_pci_fixups_early = . ;				      \
 | |
| 			*(.pci_fixup_early)				      \
 | |
| 		___end_pci_fixups_early = . ;				      \
 | |
| 		___start_pci_fixups_header = . ;			      \
 | |
| 			*(.pci_fixup_header)				      \
 | |
| 		___end_pci_fixups_header = . ;				      \
 | |
| 		___start_pci_fixups_final = . ;				      \
 | |
| 			*(.pci_fixup_final)				      \
 | |
| 		___end_pci_fixups_final = . ;				      \
 | |
| 		___start_pci_fixups_enable = . ;			      \
 | |
| 			*(.pci_fixup_enable)				      \
 | |
| 		___end_pci_fixups_enable = . ;				      \
 | |
| 		/* Kernel symbol table: Normal symbols */		      \
 | |
| 		___start___ksymtab = .;					      \
 | |
| 			*(__ksymtab)					      \
 | |
| 		___stop___ksymtab = .;					      \
 | |
| 		/* Kernel symbol table: GPL-only symbols */		      \
 | |
| 		___start___ksymtab_gpl = .;				      \
 | |
| 			*(__ksymtab_gpl)				      \
 | |
| 		___stop___ksymtab_gpl = .;				      \
 | |
| 		/* Kernel symbol table: GPL-future symbols */		      \
 | |
| 		___start___ksymtab_gpl_future = .;			      \
 | |
| 			*(__ksymtab_gpl_future)				      \
 | |
| 		___stop___ksymtab_gpl_future = .;			      \
 | |
| 		/* Kernel symbol table: strings */			      \
 | |
| 			*(__ksymtab_strings)				      \
 | |
| 		/* Kernel symbol table: Normal symbols */		      \
 | |
| 		___start___kcrctab = .;					      \
 | |
| 			*(__kcrctab)					      \
 | |
| 		___stop___kcrctab = .;					      \
 | |
| 		/* Kernel symbol table: GPL-only symbols */		      \
 | |
| 		___start___kcrctab_gpl = .;				      \
 | |
| 			*(__kcrctab_gpl)				      \
 | |
| 		___stop___kcrctab_gpl = .;				      \
 | |
| 		/* Kernel symbol table: GPL-future symbols */		      \
 | |
| 		___start___kcrctab_gpl_future = .;			      \
 | |
| 			*(__kcrctab_gpl_future)				      \
 | |
| 		___stop___kcrctab_gpl_future = .;			      \
 | |
| 		/* Built-in module parameters */			      \
 | |
| 		. = ALIGN (4) ;						      \
 | |
| 		___start___param = .;					      \
 | |
| 		*(__param)						      \
 | |
| 		___stop___param = .;
 | |
| 
 | |
| 
 | |
| /* Kernel text segment, and some constant data areas.  */
 | |
| #define TEXT_CONTENTS							      \
 | |
| 		_text = .;						      \
 | |
| 		__stext = . ;						      \
 | |
| 		TEXT_TEXT						      \
 | |
| 		SCHED_TEXT						      \
 | |
| 			*(.exit.text)	/* 2.5 convention */		      \
 | |
| 			*(.text.exit)	/* 2.4 convention */		      \
 | |
| 			*(.text.lock)					      \
 | |
| 			*(.exitcall.exit)				      \
 | |
| 		__real_etext = . ;	/* There may be data after here.  */  \
 | |
| 		RODATA_CONTENTS						      \
 | |
| 		. = ALIGN (4) ;						      \
 | |
| 		    	*(.call_table_data)				      \
 | |
| 			*(.call_table_text)				      \
 | |
| 		. = ALIGN (16) ;	/* Exception table.  */		      \
 | |
| 		___start___ex_table = . ;				      \
 | |
| 			*(__ex_table)					      \
 | |
| 		___stop___ex_table = . ;				      \
 | |
| 		. = ALIGN (4) ;						      \
 | |
| 		__etext = . ;
 | |
| 
 | |
| /* Kernel data segment.  */
 | |
| #define DATA_CONTENTS							      \
 | |
| 		__sdata = . ;						      \
 | |
| 		DATA_DATA						      \
 | |
| 			*(.exit.data)	/* 2.5 convention */		      \
 | |
| 			*(.data.exit)	/* 2.4 convention */		      \
 | |
| 		. = ALIGN (16) ;					      \
 | |
| 		*(.data.cacheline_aligned)				      \
 | |
| 		. = ALIGN (0x2000) ;					      \
 | |
|         	*(.data.init_task)					      \
 | |
| 		. = ALIGN (0x2000) ;					      \
 | |
| 		__edata = . ;
 | |
| 
 | |
| /* Kernel BSS segment.  */
 | |
| #define BSS_CONTENTS							      \
 | |
| 		__sbss = . ;						      \
 | |
| 			*(.bss)						      \
 | |
| 			*(COMMON)					      \
 | |
| 		. = ALIGN (4) ;						      \
 | |
| 		__init_stack_end = . ;					      \
 | |
| 		__ebss = . ;
 | |
| 
 | |
| /* `initcall' tables.  */
 | |
| #define INITCALL_CONTENTS						      \
 | |
| 		. = ALIGN (16) ;					      \
 | |
| 		___setup_start = . ;					      \
 | |
| 			*(.init.setup)	/* 2.5 convention */		      \
 | |
| 			*(.setup.init)	/* 2.4 convention */		      \
 | |
| 		___setup_end = . ;					      \
 | |
| 		___initcall_start = . ;					      \
 | |
| 			*(.initcall.init)				      \
 | |
| 			INITCALLS					      \
 | |
| 		. = ALIGN (4) ;						      \
 | |
| 		___initcall_end = . ;					      \
 | |
| 		___con_initcall_start = .;				      \
 | |
| 			*(.con_initcall.init)				      \
 | |
| 		___con_initcall_end = .;
 | |
| 
 | |
| /* Contents of `init' section for a kernel that's loaded into RAM.  */
 | |
| #define RAMK_INIT_CONTENTS						      \
 | |
| 		RAMK_INIT_CONTENTS_NO_END				      \
 | |
| 		__init_end = . ;
 | |
| /* Same as RAMK_INIT_CONTENTS, but doesn't define the `__init_end' symbol.  */
 | |
| #define RAMK_INIT_CONTENTS_NO_END					      \
 | |
| 		. = ALIGN (4096) ;					      \
 | |
| 		__init_start = . ;					      \
 | |
| 			__sinittext = .;				      \
 | |
| 			*(.init.text)	/* 2.5 convention */		      \
 | |
| 			__einittext = .;				      \
 | |
| 			*(.init.data)					      \
 | |
| 			*(.text.init)	/* 2.4 convention */		      \
 | |
| 			*(.data.init)					      \
 | |
| 		INITCALL_CONTENTS					      \
 | |
| 		INITRAMFS_CONTENTS
 | |
| 
 | |
| /* The contents of `init' section for a ROM-resident kernel which
 | |
|    should go into RAM.  */	
 | |
| #define ROMK_INIT_RAM_CONTENTS						      \
 | |
| 		. = ALIGN (4096) ;					      \
 | |
| 		__init_start = . ;					      \
 | |
| 			*(.init.data)	/* 2.5 convention */		      \
 | |
| 			*(.data.init)	/* 2.4 convention */		      \
 | |
| 		__init_end = . ;					      \
 | |
| 		. = ALIGN (4096) ;
 | |
| 
 | |
| /* The contents of `init' section for a ROM-resident kernel which
 | |
|    should go into ROM.  */	
 | |
| #define ROMK_INIT_ROM_CONTENTS						      \
 | |
| 			_sinittext = .;					      \
 | |
| 			*(.init.text)	/* 2.5 convention */		      \
 | |
| 			_einittext = .;					      \
 | |
| 			*(.text.init)	/* 2.4 convention */		      \
 | |
| 		INITCALL_CONTENTS					      \
 | |
| 		INITRAMFS_CONTENTS
 | |
| 
 | |
| /* A root filesystem image, for kernels with an embedded root filesystem.  */
 | |
| #define ROOT_FS_CONTENTS						      \
 | |
| 		__root_fs_image_start = . ;				      \
 | |
| 		*(.root)						      \
 | |
| 		__root_fs_image_end = . ;
 | |
| 
 | |
| #ifdef CONFIG_BLK_DEV_INITRD
 | |
| /* The initramfs archive.  */
 | |
| #define INITRAMFS_CONTENTS						      \
 | |
| 		. = ALIGN (4) ;						      \
 | |
| 		___initramfs_start = . ;				      \
 | |
| 			*(.init.ramfs)					      \
 | |
| 		___initramfs_end = . ;
 | |
| #endif
 | |
| 
 | |
| /* Where the initial bootmap (bitmap for the boot-time memory allocator) 
 | |
|    should be place.  */
 | |
| #define BOOTMAP_CONTENTS						      \
 | |
| 		. = ALIGN (4096) ;					      \
 | |
| 		__bootmap = . ;						      \
 | |
| 		. = . + 4096 ;		/* enough for 128MB.   */
 | |
| 
 | |
| /* The contents of a `typical' kram area for a kernel in RAM.  */
 | |
| #define RAMK_KRAM_CONTENTS						      \
 | |
| 		__kram_start = . ;					      \
 | |
| 		TEXT_CONTENTS						      \
 | |
| 		DATA_CONTENTS						      \
 | |
| 		BSS_CONTENTS						      \
 | |
| 		RAMK_INIT_CONTENTS					      \
 | |
| 		__kram_end = . ;					      \
 | |
| 		BOOTMAP_CONTENTS
 | |
| 
 | |
| 
 | |
| /* Define output sections normally used for a ROM-resident kernel.  
 | |
|    ROM and RAM should be appropriate memory areas to use for kernel
 | |
|    ROM and RAM data.  This assumes that ROM starts at 0 (and thus can
 | |
|    hold the interrupt vectors).  */
 | |
| #define ROMK_SECTIONS(ROM, RAM)						      \
 | |
| 	.rom : {							      \
 | |
| 		INTV_CONTENTS						      \
 | |
| 		TEXT_CONTENTS						      \
 | |
| 		ROMK_INIT_ROM_CONTENTS					      \
 | |
| 		ROOT_FS_CONTENTS					      \
 | |
| 	} > ROM								      \
 | |
| 									      \
 | |
| 	__rom_copy_src_start = . ;					      \
 | |
| 									      \
 | |
| 	.data : {							      \
 | |
| 		__kram_start = . ;					      \
 | |
| 		__rom_copy_dst_start = . ;				      \
 | |
| 		DATA_CONTENTS						      \
 | |
| 		ROMK_INIT_RAM_CONTENTS					      \
 | |
| 		__rom_copy_dst_end = . ;				      \
 | |
| 	} > RAM  AT> ROM						      \
 | |
| 									      \
 | |
| 	.bss ALIGN (4) : {						      \
 | |
| 		BSS_CONTENTS						      \
 | |
| 		__kram_end = . ;					      \
 | |
| 		BOOTMAP_CONTENTS					      \
 | |
| 	} > RAM
 | |
| 
 | |
| 
 | |
| /* The 32-bit variable `jiffies' is just the lower 32-bits of `jiffies_64'.  */
 | |
| _jiffies = _jiffies_64 ;
 | |
| 
 | |
| 
 | |
| /* Include an appropriate platform-dependent linker-script (which
 | |
|    usually should use the above macros to do most of the work).  */
 | |
| 
 | |
| #ifdef CONFIG_V850E_SIM
 | |
| # include "sim.ld"
 | |
| #endif
 | |
| 
 | |
| #ifdef CONFIG_V850E2_SIM85E2
 | |
| # include "sim85e2.ld"
 | |
| #endif
 | |
| 
 | |
| #ifdef CONFIG_V850E2_FPGA85E2C
 | |
| # include "fpga85e2c.ld"
 | |
| #endif
 | |
| 
 | |
| #ifdef CONFIG_V850E2_ANNA
 | |
| # ifdef CONFIG_ROM_KERNEL
 | |
| #  include "anna-rom.ld"
 | |
| # else
 | |
| #  include "anna.ld"
 | |
| # endif
 | |
| #endif
 | |
| 
 | |
| #ifdef CONFIG_V850E_AS85EP1
 | |
| # ifdef CONFIG_ROM_KERNEL
 | |
| #  include "as85ep1-rom.ld"
 | |
| # else
 | |
| #  include "as85ep1.ld"
 | |
| # endif
 | |
| #endif
 | |
| 
 | |
| #ifdef CONFIG_RTE_CB_MA1
 | |
| # ifdef CONFIG_ROM_KERNEL
 | |
| #  include "rte_ma1_cb-rom.ld"
 | |
| # else
 | |
| #  include "rte_ma1_cb.ld"
 | |
| # endif
 | |
| #endif
 | |
| 
 | |
| #ifdef CONFIG_RTE_CB_NB85E
 | |
| # ifdef CONFIG_ROM_KERNEL
 | |
| #  include "rte_nb85e_cb-rom.ld"
 | |
| # elif defined(CONFIG_RTE_CB_MULTI)
 | |
| #  include "rte_nb85e_cb-multi.ld"
 | |
| # else
 | |
| #  include "rte_nb85e_cb.ld"
 | |
| # endif
 | |
| #endif
 | |
| 
 | |
| #ifdef CONFIG_RTE_CB_ME2
 | |
| #  include "rte_me2_cb.ld"
 | |
| #endif
 | |
| 
 |