Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:17237 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 97737 invoked by uid 1010); 12 Jul 2005 04:36:26 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 97722 invoked from network); 12 Jul 2005 04:36:26 -0000 Received: from unknown (HELO pb1.pair.com) (127.0.0.1) by localhost with SMTP; 12 Jul 2005 04:36:26 -0000 X-Host-Fingerprint: 70.149.23.220 adsl-149-23-220.mia.bellsouth.net Received: from ([70.149.23.220:17120] helo=localhost.localdomain) by pb1.pair.com (ecelerity 1.2 r(5656M)) with SMTP id 32/3E-23681-9C843D24 for ; Tue, 12 Jul 2005 00:36:25 -0400 Message-ID: <32.3E.23681.9C843D24@pb1.pair.com> To: internals@lists.php.net Date: Tue, 12 Jul 2005 00:36:22 -0400 Lines: 36 User-Agent: KNode/0.8.1 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7Bit X-Posted-By: 70.149.23.220 Subject: Interesting zend_executor_globals Find... From: jrhernandez05@gmail.com (Jessie Hernandez) Today I've been debugging a segfault with my namespace patch until I found that the problem was simply the placement of a variable in a struct. I still don't see the logic behind it, but I got the segfault both in Windows 2000 and Linux (FC3). The steps to reproduce this segfault are very simple (using PHP 5.1.0b2): 1) In zend_globals.h, modify the struct _zend_executor_globals and add a simple HashTable pointer after class_table or zend_constants. It should look like this: ... HashTable *class_table; /* class table */ HashTable *my_hash; HashTable *zend_constants; /* constants table */ 2) Compile PHP. Now any script you execute will produce a segmentation fault. 3) Move your hash table to the end of the struct, right before the "reserved" array: HashTable *my_hash; void *reserved[ZEND_MAX_RESERVED_RESOURCES]; 4) make clean (or simply delete all the *.o and *.lo files under Zend/) and compile PHP again. All executed scripts work as usual, and no segfault is produced. Does anyone know why this happens? Regards, Jessie Hernandez