2005-04-16 18:20:36 -04:00
|
|
|
/* ld script to make M32R Linux kernel
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <asm-generic/vmlinux.lds.h>
|
|
|
|
#include <asm/addrspace.h>
|
|
|
|
#include <asm/page.h>
|
|
|
|
|
|
|
|
OUTPUT_ARCH(m32r)
|
|
|
|
#if defined(__LITTLE_ENDIAN__)
|
|
|
|
jiffies = jiffies_64;
|
|
|
|
#else
|
|
|
|
jiffies = jiffies_64 + 4;
|
|
|
|
#endif
|
[PATCH] m32r: fix kernel entry address of vmlinux
This patch fixes the kernel entry point address of vmlinux.
The m32r kernel entry address is 0x08002000 (physical).
But, so far, the ENTRY point written in vmlinux.lds.S was not point
the correct kernel entry address.
(before fix)
$ objdump -x vmlinux
vmlinux: file format elf32-m32r-linux
vmlinux
architecture: m32r2, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x88002090 /* NG */
:
Sections:
Idx Name Size VMA LMA File off Algn
0 .empty_zero_page 00001000 88001000 88001000 00001000 2**12
CONTENTS, ALLOC, LOAD, DATA
1 .boot 0000008c 88002000 88002000 00002000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .text 001ab694 88002090 88002090 00002090 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
:
(after fix)
$ objdump -x vmlinux
vmlinux: file format elf32-m32r-linux
vmlinux
architecture: m32r2, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08002000 /* OK */
:
This fix also remedies the following GDB error message (of gdb-6.4 or after)
at the first operation of kernel debugging:
"Previous frame identical to this frame (corrupt stack?)".
Signed-off-by: Hirokazu Takata <takata@linux-m32r.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-02-10 04:43:39 -05:00
|
|
|
|
|
|
|
kernel_entry = boot - 0x80000000;
|
|
|
|
ENTRY(kernel_entry)
|
|
|
|
|
2005-04-16 18:20:36 -04:00
|
|
|
SECTIONS
|
|
|
|
{
|
|
|
|
. = CONFIG_MEMORY_START + __PAGE_OFFSET;
|
|
|
|
eit_vector = .;
|
|
|
|
|
|
|
|
. = . + 0x1000;
|
|
|
|
.empty_zero_page : { *(.empty_zero_page) } = 0
|
|
|
|
|
|
|
|
/* read-only */
|
|
|
|
_text = .; /* Text and read-only data */
|
|
|
|
.boot : { *(.boot) } = 0
|
|
|
|
.text : {
|
2008-11-22 12:35:54 -05:00
|
|
|
*(.text.head)
|
2007-05-12 18:31:33 -04:00
|
|
|
TEXT_TEXT
|
2005-04-16 18:20:36 -04:00
|
|
|
SCHED_TEXT
|
|
|
|
LOCK_TEXT
|
|
|
|
*(.fixup)
|
|
|
|
*(.gnu.warning)
|
|
|
|
} = 0x9090
|
|
|
|
#ifdef CONFIG_SMP
|
|
|
|
. = ALIGN(65536);
|
|
|
|
.eit_vector4 : { *(.eit_vector4) }
|
|
|
|
#endif
|
|
|
|
_etext = .; /* End of text section */
|
|
|
|
|
|
|
|
. = ALIGN(16); /* Exception table */
|
|
|
|
__start___ex_table = .;
|
|
|
|
__ex_table : { *(__ex_table) }
|
|
|
|
__stop___ex_table = .;
|
|
|
|
|
|
|
|
RODATA
|
|
|
|
|
|
|
|
/* writeable */
|
|
|
|
.data : { /* Data */
|
|
|
|
*(.spu)
|
|
|
|
*(.spi)
|
2007-05-17 07:38:44 -04:00
|
|
|
DATA_DATA
|
2005-04-16 18:20:36 -04:00
|
|
|
CONSTRUCTORS
|
|
|
|
}
|
|
|
|
|
|
|
|
. = ALIGN(4096);
|
|
|
|
__nosave_begin = .;
|
|
|
|
.data_nosave : { *(.data.nosave) }
|
|
|
|
. = ALIGN(4096);
|
|
|
|
__nosave_end = .;
|
|
|
|
|
|
|
|
. = ALIGN(32);
|
|
|
|
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
|
|
|
|
|
|
|
|
_edata = .; /* End of data section */
|
|
|
|
|
|
|
|
. = ALIGN(8192); /* init_task */
|
|
|
|
.data.init_task : { *(.data.init_task) }
|
|
|
|
|
|
|
|
/* will be freed after init */
|
|
|
|
. = ALIGN(4096); /* Init code and data */
|
|
|
|
__init_begin = .;
|
|
|
|
.init.text : {
|
|
|
|
_sinittext = .;
|
2008-01-20 08:15:03 -05:00
|
|
|
INIT_TEXT
|
2005-04-16 18:20:36 -04:00
|
|
|
_einittext = .;
|
|
|
|
}
|
2008-01-20 08:15:03 -05:00
|
|
|
.init.data : { INIT_DATA }
|
2005-04-16 18:20:36 -04:00
|
|
|
. = ALIGN(16);
|
|
|
|
__setup_start = .;
|
|
|
|
.init.setup : { *(.init.setup) }
|
|
|
|
__setup_end = .;
|
|
|
|
__initcall_start = .;
|
|
|
|
.initcall.init : {
|
2006-10-27 14:41:44 -04:00
|
|
|
INITCALLS
|
2005-04-16 18:20:36 -04:00
|
|
|
}
|
|
|
|
__initcall_end = .;
|
|
|
|
__con_initcall_start = .;
|
|
|
|
.con_initcall.init : { *(.con_initcall.init) }
|
|
|
|
__con_initcall_end = .;
|
|
|
|
SECURITY_INIT
|
|
|
|
. = ALIGN(4);
|
|
|
|
__alt_instructions = .;
|
|
|
|
.altinstructions : { *(.altinstructions) }
|
|
|
|
__alt_instructions_end = .;
|
|
|
|
.altinstr_replacement : { *(.altinstr_replacement) }
|
|
|
|
/* .exit.text is discard at runtime, not link time, to deal with references
|
|
|
|
from .altinstructions and .eh_frame */
|
2008-01-20 08:15:03 -05:00
|
|
|
.exit.text : { EXIT_TEXT }
|
|
|
|
.exit.data : { EXIT_DATA }
|
2007-02-10 04:44:44 -05:00
|
|
|
|
|
|
|
#ifdef CONFIG_BLK_DEV_INITRD
|
2005-04-16 18:20:36 -04:00
|
|
|
. = ALIGN(4096);
|
|
|
|
__initramfs_start = .;
|
|
|
|
.init.ramfs : { *(.init.ramfs) }
|
|
|
|
__initramfs_end = .;
|
2007-02-10 04:44:44 -05:00
|
|
|
#endif
|
|
|
|
|
2007-07-19 04:48:12 -04:00
|
|
|
PERCPU(4096)
|
2005-04-16 18:20:36 -04:00
|
|
|
. = ALIGN(4096);
|
|
|
|
__init_end = .;
|
|
|
|
/* freed after init ends here */
|
|
|
|
|
|
|
|
__bss_start = .; /* BSS */
|
|
|
|
.bss : { *(.bss) }
|
|
|
|
. = ALIGN(4);
|
|
|
|
__bss_stop = .;
|
|
|
|
|
|
|
|
_end = . ;
|
|
|
|
|
|
|
|
/* Sections to be discarded */
|
|
|
|
/DISCARD/ : {
|
2008-01-20 08:15:03 -05:00
|
|
|
EXIT_TEXT
|
|
|
|
EXIT_DATA
|
2005-04-16 18:20:36 -04:00
|
|
|
*(.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) }
|
|
|
|
}
|