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