Ge van Geldorp wrote:
From: Hartmut Birr
does anyone understand this error message: ntoskrnl\io\driver.c:1693: error: unable to find a register to spill in class `CREG'
I got the same error message recently (only for DIREG instead of CREG) when I put edi both in the input list ("=D") and in the clobber list ("%edi") of some extended assembly. Rewriting the asm code to load edi ourselves instead of letting the compiler do it fixed that.
There isn't any assembler code in driver.c. If I change the code in IopReinitializeDrivers a little bit, I've no problems.
M:\Sandbox\ros_work\reactos>svn diff ntoskrnl\io\driver.c Index: ntoskrnl/io/driver.c =================================================================== --- ntoskrnl/io/driver.c (Revision 16057) +++ ntoskrnl/io/driver.c (Arbeitskopie) @@ -1659,16 +1659,16 @@ KeAcquireSpinLock(&DriverReinitListLock, &Irql);
- if (DriverReinitTailEntry == NULL) + Entry = DriverReinitTailEntry; + + KeReleaseSpinLock(&DriverReinitListLock, + Irql); + + if (Entry == NULL) { - KeReleaseSpinLock(&DriverReinitListLock, - Irql); return; }
- KeReleaseSpinLock(&DriverReinitListLock, - Irql); - for (;;) { Entry = ExInterlockedRemoveHeadList(&DriverReinitListHead,
- Hartmut