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_mythread, pm_set_program_pthread或 pm_set_program_thread 子例程来配置事件。 在调用 pm_set_ebb_handler 子例程之前,必须调用其中一个子例程。 必须使用 no_inherit 标志来调用 pm_set_program_ * 子例程。
可以使用 pm_set_counter_频率-mythread, pm_set_counter_频率-pthread或 pm_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 文件定义标准宏,数据类型和子例程。