pm_set_ebb_handler 子例程

用途

为调用线程配置基于事件的分支 (EBB) 工具。

性能监视器 API 库 (libpmapi.a)

语法

#include <pmapi.h>
int pm_set_ebb_handler (void * handler_address, void * data_area,)

描述

pm_set_ebb_handler 子例程配置 EBB ,并允许用户根据特定事件的发生来指定要运行的下一个指令的有效地址 (EA)。 在调用此子例程之前,由线程配置事件和频率。

可以使用 pm_set_program_mythreadpm_set_program_pthreadpm_set_program_thread 子例程来配置事件。 在调用 pm_set_ebb_handler 子例程之前,必须调用其中一个子例程。 必须使用 no_inherit 标志来调用 pm_set_program_ * 子例程。

可以使用 pm_set_counter_频率-mythreadpm_set_counter_频率-pthreadpm_set_counter_频率-pthread 子例程来配置计数器频率。

注意:
  • pm_set_ebb_handler 子例程只能由对自身进行概要分析的线程 (自概要分析线程) 调用,如果该线程是组的一部分,那么不能调用该子例程。
  • 仅当线程方式为 1: 1 并且未启动线程计数时,才能调用 pm_set_ebb_handler 子例程。

参数

描述
处理程序地址 用户处理程序的有效地址。
数据区 分配的数据区。 可从 EBB 处理程序访问此数据区。

返回值

如果不成功,那么将返回除零以外的值并设置正错误代码。 如果成功,将返回值 0。

错误代码

如果返回以下错误代码,那么子例程不成功:

描述
Pmapi_NoInit 未调用 pm_initialize 子例程。
Pmapi_Unsupported_EBBThreadMode 线程未以 1: 1 方式运行。
Pmapi_NoSetProg 未调用 pm_set_program 子例程。
Pmapi_Invalid_EBB_handler_addr handler_address 的值为 NULL。
Pmapi_Invalid_EBB_data_addr data_area 的值为 NULL。
Pmapi_Malloc_Err 将内存分配给 pthread_EBB_registration_t 结构时, malloc 子例程失败。
Pmapi_Invalid_EBB_Config PTHREAD_EBB_PMU_TYPE 标志未传递到 pthread 子例程。
Pmapi_EBB_Already_Exists 已为线程设置 EBB 处理程序。
其他非零错误代码 由对 pmsvcs 子例程的调用返回。

文件

pmapi.h 文件定义标准宏,数据类型和子例程。