aboutsummaryrefslogtreecommitdiffstats
path: root/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S
diff options
context:
space:
mode:
Diffstat (limited to 'old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S')
-rw-r--r--old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S67
1 files changed, 67 insertions, 0 deletions
diff --git a/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S
new file mode 100644
index 0000000000..86a82b13dc
--- /dev/null
+++ b/old/xenolinux-2.4.16-sparse/arch/xeno/kernel/head.S
@@ -0,0 +1,67 @@
+
+.text
+#include <linux/config.h>
+#include <linux/threads.h>
+#include <linux/linkage.h>
+#include <asm/segment.h>
+#include <asm/page.h>
+#include <asm/pgtable.h>
+#include <asm/desc.h>
+
+/* Offsets in start_info structure */
+#define SHARED_INFO 4
+#define MOD_START 12
+#define MOD_LEN 16
+
+startup_32:
+ cld
+
+ lss stack_start,%esp
+
+ /* Copy initrd somewhere safe before it's clobbered by BSS. */
+ mov MOD_LEN(%esi),%ecx
+ shr $2,%ecx
+ jz 2f /* bail from copy loop if no initrd */
+ mov $SYMBOL_NAME(_end),%edi
+ add MOD_LEN(%esi),%edi
+ mov MOD_START(%esi),%eax
+ add MOD_LEN(%esi),%eax
+1: sub $4,%eax
+ sub $4,%edi
+ mov (%eax),%ebx
+ mov %ebx,(%edi)
+ loop 1b
+ mov %edi,MOD_START(%esi)
+
+ /* Clear BSS first so that there are no surprises... */
+2: xorl %eax,%eax
+ movl $SYMBOL_NAME(__bss_start),%edi
+ movl $SYMBOL_NAME(_end),%ecx
+ subl %edi,%ecx
+ rep stosb
+
+ /* Copy the necessary stuff from start_info structure. */
+ /* We need to copy shared_info early, so that sti/cli work */
+ mov SHARED_INFO(%esi),%eax
+ mov %eax,SYMBOL_NAME(HYPERVISOR_shared_info)
+ mov $SYMBOL_NAME(start_info_union),%edi
+ mov $128,%ecx
+ rep movsl
+
+ jmp SYMBOL_NAME(start_kernel)
+
+ENTRY(stack_start)
+ .long SYMBOL_NAME(init_task_union)+8192, __KERNEL_DS
+
+.org 0x1000
+ENTRY(empty_zero_page)
+
+.org 0x2000
+ENTRY(cpu0_pte_quicklist)
+
+.org 0x2400
+ENTRY(cpu0_pgd_quicklist)
+
+.org 0x2800
+ENTRY(stext)
+ENTRY(_stext)