[ros-diffs] [tkreuzer] 52172: [FREELDR] Fix MSVC and amd64 build

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Fri Jun 10 12:55:15 UTC 2011


Author: tkreuzer
Date: Fri Jun 10 12:55:14 2011
New Revision: 52172

URL: http://svn.reactos.org/svn/reactos?rev=52172&view=rev
Log:
[FREELDR]
Fix MSVC and amd64 build

Added:
    trunk/reactos/boot/freeldr/freeldr/arch/amd64/stubs.S   (with props)
    trunk/reactos/boot/freeldr/freeldr/include/arch/i386/realmode.h   (with props)
Modified:
    trunk/reactos/boot/freeldr/freeldr/CMakeLists.txt
    trunk/reactos/boot/freeldr/freeldr/arch/amd64/arch.S
    trunk/reactos/boot/freeldr/freeldr/arch/amd64/loader.c
    trunk/reactos/boot/freeldr/freeldr/arch/i386/realmode.S
    trunk/reactos/boot/freeldr/freeldr/disk/disk.c
    trunk/reactos/boot/freeldr/freeldr/disk/scsiport.c
    trunk/reactos/boot/freeldr/freeldr/freeldr.c
    trunk/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h
    trunk/reactos/boot/freeldr/freeldr/include/arch/amd64/machpc.h
    trunk/reactos/boot/freeldr/freeldr/include/disk.h
    trunk/reactos/boot/freeldr/freeldr/include/freeldr.h

Modified: trunk/reactos/boot/freeldr/freeldr/CMakeLists.txt
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/CMakeLists.txt?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/CMakeLists.txt [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -18,9 +18,14 @@
             arch/i386/arch.S)
     endif()
 elseif(ARCH MATCHES amd64)
-    list(APPEND FREELDR_STARTUP_SOURCE
-        arch/i386/fathelp.S
-        arch/amd64/arch.S)
+    if(MSVC)
+        list(APPEND FREELDR_BASE64K_SOURCE
+            arch/amd64/stubs.S)
+    else()
+        list(APPEND FREELDR_STARTUP_SOURCE
+            arch/i386/fathelp.S
+            arch/amd64/arch.S)
+    endif()
 endif()
 
 if(ARCH MATCHES i386)
@@ -39,12 +44,14 @@
             arch/i386/i386bug.c)
     endif()
 elseif(ARCH MATCHES amd64)
+    if(NOT MSVC)
     list(APPEND FREELDR_BASE64K_SOURCE
         arch/i386/drvmap.S
         arch/i386/i386cpu.S
         arch/i386/i386idt.S
         arch/i386/i386trap.S
         arch/amd64/mb.S)
+    endif()
 endif()
 
 set_source_files_properties(${FREELDR_BASE64K_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_NTHAL_")
@@ -60,7 +67,7 @@
     disk/disk.c
     disk/partition.c
     disk/ramdisk.c
-    disk/scsiport.c
+    #disk/scsiport.c
     fs/ext2.c
     fs/fat.c
     fs/fs.c
@@ -148,6 +155,25 @@
         arch/i386/xboxvideo.c
         windows/i386/ntsetup.c
         windows/i386/wlmemory.c)
+elseif(ARCH MATCHES amd64)
+    list(APPEND FREELDR_ARCH_SOURCE
+        arch/amd64/loader.c
+        arch/i386/hardware.c
+        arch/i386/hwacpi.c
+        arch/i386/hwapm.c
+        arch/i386/hwpci.c
+        arch/i386/i386rtl.c
+        arch/i386/i386disk.c
+        arch/i386/i386vid.c
+        arch/i386/machpc.c
+        arch/i386/ntoskrnl.c
+        arch/i386/pccons.c
+        arch/i386/pcdisk.c
+        arch/i386/pcmem.c
+        arch/i386/pcrtc.c
+        arch/i386/pcvideo.c
+        windows/amd64/ntsetup.c
+        windows/amd64/wlmemory.c)
 else()
 #TBD
 endif()

Modified: trunk/reactos/boot/freeldr/freeldr/arch/amd64/arch.S
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/amd64/arch.S?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/amd64/arch.S [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/amd64/arch.S [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -25,21 +25,21 @@
 
 	/* checkPoint Charlie - where it all began... */
 	mov si, offset CheckPoint0
-	call writestr	
+	call writestr
 
 	/* Setup a real mode stack */
 	mov	sp, stack16
 
 	/* Zero BootDrive and BootPartition */
 	xor eax, eax
-	mov BootDrive, eax
-	mov BootPartition, eax
+	mov FrldrBootDrive, eax
+	mov FrldrBootPartition, eax
 
 	/* Store the boot drive */
-	mov BootDrive, dl
+	mov FrldrBootDrive, dl
 
 	/* Store the boot partition */
-	mov BootPartition, dh
+	mov FrldrBootPartition, dh
 
 	/* Load the GDT */
 	lgdt gdtptr
@@ -50,16 +50,16 @@
 
 	/* checkPoint Charlie - where it all began... */
 	mov si, offset CheckPoint1
-	call writestr	
-	
+	call writestr
+
 	call x86_16_BuildPageTables
-	
+
 	/* checkPoint Charlie - where it all began... */
 	mov si, offset CheckPoint2
-	call writestr	
+	call writestr
 
 	/* Check if CPU supports CPUID */
-	
+
 	pushfd
 	pop eax
 	mov ebx, eax
@@ -70,8 +70,8 @@
 	pop eax
 	cmp eax,ebx
 	jz NO_CPUID_SUPPORT_DETECTED
-	
-	/* CPUID support detected - getting the PAE/PGE */	
+
+	/* CPUID support detected - getting the PAE/PGE */
 
 	mov eax,1 // Fn0000_0001 - PAE in EDX[6]
 	cpuid
@@ -79,24 +79,24 @@
 	and edx,0x00a0
 	test edx,edx // are PAE and PGE bits set?
 	jz NO_X64_SUPPORT_DETECTED
-	
+
 	/* PAE and PGE are here */
-	
+
 	xor edx, edx
 	mov eax, 0x80000001
 	cpuid
 	and edx, 0x20000000
 	test edx,edx
 	jz NO_X64_SUPPORT_DETECTED
-	
+
 	/* X64 Processor */
-	
+
 	/* checkPoint Charlie - where it all began... */
 	mov si, offset CheckPoint3
-	call writestr	
+	call writestr
 
 	jmp switch64
-	
+
 NO_X64_SUPPORT_DETECTED:
 	mov  si, offset NotAnX64Processor	// Loading message
 	call writestr
@@ -129,7 +129,7 @@
 //	mov ds, ax
 //	mov word ptr ds:[0xb8002], 0x0e02 + '2'
 
-	
+
 	/* Return into real mode */
 	call x86_64_SwitchToReal
 	.code16
@@ -169,7 +169,7 @@
 	ret
 
 /*
- * We define 512 2MB pages at the start of memory, so we can access the first 
+ * We define 512 2MB pages at the start of memory, so we can access the first
  * 1 GB as if paging was disabled
  */
 x86_16_BuildPageTables:
@@ -238,7 +238,7 @@
 	popad
 	popfd
 	ret
-	
+
 
 writechr:
 	pushf
@@ -252,7 +252,7 @@
 
 //.global x86_16_SwitchToLong
 x86_16_SwitchToLong:
-	
+
 	cli
 
 	xor	ax,ax
@@ -332,7 +332,7 @@
 
 	/* Step 2 - disable long mode in EFER MSR */
 //	mov ecx, 0xC0000080		// Specify EFER MSR
-//	rdmsr					
+//	rdmsr
 //	and eax, ~0x00000100	// Disable EFER.LME
 //	wrmsr
 
@@ -408,12 +408,12 @@
 	.long	gdt			/* Base Address */
 
 
-.global BootDrive
-BootDrive:
+.global FrldrBootDrive
+FrldrBootDrive:
     .long 0
-    
-.global BootPartition
-BootPartition:
+
+.global FrldrBootPartition
+FrldrBootPartition:
     .long 0
 
 .global NotAnX64Processor
@@ -431,12 +431,12 @@
 CheckPoint0:
 	.ascii "Starting FreeLoader..."
 	.byte 0x0d, 0x0a, 0
-	
+
 .global CheckPoint1
 CheckPoint1:
 	.ascii "FreeLoader[16-bit]: building page tables..."
 	.byte 0x0d, 0x0a, 0
-	
+
 .global CheckPoint2
 CheckPoint2:
 	.ascii "FreeLoader[16-bit]: checking CPU for x64 long mode..."

Modified: trunk/reactos/boot/freeldr/freeldr/arch/amd64/loader.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/amd64/loader.c?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/amd64/loader.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/amd64/loader.c [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -27,7 +27,6 @@
 ULONG_PTR GdtBase, IdtBase, TssBase;
 extern ROS_KERNEL_ENTRY_POINT KernelEntryPoint;
 
-PPAGE_DIRECTORY_AMD64 pPML4;
 PVOID pIdt, pGdt;
 
 /* FUNCTIONS *****************************************************************/

Added: trunk/reactos/boot/freeldr/freeldr/arch/amd64/stubs.S
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/amd64/stubs.S?rev=52172&view=auto
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/amd64/stubs.S (added)
+++ trunk/reactos/boot/freeldr/freeldr/arch/amd64/stubs.S [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -1,0 +1,48 @@
+
+
+#include <asm.inc>
+
+EXTERN BootMain:PROC
+
+.code64
+
+/* 64 bit entry point */
+PUBLIC mainCRTStartup
+mainCRTStartup:
+    jmp BootMain
+
+PUBLIC Int386
+Int386:
+    ret
+
+PUBLIC __lgdt
+__lgdt:
+
+PUBLIC __ltr
+__ltr:
+
+PUBLIC PxeCallApi
+PxeCallApi:
+    .long 0
+
+PUBLIC PageDirectoryStart
+PageDirectoryStart:
+    .long 0
+
+PUBLIC PageDirectoryEnd
+PageDirectoryEnd:
+    .long 0
+
+PUBLIC PnpBiosGetDeviceNode
+PnpBiosGetDeviceNode:
+    .long 0
+
+PUBLIC PnpBiosGetDeviceNodeCount
+PnpBiosGetDeviceNodeCount:
+    .long 0
+
+PUBLIC PnpBiosSupported
+PnpBiosSupported:
+    .long 0
+
+END

Propchange: trunk/reactos/boot/freeldr/freeldr/arch/amd64/stubs.S
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/realmode.S
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/realmode.S?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/realmode.S [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/realmode.S [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -14,10 +14,10 @@
 
 
 // globals
-PUBLIC _BootPartition
-_BootPartition:
-PUBLIC _BootDrive
-_BootDrive:
+PUBLIC _FrldrBootPartition
+_FrldrBootPartition:
+PUBLIC _FrldrBootDrive
+_FrldrBootDrive:
 
 PUBLIC _PageDirectoryStart
 _PageDirectoryStart:

Modified: trunk/reactos/boot/freeldr/freeldr/disk/disk.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/disk/disk.c?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/disk/disk.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/disk/disk.c [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -132,18 +132,21 @@
 	/* FIXME */
 	else if (DiskReadBootRecord(FrldrBootDrive, 0, &MasterBootRecord))
 	{
+		ULONG BootPartition;
+
 		/* This is a hard disk */
-
-		if (!DiskGetActivePartitionEntry(FrldrBootDrive, &PartitionEntry, &FrldrBootPartition))
+		if (!DiskGetActivePartitionEntry(FrldrBootDrive, &PartitionEntry, &BootPartition))
 		{
 			DbgPrint("Invalid active partition information\n");
 			return FALSE;
 		}
 
-        	if (Size <= sizeof(Path) + 18 + strlen(Device) + strlen(Partition))
-            	{
-                	return FALSE;
-            	}
+		FrldrBootPartition = BootPartition;
+
+		if (Size <= sizeof(Path) + 18 + strlen(Device) + strlen(Partition))
+		{
+			return FALSE;
+		}
 
 		strcpy(BootPath, Path);
 
@@ -158,7 +161,7 @@
 		strcat(BootPath, "partition(");
 		strcat(BootPath, Partition);
 		strcat(BootPath, ")");
-        }
+	}
 	else
 	{
 		/* This is a CD-ROM drive */

Modified: trunk/reactos/boot/freeldr/freeldr/disk/scsiport.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/disk/scsiport.c?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/disk/scsiport.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/disk/scsiport.c [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -10,6 +10,33 @@
 #include <ntdddisk.h>
 #include <stdio.h>
 #include <stdarg.h>
+
+#undef ScsiPortLogError
+#undef ScsiPortMoveMemory
+#undef ScsiPortWritePortBufferUchar
+#undef ScsiPortWritePortBufferUlong
+#undef ScsiPortWritePortBufferUshort
+#undef ScsiPortWritePortUchar
+#undef ScsiPortWritePortUlong
+#undef ScsiPortWritePortUshort
+#undef ScsiPortWriteRegisterBufferUchar
+#undef ScsiPortWriteRegisterBufferUlong
+#undef ScsiPortWriteRegisterBufferUshort
+#undef ScsiPortWriteRegisterUchar
+#undef ScsiPortWriteRegisterUlong
+#undef ScsiPortWriteRegisterUshort
+#undef ScsiPortReadPortBufferUchar
+#undef ScsiPortReadPortBufferUlong
+#undef ScsiPortReadPortBufferUshort
+#undef ScsiPortReadPortUchar
+#undef ScsiPortReadPortUlong
+#undef ScsiPortReadPortUshort
+#undef ScsiPortReadRegisterBufferUchar
+#undef ScsiPortReadRegisterBufferUlong
+#undef ScsiPortReadRegisterBufferUshort
+#undef ScsiPortReadRegisterUchar
+#undef ScsiPortReadRegisterUlong
+#undef ScsiPortReadRegisterUshort
 
 #define NDEBUG
 #include <debug.h>

Modified: trunk/reactos/boot/freeldr/freeldr/freeldr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/freeldr.c?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/freeldr.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/freeldr.c [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -54,17 +54,6 @@
 	RunLoader();
 }
 
-#ifdef _MSC_VER
-long _ftol2(double f)
-{
-    return _ftol(f);
-}
-long _ftol2_sse(double f)
-{
-    return _ftol(f);
-}
-#endif
-
 // We need to emulate these, because the original ones don't work in freeldr
 int __cdecl wctomb(char *mbchar, wchar_t wchar)
 {

Modified: trunk/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -18,7 +18,9 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#ifndef __ASM__
 #pragma once
+#endif
 
 // This is needed because headers define wrong one for ReactOS
 #undef KIP0PCRADDRESS
@@ -49,16 +51,15 @@
 
 #define APIC_PHYS_BASE              0xfee00000
 
-#define NUM_PAGES_KERNEL 
+#define NUM_PAGES_KERNEL
 
 #ifndef ASM
-typedef struct _PAGE_DIRECTORY_AMD64
-{
-    HARDWARE_PTE Pde[512];
-} PAGE_DIRECTORY_AMD64, *PPAGE_DIRECTORY_AMD64;
-
 
 VOID FrLdrSetupGdtIdt(VOID);
+
+#include <arch/i386/realmode.h>
+#define FrldrBootDrive *((PULONG)BSS_BootDrive)
+#define FrldrBootPartition *((PULONG)BSS_BootPartition)
 
 #endif
 

Modified: trunk/reactos/boot/freeldr/freeldr/include/arch/amd64/machpc.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/include/arch/amd64/machpc.h?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/include/arch/amd64/machpc.h [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/include/arch/amd64/machpc.h [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -49,6 +49,7 @@
 
 ULONG PcMemGetMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, ULONG MaxMemoryMapSize);
 
+BOOLEAN PcDiskGetBootPath(char *BootPath, unsigned Size);
 BOOLEAN PcDiskReadLogicalSectors(ULONG DriveNumber, ULONGLONG SectorNumber, ULONG SectorCount, PVOID Buffer);
 BOOLEAN PcDiskGetPartitionEntry(ULONG DriveNumber, ULONG PartitionNumber, PPARTITION_TABLE_ENTRY PartitionTableEntry);
 BOOLEAN PcDiskGetDriveGeometry(ULONG DriveNumber, PGEOMETRY DriveGeometry);

Added: trunk/reactos/boot/freeldr/freeldr/include/arch/i386/realmode.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/include/arch/i386/realmode.h?rev=52172&view=auto
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/include/arch/i386/realmode.h (added)
+++ trunk/reactos/boot/freeldr/freeldr/include/arch/i386/realmode.h [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -1,0 +1,13 @@
+
+
+/* These addresses specify the realmode "BSS section" */
+#define BSS_START HEX(7000)
+#define BSS_CallbackAddress BSS_START + 0
+#define BSS_CallbackReturn BSS_START + 8
+#define BSS_BootDrive BSS_START + 16
+#define BSS_BootPartition BSS_START + 20
+
+#define PE_LOAD_BASE HEX(9000)
+#define IMAGE_DOS_HEADER_e_lfanew 36
+#define IMAGE_FILE_HEADER_SIZE 20
+#define IMAGE_OPTIONAL_HEADER_AddressOfEntryPoint 16

Propchange: trunk/reactos/boot/freeldr/freeldr/include/arch/i386/realmode.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/boot/freeldr/freeldr/include/disk.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/include/disk.h?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/include/disk.h [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/include/disk.h [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -123,8 +123,10 @@
 BOOLEAN	DiskReadLogicalSectors(ULONG DriveNumber, ULONGLONG SectorNumber, ULONG SectorCount, PVOID Buffer); // Implemented in i386disk.c
 BOOLEAN	DiskIsDriveRemovable(ULONG DriveNumber);
 VOID	DiskStopFloppyMotor(VOID);	// Implemented in i386disk.c
+#ifndef _M_AMD64
 extern ULONG FrldrBootDrive;
 extern ULONG FrldrBootPartition;
+#endif
 
 BOOLEAN DiskGetBootPath(char *BootPath, unsigned Size);
 

Modified: trunk/reactos/boot/freeldr/freeldr/include/freeldr.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/include/freeldr.h?rev=52172&r1=52171&r2=52172&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/include/freeldr.h [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/include/freeldr.h [iso-8859-1] Fri Jun 10 12:55:14 2011
@@ -95,6 +95,7 @@
 #elif defined(_M_AMD64)
 #include <arch/amd64/hardware.h>
 #include <arch/amd64/machpc.h>
+#include <arch/i386/pxe.h>
 #include <internal/amd64/intrin_i.h>
 #endif
 /* misc files */




More information about the Ros-diffs mailing list