gcc - 如何防止 gcc 将空函数编译到相同的地址
问题描述
我在代码中添加了两个跟踪点,并想使用 bpftrace uprobe 进行跟踪;
但编译后,符号表显示这两个函数具有相同的地址:
00000000062eada0 t log::tp_fill_aggre_log(unsigned long, unsigned long, long) [clone .isra.1]
00000000062eada0 t log::tp_submit_aggre_log(unsigned long, long, long, long, long) [clone .isra.2]
这是我的跟踪点函数定义:
__attribute__((noinline))
static void tp_fill_aggre_log(uint64_t buffer_id, uint64_t log_id, int64_t data_size)
{
asm("");
}
// can trace:
// buffer's data_size, log_cnt, delay from last_put to freeze
__attribute__((noinline))
static void tp_submit_aggre_log(uint64_t id, int64_t data_size,
int64_t log_cnt, int64_t last_put_time,
int64_t freeze_time)
{
asm("");
}
我怎样才能防止 gcc 做这个优化?
解决方案
推荐阅读
- c# - Graph API CalendarView 过滤器不适用于位置
- c# - 调用请求声明的视图组件仅与控制器中具有 Authorize 属性的视图一起使用
- matlab - Label the actual data points in y-axis [MATLAB]
- typescript - Typescript replaceAll 未在 es5 中转译
- javascript - 日历函数调用不起作用无效的挂钩调用
- react-native - 到达标记坐标时显示到达位置消息反应原生地图
- nlp - 变压器的输出是否有最大序列长度?
- javascript - 为什么我在使用 Passport 和会话时没有保持登录状态?Passport 的“isAuthenticated()”总是返回 false
- r - 如何将具有逗号分隔字符串的数据框列转换为具有相应 TRUE/FALSE 值的列名,以确定字符串是否出现在行中
- google-sheets - Google表格:检查每一行的另一列中是否存在任何值