编译器自动修复工具使用指导
工具支持的操作系统和GCC版本
工具支持的操作系统和GCC版本如表1所示。
操作系统 |
GCC版本 |
---|---|
BC-Linux 7.6/7.7 |
GCC 4.8.5/4.9.3/5.1.0/5.2.0/5.3.0/5.4.0/5.5.0/6.1.0/6.2.0/6.3.0/6.4.0/6.5.0/7.1.0/7.2.0/7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
CentOS 7.4/7.5/7.6/7.7 |
GCC 4.8.5/4.9.3/5.1.0/5.2.0/5.3.0/5.4.0/5.5.0/6.1.0/6.2.0/6.3.0/6.4.0/6.5.0/7.1.0/7.2.0/7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
CentOS 8.0 |
GCC 8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
CentOS 8.1/8.2 |
GCC 8.3.0/9.1.0/9.2.0/9.3.0 |
Debian 10 |
GCC 8.3.0/9.1.0/9.2.0/9.3.0 |
Deepin 15.2 |
GCC 6.3.0/6.4.0/6.5.0/7.1.0/7.2.0/7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
iSoft 5.1 |
GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
Kylin V10 SP1/SP2 |
GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
LinxOS 6.0.90 |
GCC 6.3.0/6.4.0/6.5.0/7.1.0/7.2.0/7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
NeoKylin V7U6 |
GCC 4.8.5/4.9.3/5.1.0/5.2.0/5.3.0/5.4.0/5.5.0/6.1.0/6.2.0/6.3.0/6.4.0/6.5.0/7.1.0/7.2.0/7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
openEuler 20.03/LTS SP1/LTS SP2/LTS SP3 |
GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
SUSE SLES15.1 |
GCC 7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
Ubuntu 18.04.x |
GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
Ubuntu 20.04.x |
GCC 9.3.0 |
UOS 20 SP1 |
GCC 8.3.0/9.1.0/9.2.0/9.3.0 |
uosEuler 20 |
GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
UOS 20-1020e |
GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0 |
- 以上列表以操作系统默认支持的GCC版本为准,如果服务器操作系统升级过GCC版本,可能存在兼容性问题。
- 以上支持的GCC版本都是指GNU官方的GCC分支,不推荐用户基于鲲鹏GCC来使用此编译器自动修复工具。
配置环境
使用该功能需要配置对应的环境,可以通过以下步骤进行:
- 下载相关软件包。
- 安装内存一致性修复组件。
- 解压安装包。
1
tar xf gcctool.tar.gz
解压后确认“gcctool/bin”目录下有以下文件:
gcctool,gcctool-bin,libstdc++.so.6
- 解压安装包。
- 合入GCC patch。
如果提示“‘patch’command not found”,则请先安装:
Debian系列:
1
apt install patch
RHEL系列:
1
yum install patch
1 2
cd /gcc/source/root/dir patch -p1 < /path/to/gcc/patch/file
- 编译GCC。
GCC源码编译操作请参考GCC官方文档,合入的patch对GCC编译依赖组件和编译过程没有影响,任何GCC编译问题可以询问GNU社区。
工具使用
准备好环境之后再执行以下步骤使用工具:
- 设置内存一致性修复组件优化模式。
1
export HW_DEBUG=[ 0 | 1 | 2 ]
编译组件支持通过环境变量配置修复优化模式,默认级别为0。
- 0表示关闭内存一致性修复功能。
- 1表示应用组件优化规则,可以减少性能损失。
- 2表示使用最安全的修复策略,性能损失较大。
默认优化模式为0,表示关闭内存一致性修复功能,不会做任何修复相关的操作。
若用户需使用内存一致性修复组件优化,请自行设置其他优化模式。
- (可选)定义自动修复源码范围。
- 工具允许用户自定义源码修复范围,以文件或函数为单位。配置允许列表后,修复组件只对列表内的内容进行修复。允许列表的格式如下:
- 文件列表以“files:”开头,每个文件独占一行。
- 文件使用绝对路径。
- 支持C/C++/Fortran格式的文件,不支持纯汇编文件。
- 函数列表以“functions:”开头,每个函数独占一行。
- 支持C/C++普通函数,不支持模板或具有abi_tag属性的函数。
以下为允许列表的格式示例:
1 2 3 4 5 6 7 8 9 10 11 12 13
files: /path/to/file/a /path/to/./file/b /path/to/../file/c /path/to/file/d functions: func_a func_b() func_c(int xxx) int func_d() classA::func_e ns::classB::func_f() std::string nsA::nsB::classC::func_g(int xxx)
- 修复组件获取允许列表路径。
“export AUTOFIXLIST=/path/to/allowlist”
- 工具允许用户自定义源码修复范围,以文件或函数为单位。配置允许列表后,修复组件只对列表内的内容进行修复。允许列表的格式如下:
- 编译软件。
用户可以编译软件,编译过程没有变化。
之前的编译过程中如果使用了-pipe编译选项,需要移除,不会影响原编译结果。