---
title: 编译器自动修复工具使用指导
description: "工具支持的操作系统和GCC版本如表1所示。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/development/affinityanalyzer/DevKit_Affinity_0022.html
sourcePath: /source/zh/kunpengdevps/development/affinityanalyzer/DevKit_Affinity_0022.html
indexId: 88c9938f049451eebcb43bfc66488100f32ae1d3015cfd7ce9692cbad411524078
---
# 编译器自动修复工具使用指导

#### 工具支持的操作系统和GCC版本

工具支持的操作系统和GCC版本如表1所示。


**表1 工具支持的操作系统和GCC版本**

| 操作系统 | 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. 下载相关软件包。

  - GCC源码：    https://gcc.gnu.org/(https://gcc.gnu.org/)
（请从GCC官网下载对应版本的源码。）
  - GCC修复工具patch：    https://github.com/kunpengcompute/devkitdriver/tree/main/gccchecker(https://github.com/kunpengcompute/devkitdriver/tree/main/gccchecker)
（Debian系列和RHEL系列操作系统都使用此包。）
  - 内存一致性修复组件：从DevKit安装路径下，找到/devkitplugins/affinity/tools/weakconsistency/gccchecker/gcctool.tar.gz。
2. 安装内存一致性修复组件。

  a. 解压安装包。
    1 tar xf gcctool.tar.gz

    解压后确认“gcctool/bin”目录下有以下文件：

    gcctool，gcctool-bin，libstdc++.so.6


  b. 配置环境变量。
    将“gcctool”放入安装目录，配置环境变量：

    1 export PATH=/path/to/gcctool/bin:$PATH

3. 合入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

4. 编译GCC。
  GCC源码编译操作请参考GCC官方文档，合入的patch对GCC编译依赖组件和编译过程没有影响，任何GCC编译问题可以询问GNU社区(https://gcc.gnu.org/install/index.html)。


#### 工具使用

准备好环境之后再执行以下步骤使用工具：

1. 设置内存一致性修复组件优化模式。
```
export HW_DEBUG=[ 0 | 1 | 2 ]
```

编译组件支持通过环境变量配置修复优化模式，默认级别为0。

  - 0：不使用优化策略，性能损失最大。
  - 1：使用最安全的修复策略，性能损失较大。
  - 2：应用组件优化规则，可以减少性能损失。
不设置该环境变量表示关闭内存一致性修复功能，不会做任何修复相关的操作。

若用户需使用内存一致性修复组件优化，请自行设置优化模式。


2. （可选）定义自动修复源码范围。

  a. 工具允许用户自定义源码修复范围，以文件或函数为单位。配置允许列表后，修复组件只对列表内的内容进行修复。允许列表的格式如下：

    - 文件列表以“files:”开头，每个文件独占一行。
    - 文件使用绝对路径。
    - 支持C/C++/Fortran格式的文件，不支持纯汇编文件。
    - 函数列表以“functions:”开头，每个函数独占一行。
    - 支持C/C++普通函数，不支持模板或具有abi_tag属性的函数。
以下为允许列表的格式示例：
```
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)
```

  b. 修复组件获取允许列表路径。
    通过设置环境变量，指定允许列表路径，默认不设置。

```
export AUTOFIXLIST=/path/to/allowlist
```


3. 编译软件。
  用户可以编译软件，编译过程没有变化。

  之前的编译过程中如果使用了-pipe编译选项，需要移除，不会影响原编译结果。
