linux-old/zBoot/head.S
<<
>>
Prefs
   1/*
   2 *  linux/boot/head.S
   3 *
   4 *  Copyright (C) 1991, 1992, 1993  Linus Torvalds
   5 */
   6
   7/*
   8 *  head.S contains the 32-bit startup code.
   9 *
  10 * NOTE!!! Startup happens at absolute address 0x00001000, which is also where
  11 * the page directory will exist. The startup code will be overwritten by
  12 * the page directory.
  13 *
  14 * Page 0 is deliberately kept safe, since System Management Mode code in 
  15 * laptops may need to access the BIOS data stored there.  This is also
  16 * useful for future device drivers that either access the BIOS via VM86 
  17 * mode.
  18 */
  19.text
  20
  21#include <linux/segment.h>
  22
  23startup_32:
  24        cld
  25        cli
  26        movl $(KERNEL_DS),%eax
  27        mov %ax,%ds
  28        mov %ax,%es
  29        mov %ax,%fs
  30        mov %ax,%gs
  31        lss _stack_start,%esp
  32        xorl %eax,%eax
  331:      incl %eax               # check that A20 really IS enabled
  34        movl %eax,0x000000      # loop forever if it isn't
  35        cmpl %eax,0x100000
  36        je 1b
  37/*
  38 * Initialize eflags.  Some BIOS's leave bits like NT set.  This would
  39 * confuse the debugger if this code is traced.
  40 * XXX - best to initialize before switching to protected mode.
  41 */
  42        pushl $0
  43        popfl
  44/*
  45 * Clear BSS
  46 */
  47        xorl %eax,%eax
  48        movl $__edata,%edi
  49        movl $__end,%ecx
  50        subl %edi,%ecx
  51        cld
  52        rep
  53        stosb
  54/*
  55 * Do the decompression, and jump to the new kernel..
  56 */
  57        call _decompress_kernel
  58        ljmp $(KERNEL_CS), $0x100000
  59
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.