[ros-diffs] [akhaldi] 48688: [FREELDR] - Use fathelp.S from r43775 (amd64 branch by timo) [CMAKE] - Improve hal, ntoskrnl and freeldr/setupldr build.

akhaldi at svn.reactos.org akhaldi at svn.reactos.org
Thu Sep 2 21:00:03 UTC 2010


Author: akhaldi
Date: Thu Sep  2 21:00:02 2010
New Revision: 48688

URL: http://svn.reactos.org/svn/reactos?rev=48688&view=rev
Log:
[FREELDR]
- Use fathelp.S from r43775 (amd64 branch by timo)
[CMAKE]
- Improve hal, ntoskrnl and freeldr/setupldr build.

Modified:
    branches/cmake-bringup/boot/CMakeLists.txt
    branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S
    branches/cmake-bringup/hal/CMakeLists.txt
    branches/cmake-bringup/ntoskrnl/CMakeLists.txt

Modified: branches/cmake-bringup/boot/CMakeLists.txt
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/boot/CMakeLists.txt?rev=48688&r1=48687&r2=48688&view=diff
==============================================================================
--- branches/cmake-bringup/boot/CMakeLists.txt [iso-8859-1] (original)
+++ branches/cmake-bringup/boot/CMakeLists.txt [iso-8859-1] Thu Sep  2 21:00:02 2010
@@ -154,7 +154,7 @@
 list(APPEND SETUPLDR_MAIN_SOURCE freeldr/freeldr/windows/setupldr2.c)
 endif(ARCH MATCHES i386)
 
-set_source_files_properties(${SETUPLDR_MAIN_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_NTHAL_;FREELDR_REACTOS_SETUP" COMPILE_FLAGS "-ffreestanding -fno-builtin -fno-inline -fno-zero-initialized-in-bss")
+set_source_files_properties(${SETUPLDR_MAIN_SOURCE} PROPERTIES COMPILE_FLAGS "-ffreestanding -fno-builtin -fno-inline -fno-zero-initialized-in-bss")
 
 set(CMAKE_C_CREATE_SHARED_LIBRARY "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
 
@@ -169,7 +169,7 @@
     ${CMAKE_CURRENT_BINARY_DIR}/freeldr_freeldr.h.gch
     ${FREELDR_SOURCE})
 
-set_target_properties(freeldr PROPERTIES LINK_FLAGS "-Wl,--strip-all -Wl,-entry,_mainCRTStartup -Wl,--image-base,0x8000 -Wl,--exclude-all-symbols -Wl,--subsystem,native" SUFFIX ".sys")
+set_target_properties(freeldr PROPERTIES LINK_FLAGS "-Wl,--strip-all -Wl,-entry,_mainCRTStartup -Wl,--image-base,0x8000 -Wl,--exclude-all-symbols -Wl,--subsystem,native -Wl,--file-alignment,0x1000" SUFFIX ".sys")
 
 if(ARCH MATCHES i386)
 target_link_libraries(freeldr mini_hal)
@@ -189,11 +189,9 @@
     ${FREELDR_ARCH_SOURCE}
     ${SETUPLDR_MAIN_SOURCE})
 
-add_library(setupldr SHARED
-    ${CMAKE_CURRENT_BINARY_DIR}/freeldr_freeldr.h.gch
-    ${SETUPLDR_SOURCE})
-
-set_target_properties(setupldr PROPERTIES LINK_FLAGS "-Wl,--strip-all -Wl,-entry,_mainCRTStartup -Wl,--image-base,0x8000 -Wl,--exclude-all-symbols -Wl,--subsystem,native" SUFFIX ".sys")
+add_library(setupldr SHARED ${SETUPLDR_SOURCE})
+
+set_target_properties(setupldr PROPERTIES LINK_FLAGS "-Wl,--strip-all -Wl,-entry,_mainCRTStartup -Wl,--image-base,0x8000 -Wl,--exclude-all-symbols -Wl,--subsystem,native -Wl,--file-alignment,0x1000" SUFFIX ".sys" COMPILE_DEFINITIONS "FREELDR_REACTOS_SETUP")
 
 if(ARCH MATCHES i386)
 target_link_libraries(setupldr mini_hal)
@@ -204,4 +202,3 @@
     cmlib
     rtl
     libcntpr)
-add_pch(setupldr ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/freeldr/include/freeldr.h ${SETUPLDR_SOURCE})

Modified: branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S?rev=48688&r1=48687&r2=48688&view=diff
==============================================================================
--- branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S [iso-8859-1] (original)
+++ branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S [iso-8859-1] Thu Sep  2 21:00:02 2010
@@ -1,10 +1,12 @@
-// FATHELP.ASM
+// fathelp.S
 // FAT12/16 Boot Sector Helper Code
 // Copyright (c) 1998, 2001, 2002, 2003 Brian Palmer
 
-		.text
-		.code16
-		.intel_syntax
+.intel_syntax noprefix
+
+.text
+
+.code16
 
 #define BootSectorStackTop		0x7bf2
 #define DataAreaStartHigh		0x2
@@ -16,28 +18,26 @@
 #define ReadClusterOffset		0xc
 #define PutCharsOffset			0xe
 
-#define OEMName							3
-#define BytesPerSector					11
-#define SectsPerCluster					13
-#define ReservedSectors					14
-#define NumberOfFats					16
-#define MaxRootEntries					17
-#define TotalSectors					19
-#define MediaDescriptor					21
-#define SectorsPerFat					22
-#define SectorsPerTrack					24
-#define NumberOfHeads					26
-#define HiddenSectors					28
-#define TotalSectorsBig					32
-#define BootDrive						36
-#define Reserved						37
-#define ExtendSig						38
-#define SerialNumber					39
-#define VolumeLabel						43
-#define FileSystem						54
-
-#define BootPartition					0x7dfd
-        
+#define OEMName					3
+#define BytesPerSector			11
+#define SectsPerCluster			13
+#define ReservedSectors			14
+#define NumberOfFats			16
+#define MaxRootEntries			17
+#define TotalSectors			19
+#define MediaDescriptor			21
+#define SectorsPerFat			22
+#define SectorsPerTrack			24
+#define NumberOfHeads			26
+#define HiddenSectors			28
+#define TotalSectorsBig			32
+#define BootDrive				36
+#define Reserved				37
+#define ExtendSig				38
+#define SerialNumber			39
+#define VolumeLabel				43
+#define FileSystem				54
+
 
 // This code will be stored in the first 512 bytes
 // of freeldr.sys. The first 3 bytes will be a jmp
@@ -46,12 +46,13 @@
 //
 // This code is loaded at 0000:8000 so we have to
 // encode a jmp instruction to jump to 0000:8200
-
-.globl _mainCRTStartup						/* For Mingw32 builds where the linker looks for this symbol */
+//.org 0x8000
+
+.global _mainCRTStartup	// For Mingw32 builds where the linker looks for this symbol
 _mainCRTStartup:
-.globl start
+.global start
 start:
-		.byte	0xe9
+        .byte	0xe9
 		.byte	0xfd
 		.byte	0x01
 
@@ -64,80 +65,80 @@
 
 FatHelperEntryPoint:
 
-		push %ax							/* First save AX - the start cluster of freeldr.sys */
+		push ax							// First save AX - the start cluster of freeldr.sys
 
 
 		// Display "Loading FreeLoader..." message
-        mov  %esi,msgLoading				/* Loading message */
-        call [%bp-PutCharsOffset]			/* Display it */
+        mov  esi, offset msgLoading			// Loading message
+        call [bp-PutCharsOffset]		// Display it
 
 
 		call ReadFatIntoMemory
 
-		pop  %ax							/* Restore AX (start cluster) */
+		pop  ax							// Restore AX (start cluster)
 		// AX has start cluster of freeldr.sys
 
-        mov  %bx,0x800
-        mov  %es,%bx
+        mov  bx,0x800
+        mov  es,bx
 
 LoadFile:
-		push %ax
+		push ax
 		call IsFat12
-		pop  %ax
+		pop  ax
 		jnc  LoadFile2
-		cmp  %ax,0xff8						/* Check to see if this is the last cluster in the chain */
+		cmp  ax,0x0ff8		    // Check to see if this is the last cluster in the chain
 		jmp  LoadFile3
 LoadFile2:
-		cmp  %ax,0xfff8
+		cmp  ax,0x0fff8
 LoadFile3:
-		jae	 LoadFile_Done					/* If so continue, if not then read then next one */
-		push %ax
-        xor  %bx,%bx						/* Load ROSLDR starting at 0000:8000h */
-		push %es
-		call [%bp-ReadClusterOffset]
-		pop  %es
-
-		xor  %bx,%bx
-        mov  %bl,BYTE [%bp+SectsPerCluster]
-		shl  %bx,5							/* BX = BX * 512 / 16 */
-		mov  %ax,%es						/* Increment the load address by */
-		add  %ax,%bx						/* The size of a cluster */
-		mov  %es,%ax
+		jae	 LoadFile_Done		// If so continue, if not then read then next one
+		push ax
+        xor  bx,bx              // Load ROSLDR starting at 0000:8000h
+		push es
+		call [bp-ReadClusterOffset]
+		pop  es
+
+		xor  bx,bx
+        mov  bl, [bp+SectsPerCluster]
+		shl  bx,5							// BX = BX * 512 / 16
+		mov  ax,es							// Increment the load address by
+		add  ax,bx							// The size of a cluster
+		mov  es,ax
 
 		call IsFat12
-		pop  %ax
-		push %es
+		pop  ax
+		push es
 		jnc  LoadFile4
-		call GetFatEntry12					/* Get the next entry */
+		call GetFatEntry12					// Get the next entry
 		jmp  LoadFile5
 LoadFile4:
 		call GetFatEntry16
 LoadFile5:
-		pop  %es
-
-        jmp  LoadFile						/* Load the next cluster (if any) */
+		pop  es
+
+        jmp  LoadFile						// Load the next cluster (if any)
 
 LoadFile_Done:
-        mov  %dl,BYTE [%bp+BootDrive]		/* Load the boot drive into DL */
-		mov  %dh,[BootPartition]			/* Load the boot partition into DH */
-
-		push 0								/* push segment (0x0000) */
-		mov %bx, [0x80A8]					/* 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 */
+        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
+
 
 // Reads the entire FAT into memory at 7000:0000
 ReadFatIntoMemory:
-        mov   %ax,WORD [%bp+HiddenSectors] 
-        mov   %dx,WORD [%bp+HiddenSectors+2]
-		add   %ax,WORD [%bp+ReservedSectors]
-		adc   %dx,0
-		mov   %cx,WORD [%bp+SectorsPerFat]
-		mov   %bx,0x7000
-		mov   %es,%bx
-		xor   %bx,%bx
-		call  [%bp-ReadSectorsOffset]
+        mov   ax, [bp+HiddenSectors] 
+        mov   dx, [bp+HiddenSectors+2]
+		add   ax, [bp+ReservedSectors]
+		adc   dx, 0
+		mov   cx, [bp+SectorsPerFat]
+		mov   bx,0x7000
+		mov   es,bx
+		xor   bx,bx
+		call  [bp-ReadSectorsOffset]
 		ret
 
 
@@ -146,15 +147,15 @@
 // On return AX has FAT entry for that cluster
 GetFatEntry16:
 
-		mov   %cx,2							/* AX = AX * 2 (since FAT16 entries are 2 bytes) */
-		mul   %cx
-		shl   %dx,12
-
-        mov   %bx,0x7000
-		add   %bx,%dx
-        mov   %es,%bx
-		mov   %bx,%ax						/* Restore FAT entry offset */
-		es mov   %ax,WORD [%bx]				/* Get FAT entry */
+		mov   cx,2						// AX = AX * 2 (since FAT16 entries are 2 bytes)
+		mul   cx
+		shl   dx,12
+
+        mov   bx,0x7000
+		add   bx,dx
+        mov   es,bx
+		mov   bx,ax						// Restore FAT entry offset
+		mov   ax, es:[bx]	    	// Get FAT entry
 
 		ret
 
@@ -164,24 +165,24 @@
 // On return AX has FAT entry for that cluster
 GetFatEntry12:
 
-		push  %ax
-		mov   %cx,%ax
-		shr   %ax,1
-		add   %ax,%cx						/* AX = AX * 1.5 (AX = AX + (AX / 2)) (since FAT12 entries are 12 bits) */
-
-        mov   %bx,0x7000
-        mov   %es,%bx
-		mov   %bx,%ax						/* Put FAT entry offset into BX */
-		es mov   %ax,WORD [%bx]				/* Get FAT entry */
-		pop   %cx							/* Get cluster number from stack */
-		and   %cx,1
+		push  ax
+		mov   cx,ax
+		shr   ax,1
+		add   ax,cx						// AX = AX * 1.5 (AX = AX + (AX / 2)) (since FAT12 entries are 12 bits)
+
+        mov   bx,0x7000
+        mov   es,bx
+		mov   bx,ax						// Put FAT entry offset into BX
+		mov   ax, es:[bx]	    	// Get FAT entry
+		pop   cx						// Get cluster number from stack
+		and   cx,1
 		jz    UseLow12Bits
-		and   %ax,0xfff0
-		shr   %ax,4
+		and   ax,0x0fff0
+		shr   ax,4
 		jmp   GetFatEntry12_Done
 
 UseLow12Bits:
-		and   %ax,0x0fff
+		and   ax,0x0fff
 
 GetFatEntry12_Done:
 
@@ -192,31 +193,30 @@
 // Otherwise CF = 0 for FAT16
 IsFat12:
 
-		mov   %ebx,DWORD [%bp-DataAreaStartLow]
+		mov   ebx, [bp-DataAreaStartLow]
         // EBX now has the number of the starting sector of the data area
 		// starting from the beginning of the disk, so subtrace hidden sectors
-		sub   %ebx,DWORD [%bp+HiddenSectors]
-
-
-		xor   %eax,%eax
-		mov   %ax,WORD [%bp+TotalSectors]
-		cmp   %ax,0
+		sub   ebx, [bp+HiddenSectors]
+
+
+		xor   eax,eax
+		mov   ax, [bp+TotalSectors]
+		cmp   ax, 0
 		jnz   IsFat12_2
-		mov   %eax,DWORD [%bp+TotalSectorsBig]
+		mov   eax, [bp+TotalSectorsBig]
 
 		// EAX now contains the number of sectors on the volume
 
 IsFat12_2:
-		sub   %eax,%ebx						/* Subtract data area start sector */
-		xor   %edx,%edx						/* from total sectors of volume */
+		sub   eax,ebx				// Subtract data area start sector
+		xor   edx,edx				// from total sectors of volume
 
 		// EDX:EAX now contains the number of data sectors on the volume
-		xor %ebx,%ebx
-		mov %bl,BYTE [%bp+SectsPerCluster]
-		div   %ebx
+		movzx ebx, byte ptr [bp+SectsPerCluster]
+		div   ebx
 		// EAX now has the number of clusters on the volume
 		stc
-		cmp   %eax,4085
+		cmp   eax,4085
 		jb    IsFat12_Done
 		clc
 
@@ -226,8 +226,14 @@
 
 
 msgLoading:
-		.asciz "Loading FreeLoader...\r\n"
-
-		.org 0x1fe
-blockend:
-		.word 0x0aa55						/* BootSector signature */
+		.ascii "Loading FreeLoader..."
+		.byte 0x0d,0x0a,0
+
+//			times 510-($-$$) db 0	// Pad to 510 bytes
+.org 0x1fe
+			.word 0x0aa55				// BootSector signature
+
+
+// pseudo adresses
+//.org 0x7dfd
+BootPartition:

Modified: branches/cmake-bringup/hal/CMakeLists.txt
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/hal/CMakeLists.txt?rev=48688&r1=48687&r2=48688&view=diff
==============================================================================
--- branches/cmake-bringup/hal/CMakeLists.txt [iso-8859-1] (original)
+++ branches/cmake-bringup/hal/CMakeLists.txt [iso-8859-1] Thu Sep  2 21:00:02 2010
@@ -28,10 +28,6 @@
     halx86/generic/i386/systimer.S
     halx86/generic/i386/trap.S)
 
-add_library(hal_generic ${HAL_GENERIC_SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/hal_generic_hal.h.gch)
-add_pch(hal_generic ${CMAKE_CURRENT_SOURCE_DIR}/halx86/include/hal.h ${HAL_GENERIC_SOURCE})
-add_dependencies(hal_generic psdk bugcodes)
-
 list(APPEND HAL_GENERIC_PCAT_SOURCE
     halx86/generic/legacy/bus/bushndlr.c
     halx86/generic/legacy/bus/cmosbus.c
@@ -42,28 +38,29 @@
     halx86/generic/legacy/bussupp.c
     halx86/generic/legacy/halpcat.c)
 
-add_library(hal_generic_pcat ${HAL_GENERIC_PCAT_SOURCE})
-add_dependencies(hal_generic_pcat psdk)
-
 list(APPEND HAL_GENERIC_UP_SOURCE
     halx86/generic/spinlock.c
     halx86/up/pic.c
     halx86/up/processor.c)
 
-add_library(hal_generic_up ${HAL_GENERIC_UP_SOURCE})
-add_dependencies(hal_generic_up psdk)
-
 set(CMAKE_C_CREATE_SHARED_LIBRARY "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
 
-add_library(hal SHARED halx86/up/halinit_up.c halx86/up/halup.rc)
+list(APPEND HAL_SOURCE
+    ${CMAKE_CURRENT_BINARY_DIR}/hal_hal.h.gch
+    ${HAL_GENERIC_SOURCE}
+    ${HAL_GENERIC_PCAT_SOURCE}
+    ${HAL_GENERIC_UP_SOURCE}
+    halx86/up/halinit_up.c
+    halx86/up/halup.rc)
 
-set_target_properties(hal PROPERTIES LINK_FLAGS "-Wl,-entry,_HalInitSystem at 8")
+add_library(hal SHARED ${HAL_SOURCE})
+add_pch(hal ${CMAKE_CURRENT_SOURCE_DIR}/halx86/include/hal.h ${HAL_SOURCE})
+add_dependencies(hal psdk bugcodes)
+
+set_target_properties(hal PROPERTIES LINK_FLAGS "-Wl,-entry,_HalInitSystem at 8 -Wl,--image-base,0x00010000 -Wl,--subsystem,native")
 
 target_link_libraries(hal
     ${CMAKE_CURRENT_SOURCE_DIR}/halx86/hal_i386.def
-    -Wl,--whole-archive hal_generic -Wl,--no-whole-archive
-    hal_generic_pcat
-    hal_generic_up
     ${REACTOS_SOURCE_DIR}/ntoskrnl/libntoskrnl.a
     libcntpr)
 
@@ -99,7 +96,7 @@
 endif(ARCH MATCHES i386)
 
 add_library(mini_hal ${MINI_HAL_SOURCE})
-set_property(TARGET mini_hal PROPERTY COMPILE_DEFINITIONS _BLDR_ _MINIHAL_)
+set_property(TARGET mini_hal PROPERTY COMPILE_DEFINITIONS "_BLDR_;_MINIHAL_")
 add_dependencies(mini_hal psdk bugcodes)
 
 else()

Modified: branches/cmake-bringup/ntoskrnl/CMakeLists.txt
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/ntoskrnl/CMakeLists.txt?rev=48688&r1=48687&r2=48688&view=diff
==============================================================================
--- branches/cmake-bringup/ntoskrnl/CMakeLists.txt [iso-8859-1] (original)
+++ branches/cmake-bringup/ntoskrnl/CMakeLists.txt [iso-8859-1] Thu Sep  2 21:00:02 2010
@@ -1,8 +1,8 @@
 
 set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -i <SOURCE> <CMAKE_C_LINK_FLAGS> <DEFINES> -I${REACTOS_SOURCE_DIR}/include/psdk -I${REACTOS_BINARY_DIR}/include/psdk -I${REACTOS_SOURCE_DIR}/include/ -I${REACTOS_SOURCE_DIR}/include/reactos -I${REACTOS_BINARY_DIR}/include/reactos -I${REACTOS_SOURCE_DIR}/include/reactos/wine -I${REACTOS_SOURCE_DIR}/include/crt -I${REACTOS_SOURCE_DIR}/include/crt/mingw32 -I${REACTOS_SOURCE_DIR} -I${CMAKE_CURRENT_SOURCE_DIR}/include -O coff -o <OBJECT> ")
 
-set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -Wl,-L${REACTOS_BINARY_DIR}/lib/3rdparty/mingw")
-set(CMAKE_EXE_LINKER_FLAGS "-nodefaultlibs -nostdlib -Wl,-entry,_KiSystemStartup at 4 -Wl,--image-base,0x80800000 -Wl,--kill-at -Wl,-T,${REACTOS_SOURCE_DIR}/global.lds")
+set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+set(CMAKE_EXE_LINKER_FLAGS "-nodefaultlibs -nostdlib -Wl,-entry,_KiSystemStartup at 4 -Wl,--image-base,0x80800000 -Wl,--kill-at -Wl,-T,${REACTOS_SOURCE_DIR}/global.lds -Wl,--subsystem,native")
 
 add_definitions(-D__NTOSKRNL__)
 add_definitions(-D_NTOSKRNL_)




More information about the Ros-diffs mailing list