有人给 gcc 添加了通行证吗?或者不是真正的通过,而是添加一个选项来做一些讨厌的事情......:-) ...
关于在从另一个函数返回之前调用一个函数,我仍然有同样的问题...所以我想通过在 gcc 中实现一些东西来调查它...
干杯。
编辑:向编译器添加传递意味着重新访问树以执行一些优化或一些分析。我想模拟 __cyg_profile_func_exit 的行为,但仅限于某些函数并且能够访问原始返回值。
所以我将尝试强化我的问题。我想模拟真正基本的类似 AOSD 的行为。 AOSD 或面向方面的编程可以添加横切关注点(调试是横切关注点)。
int main(int argc, char ** argv) {
return foo(argc);
}
int foo(int arg_num) {
int result = arg_num > 3 ? arg_num : 42;
return result;
}
int dbg(int returned) {
printf("Return %d", returned);
}
我想说,我想在函数 foo 执行后触发 dbg 函数。问题是如何告诉编译器修改控制流并执行dbg。 dbg 应该在 return 和 foo(argc) 之间执行 ...
这真的很像 __cyg_profile_function_exit 但只是在某些情况下(__cyg_profile_function_exit 中的问题是您无法轻易查看和修改返回值)。
最佳答案
如果您仍然对添加 GCC 通行证感兴趣,您可以开始阅读 GCC Wiki Material :
- http://gcc.gnu.org/wiki/WritingANewPass和 http://www.airs.com/dnovillo/200711-GCC-Internals/ 中的“实现通行证”关于如何添加通行证。
- 您感兴趣的中间表示称为 GIMPLE。一些介绍在http://www.airs.com/dnovillo/200711-GCC-Internals/200711-GCC-Internals-3-IR.pdf
- 其他信息请访问 http://gcc.gnu.org/wiki/GettingStarted
关于c - 向 gcc 添加通行证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/731639/