Hi,
does anyone understand this error message:
M:\Sandbox\ros_work\reactos>_make -f makefile.up.mak ntoskrnl gcc -c ntoskrnl\io\driver.c -o .\up\obj-i386\ntoskrnl\io\driver.o -Ilib\kjs\include -Intoskrnl\include -D_SEH_NO_NATINLG -D_DISABLE_TIDENTS -D__NTOSKRNL__ -D_NTOSKRNL_ -D__NO_CTYPE_INLINES -D__USE_W32API -Iinclude -Iw32api\include -Iwpi\include\ddk -D_M_IX86 -DDBG -Wall -Os -Wno-strict-aliasing -ftracer -momit-leaf-frame-pointer -mpreferred-stack-boary=2 -fno-unit-at-a-time -g -pipe -Werror -D_SEH_NO_NATIVE_NLG ntoskrnl\io\driver.c: In function `IopReinitializeDrivers': ntoskrnl\io\driver.c:1693: error: unable to find a register to spill in class `CREG' ntoskrnl\io\driver.c:1693: error: this is the insn: (call_insn/j:HI 38 37 39 1 ntoskrnl\io\driver.c:1664 (call (mem:QI (reg:SI 3 bx [86]) [0 S1 A8]) (const_int 0 [0x0])) 362 {*sibcall_1} (insn_list 36 (insn_list 37 (nil))) (expr_list:REG_DEAD (reg:SI 1 dx [ Irql ]) (expr_list:REG_DEAD (reg:SI 2 cx) (expr_list:REG_DEAD (reg:SI 3 bx [86]) (nil)))) (expr_list (use (reg:SI 2 cx)) (expr_list (use (reg:SI 1 dx [ Irql ])) (nil)))) ntoskrnl\io\driver.c:1693: confused by earlier errors, bailing out _make: *** [.\up\obj-i386\ntoskrnl\io\driver.o] Error 1
- Hartmut
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.
Gé van Geldorp.
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