Re: Re: Mysterious crashes (WAS: Re: Pear fetch script problem on PHP 7.0)
| From: | Matt Wilmas | Date: | Tue, 22 Dec 2015 20:00:44 +0000 |
| Subject: | Re: Re: Mysterious crashes (WAS: Re: Pear fetch script problem on PHP 7.0) | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-89874@lists.php.net to get a copy of this message | ||
Hi Dmitry!
----- Original Message -----
From: "Dmitry Stogov"
Sent: Tuesday, December 22, 2015
Hi Matt, On Tue, Dec 22, 2015 at 8:36 PM, Matt Wilmas <php_lists@realplain.com> wrote:Well, I meant relatively since a couple are already used. ;-) And thought GCC managed it all... (wrong).Hi all, Lior, which compiler are you using? You can still reproduce the problem? Can you run it through Valgrind? I'm getting random crashes I can't figure out on 64-bit Linux after just making a very trivial change. :-/ The backtrace is the same up to compile_file() (although maybe that doesn't mean much? hmm). Dmitry, to reproduce, just add another GLOBAL REGISTER variable to zend_vm_execute, and then set it in execute_ex(). An empty file will crash it. It does NOT crash with --enable-debug, nor with certain combinations of optimization level and global register.Using another global register is not a trivial change.
Right, I remember you requiring min. 4.8 back in the spring after issues with earlier versions. And now I wondered if something was still unstable and only working by chance.%r12 with -O2 seems to consistently fail, but with -O3 it might be %r13, etc.In general both should work fine, but it seems like this feature is not well debugged in GCC and may lead to miscompilation.
Argh!! Do I feel dumb. :-( And that's even what's happening right there with the others. (I was thinking of those as executor-specific save/restore, rather than the registers themselves.) And seems I had it reversed thinking the caller would save its own first, which of course is wrong for CALLEE-saved regs. Looks like any combo is working fine now. I had the changes as a whole all working quickly (will reply to your previous subject soon) by luck. I tried everything else after crashes started... Who knows how long it would've taken if not for your reminder! :-)Now, the question: Is that little change triggering a bug in GCC 4.8? Or is it somehow revealing a PHP problem?!It may be a GCC bug, as well as a bug in your code... may be you need to save/restore it manually in execute_ex()?
Thanks. Dmitry.Thanks again, and sorry for the noise. - Matt