编译器
文章平均质量分 60
主要是gcc
aywala
这个作者很懒,什么都没留下…
展开
-
函数调用过程探究
栈与寄存器,函数调用约定原创 2023-10-05 10:55:33 · 104 阅读 · 0 评论 -
一个GCC抽象语法树可视化工具
选项生成的 .orignal 文件转换成能被 graphviz 用来生成图片的 dot 文件。此工具经测试gcc10和gcc12都可用,太久远的版本可能不适用。然后使用 dot -Tpng ast.dot -o ast.png。命令生成 AST 图;(需要安装 graphviz)这是我用C++编写的工具。原创 2023-05-13 14:29:05 · 558 阅读 · 0 评论 -
gcc的AST是如何表示结构体类型和结构体变量的
以@27节点为例,节点包括type、op 0和op 1。其中,@17是表示成员类型的节点,@5是表示成员访问的对象(即结构体或联合体指针)的节点,@23应该是表示成员名称或索引的节点。需要注意的是,在某些情况下,component_ref节点也可以用于访问数组元素。此时,op 1节点通常表示数组元素的下标。本例中结构体类型s有两个字段x和y,分别对应@23和@43两个field_decl节点。是表示结构体类型的节点类型。@10的flds字段指向@23 field_decl节点。在GCC的AST中,原创 2023-05-12 13:42:08 · 409 阅读 · 2 评论 -
如何用gdb调试gcc的各个执行过程(支持调试lto)
如何调试gcc的lto,这是一个chatgpt和Bing都不知道答案的问题,经过我几天的尝试终于成功了,步骤如下。-save-temps则保留编译过程中生成的临时文件以备调试时使用。其中主要的临时文件生成在当前目录。–verbose选项输出的这个文件记录了gcc编译的整个过程。如果我们要调试预处理后的编译过程,那我们在gdbfile中找到。大部分cc开头的临时文件则在/tmp(绝对路径)文件夹下。将.i文件编译成.s文件的那一行,生成的gdbfile文件如下。如果要调试lto过程,则找到。原创 2023-05-11 17:53:58 · 604 阅读 · 1 评论 -
如何在Linux平台编译安装gcc
编译安装gcc原创 2023-05-11 16:51:42 · 2915 阅读 · 0 评论