Re: RFC: Storing additional information for op_arrays
| From: | Derick Rethans | Date: | Thu, 20 Sep 2007 13:30:07 +0000 |
| Subject: | Re: RFC: Storing additional information for op_arrays | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-32399@lists.php.net to get a copy of this message | ||
On Thu, 20 Sep 2007, Stefan Esser wrote:
> Derick Rethans schrieb:
> > On Thu, 20 Sep 2007, Stefan Esser wrote:
> >
> >
> >> One problem I and others have run into is that from time to time we need
> >> to store extra information for specific opcode arrays. For simple values
> >> it is possible to use one of the reserved slots in the op_array
> >> structure, but in the past that has been unrelieable because APC for
> >> example simply overwrote the first slots without asking the Zend Engine
> >> to reserve some space.
> >>
> >
> > Have a pointer on how this is done? I sortof need/want to do this in
> > Xdebug as well, however I don't want opcode caches to remember this
> > value.
> >
> Well the "official" way to use the reserved area of an opcode array is
> to get an handle from the zend engine for reserved space.
> This is done by
> ZEND_API int zend_get_resource_handle(zend_extension *extension)
> it returns an index you can simply use. (I think meanwhile APC will
> honor this and will not overwrite the first bytes).
Yes, it does:
void apc_zend_init(TSRMLS_D)
{
zend_extension dummy_ext;
#ifdef ZEND_ENGINE_2
APCG(reserved_offset) = zend_get_resource_handle(&dummy_ext);
assert(APCG(reserved_offset) == dummy_ext.resource_number);
assert(APCG(reserved_offset) != -1);
assert(sizeof(apc_opflags_t) <= sizeof(void*));
#endif
For Xdebug I don't need to use the dummy ext though as it's a real zend
extension.
regards,
Derick
--
Derick Rethans
http://derickrethans.nl | http://ez.no | http://xdebug.org