Author: tkreuzer
Date: Tue Jul 27 21:49:19 2010
New Revision: 48318
URL: 
http://svn.reactos.org/svn/reactos?rev=48318&view=rev
Log:
[FREELDR]
- Move all 16 bit code to .text16 section
- Fix linking issues with x86_16_SwitchToLong, by using a relative call
- Align pagetables by page size
- Add mainCRTStartup entry point
freeldr now starts again
Modified:
    branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/arch.S
    branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/fathelp.S
    branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/i386pnp.S
    branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/int386.S
    branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/mb.S
    branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/freeldr.rbuild
    branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/freeldr_amd64.lnk
Modified: branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/arch.S
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/boot/…
==============================================================================
--- branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/arch.S [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/arch.S [iso-8859-1]
Tue Jul 27 21:49:19 2010
@@ -1,11 +1,10 @@
 .intel_syntax noprefix
-.text
-.code16
 #define ASM
 #include <arch.h>
-//.org 0x8000
+.code16
+.section .text16, "x"
 .global RealEntryPoint
 RealEntryPoint:
@@ -284,6 +283,7 @@
        jmp LMODE_CS:offset LongCat     //Load CS with 64 bit segment and flush the
instruction cache
 .code64
+.text
 LongCat:
        /* Set up 64 bit stack */
        mov rsp, stack64
@@ -378,6 +378,7 @@
 /** Some data *****************************************************************/
+.text
 .code64
 stack16:
@@ -449,6 +450,6 @@
 /* Need to include them here, because of linking issues between 64 / 16 bit */
 //#include "debug16.S"
 #include "int386.S"
-#include "boot.S"
+//#include "boot.S"
 #include "i386pnp.S"
Modified: branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/fathelp.S
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/boot/…
==============================================================================
--- branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/fathelp.S
[iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/fathelp.S
[iso-8859-1] Tue Jul 27 21:49:19 2010
@@ -4,9 +4,8 @@
 .intel_syntax noprefix
-.text
-
 .code16
+.section .text16, "x"
 #define BootSectorStackTop             0x7bf2
 #define DataAreaStartHigh              0x2
@@ -48,13 +47,14 @@
 // encode a jmp instruction to jump to 0000:8200
 //.org 0x8000
-.global _mainCRTStartup        // For Mingw32 builds where the linker looks for this
symbol
-_mainCRTStartup:
+.global mainCRTStartup // For Mingw32 builds where the linker looks for this symbol
+mainCRTStartup:
 .global start
 start:
-        .byte  0xe9
-               .byte   0xfd
-               .byte   0x01
+    jmp RealEntryPoint
+//        .byte        0xe9
+//             .byte   0xfd
+//             .byte   0x01
 // Now starts the extra boot code that we will store
 // in the first 512 bytes of freeldr.sys. This code
@@ -67,7 +67,7 @@
                push ax                                                 // First save AX -
the start cluster of freeldr.sys
-
+#if 0
                // Display "Loading FreeLoader..." message
         mov  esi, offset msgLoading                    // Loading message
         call [bp-PutCharsOffset]               // Display it
@@ -117,15 +117,17 @@
                pop  es
         jmp  LoadFile                                          // Load the next cluster
(if any)
-
+#endif
 LoadFile_Done:
         mov  dl, [bp+BootDrive]        // Load the boot drive into DL
                mov  dh, BootPartition                          // Load the boot partition
into DH
-        push word ptr 0x0000
-        push word ptr 0x8000                                   // We will do a far return
to 0000:8000h
-
-//        retf                                                         // Transfer
control to ROSLDR
-       .byte 0xcb // == retf
+
+               push 0                                          // push segment (0x0000)
+               mov bx, [0x8000 + 0xA8]         // load the RVA of the EntryPoint into eax
+               add bx, 0x8000                          // RVA -> VA and skip 3 bytes
(jump to fathelper code)
+               push bx                                         // push offset
+//      retf                                           // Transfer control to FreeLoader
+               .byte 0xcb // == retf
 // Reads the entire FAT into memory at 7000:0000
@@ -224,7 +226,8 @@
                ret
-
+.text
+.code64
 msgLoading:
                .ascii "Loading FreeLoader..."
                .byte 0x0d,0x0a,0
Modified: branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/i386pnp.S
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/boot/…
==============================================================================
--- branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/i386pnp.S
[iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/i386pnp.S
[iso-8859-1] Tue Jul 27 21:49:19 2010
@@ -17,13 +17,11 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
-       .text
-       .code16
-
 #define ASM
-
 #include <arch.h>
+.code64
+.text
 /*
  * U32 PnpBiosSupported(VOID);
@@ -144,7 +142,7 @@
        movzx ecx, ax
        mov _pnp_result, ecx
-       call    x86_16_SwitchToLong
+       call [x86_16_SwitchToLong_ptr]
        .code64
        mov esi, [rbp + 0x08]
@@ -236,7 +234,7 @@
        movzx ecx, ax
        mov _pnp_result, ecx
-       call x86_16_SwitchToLong
+       call [x86_16_SwitchToLong_ptr]
        .code64
        /* update node number */
@@ -255,4 +253,7 @@
        ret
+x86_16_SwitchToLong_ptr:
+    .quad x86_16_SwitchToLong
+
 /* EOF */
Modified: branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/int386.S
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/boot/…
==============================================================================
--- branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/int386.S
[iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/int386.S
[iso-8859-1] Tue Jul 27 21:49:19 2010
@@ -17,13 +17,13 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
-       .intel_syntax noprefix
-       .text
-       .code16
+.intel_syntax noprefix
 #define ASM
 #include <arch.h>
+.code64
+.text
 Int386_REGS:
@@ -59,6 +59,10 @@
        .quad 0
 Int386_regsout:
        .quad 0
+
+
+.code16
+.section .text16, "x"
 /*
  * int Int386(int ivec, REGS* in, REGS* out);
Modified: branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/mb.S
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/boot/…
==============================================================================
--- branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/mb.S [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/mb.S [iso-8859-1]
Tue Jul 27 21:49:19 2010
@@ -49,7 +49,8 @@
        .byte   0
        .endr
-.bss
+.text
+.align 4096
 PageDirectoryStart:
 pml4_startup:
        .fill 4096, 1, 0
Modified: branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/freeldr.rbuild
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/boot/…
==============================================================================
--- branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/freeldr.rbuild [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/freeldr.rbuild [iso-8859-1]
Tue Jul 27 21:49:19 2010
@@ -17,7 +17,7 @@
 </if>
 <ifnot property="ARCH" value="powerpc">
-       <module name="freeldr" type="bootloader"
baseaddress="$(BASEADDRESS_FREELDR)">
+       <module name="freeldr" type="bootloader"
baseaddress="$(BASEADDRESS_FREELDR)" entrypoint="mainCRTStartup">
                <linkerscript>freeldr_$(ARCH).lnk</linkerscript>
                <bootstrap installbase="loader" />
                <library>freeldr_startup</library>
Modified: branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/freeldr_amd64.lnk
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/boot/…
==============================================================================
--- branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/freeldr_amd64.lnk [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/freeldr_amd64.lnk [iso-8859-1]
Tue Jul 27 21:49:19 2010
@@ -2,7 +2,13 @@
 ENTRY(_mainCRTStartup)
 SECTIONS
 {
-  .text  __image_base__ + __section_alignment__  :
+  .text16 __image_base__ + __section_alignment__  :
+  {
+    __text16_start__ = . ;
+    *(.text16)
+    __text16_end__ = . ;
+  }
+  .text BLOCK(__section_alignment__) :
   {
     __text_start__ = .;
     *(.init)
@@ -19,12 +25,6 @@
      *(.gcc_exc)
      __text_end__ = .;
     *(.gcc_except_table)
-  }
-  init BLOCK(__section_alignment__) :
-  {
-    __init_start__ = . ;
-    *(init)
-    __init_end__ = . ;
   }
   .data BLOCK(__section_alignment__) :
   {
@@ -44,14 +44,6 @@
     *(SORT(.rdata$*))
     *(.eh_frame)
   }
-  .stab BLOCK(__section_alignment__) (NOLOAD) :
-  {
-    [ .stab ]
-  }
-  .stabstr BLOCK(__section_alignment__) (NOLOAD) :
-  {
-    [ .stabstr ]
-  }
 }