@@ -45,7 +45,42 @@ static PHP_FUNCTION(perfidious_get_pmu_info)
4545 Z_PARAM_LONG (pmu )
4646 ZEND_PARSE_PARAMETERS_END ();
4747
48- if (SUCCESS != perfidious_get_pmu_info (pmu , return_value , false)) {
48+ if (UNEXPECTED (SUCCESS != perfidious_get_pmu_info (pmu , return_value , false))) {
49+ RETURN_NULL ();
50+ }
51+ }
52+
53+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX (perfidious_get_pmu_event_info_arginfo , false, 2 , Perfidious \\PmuEventInfo , false)
54+ ZEND_ARG_TYPE_INFO (false, pmu , IS_LONG , false)
55+ ZEND_ARG_TYPE_INFO (false, idx , IS_LONG , false)
56+ ZEND_END_ARG_INFO ()
57+
58+ ZEND_COLD
59+ static PHP_FUNCTION (perfidious_get_pmu_event_info )
60+ {
61+ zend_long pmu ;
62+ zend_long idx ;
63+ pfm_pmu_info_t pmu_info = {0 };
64+ pmu_info .size = sizeof (pmu_info );
65+
66+ ZEND_PARSE_PARAMETERS_START (2 , 2 )
67+ Z_PARAM_LONG (pmu )
68+ Z_PARAM_LONG (idx )
69+ ZEND_PARSE_PARAMETERS_END ();
70+
71+ pfm_err_t pfm_err = pfm_get_pmu_info (pmu , & pmu_info );
72+ if (PFM_SUCCESS != pfm_err ) {
73+ zend_throw_exception_ex (
74+ perfidious_pmu_not_found_exception_ce ,
75+ pfm_err ,
76+ "cannot get pmu info for %lu: %s" ,
77+ pmu ,
78+ pfm_strerror (pfm_err )
79+ );
80+ return ;
81+ }
82+
83+ if (UNEXPECTED (SUCCESS != perfidious_get_pmu_event_info (& pmu_info , (int ) idx , return_value ))) {
4984 RETURN_NULL ();
5085 }
5186}
@@ -268,6 +303,7 @@ static ZEND_FUNCTION(perfidious_debug_uint64_overflow)
268303PERFIDIOUS_LOCAL
269304const zend_function_entry perfidious_functions [] = {
270305 ZEND_RAW_FENTRY (PHP_PERFIDIOUS_NAMESPACE "\\get_pmu_info" , ZEND_FN (perfidious_get_pmu_info ), perfidious_get_pmu_info_arginfo , 0 )
306+ ZEND_RAW_FENTRY (PHP_PERFIDIOUS_NAMESPACE "\\get_pmu_event_info" , ZEND_FN (perfidious_get_pmu_event_info ), perfidious_get_pmu_event_info_arginfo , 0 )
271307 ZEND_RAW_FENTRY (PHP_PERFIDIOUS_NAMESPACE "\\global_handle" , ZEND_FN (perfidious_global_handle ), perfidious_global_handle_arginfo , 0 )
272308 ZEND_RAW_FENTRY (PHP_PERFIDIOUS_NAMESPACE "\\list_pmus" , ZEND_FN (perfidious_list_pmus ), perfidious_list_pmus_arginfo , 0 )
273309 ZEND_RAW_FENTRY (PHP_PERFIDIOUS_NAMESPACE "\\list_pmu_events" , ZEND_FN (perfidious_list_pmu_events ), perfidious_list_pmu_events_arginfo , 0 )
0 commit comments