On Fri, 18 February 2005 11:12:45 -0800, Randy.Dunlap wrote: > > In checkstack.pl, do you recall the reason for this code snippet: > > if ($size > 0x80000000) { > $size = - $size; > $size += 0x80000000; > $size += 0x80000000; > } > > There is one (unusual:) case where it fails. Is it needed?
Something like this is needed, also for unusual cases. gcc sometimes decides to switch "sub 16" with "add -16". Later, when the stack frame is popped back, the exchange goes vice versa. Without this code, you'd see a few cases of nearly 4GiB. > For arch/i386/kernel/efi_stub.S, checkstack reports: > > 0xc0116f5d efi_call_phys: 1073741824 > which is 0x4000_0000 (_ added for readability only), however the > actual change in %esp there is __PAGE_OFFSET (0xc000_0000 on ia32), > > so if I alter the "if" test above to check for > 0xf000_0000, > checkstack reports the correct value: > 0xc0116f5d efi_call_phys: 3221225472 > which is 0xc000_0000. > > > from objdump of efi_stub.o: > 5: 81 ea 00 00 00 c0 sub $0xc0000000,%edx > > or I can just ignore it, like I've been doing for awhile... Changing 0x8000_0000 to 0xf000_0000 would work for the add case as well. Sounds like a sane change. Checkstack could also do the ignoring for you, maybe like this: if ($size > 0xf0000000) { $size = - $size; $size += 0x80000000; $size += 0x80000000; } if ($size > 0x10000000) { $size = 0; } Jörn -- Ninety percent of everything is crap. -- Sturgeon's Law - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/