[FREELDR/HAL/NTOSKRNL]

Merge asm changes from cmake branch. No code change, only MSVC compatibility fixes


svn path=/trunk/; revision=51708
This commit is contained in:
Timo Kreuzer 2011-05-13 19:51:09 +00:00
parent 1034d441f3
commit 1a70567bcd
7 changed files with 69 additions and 49 deletions

View file

@ -17,7 +17,13 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#ifndef __ASM__
#pragma once #pragma once
#endif
#ifndef HEX
#define HEX(y) 0x##y
#endif
#ifdef _M_AMD64 #ifdef _M_AMD64
#include <arch/amd64/amd64.h> #include <arch/amd64/amd64.h>
@ -25,18 +31,18 @@
#if defined (_M_IX86) #if defined (_M_IX86)
/* Defines needed for switching between real and protected mode */ /* Defines needed for switching between real and protected mode */
#define NULL_DESC 0x00 /* NULL descriptor */ #define NULL_DESC HEX(00) /* NULL descriptor */
#define PMODE_CS 0x08 /* PMode code selector, base 0 limit 4g */ #define PMODE_CS HEX(08) /* PMode code selector, base 0 limit 4g */
#define PMODE_DS 0x10 /* PMode data selector, base 0 limit 4g */ #define PMODE_DS HEX(10) /* PMode data selector, base 0 limit 4g */
#define RMODE_CS 0x18 /* RMode code selector, base 0 limit 64k */ #define RMODE_CS HEX(18) /* RMode code selector, base 0 limit 64k */
#define RMODE_DS 0x20 /* RMode data selector, base 0 limit 64k */ #define RMODE_DS HEX(20) /* RMode data selector, base 0 limit 64k */
#endif #endif
#define CR0_PE_SET 0x00000001 /* OR this value with CR0 to enable pmode */ #define CR0_PE_SET HEX(00000001) /* OR this value with CR0 to enable pmode */
#define CR0_PE_CLR 0xFFFFFFFE /* AND this value with CR0 to disable pmode */ #define CR0_PE_CLR HEX(FFFFFFFE) /* AND this value with CR0 to disable pmode */
#define STACK16ADDR 0x7000 /* The 16-bit stack top will be at 0000:7000 */ #define STACK16ADDR HEX(7000) /* The 16-bit stack top will be at 0000:7000 */
#define STACK32ADDR 0x78000 /* The 32-bit stack top will be at 7000:8000, or 0x78000 */ #define STACK32ADDR HEX(78000) /* The 32-bit stack top will be at 7000:8000, or 0x78000 */
#if defined (_M_IX86) || defined (_M_AMD64) #if defined (_M_IX86) || defined (_M_AMD64)
#define BIOSCALLBUFFER 0x78000 /* Buffer to store temporary data for any Int386() call */ #define BIOSCALLBUFFER 0x78000 /* Buffer to store temporary data for any Int386() call */
@ -59,21 +65,21 @@ extern ULONG gDiskReadBuffer, gFileSysBuffer;
// Flag Masks // Flag Masks
#define I386FLAG_CF 0x0001 // Carry Flag #define I386FLAG_CF HEX(0001) // Carry Flag
#define I386FLAG_RESV1 0x0002 // Reserved - Must be 1 #define I386FLAG_RESV1 HEX(0002) // Reserved - Must be 1
#define I386FLAG_PF 0x0004 // Parity Flag #define I386FLAG_PF HEX(0004) // Parity Flag
#define I386FLAG_RESV2 0x0008 // Reserved - Must be 0 #define I386FLAG_RESV2 HEX(0008) // Reserved - Must be 0
#define I386FLAG_AF 0x0010 // Auxiliary Flag #define I386FLAG_AF HEX(0010) // Auxiliary Flag
#define I386FLAG_RESV3 0x0020 // Reserved - Must be 0 #define I386FLAG_RESV3 HEX(0020) // Reserved - Must be 0
#define I386FLAG_ZF 0x0040 // Zero Flag #define I386FLAG_ZF HEX(0040) // Zero Flag
#define I386FLAG_SF 0x0080 // Sign Flag #define I386FLAG_SF HEX(0080) // Sign Flag
#define I386FLAG_TF 0x0100 // Trap Flag (Single Step) #define I386FLAG_TF HEX(0100) // Trap Flag (Single Step)
#define I386FLAG_IF 0x0200 // Interrupt Flag #define I386FLAG_IF HEX(0200) // Interrupt Flag
#define I386FLAG_DF 0x0400 // Direction Flag #define I386FLAG_DF HEX(0400) // Direction Flag
#define I386FLAG_OF 0x0800 // Overflow Flag #define I386FLAG_OF HEX(0800) // Overflow Flag
#ifndef ASM #ifndef __ASM__
#include <pshpack1.h> #include <pshpack1.h>
typedef struct typedef struct
@ -172,4 +178,4 @@ VOID SoftReboot(VOID); // Implemented in boot.S
VOID DetectHardware(VOID); // Implemented in hardware.c VOID DetectHardware(VOID); // Implemented in hardware.c
#endif /* ! ASM */ #endif /* ! __ASM__ */

View file

@ -16,18 +16,20 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#ifndef __ASM__
#pragma once #pragma once
#endif
/* Macros. */ /* Macros. */
/* The magic number for the Multiboot header. */ /* The magic number for the Multiboot header. */
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 #define MULTIBOOT_HEADER_MAGIC HEX(1BADB002)
/* The flags for the Multiboot header. */ /* The flags for the Multiboot header. */
#define MULTIBOOT_HEADER_FLAGS 0x00010003 #define MULTIBOOT_HEADER_FLAGS HEX(00010003)
/* The magic number passed by a Multiboot-compliant boot loader. */ /* The magic number passed by a Multiboot-compliant boot loader. */
#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 #define MULTIBOOT_BOOTLOADER_MAGIC HEX(2BADB002)
/* The size of our stack (16KB). */ /* The size of our stack (16KB). */
#define STACK_SIZE 0x4000 #define STACK_SIZE 0x4000
@ -39,20 +41,20 @@
# define EXT_C(sym) sym # define EXT_C(sym) sym
#endif #endif
#define MB_INFO_FLAG_MEM_SIZE 0x00000001 #define MB_INFO_FLAG_MEM_SIZE HEX(00000001)
#define MB_INFO_FLAG_BOOT_DEVICE 0x00000002 #define MB_INFO_FLAG_BOOT_DEVICE HEX(00000002)
#define MB_INFO_FLAG_COMMAND_LINE 0x00000004 #define MB_INFO_FLAG_COMMAND_LINE HEX(00000004)
#define MB_INFO_FLAG_MODULES 0x00000008 #define MB_INFO_FLAG_MODULES HEX(00000008)
#define MB_INFO_FLAG_AOUT_SYMS 0x00000010 #define MB_INFO_FLAG_AOUT_SYMS HEX(00000010)
#define MB_INFO_FLAG_ELF_SYMS 0x00000020 #define MB_INFO_FLAG_ELF_SYMS HEX(00000020)
#define MB_INFO_FLAG_MEMORY_MAP 0x00000040 #define MB_INFO_FLAG_MEMORY_MAP HEX(00000040)
#define MB_INFO_FLAG_DRIVES 0x00000080 #define MB_INFO_FLAG_DRIVES HEX(00000080)
#define MB_INFO_FLAG_CONFIG_TABLE 0x00000100 #define MB_INFO_FLAG_CONFIG_TABLE HEX(00000100)
#define MB_INFO_FLAG_BOOT_LOADER_NAME 0x00000200 #define MB_INFO_FLAG_BOOT_LOADER_NAME HEX(00000200)
#define MB_INFO_FLAG_APM_TABLE 0x00000400 #define MB_INFO_FLAG_APM_TABLE HEX(00000400)
#define MB_INFO_FLAG_GRAPHICS_TABLE 0x00000800 #define MB_INFO_FLAG_GRAPHICS_TABLE HEX(00000800)
#ifndef ASM #ifndef __ASM__
/* Do not include here in boot.S. */ /* Do not include here in boot.S. */
/* Types. */ /* Types. */
@ -101,4 +103,4 @@ typedef struct memory_map
unsigned long reserved; unsigned long reserved;
} memory_map_t; } memory_map_t;
#endif /* ! ASM */ #endif /* ! __ASM__ */

View file

@ -17,7 +17,9 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#ifndef __ASM__
#pragma once #pragma once
#endif
/* just some stuff */ /* just some stuff */
#define VERSION "FreeLoader v3.0" #define VERSION "FreeLoader v3.0"
@ -37,8 +39,8 @@
#define FREELOADER_PATCH_VERSION 0 #define FREELOADER_PATCH_VERSION 0
#ifndef ASM #ifndef __ASM__
PCHAR GetFreeLoaderVersionString(VOID); PCHAR GetFreeLoaderVersionString(VOID);
#endif // ASM #endif // __ASM__

View file

@ -11,7 +11,9 @@
/* INCLUDES ******************************************************************/ /* INCLUDES ******************************************************************/
#include <ndk/asm.h> #include <asm.inc>
#include <ks386.inc>
/* FUNCTIONS *****************************************************************/ /* FUNCTIONS *****************************************************************/

View file

@ -2,6 +2,12 @@
#include <asm.inc> #include <asm.inc>
#include <syscalls.inc> #include <syscalls.inc>
#ifdef _M_IX86
EXTERN _KiSystemService:PROC
#elif defined(_M_AMD64)
EXTERN KiSystemService:PROC
#endif
.code .code
SyscallId = 0 SyscallId = 0

View file

@ -6,7 +6,7 @@
* PROGRAMMERS: Alex Ionescu (alex@relsoft.net) * PROGRAMMERS: Alex Ionescu (alex@relsoft.net)
* Timo Kreuzer (timo.kreuzer@reactos.org) * Timo Kreuzer (timo.kreuzer@reactos.org)
*/ */
// Arguments for idt // Arguments for idt
#define INT_32_DPL0 HEX(08E00) #define INT_32_DPL0 HEX(08E00)
#define INT_32_DPL3 HEX(0EE00) #define INT_32_DPL3 HEX(0EE00)
@ -43,7 +43,7 @@
#else #else
#define LOCK #define LOCK
#define ACQUIRE_SPINLOCK(x, y) #define ACQUIRE_SPINLOCK(x, y)
#define RELEASE_SPINLOCK(x) #define RELEASE_SPINLOCK(x)
#endif #endif
// //
@ -138,7 +138,7 @@ MACRO(KiEnterTrap, Flags)
if (Flags AND KI_DONT_SAVE_SEGS) if (Flags AND KI_DONT_SAVE_SEGS)
/* Initialize TrapFrame segment registers with sane values */ /* Initialize TrapFrame segment registers with sane values */
mov eax, 0x23 mov eax, KGDT_R3_DATA OR 3
mov ecx, fs mov ecx, fs
mov [esp + KTRAP_FRAME_DS], eax mov [esp + KTRAP_FRAME_DS], eax
mov [esp + KTRAP_FRAME_ES], eax mov [esp + KTRAP_FRAME_ES], eax

View file

@ -15,6 +15,8 @@
EXTERN _MmGrowKernelStack@4:PROC EXTERN _MmGrowKernelStack@4:PROC
EXTERN _KeUserCallbackDispatcher:PROC EXTERN _KeUserCallbackDispatcher:PROC
EXTERN @KiServiceExit@8:PROC EXTERN @KiServiceExit@8:PROC
EXTERN _KeGetCurrentIrql@0:PROC
EXTERN _KeBugCheckEx@20:PROC
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
.code .code
@ -30,7 +32,7 @@ _KiGetUserModeStackAddress@0:
/*++ /*++
* @name KiCallUserMode * @name KiCallUserMode
* *
* The KiSwitchToUserMode routine sets up a Trap Frame and a Callback stack * The KiSwitchToUserMode routine sets up a Trap Frame and a Callback stack
* for the purpose of switching to user mode. The actual final jump is done * for the purpose of switching to user mode. The actual final jump is done
@ -406,7 +408,7 @@ NoStack:
ret 12 ret 12
/*++ /*++
* @name KeSwitchKernelStack * @name KeSwitchKernelStack
* *
* The KeSwitchKernelStack routine switches from the current thread's stack * The KeSwitchKernelStack routine switches from the current thread's stack
* to the new specified base and limit. * to the new specified base and limit.
@ -419,7 +421,7 @@ NoStack:
* *
* @return The previous Stack Base of the thread. * @return The previous Stack Base of the thread.
* *
* @remark This routine should typically only be used when converting from a * @remark This routine should typically only be used when converting from a
* non-GUI to a GUI Thread. The caller is responsible for freeing the * non-GUI to a GUI Thread. The caller is responsible for freeing the
* previous stack. The new stack values MUST be valid before calling * previous stack. The new stack values MUST be valid before calling
* this routine. * this routine.