major restructuring, prepare for smp
This commit is contained in:
1 parent
b3569a2b90
commit
6bff37746d
229 files changed
+629
-501
No files matched your search
Binary file not shown.
@@ -3,6 +3,13 @@ setlocal enabledelayedexpansion
|
|||||||
|
|
||||||
set ROOT=%~dp0.
|
set ROOT=%~dp0.
|
||||||
set SRC=%ROOT%\code
|
set SRC=%ROOT%\code
|
||||||
|
set PUBLIC=%SRC%\public
|
||||||
|
set COMMON=%SRC%\common
|
||||||
|
set KERNEL=%SRC%\kernel
|
||||||
|
set HAL=%KERNEL%\hal
|
||||||
|
set USER=%SRC%\user
|
||||||
|
set DRIVERS=%SRC%\drivers
|
||||||
|
set THIRD_PARTY=%SRC%\third_party
|
||||||
set VHD=%~dp0disk.vhd
|
set VHD=%~dp0disk.vhd
|
||||||
|
|
||||||
if not exist "%VHD%" (
|
if not exist "%VHD%" (
|
||||||
@@ -36,43 +43,46 @@ mkdir "obj\doom" 2>nul
|
|||||||
mkdir "obj\video" 2>nul
|
mkdir "obj\video" 2>nul
|
||||||
mkdir "bin" 2>nul
|
mkdir "bin" 2>nul
|
||||||
|
|
||||||
set CFLAGS=/nologo /W3 /WX /Od /GS- /Gs999999 /Gz /Gy /EHsc- /GR- /Oi /Zi /std:c17 /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS /I"%SRC%\kernel" /I"%SRC%\hal" /I"%SRC%\syscall"
|
set INCLUDES=/I"%PUBLIC%" /I"%COMMON%\include" /I"%KERNEL%\include"
|
||||||
|
set CFLAGS=/nologo /W3 /WX /Od /GS- /Gs999999 /Gz /Gy /EHsc- /GR- /Oi /Zi /std:c17 /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS %INCLUDES%
|
||||||
set KERNEL_CFLAGS=%CFLAGS%
|
set KERNEL_CFLAGS=%CFLAGS%
|
||||||
|
|
||||||
rem lwIP is third-party freestanding C. Compile it into lwip.sys without /WX,
|
rem lwIP is third-party freestanding C. Compile it into lwip.sys without /WX,
|
||||||
rem and silence expected MSVC warnings from packed protocol headers and macros.
|
rem and silence expected MSVC warnings from packed protocol headers and macros.
|
||||||
set LWIP_DRIVER_CFLAGS=%CFLAGS:/WX =% /I"%SRC%\drivers\lwip\include" /I"%SRC%\third_party\lwip\src\include" /wd4005 /wd4100 /wd4103 /wd4127 /wd4244 /wd4267 /wd4706
|
set LWIP_ROOT=%DRIVERS%\net\lwip
|
||||||
|
set LWIP_DRIVER_CFLAGS=%CFLAGS:/WX =% /I"%LWIP_ROOT%\include" /I"%THIRD_PARTY%\lwip\src\include" /wd4005 /wd4100 /wd4103 /wd4127 /wd4244 /wd4267 /wd4706
|
||||||
|
|
||||||
set LFLAGS=/nologo /NODEFAULTLIB /DEBUG
|
set LFLAGS=/nologo /NODEFAULTLIB /DEBUG
|
||||||
|
|
||||||
:: ---- Assemble ASM files ----
|
:: ---- Assemble ASM files ----
|
||||||
echo Assembling...
|
echo Assembling...
|
||||||
ml64 /nologo /c /Fo"obj\kernel\ke_switch.obj" "%SRC%\kernel\ke_switch.asm" || exit /b 1
|
ml64 /nologo /c /Fo"obj\kernel\ke_switch.obj" "%KERNEL%\ke_switch.asm" || exit /b 1
|
||||||
ml64 /nologo /c /Fo"obj\kernel\ke_syscall_asm.obj" "%SRC%\kernel\ke_syscall.asm" || exit /b 1
|
ml64 /nologo /c /Fo"obj\kernel\ke_syscall_asm.obj" "%KERNEL%\ke_syscall.asm" || exit /b 1
|
||||||
ml64 /nologo /c /Fo"obj\kernel\ke_gdt_reload.obj" "%SRC%\kernel\ke_gdt_reload.asm" || exit /b 1
|
ml64 /nologo /c /Fo"obj\kernel\ke_gdt_reload.obj" "%KERNEL%\ke_gdt_reload.asm" || exit /b 1
|
||||||
ml64 /nologo /c /Fo"obj\syscall\stubs.obj" "%SRC%\syscall\syscall_stubs.asm" || exit /b 1
|
for %%f in (%SRC%\boot\uefi\*.asm) do (
|
||||||
|
ml64 /nologo /c /Fo"obj\boot\%%~nf.obj" "%%f" || exit /b 1
|
||||||
|
)
|
||||||
|
ml64 /nologo /c /Fo"obj\syscall\stubs.obj" "%USER%\syscall\syscall_stubs.asm" || exit /b 1
|
||||||
|
|
||||||
:: ---- Compile libc ----
|
:: ---- Compile shared freestanding support ----
|
||||||
cl /nologo /c /Fo"obj\libc.obj" "%SRC%\libc.c" || exit /b 1
|
cl /nologo /c /Fo"obj\libc.obj" "%COMMON%\libc.c" || exit /b 1
|
||||||
:: ---- Compile printf ----
|
cl %CFLAGS% /c /Fo"obj\printf.obj" "%COMMON%\printf.c" || exit /b 1
|
||||||
cl %CFLAGS% /c /Fo"obj\printf.obj" "%SRC%\printf.c" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\ini_parser.obj" "%COMMON%\ini_parser.c" || exit /b 1
|
||||||
:: ---- Compile ini parser ----
|
|
||||||
cl %CFLAGS% /c /Fo"obj\ini_parser.obj" "%SRC%\ini_parser.c" || exit /b 1
|
|
||||||
|
|
||||||
:: ---- Compile bootloader ----
|
:: ---- Compile bootloader ----
|
||||||
echo Compiling bootloader...
|
echo Compiling bootloader...
|
||||||
for %%f in (%SRC%\boot\*.c) do (
|
for %%f in (%SRC%\boot\uefi\*.c) do (
|
||||||
cl %CFLAGS% /c /I"%SRC%\boot\include" /Fo"obj\boot\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /I"%SRC%\boot\uefi\include" /Fo"obj\boot\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
:: ---- Link bootloader ----
|
:: ---- Link bootloader ----
|
||||||
echo Linking bootx64.efi...
|
echo Linking bootx64.efi...
|
||||||
link %LFLAGS% /SUBSYSTEM:EFI_APPLICATION /ENTRY:UefiMain /OUT:"bin\bootx64.efi" ^
|
link %LFLAGS% /SUBSYSTEM:EFI_APPLICATION /ENTRY:UefiMain /OUT:"bin\bootx64.efi" ^
|
||||||
/PDB:"bin\bootx64.pdb" %SRC%\boot\efilib.lib obj\ini_parser.obj obj\libc.obj obj\boot\*.obj || exit /b 1
|
/PDB:"bin\bootx64.pdb" %SRC%\boot\uefi\efilib.lib obj\ini_parser.obj obj\libc.obj obj\boot\*.obj || exit /b 1
|
||||||
|
|
||||||
:: ---- Compile HAL ----
|
:: ---- Compile HAL ----
|
||||||
echo Compiling hal...
|
echo Compiling hal...
|
||||||
for %%f in (%SRC%\hal\*.c) do (
|
for %%f in (%HAL%\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\hal\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\hal\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -82,7 +92,7 @@ link %LFLAGS% /DLL /OUT:"bin\hal.dll" /ENTRY:HalInitialize /IGNORE:4216 obj\prin
|
|||||||
|
|
||||||
:: ---- Compile kernel ----
|
:: ---- Compile kernel ----
|
||||||
echo Compiling kernel...
|
echo Compiling kernel...
|
||||||
for %%f in (%SRC%\kernel\*.c) do (
|
for %%f in (%KERNEL%\*.c) do (
|
||||||
cl %KERNEL_CFLAGS% /c /Fo"obj\kernel\%%~nf.obj" "%%f" || exit /b 1
|
cl %KERNEL_CFLAGS% /c /Fo"obj\kernel\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -98,7 +108,7 @@ link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL ^
|
|||||||
|
|
||||||
:: ---- Compile win32.dll ----
|
:: ---- Compile win32.dll ----
|
||||||
echo Compiling win32.dll...
|
echo Compiling win32.dll...
|
||||||
for %%f in (%SRC%\win32\*.c) do (
|
for %%f in (%USER%\personalities\win32\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\win32\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\win32\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL ^
|
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL ^
|
||||||
@@ -106,7 +116,7 @@ link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL ^
|
|||||||
|
|
||||||
:: ---- Compile posix.dll ----
|
:: ---- Compile posix.dll ----
|
||||||
echo Compiling posix.dll...
|
echo Compiling posix.dll...
|
||||||
for %%f in (%SRC%\posix\*.c) do (
|
for %%f in (%USER%\personalities\posix\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\posix\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\posix\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL ^
|
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL ^
|
||||||
@@ -115,22 +125,22 @@ link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL ^
|
|||||||
:: ---- Compile drivers ----
|
:: ---- Compile drivers ----
|
||||||
echo Compiling drivers...
|
echo Compiling drivers...
|
||||||
echo Compiling ide.sys...
|
echo Compiling ide.sys...
|
||||||
cl %CFLAGS% /I"%SRC%\hal" /c /Fo"obj\drivers\ide.obj" "%SRC%\drivers\ide\ide.c" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\drivers\ide.obj" "%DRIVERS%\storage\ide\ide.c" || exit /b 1
|
||||||
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\ide.sys" /ENTRY:DriverEntry ^
|
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\ide.sys" /ENTRY:DriverEntry ^
|
||||||
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\ide.obj || exit /b 1
|
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\ide.obj || exit /b 1
|
||||||
|
|
||||||
echo Compiling ahci.sys...
|
echo Compiling ahci.sys...
|
||||||
cl %CFLAGS% /I"%SRC%\hal" /c /Fo"obj\drivers\ahci.obj" "%SRC%\drivers\ahci\ahci.c" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\drivers\ahci.obj" "%DRIVERS%\storage\ahci\ahci.c" || exit /b 1
|
||||||
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\ahci.sys" /ENTRY:DriverEntry ^
|
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\ahci.sys" /ENTRY:DriverEntry ^
|
||||||
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\ahci.obj || exit /b 1
|
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\ahci.obj || exit /b 1
|
||||||
|
|
||||||
echo Compiling fat32.sys...
|
echo Compiling fat32.sys...
|
||||||
cl %CFLAGS% /I"%SRC%\fat32" /c /Fo"obj\drivers\fat32.obj" "%SRC%\drivers\fat32\fat32.c" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\drivers\fat32.obj" "%DRIVERS%\fs\fat32\fat32.c" || exit /b 1
|
||||||
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\fat32.sys" /ENTRY:DriverEntry ^
|
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\fat32.sys" /ENTRY:DriverEntry ^
|
||||||
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\fat32.obj || exit /b 1
|
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\fat32.obj || exit /b 1
|
||||||
|
|
||||||
echo Compiling lwip.sys...
|
echo Compiling lwip.sys...
|
||||||
for /f "usebackq tokens=* delims=" %%f in ("%SRC%\drivers\lwip\lwip_sources.txt") do (
|
for /f "usebackq tokens=* delims=" %%f in ("%LWIP_ROOT%\lwip_sources.txt") do (
|
||||||
set "LWIP_FILE=%%f"
|
set "LWIP_FILE=%%f"
|
||||||
if not "!LWIP_FILE!"=="" if not "!LWIP_FILE:~0,1!"=="#" (
|
if not "!LWIP_FILE!"=="" if not "!LWIP_FILE:~0,1!"=="#" (
|
||||||
set "LWIP_WIN_FILE=!LWIP_FILE:/=\!"
|
set "LWIP_WIN_FILE=!LWIP_FILE:/=\!"
|
||||||
@@ -143,23 +153,23 @@ link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\lwip.sys" /ENTRY:Dri
|
|||||||
bin\hal.lib bin\kernel.lib obj\libc.obj obj\lwip\*.obj || exit /b 1
|
bin\hal.lib bin\kernel.lib obj\libc.obj obj\lwip\*.obj || exit /b 1
|
||||||
|
|
||||||
echo Compiling usb.sys...
|
echo Compiling usb.sys...
|
||||||
cl %CFLAGS% /I"%SRC%\usb" /c /Fo"obj\drivers\usb.obj" "%SRC%\drivers\usb\usb.c" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\drivers\usb.obj" "%DRIVERS%\bus\usb\usb.c" || exit /b 1
|
||||||
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\usb.sys" /ENTRY:DriverEntry ^
|
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\usb.sys" /ENTRY:DriverEntry ^
|
||||||
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\usb.obj || exit /b 1
|
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\usb.obj || exit /b 1
|
||||||
|
|
||||||
echo Compiling rtl816x.sys...
|
echo Compiling rtl816x.sys...
|
||||||
cl %CFLAGS% /I"%SRC%\rtl816x" /c /Fo"obj\drivers\rtl816x.obj" "%SRC%\drivers\rtl816x\rtl816x.c" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\drivers\rtl816x.obj" "%DRIVERS%\net\rtl816x\rtl816x.c" || exit /b 1
|
||||||
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\rtl816x.sys" /ENTRY:DriverEntry ^
|
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\rtl816x.sys" /ENTRY:DriverEntry ^
|
||||||
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\rtl816x.obj || exit /b 1
|
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\rtl816x.obj || exit /b 1
|
||||||
|
|
||||||
echo Compiling rtl8139.sys...
|
echo Compiling rtl8139.sys...
|
||||||
cl %CFLAGS% /I"%SRC%\rtl8139" /c /Fo"obj\drivers\rtl8139.obj" "%SRC%\drivers\rtl8139\rtl8139.c" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\drivers\rtl8139.obj" "%DRIVERS%\net\rtl8139\rtl8139.c" || exit /b 1
|
||||||
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\rtl8139.sys" /ENTRY:DriverEntry ^
|
link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\rtl8139.sys" /ENTRY:DriverEntry ^
|
||||||
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\rtl8139.obj || exit /b 1
|
bin\hal.lib bin\kernel.lib obj\libc.obj obj\drivers\rtl8139.obj || exit /b 1
|
||||||
|
|
||||||
:: ---- Compile init ----
|
:: ---- Compile init ----
|
||||||
echo Compiling init...
|
echo Compiling init...
|
||||||
for %%f in (%SRC%\init\*.c) do (
|
for %%f in (%USER%\system\init\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\init\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\init\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:_start ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:_start ^
|
||||||
@@ -167,7 +177,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:_start ^
|
|||||||
|
|
||||||
:: ---- Compile shell_win32 ----
|
:: ---- Compile shell_win32 ----
|
||||||
echo Compiling shell_win32...
|
echo Compiling shell_win32...
|
||||||
for %%f in (%SRC%\shell_win32\*.c) do (
|
for %%f in (%USER%\apps\shell_win32\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\shell_win32\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\shell_win32\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -175,7 +185,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile shell_posix ----
|
:: ---- Compile shell_posix ----
|
||||||
echo Compiling shell_posix...
|
echo Compiling shell_posix...
|
||||||
for %%f in (%SRC%\shell_posix\*.c) do (
|
for %%f in (%USER%\apps\shell_posix\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\shell_posix\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\shell_posix\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -183,7 +193,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile shell_native ----
|
:: ---- Compile shell_native ----
|
||||||
echo Compiling shell_native...
|
echo Compiling shell_native...
|
||||||
for %%f in (%SRC%\shell_native\*.c) do (
|
for %%f in (%USER%\apps\shell_native\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\shell_native\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\shell_native\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -191,7 +201,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile async_apc ----
|
:: ---- Compile async_apc ----
|
||||||
echo Compiling async_apc...
|
echo Compiling async_apc...
|
||||||
for %%f in (%SRC%\async_apc\*.c) do (
|
for %%f in (%USER%\tests\async_apc\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\async_apc\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\async_apc\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -199,7 +209,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile async_cancel ----
|
:: ---- Compile async_cancel ----
|
||||||
echo Compiling async_cancel...
|
echo Compiling async_cancel...
|
||||||
for %%f in (%SRC%\async_cancel\*.c) do (
|
for %%f in (%USER%\tests\async_cancel\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\async_cancel\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\async_cancel\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -207,7 +217,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile edit ----
|
:: ---- Compile edit ----
|
||||||
echo Compiling edit...
|
echo Compiling edit...
|
||||||
for %%f in (%SRC%\edit\*.c) do (
|
for %%f in (%USER%\apps\edit\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\edit\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\edit\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -215,7 +225,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile httpget ----
|
:: ---- Compile httpget ----
|
||||||
echo Compiling httpget...
|
echo Compiling httpget...
|
||||||
for %%f in (%SRC%\httpget\*.c) do (
|
for %%f in (%USER%\apps\httpget\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\httpget\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\httpget\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -223,7 +233,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile tcpserve ----
|
:: ---- Compile tcpserve ----
|
||||||
echo Compiling tcpserve...
|
echo Compiling tcpserve...
|
||||||
for %%f in (%SRC%\tcpserve\*.c) do (
|
for %%f in (%USER%\apps\tcpserve\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\tcpserve\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\tcpserve\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -231,7 +241,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile udp ----
|
:: ---- Compile udp ----
|
||||||
echo Compiling udp...
|
echo Compiling udp...
|
||||||
for %%f in (%SRC%\udp\*.c) do (
|
for %%f in (%USER%\apps\udp\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\udp\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\udp\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -239,7 +249,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile resolve ----
|
:: ---- Compile resolve ----
|
||||||
echo Compiling resolve...
|
echo Compiling resolve...
|
||||||
for %%f in (%SRC%\resolve\*.c) do (
|
for %%f in (%USER%\apps\resolve\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\resolve\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\resolve\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -247,7 +257,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile ping ----
|
:: ---- Compile ping ----
|
||||||
echo Compiling ping...
|
echo Compiling ping...
|
||||||
for %%f in (%SRC%\ping\*.c) do (
|
for %%f in (%USER%\apps\ping\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\ping\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\ping\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -255,7 +265,7 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile doom ----
|
:: ---- Compile doom ----
|
||||||
echo Compiling doom...
|
echo Compiling doom...
|
||||||
for %%f in (%SRC%\doom\*.c) do (
|
for %%f in (%USER%\apps\doom\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\doom\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\doom\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
@@ -263,11 +273,11 @@ link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
|||||||
|
|
||||||
:: ---- Compile video player ----
|
:: ---- Compile video player ----
|
||||||
echo Compiling video...
|
echo Compiling video...
|
||||||
for %%f in (%SRC%\video\*.c) do (
|
for %%f in (%USER%\apps\video\*.c) do (
|
||||||
cl %CFLAGS% /c /Fo"obj\video\%%~nf.obj" "%%f" || exit /b 1
|
cl %CFLAGS% /c /Fo"obj\video\%%~nf.obj" "%%f" || exit /b 1
|
||||||
)
|
)
|
||||||
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^
|
||||||
/OUT:"bin\video.exe" /PDB:"bin\video.pdb" bin\win32.lib obj\libc.obj %SRC%\video\bink2w64.lib obj\video\*.obj || exit /b 1
|
/OUT:"bin\video.exe" /PDB:"bin\video.pdb" bin\win32.lib obj\libc.obj %USER%\apps\video\bink2w64.lib obj\video\*.obj || exit /b 1
|
||||||
|
|
||||||
:: ---- Mount disk image ----
|
:: ---- Mount disk image ----
|
||||||
echo Mounting disk.vhd...
|
echo Mounting disk.vhd...
|
||||||
@@ -330,10 +340,10 @@ copy /y "bin\ping.exe" "%DEST%\apps\"
|
|||||||
copy /y "bin\doom.exe" "%DEST%\apps\"
|
copy /y "bin\doom.exe" "%DEST%\apps\"
|
||||||
copy /y "bin\video.exe" "%DEST%\apps\"
|
copy /y "bin\video.exe" "%DEST%\apps\"
|
||||||
copy /y "%SRC%\boot.ini" "%DEST%\"
|
copy /y "%SRC%\boot.ini" "%DEST%\"
|
||||||
copy /y "%SRC%\drivers\drivers.ini" "%DEST%\drivers\"
|
copy /y "%DRIVERS%\drivers.ini" "%DEST%\drivers\"
|
||||||
if exist "%SRC%\video\bink2w64.dll" copy /y "%SRC%\video\bink2w64.dll" "%DEST%\apps\"
|
if exist "%USER%\apps\video\bink2w64.dll" copy /y "%USER%\apps\video\bink2w64.dll" "%DEST%\apps\"
|
||||||
if exist "%SRC%\video\video.bk2" copy /y "%SRC%\video\video.bk2" "%DEST%\apps\"
|
if exist "%USER%\apps\video\video.bk2" copy /y "%USER%\apps\video\video.bk2" "%DEST%\apps\"
|
||||||
if exist "%SRC%\doom\doom1.wad" copy /y "%SRC%\doom\doom1.wad" "%DEST%\apps\"
|
if exist "%USER%\apps\doom\doom1.wad" copy /y "%USER%\apps\doom\doom1.wad" "%DEST%\apps\"
|
||||||
|
|
||||||
:: ---- Unmount disk image ----
|
:: ---- Unmount disk image ----
|
||||||
echo Unmounting disk.vhd...
|
echo Unmounting disk.vhd...
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
[kernel]
|
[kernel]
|
||||||
; bitmask: 1 = debug prints, 2 = self check
|
; bitmask: 1 = debug prints, 2 = self check
|
||||||
debug = 3
|
debug = 0
|
||||||
[init]
|
[init]
|
||||||
commandline = apps/shell_native.exe
|
commandline = apps/shell_native.exe
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -17,9 +17,9 @@
|
|||||||
#include <efilib.h>
|
#include <efilib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <intrin.h>
|
#include <intrin.h>
|
||||||
#include <boot_info.h>
|
#include <ntlite/boot_info.h>
|
||||||
#include <memory_map.h>
|
#include <ntlite/memory_map.h>
|
||||||
#include <ini_parser.h>
|
#include <common/ini_parser.h>
|
||||||
|
|
||||||
int _fltused = 0;
|
int _fltused = 0;
|
||||||
|
|
||||||
@@ -395,7 +395,7 @@ EFI_STATUS LoadPeImage(UINT8* rawFile, UINT64 virtDest, EFI_PHYSICAL_ADDRESS* ou
|
|||||||
UINT8* ntHeaders = rawFile + peOff;
|
UINT8* ntHeaders = rawFile + peOff;
|
||||||
|
|
||||||
// Validate Signature
|
// Validate Signature
|
||||||
if (*(UINT32*)ntHeaders != 0x00004550) { Print(L"no\n"); return EFI_INVALID_PARAMETER; } // "PE\0\0"
|
if (*(UINT32*)ntHeaders != 0x00004550) { Print(L"Signature mismatch\n"); return EFI_INVALID_PARAMETER; } // "PE\0\0"
|
||||||
|
|
||||||
UINT16 sizeOfOptHeader = *(UINT16*)(ntHeaders + 20);
|
UINT16 sizeOfOptHeader = *(UINT16*)(ntHeaders + 20);
|
||||||
UINT16 numSections = *(UINT16*)(ntHeaders + 6);
|
UINT16 numSections = *(UINT16*)(ntHeaders + 6);
|
||||||
@@ -581,7 +581,7 @@ EFI_STATUS EFIAPI UefiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Print(L"1\n");
|
//Print(L"1\n");
|
||||||
|
|
||||||
// --- Parse boot.ini ---
|
// --- Parse boot.ini ---
|
||||||
UINTN sz;
|
UINTN sz;
|
||||||
@@ -594,7 +594,7 @@ EFI_STATUS EFIAPI UefiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable
|
|||||||
FreePool(bootIniRaw);
|
FreePool(bootIniRaw);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print(L"2\n");
|
//Print(L"2\n");
|
||||||
|
|
||||||
// --- Parse drivers/drivers.ini ---
|
// --- Parse drivers/drivers.ini ---
|
||||||
UINT8* drvIniRaw = LoadFile(L"drivers\\drivers.ini", &sz);
|
UINT8* drvIniRaw = LoadFile(L"drivers\\drivers.ini", &sz);
|
||||||
@@ -605,7 +605,7 @@ EFI_STATUS EFIAPI UefiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable
|
|||||||
FreePool(drvIniRaw);
|
FreePool(drvIniRaw);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print(L"3\n");
|
//Print(L"3\n");
|
||||||
|
|
||||||
BOOT_INFO* bi = AllocateZeroPool(sizeof(BOOT_INFO));
|
BOOT_INFO* bi = AllocateZeroPool(sizeof(BOOT_INFO));
|
||||||
bi->Magic = BOOT_INFO_MAGIC;
|
bi->Magic = BOOT_INFO_MAGIC;
|
||||||
@@ -617,7 +617,7 @@ EFI_STATUS EFIAPI UefiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable
|
|||||||
// Current mapping cursor for upper half.
|
// Current mapping cursor for upper half.
|
||||||
UINT64 virtCursor = KERNEL_VIRT_BASE;
|
UINT64 virtCursor = KERNEL_VIRT_BASE;
|
||||||
|
|
||||||
Print(L"4\n");
|
//Print(L"4\n");
|
||||||
|
|
||||||
// --- Load and validate PE images ---
|
// --- Load and validate PE images ---
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -633,7 +633,7 @@ EFI_STATUS EFIAPI UefiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable
|
|||||||
};
|
};
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
Print(L"Loading %s...\n", core[i].path);
|
//Print(L"Loading %s...\n", core[i].path);
|
||||||
UINTN rawSize;
|
UINTN rawSize;
|
||||||
UINT8* rawBuf = LoadFile(core[i].path, &rawSize);
|
UINT8* rawBuf = LoadFile(core[i].path, &rawSize);
|
||||||
if (!rawBuf) {
|
if (!rawBuf) {
|
||||||
@@ -683,7 +683,7 @@ EFI_STATUS EFIAPI UefiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable
|
|||||||
while(true);
|
while(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print(L"5\n");
|
//Print(L"5\n");
|
||||||
|
|
||||||
// Load driver .sys files into raw buffers
|
// Load driver .sys files into raw buffers
|
||||||
for (int i = 0; i < ps.driverCount; i++) {
|
for (int i = 0; i < ps.driverCount; i++) {
|
||||||
@@ -708,7 +708,7 @@ EFI_STATUS EFIAPI UefiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable
|
|||||||
mod->VirtBase = 0; // Kernel will map this later
|
mod->VirtBase = 0; // Kernel will map this later
|
||||||
}
|
}
|
||||||
|
|
||||||
Print(L"6\n");
|
//Print(L"6\n");
|
||||||
|
|
||||||
// Query GOP FIRST, before the GetMemoryMap loop
|
// Query GOP FIRST, before the GetMemoryMap loop
|
||||||
EFI_GRAPHICS_OUTPUT_PROTOCOL* gop;
|
EFI_GRAPHICS_OUTPUT_PROTOCOL* gop;
|
||||||
@@ -736,7 +736,7 @@ EFI_STATUS EFIAPI UefiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Print(L"7\n");
|
//Print(L"7\n");
|
||||||
|
|
||||||
// --- Map physical RAM as direct window AND identity map ---
|
// --- Map physical RAM as direct window AND identity map ---
|
||||||
UINTN mapSize = 0, descSz = 0, mapKey; UINT32 descVer;
|
UINTN mapSize = 0, descSz = 0, mapKey; UINT32 descVer;
|
||||||
@@ -835,7 +835,7 @@ EFI_STATUS EFIAPI UefiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable
|
|||||||
Map4K(PHYS_MAP_BASE + phys, phys, 0x03); // Physical Window Map
|
Map4K(PHYS_MAP_BASE + phys, phys, 0x03); // Physical Window Map
|
||||||
}
|
}
|
||||||
|
|
||||||
Print(L"8\n");
|
//Print(L"8\n");
|
||||||
|
|
||||||
// --- Convert EFI memory map -> MEMORY_MAP ---
|
// --- Convert EFI memory map -> MEMORY_MAP ---
|
||||||
ConvertMemoryMap(&bi->MemoryMap);
|
ConvertMemoryMap(&bi->MemoryMap);
|
||||||
@@ -880,12 +880,12 @@ EFI_STATUS EFIAPI UefiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Print it out to verify the bootloader actually found it before launching the kernel
|
// Print it out to verify the bootloader actually found it before launching the kernel
|
||||||
Print(L"Found RSDP at: 0x%llx\n", bi->RsdpPhysical);
|
//Print(L"Found RSDP at: 0x%llx\n", bi->RsdpPhysical);
|
||||||
|
|
||||||
bi->PhysicalMapBase = PHYS_MAP_BASE;
|
bi->PhysicalMapBase = PHYS_MAP_BASE;
|
||||||
bi->Debug = (UINT32)ps.debug;
|
bi->Debug = (UINT32)ps.debug;
|
||||||
|
|
||||||
Print(L"9\n");
|
//Print(L"9\n");
|
||||||
|
|
||||||
// --- ExitBootServices ---
|
// --- ExitBootServices ---
|
||||||
gBS->GetMemoryMap(&mapSize, NULL, &mapKey, &descSz, &descVer);
|
gBS->GetMemoryMap(&mapSize, NULL, &mapKey, &descSz, &descVer);
|
||||||
File renamed without changes.
File renamed without changes.
@@ -2,7 +2,7 @@
|
|||||||
// Used by the bootloader to read boot.ini and drivers/drivers.ini.
|
// Used by the bootloader to read boot.ini and drivers/drivers.ini.
|
||||||
// No heap; caller provides fixed-size output buffers.
|
// No heap; caller provides fixed-size output buffers.
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ini_parser.h>
|
#include <common/ini_parser.h>
|
||||||
|
|
||||||
static inline int IsWs(char c) { return c == ' ' || c == '\t' || c == '\r'; }
|
static inline int IsWs(char c) { return c == ' ' || c == '\t' || c == '\r'; }
|
||||||
|
|
||||||
File renamed without changes.
@@ -33,8 +33,8 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "printf.h"
|
#include <common/printf.h>
|
||||||
#include "syscall/sys_string.h"
|
#include <ntlite/string_view.h>
|
||||||
|
|
||||||
|
|
||||||
// define this globally (e.g. gcc -DPRINTF_INCLUDE_CONFIG_H ...) to include the
|
// define this globally (e.g. gcc -DPRINTF_INCLUDE_CONFIG_H ...) to include the
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#include <hal_api.h>
|
#include <ntlite/ddi/hal_api.h>
|
||||||
#include <ke_status.h>
|
#include <ntlite/status.h>
|
||||||
#include <ke_debug.h>
|
#include <kernel/ke_debug.h>
|
||||||
|
|
||||||
KSTATUS DriverEntry(const HAL_API* hal) {
|
KSTATUS DriverEntry(const HAL_API* hal) {
|
||||||
(void)hal;
|
(void)hal;
|
||||||
@@ -40,15 +40,15 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <io_driver.h>
|
#include <ntlite/ddi/io_driver.h>
|
||||||
#include <hal_api.h>
|
#include <ntlite/ddi/hal_api.h>
|
||||||
#include <io_file.h>
|
#include <kernel/io_file.h>
|
||||||
#include <mm_virt.h>
|
#include <kernel/mm_virt.h>
|
||||||
#include <ke_debug.h>
|
#include <kernel/ke_debug.h>
|
||||||
#include <ke_irp.h>
|
#include <kernel/ke_irp.h>
|
||||||
#include <ke_semaphore.h>
|
#include <kernel/ke_semaphore.h>
|
||||||
#include <ke_thread.h>
|
#include <kernel/ke_thread.h>
|
||||||
#include <ke_sched.h>
|
#include <kernel/ke_sched.h>
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// On-disk structures
|
// On-disk structures
|
||||||
File renamed without changes.
File renamed without changes.
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <ke_debug.h>
|
#include <kernel/ke_debug.h>
|
||||||
|
|
||||||
#ifndef LITTLE_ENDIAN
|
#ifndef LITTLE_ENDIAN
|
||||||
#define LITTLE_ENDIAN 1234
|
#define LITTLE_ENDIAN 1234
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 229 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user