In general allow any kernel entry point to work given any set ofinitial register values, while saving the original registersvalues so the C code can do something with it if we desire.

- trampoline.S fix comments, and enter the kernel at secondary_startup_32 instead of startup_32- trampoline.S fix gdt_48 to have the correct gdt limit- Save all of the registers we get from any 32bit entry point, and don't assume they have any particular value.- head.S split up startup_32 - secondary_startup_32 handles the SMP case - move finding the command line to startup.c - Don't copy the kernel parameters to the initial_zero_page, instead just pass setup.c where they are located.- Seperate the segments used by setup.S from the rest of the kernel. This way bootloader can continue to make assumptions about which segments setup.S uses while the rest of the kernel can do whatever is convinient.- Move boot specific defines into boot.h

/*- * New page tables may be in 4Mbyte page mode and may- * be using the global pages. - *- * NOTE! If we are on a 486 we may have no cr4 at all!- * So we do not try to touch it unless we really have- * some bits in it to set. This won't work if the BSP- * implements cr4 but this AP does not -- very unlikely- * but be warned! The same applies to the pse feature- * if not equally supported. --macro- *- * NOTE! We have to correct for the fact that we're- * not yet offset PAGE_OFFSET..- */-#define cr4_bits mmu_cr4_features-__PAGE_OFFSET- cmpl $0,cr4_bits- je 3f- movl %cr4,%eax # Turn on paging options (PSE,PAE,..)- orl cr4_bits,%eax- movl %eax,%cr4- jmp 3f-1:-#endif-/* * Initialize page tables */ movl $pg0-__PAGE_OFFSET,%edi /* initialize page tables */@@ -106,14 +95,13 @@ /* Set up the stack pointer */ lss stack_start,%esp