提交 cdce1f09 编写于 作者: L Linus Torvalds

Merge branch 'link_removal' of git://www.jni.nu/cris

* 'link_removal' of git://www.jni.nu/cris:
  [CRIS] Remove links from CRIS build
  [CRIS] Merge asm-offsets.c for both arches into one file.
......@@ -23,7 +23,8 @@ mach-$(CONFIG_ETRAXFS) := fs
ifneq ($(arch-y),)
SARCH := arch-$(arch-y)
inc := -Iarch/cris/include/arch-$(arch-y) -Iarch/cris/include/arch-$(arch-y)/arch
inc := -Iarch/cris/include/$(SARCH)
inc += -Iarch/cris/include/$(SARCH)/arch
else
SARCH :=
inc :=
......@@ -52,74 +53,48 @@ KBUILD_CFLAGS := $(subst -fomit-frame-pointer,,$(KBUILD_CFLAGS)) -g
KBUILD_CFLAGS += -fno-omit-frame-pointer
endif
head-y := arch/$(ARCH)/$(SARCH)/kernel/head.o
head-y := arch/cris/$(SARCH)/kernel/head.o
LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) -print-file-name=libgcc.a)
core-y += arch/$(ARCH)/kernel/ arch/$(ARCH)/mm/
core-y += arch/$(ARCH)/$(SARCH)/kernel/ arch/$(ARCH)/$(SARCH)/mm/
core-y += arch/cris/kernel/ arch/cris/mm/
core-y += arch/cris/$(SARCH)/kernel/ arch/cris/$(SARCH)/mm/
ifdef CONFIG_ETRAX_ARCH_V32
core-y += arch/$(ARCH)/$(SARCH)/$(MACH)/
core-y += arch/cris/$(SARCH)/$(MACH)/
endif
drivers-y += arch/$(ARCH)/$(SARCH)/drivers/
libs-y += arch/$(ARCH)/$(SARCH)/lib/ $(LIBGCC)
drivers-y += arch/cris/$(SARCH)/drivers/
libs-y += arch/cris/$(SARCH)/lib/ $(LIBGCC)
# cris source path
SRC_ARCH = $(srctree)/arch/$(ARCH)
SRC_ARCH = $(srctree)/arch/cris
# cris object files path
OBJ_ARCH = $(objtree)/arch/$(ARCH)
OBJ_ARCH = $(objtree)/arch/cris
boot := arch/$(ARCH)/boot
MACHINE := arch/$(ARCH)/$(SARCH)
boot := arch/cris/$(SARCH)/boot
MACHINE := arch/cris/$(SARCH)
all: zImage
zImage Image: vmlinux
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
archprepare: $(SRC_ARCH)/.links FORCE
# Create some links to make all tools happy
$(SRC_ARCH)/.links:
@rm -rf $(SRC_ARCH)/drivers
@ln -sfn $(SARCH)/drivers $(SRC_ARCH)/drivers
@rm -rf $(SRC_ARCH)/boot
@ln -sfn $(SARCH)/boot $(SRC_ARCH)/boot
@rm -rf $(SRC_ARCH)/lib
@ln -sfn $(SARCH)/lib $(SRC_ARCH)/lib
@rm -f $(SRC_ARCH)/arch/mach
@rm -rf $(SRC_ARCH)/arch
@ln -sfn $(SARCH) $(SRC_ARCH)/arch
ifdef CONFIG_ETRAX_ARCH_V32
@ln -sfn ../$(SARCH)/$(MACH) $(SRC_ARCH)/arch/mach
endif
@rm -rf $(SRC_ARCH)/kernel/vmlinux.lds.S
@ln -sfn ../$(SARCH)/vmlinux.lds.S $(SRC_ARCH)/kernel/vmlinux.lds.S
@rm -rf $(SRC_ARCH)/kernel/asm-offsets.c
@ln -sfn ../$(SARCH)/kernel/asm-offsets.c $(SRC_ARCH)/kernel/asm-offsets.c
@touch $@
archprepare:
archclean:
$(Q)if [ -e arch/$(ARCH)/boot ]; then \
$(MAKE) $(clean)=arch/$(ARCH)/boot; \
$(Q)if [ -e arch/cris/$(SARCH)/boot ]; then \
$(MAKE) $(clean)=arch/cris/$(SARCH)/boot; \
fi
CLEAN_FILES += \
$(MACHINE)/boot/zImage \
$(MACHINE)/boot/compressed/decompress.bin \
$(MACHINE)/boot/compressed/piggy.gz \
$(MACHINE)/boot/rescue/rescue.bin \
$(SRC_ARCH)/.links
$(MACHINE)/boot/rescue/rescue.bin
MRPROPER_FILES += \
$(SRC_ARCH)/drivers \
$(SRC_ARCH)/boot \
$(SRC_ARCH)/lib \
$(SRC_ARCH)/arch \
$(SRC_ARCH)/kernel/vmlinux.lds.S \
$(SRC_ARCH)/kernel/asm-offsets.c
# MRPROPER_FILES +=
define archhelp
echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
echo '* Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
echo '* zImage - Compressed kernel image (arch/cris/boot/zImage)'
echo '* Image - Uncompressed kernel image (arch/cris/boot/Image)'
endef
#include <linux/sched.h>
#include <asm/thread_info.h>
/*
* Generate definitions needed by assembly language modules.
* This code generates raw asm output which is post-processed to extract
* and format the required data.
*/
#define DEFINE(sym, val) \
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
#define BLANK() asm volatile("\n->" : : )
int main(void)
{
#define ENTRY(entry) DEFINE(PT_ ## entry, offsetof(struct pt_regs, entry))
ENTRY(orig_r10);
ENTRY(r13);
ENTRY(r12);
ENTRY(r11);
ENTRY(r10);
ENTRY(r9);
ENTRY(mof);
ENTRY(dccr);
ENTRY(srp);
BLANK();
#undef ENTRY
#define ENTRY(entry) DEFINE(TI_ ## entry, offsetof(struct thread_info, entry))
ENTRY(task);
ENTRY(flags);
ENTRY(preempt_count);
BLANK();
#undef ENTRY
#define ENTRY(entry) DEFINE(THREAD_ ## entry, offsetof(struct thread_struct, entry))
ENTRY(ksp);
ENTRY(usp);
ENTRY(dccr);
BLANK();
#undef ENTRY
#define ENTRY(entry) DEFINE(TASK_ ## entry, offsetof(struct task_struct, entry))
ENTRY(pid);
BLANK();
DEFINE(LCLONE_VM, CLONE_VM);
DEFINE(LCLONE_UNTRACED, CLONE_UNTRACED);
return 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.
*/
#include <asm-generic/vmlinux.lds.h>
#include <asm/page.h>
jiffies = jiffies_64;
SECTIONS
{
. = 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_TEXT
SCHED_TEXT
LOCK_TEXT
*(.fixup)
*(.text.__*)
}
_etext = . ; /* End of text section */
__etext = .;
. = ALIGN(4); /* Exception table */
__start___ex_table = .;
__ex_table : { *(__ex_table) }
__stop___ex_table = .;
RODATA
. = ALIGN (4);
___data_start = . ;
__Sdata = . ;
.data : { /* Data */
DATA_DATA
}
__edata = . ; /* End of data section */
_edata = . ;
. = ALIGN(PAGE_SIZE); /* init_task and stack, must be aligned */
.data.init_task : { *(.data.init_task) }
. = ALIGN(PAGE_SIZE); /* Init code and data */
__init_begin = .;
.init.text : {
_sinittext = .;
INIT_TEXT
_einittext = .;
}
.init.data : { INIT_DATA }
. = ALIGN(16);
__setup_start = .;
.init.setup : { *(.init.setup) }
__setup_end = .;
.initcall.init : {
__initcall_start = .;
INITCALLS
__initcall_end = .;
}
.con_initcall.init : {
__con_initcall_start = .;
*(.con_initcall.init)
__con_initcall_end = .;
}
SECURITY_INIT
#ifdef CONFIG_BLK_DEV_INITRD
.init.ramfs : {
__initramfs_start = .;
*(.init.ramfs)
__initramfs_end = .;
}
#endif
__vmlinux_end = .; /* last address of the physical file */
/*
* 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.
*/
. = ALIGN(PAGE_SIZE);
__init_end = .;
__data_end = . ; /* Move to _edata ? */
__bss_start = .; /* BSS */
.bss : {
*(COMMON)
*(.bss)
}
. = ALIGN (0x20);
_end = .;
__end = .;
/* Sections to be discarded */
/DISCARD/ : {
EXIT_TEXT
EXIT_DATA
*(.exitcall.exit)
}
dram_end = dram_start + CONFIG_ETRAX_DRAM_SIZE*1024*1024;
}
......@@ -28,7 +28,13 @@ _start:
beq dram_init_finished
nop
#include "../../mach/dram_init.S"
#if defined CONFIG_ETRAXFS
#include "../../mach-fs/dram_init.S"
#elif defined CONFIG_CRIS_MACH_ARTPEC3
#include "../../mach-a3/dram_init.S"
#else
#error Only ETRAXFS and ARTPEC-3 supported!
#endif
dram_init_finished:
......@@ -130,4 +136,10 @@ _cmd_line_addr:
_boot_source:
.dword 0
#include "../../mach/hw_settings.S"
#if defined CONFIG_ETRAXFS
#include "../../mach-fs/hw_settings.S"
#elif defined CONFIG_CRIS_MACH_ARTPEC3
#include "../../mach-a3/hw_settings.S"
#else
#error Only ETRAXFS and ARTPEC-3 supported!
#endif
......@@ -10,8 +10,9 @@
* The macros found in mmu_defs_asm.h uses the ## concatenation operator, so
* -traditional must not be used when assembling this file.
*/
#include <hwregs/reg_rdwr.h>
#include <linux/autoconf.h>
#include <arch/memmap.h>
#include <hwregs/reg_rdwr.h>
#include <hwregs/intr_vect.h>
#include <hwregs/asm/mmu_defs_asm.h>
#include <hwregs/asm/reg_map_asm.h>
......@@ -217,7 +218,14 @@ _inflash:
beq _dram_initialized
nop
#include "../mach/dram_init.S"
#if defined CONFIG_ETRAXFS
#include "../mach-fs/dram_init.S"
#elif defined CONFIG_CRIS_MACH_ARTPEC3
#include "../mach-a3/dram_init.S"
#else
#error Only ETRAXFS and ARTPEC-3 supported!
#endif
_dram_initialized:
;; Copy the text and data section to DRAM. This depends on that the
......@@ -472,4 +480,10 @@ swapper_pg_dir = 0xc0002000
.section ".init.data", "aw"
#include "../mach/hw_settings.S"
#if defined CONFIG_ETRAXFS
#include "../mach-fs/hw_settings.S"
#elif defined CONFIG_CRIS_MACH_ARTPEC3
#include "../mach-a3/hw_settings.S"
#else
#error Only ETRAXFS and ARTPEC-3 supported!
#endif
#include <linux/sched.h>
#include <asm/thread_info.h>
#include <linux/autoconf.h>
/*
* Generate definitions needed by assembly language modules.
......@@ -8,10 +9,14 @@
*/
#define DEFINE(sym, val) \
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
#define BLANK() asm volatile("\n->" : : )
#if !defined(CONFIG_ETRAX_ARCH_V10) && !defined(CONFIG_ETRAX_ARCH_V32)
#error One of ARCH v10 and ARCH v32 must be true!
#endif
int main(void)
{
#define ENTRY(entry) DEFINE(PT_ ## entry, offsetof(struct pt_regs, entry))
......@@ -19,31 +24,41 @@ int main(void)
ENTRY(r13);
ENTRY(r12);
ENTRY(r11);
ENTRY(r10);
ENTRY(r9);
ENTRY(r10);
ENTRY(r9);
#ifdef CONFIG_ETRAX_ARCH_V32
ENTRY(acr);
ENTRY(srs);
ENTRY(mof);
ENTRY(ccs);
ENTRY(srp);
#endif
ENTRY(mof);
#ifdef CONFIG_ETRAX_ARCH_V10
ENTRY(dccr);
#else
ENTRY(ccs);
#endif
ENTRY(srp);
BLANK();
#undef ENTRY
#define ENTRY(entry) DEFINE(TI_ ## entry, offsetof(struct thread_info, entry))
ENTRY(task);
ENTRY(flags);
ENTRY(preempt_count);
BLANK();
ENTRY(task);
ENTRY(flags);
ENTRY(preempt_count);
BLANK();
#undef ENTRY
#define ENTRY(entry) DEFINE(THREAD_ ## entry, offsetof(struct thread_struct, entry))
ENTRY(ksp);
ENTRY(usp);
ENTRY(ccs);
BLANK();
ENTRY(usp);
#ifdef CONFIG_ETRAX_ARCH_V10
ENTRY(dccr);
#else
ENTRY(ccs);
#endif
BLANK();
#undef ENTRY
#define ENTRY(entry) DEFINE(TASK_ ## entry, offsetof(struct task_struct, entry))
ENTRY(pid);
BLANK();
DEFINE(LCLONE_VM, CLONE_VM);
DEFINE(LCLONE_UNTRACED, CLONE_UNTRACED);
return 0;
ENTRY(pid);
BLANK();
DEFINE(LCLONE_VM, CLONE_VM);
DEFINE(LCLONE_UNTRACED, CLONE_UNTRACED);
return 0;
}
......@@ -8,6 +8,7 @@
* the kernel has booted.
*/
#include <linux/autoconf.h>
#include <asm-generic/vmlinux.lds.h>
#include <asm/page.h>
......@@ -17,22 +18,26 @@
#define __CONFIG_ETRAX_VMEM_SIZE 0
#endif
jiffies = jiffies_64;
SECTIONS
{
. = DRAM_VIRTUAL_BASE;
dram_start = .;
#ifdef CONFIG_ETRAX_ARCH_V10
ibr_start = .;
#else
ebp_start = .;
/* The boot section is only necessary until the VCS top */
/* level testbench includes both flash and DRAM. */
.boot : { *(.boot) }
#endif
/* See head.S and pages reserved at the start. */
/* see head.S and pages reserved at the start */
. = DRAM_VIRTUAL_BASE + 0x4000;
_text = .; /* Text and read-only data. */
text_start = .; /* Lots of aliases. */
_text = .; /* Text and read-only data. */
text_start = .; /* Lots of aliases. */
_stext = .;
__stext = .;
.text : {
......@@ -43,10 +48,10 @@ SECTIONS
*(.text.__*)
}
_etext = . ; /* End of text section. */
_etext = . ; /* End of text section. */
__etext = .;
. = ALIGN(4); /* Exception table. */
. = ALIGN(4); /* Exception table. */
__start___ex_table = .;
__ex_table : { *(__ex_table) }
__stop___ex_table = .;
......@@ -56,16 +61,16 @@ SECTIONS
. = ALIGN (4);
___data_start = . ;
__Sdata = . ;
.data : { /* Data */
.data : { /* Data */
DATA_DATA
}
__edata = . ; /* End of data section. */
__edata = . ; /* End of data section. */
_edata = . ;
. = ALIGN(PAGE_SIZE); /* init_task and stack, must be aligned. */
.data.init_task : { *(.data.init_task) }
. = ALIGN(PAGE_SIZE); /* Init code and data. */
. = ALIGN(PAGE_SIZE); /* Init code and data. */
__init_begin = .;
.init.text : {
_sinittext = .;
......@@ -77,9 +82,11 @@ SECTIONS
__setup_start = .;
.init.setup : { *(.init.setup) }
__setup_end = .;
#ifdef CONFIG_ETRAX_ARCH_V32
__start___param = .;
__param : { *(__param) }
__stop___param = .;
#endif
.initcall.init : {
__initcall_start = .;
INITCALLS
......@@ -93,7 +100,17 @@ SECTIONS
}
SECURITY_INIT
__vmlinux_end = .; /* Last address of the physical file. */
#ifdef CONFIG_ETRAX_ARCH_V10
#ifdef CONFIG_BLK_DEV_INITRD
.init.ramfs : {
__initramfs_start = .;
*(.init.ramfs)
__initramfs_end = .;
}
#endif
#endif
__vmlinux_end = .; /* Last address of the physical file. */
#ifdef CONFIG_ETRAX_ARCH_V32
PERCPU(PAGE_SIZE)
.init.ramfs : {
......@@ -101,18 +118,19 @@ SECTIONS
*(.init.ramfs)
__initramfs_end = .;
}
#endif
/*
* 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.
*/
. = ALIGN (PAGE_SIZE);
. = ALIGN(PAGE_SIZE);
__init_end = .;
__data_end = . ; /* Move to _edata? */
__bss_start = .; /* BSS. */
__data_end = . ; /* Move to _edata ? */
__bss_start = .; /* BSS. */
.bss : {
*(COMMON)
*(.bss)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册