GCC编译器源码中如何获取结构域数据类型并修改?
How to get the structure field data type in the GCC compiler source code and modify it?
如果我有这样的结构:
struct test{
float c,
f,
ops;
};
如何修改GCC编译器源码使之如下:
struct test{
double c,
f,
ops;
};
我现在有这样一个需求,需要修改gcc源码,让他在编译某个模式的结构时,将其类型改为指定的类型。
谢谢!
你的目标很有野心!
一种可能的方法是开发您自己的 GCC plugin 来完成这项工作。
我的建议:
为这项工作预算几个月的时间(也许几年)- 至少 6 个月的全职时间来获得“概念验证”在大多数代码库(C 中)上会失败的事情。对于 C++,再添加一整年。
仔细阅读 C11 标准 n1570 (if you target C), and the C++11 standard n3337(如果您的目标是 C++)。仅此一项努力就可能需要您整整一个月的时间。
使您的插件成为开源软件,并将其代码快速(例如在 LGPL 许可下)放在某些存储库中,例如 github or gitlab。
以 GCC 的最新可用版本为目标。在 2020 年 9 月,这意味着 GCC 10。插件和 GCC API 从一个版本到下一个版本的更改不兼容。如果您需要特别坚持使用 GCC 8,请准备好为 AdaCore 这样的公司花费大量资金。
仔细阅读documentation on GCC internals. You need to understand the GENERIC表示。
仔细研究GCC源代码的gcc/tree.def
和gcc/treestruct.def
和gcc/gimple.def
文件。你需要基本了解其中的每一行。
仔细研究GCC源代码的gcc/passes.def
文件。同样,您需要了解该文件中的每一行。
学习从源代码编译 GCC。你当然想用 g++ -Wall -Wextra -g -O1
来构建它
阅读this draft报告。
在 gcc@gcc.gnu.org
mailing list 上用书面英语寻求帮助,但之前有一些可用的插件。
考虑从这项工作中攻读博士学位。这是值得的。法国的 Alexandre Lissy 获得了非常相似主题的博士学位。
如果您的代码库是 C 语言,请考虑使用 Frama-C (or Clang) and design your tool as a C to C transpiler。
也许像 #define float double
后跟 #undef float
这样聪明的预处理器技巧就足够了。
如果我有这样的结构:
struct test{
float c,
f,
ops;
};
如何修改GCC编译器源码使之如下:
struct test{
double c,
f,
ops;
};
我现在有这样一个需求,需要修改gcc源码,让他在编译某个模式的结构时,将其类型改为指定的类型。
谢谢!
你的目标很有野心!
一种可能的方法是开发您自己的 GCC plugin 来完成这项工作。
我的建议:
为这项工作预算几个月的时间(也许几年)- 至少 6 个月的全职时间来获得“概念验证”在大多数代码库(C 中)上会失败的事情。对于 C++,再添加一整年。
仔细阅读 C11 标准 n1570 (if you target C), and the C++11 standard n3337(如果您的目标是 C++)。仅此一项努力就可能需要您整整一个月的时间。
使您的插件成为开源软件,并将其代码快速(例如在 LGPL 许可下)放在某些存储库中,例如 github or gitlab。
以 GCC 的最新可用版本为目标。在 2020 年 9 月,这意味着 GCC 10。插件和 GCC API 从一个版本到下一个版本的更改不兼容。如果您需要特别坚持使用 GCC 8,请准备好为 AdaCore 这样的公司花费大量资金。
仔细阅读documentation on GCC internals. You need to understand the GENERIC表示。
仔细研究GCC源代码的
gcc/tree.def
和gcc/treestruct.def
和gcc/gimple.def
文件。你需要基本了解其中的每一行。仔细研究GCC源代码的
gcc/passes.def
文件。同样,您需要了解该文件中的每一行。学习从源代码编译 GCC。你当然想用
来构建它g++ -Wall -Wextra -g -O1
阅读this draft报告。
在
gcc@gcc.gnu.org
mailing list 上用书面英语寻求帮助,但之前有一些可用的插件。考虑从这项工作中攻读博士学位。这是值得的。法国的 Alexandre Lissy 获得了非常相似主题的博士学位。
如果您的代码库是 C 语言,请考虑使用 Frama-C (or Clang) and design your tool as a C to C transpiler。
也许像 #define float double
后跟 #undef float
这样聪明的预处理器技巧就足够了。