- Get rid of MmFreeLdrMemHigher and MmFreeLdrMemLower (they were not actually used for anything except getting number of free pages).
svn path=/trunk/; revision=32214
We now set -lgcc for all builds (to get built-in division helpers), and also -static (not to import libgcc.dll -- it seems -static isn't needed on x86, but it is on ARM).
We hackfix kdcom to use the FeroUart base address -- this driver won't be used for a while, but we need to have it built.
Now binaries are being created properly (previously kernel was 15MB and importing .DLL files...). FreeLDR output:
FreeLoader v3.0 for ARM
Bootargs: rdbase=0x2000000 rdsize=0x1400000
Detecting Hardware...
Loading...
Reading NTOSKRNL.EXE
Reading BOOTVID.DLL
Reading HAL.DLL
Reading HAL.DLL
Reading c_1252.nls
Reading c_437.nls
Reading l_intl.nls
Reading scsiport.sys
svn path=/trunk/; revision=32207
We now have per-architecture definition files, since stdcall differences between the architectures cannot be fixed (tried a combination of --kill-at, which is ignored, and -add-stdcall-alias and --enable-stdcall-fixup. This is the same problem that breaks MSVC builds, according to Alex.)
Fixed KeRaiseIrqlToSynchLevel.
Added an arm directory in /ke where we have all the stubs for non-implemented ARM routines. We can now build almost the entire kernel and link it.
We now use intrinsics to export the Interlocked* APIs, for the ARM build. Recommend doing this for x86 too.
Hal and bootvid build and link.
svn path=/trunk/; revision=32205
Someone (preferably ros-arm-bringup ;-), please fix this correctly.
The warning is caused, because after the change in r32197, KeRaiseIrqlToSynchLevel is defined as NTKERNELAPI for all architectures.
NTKERNELAPI itself is defined to DECLSPEC_IMPORT if the header is not included from ntoskrnl. This is why hal outputs a warning for its KeRaiseIrqlToSynchLevel implementation.
As warnings are treated as errors for hal, the build fails.
svn path=/trunk/; revision=32198
We now define _disable and _enable for ARM.
We shouldn't define KeRaiseIrqlToSynchLevel for each architecture, since the prototype is portable itself.
It was a mistake to guard against x86 only system calls -- the system calls should be the same on all archs, just return STATUS_NOT_IMPLEMENTED if they don't make sense. Undo the guards.
We now define KeGetPcr() as portable -- it's PCR itself that is a per-arch define.
We now support ARM in RtlWalkFrameChain.
We now support ARM in PspCreateThread.
We now define KeArchHaltProcessor for ARM by using Wait-For-Interrupt Mode.
We now define KeArmInitThreadWithContext for ARM.
KiRestore/SaveProcessorControlState are portable prototypes, we now define them as such.
Bochs KD code should use the portable WRITE/READ_PORT_UCHAR defines, we now do so.
We now support ARM in SharedUserData->ImageNumberLow/High during ExpInitializeExecutive.
NtQuerySytemInformation for SystemProcessorInformation has now been fixed to use the portable KeProcesssorXxx variables instead of reading from the non-portable PRCB values.
We now support NtFlushInstructionCache for ARM by flushing the I-Cache.
svn path=/trunk/; revision=32197
- fix over-translated strings
- acquire full path for the traget executable and directly invoke CreateProcess
- zero initialize param szTemp to fix a possible buffer overflow
- fixes bug 3027
svn path=/trunk/; revision=32184
We never call KfRaise/LowerIrql in portable code anymore, isntead, we use Ke.
We now have correctly defined IRQL routines for ARM, much more of the kernel builds as a result.
svn path=/trunk/; revision=32179
Added x86-only guards around certain structures and functions which are non-portable. Also guarded certain inline functions.
Added some more ARM structures, and filled out the KPRCB.
Created ARM-specific headers when required.
We can now have a buildable ARM kernel, minus a couple of compile errors.
svn path=/trunk/; revision=32178
FreeLDR ARM now loads properly, however, we need to start building the ARM kernel and ARM boot drivers, otherwise their relocations will have byte offsets which will lead to alignment errors (on ARM relocaitons are DWORD-aligned).
Next steps are to get the kernel building, then the HAL, then bootvid/kdcom.
svn path=/trunk/; revision=32176
Made the ARM code use the shared disk routines, which allowed us to remove some hacks -> we now detect the boot/system volume just like on x86.
FreeLDR now loads NTOSKRNL.EXE on ARM.
Also made the DiskIsBootDeviceFloppy return FALSE for ramdisks.
Finally, note that the disk routines were still kept as Machine-specific routines in the Mach Table, so other architectures can still override them if they really need to (for example, the XBOX port overrides one of them for a specific XBOX hack).
svn path=/trunk/; revision=32173
Unlike the x86 virtual-ramdisk, the ramdisk here is also used as boot device, not only system device.
Current FreeLDR output:
Booting FreeLDR...
FreeLoader v3.0 for ARM
Bootargs: rdbase=0x2000000 rdsize=0x1400000
This file system has cluster sizes bigger than 64k.
FreeLoader does not support this.
Press any key
svn path=/trunk/; revision=32169