Annotation of embedaddon/php/Zend/zend_dtrace.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | Zend Engine                                                          |
                      4:    +----------------------------------------------------------------------+
                      5:    | Copyright (c) 1998-2009 Zend Technologies Ltd. (http://www.zend.com) |
                      6:    +----------------------------------------------------------------------+
                      7:    | This source file is subject to version 2.00 of the Zend license,     |
                      8:    | that is bundled with this package in the file LICENSE, and is        |
                      9:    | available through the world-wide-web at the following url:           |
                     10:    | http://www.zend.com/license/2_00.txt.                                |
                     11:    | If you did not receive a copy of the Zend license and are unable to  |
                     12:    | obtain it through the world-wide-web, please send a note to          |
                     13:    | license@zend.com so we can mail you a copy immediately.              |
                     14:    +----------------------------------------------------------------------+
                     15:    | Authors: David Soria Parra <david.soriaparra@sun.com>                |
                     16:    +----------------------------------------------------------------------+
                     17: */
                     18: 
                     19: /* $Id: $ */
                     20: 
                     21: #include "zend.h"
                     22: #include "zend_API.h"
                     23: #include "zend_dtrace.h"
                     24: 
                     25: #ifdef HAVE_DTRACE
                     26: /* PHP DTrace probes {{{ */
                     27: static inline char *dtrace_get_executed_filename(TSRMLS_D)
                     28: {
                     29:        if (EG(current_execute_data) && EG(current_execute_data)->op_array) {
                     30:                return EG(current_execute_data)->op_array->filename;
                     31:        } else {
                     32:                return zend_get_executed_filename(TSRMLS_C);
                     33:        }
                     34: }
                     35: 
                     36: ZEND_API zend_op_array *dtrace_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
                     37: {
                     38:        zend_op_array *res;
                     39:        DTRACE_COMPILE_FILE_ENTRY(file_handle->opened_path, file_handle->filename);
                     40:        res = compile_file(file_handle, type TSRMLS_CC);
                     41:        DTRACE_COMPILE_FILE_RETURN(file_handle->opened_path, file_handle->filename);
                     42: 
                     43:        return res;
                     44: }
                     45: 
                     46: /* We wrap the execute function to have fire the execute-entry/return and function-entry/return probes */
                     47: ZEND_API void dtrace_execute(zend_op_array *op_array TSRMLS_DC)
                     48: {
                     49:        int lineno;
                     50:        char *scope, *filename, *funcname, *classname;
                     51:        scope = filename = funcname = classname = NULL;
                     52: 
                     53:        /* we need filename and lineno for both execute and function probes */
                     54:        if (DTRACE_EXECUTE_ENTRY_ENABLED() || DTRACE_EXECUTE_RETURN_ENABLED()
                     55:                || DTRACE_FUNCTION_ENTRY_ENABLED() || DTRACE_FUNCTION_RETURN_ENABLED()) {
                     56:                filename = dtrace_get_executed_filename(TSRMLS_C);
                     57:                lineno = zend_get_executed_lineno(TSRMLS_C);
                     58:        }
                     59: 
                     60:        if (DTRACE_FUNCTION_ENTRY_ENABLED() || DTRACE_FUNCTION_RETURN_ENABLED()) {
                     61:                filename = dtrace_get_executed_filename(TSRMLS_C);
                     62:                classname = get_active_class_name(&scope TSRMLS_CC);
                     63:                funcname = get_active_function_name(TSRMLS_C);
                     64:                lineno = zend_get_executed_lineno(TSRMLS_C);
                     65:        }
                     66: 
                     67:        if (DTRACE_EXECUTE_ENTRY_ENABLED()) {
                     68:                DTRACE_EXECUTE_ENTRY(filename, lineno);
                     69:        }
                     70: 
                     71:        if (DTRACE_FUNCTION_ENTRY_ENABLED() && funcname != NULL) {
                     72:                DTRACE_FUNCTION_ENTRY(funcname, filename, lineno, classname, scope);
                     73:        }
                     74: 
                     75:        execute(op_array TSRMLS_CC);
                     76: 
                     77:        if (DTRACE_FUNCTION_RETURN_ENABLED() && funcname != NULL) {
                     78:                DTRACE_FUNCTION_RETURN(funcname, filename, lineno, classname, scope);
                     79:        }
                     80: 
                     81:        if (DTRACE_EXECUTE_RETURN_ENABLED()) {
                     82:                DTRACE_EXECUTE_RETURN(filename, lineno);
                     83:        }
                     84: }
                     85: 
                     86: ZEND_API void dtrace_execute_internal(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC)
                     87: {
                     88:        int lineno;
                     89:        char *filename;
                     90:        if (DTRACE_EXECUTE_ENTRY_ENABLED() || DTRACE_EXECUTE_RETURN_ENABLED()) {
                     91:                filename = dtrace_get_executed_filename(TSRMLS_C);
                     92:                lineno = zend_get_executed_lineno(TSRMLS_C);
                     93:        }
                     94: 
                     95:        if (DTRACE_EXECUTE_ENTRY_ENABLED()) {
                     96:                DTRACE_EXECUTE_ENTRY(filename, lineno);
                     97:        }
                     98: 
                     99:        execute_internal(execute_data_ptr, return_value_used TSRMLS_CC);
                    100: 
                    101:        if (DTRACE_EXECUTE_RETURN_ENABLED()) {
                    102:                DTRACE_EXECUTE_RETURN(filename, lineno);
                    103:        }
                    104: }
                    105: 
                    106: /* }}} */
                    107: #endif /* HAVE_DTRACE */
                    108: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>