21 Star 26 Fork 101

src-openEuler / gcc

 / 详情

[20.03 SP4 RC1][deja]生成的过程或目标文件中找不到预期目标字段

已验收
缺陷
创建于  
2023-11-07 15:33

【标题描述】
[20.03 SP4 RC1][deja] 生成的过程或目标文件中找不到预期目标字段
【环境信息】
软件信息

  • OS版本及分支信息:openEuler 20.03-LTS-SP4
  • 内核信息:4.19.90-2310.4.0.0227.oe2003sp4.aarch64
  • 发现问题的组件版本信息
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-linux-gnu/7.3.0/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/home/lkp/rpmbuild/BUILD/gcc-7.3.0/obj-aarch64-linux-gnu/isl-install --without-cloog --enable-gnu-indirect-function --build=aarch64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --enable-bolt --with-multilib-list=lp64

【问题复现步骤】
1.用例thread_leak1.c

gcc thread_leak1.c -Wl,-rpath=/usr/lib64  -fsanitize=thread -g -fno-diagnostics-show-caret -fdiagnostics-color=never -O0 -lm  -o ./thread_leak1.exe
./thread_leak1.exe

2.用例unreachable-3.c

gcc unreachable-3.c -Wl,-rpath=/usr/lib64 -fsanitize=unreachable -O2 -fno-reorder-blocks -fsanitize-coverage=trace-pc -fdump-tree-optimized -S -o unreachable-3.s
grep "__builtin___ubsan_handle_builtin_unreachable" *.optimized

3.用例cunroll-12.c

gcc cunroll-12.c -Wl,-rpath=/usr/lib64 -O3 -Warray-bounds -fdump-tree-cunroll-blocks-details -S -o cunroll-12.s
grep "loop with 7 iterations" *.cunroll

4.用例cunroll-4.c

gcc cunroll-4.c -Wl,-rpath=/usr/lib64 -O3 -fdump-tree-ivcanon-details -S -o cunroll-4.s
grep "loop turned into" *.ivcanon
grep "Last iteration exit" *.ivcanon

5.用例ssa-pre-27.c

gcc ssa-pre-27.c -Wl,-rpath=/usr/lib64 -O2 -fdump-tree-pre -fno-code-hoisting -S -o ssa-pre-27.s
grep "# prephitmp" *.pre

6.用例no-scevccp-outer-22.c

gcc no-scevccp-outer-22.c -Wl,-rpath=/usr/lib64 -ftree-vectorize -fno-vect-cost-model -fno-common -O2 -fdump-tree-vect-details -fno-tree-scev-cprop -lm -o ./no-scevccp-outer-22.exe
grep "OUTER LOOP VECTORIZED" *.vect

【实际结果】
1.用例thread_leak1.c,没有扫描到“SUMMARY: ThreadSanitizer: thread leak.*main.*”
输入图片说明
2.用例unreachable-3.c,没有扫描到
输入图片说明
3.用例cunroll-12.c,没有扫描到
输入图片说明
4.用例cunroll-4.c,没有扫描到
输入图片说明
5.用例ssa-pre-27.c,只需要扫描到2次,实际扫描到4次
输入图片说明
6.用例no-scevccp-outer-22.c,没有扫描到
输入图片说明

附件
纪晓慧 2023-11-07 15:37
纪晓慧 2023-11-07 15:37
cunroll-12.c(363 Bytes)下载
纪晓慧 2023-11-07 15:38
cunroll-4.c(548 Bytes)下载
纪晓慧 2023-11-07 15:38
ssa-pre-27.c(555 Bytes)下载
纪晓慧 2023-11-07 15:38
纪晓慧 2023-11-07 15:38

评论 (19)

纪晓慧 创建了缺陷

Hi jixiaohuiyou, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Compiler, and any of the maintainers: @Noah , @eastb233 , @kuen , @Peilin Guo , @编译小伙 , @huangxiaoquan , @cf-zhao , @周磊 , @stubCode , @dingguangya

openeuler-ci-bot 添加了
 
sig/Compiler
标签
纪晓慧 负责人设置为wangding16
纪晓慧 计划截止日期设置为2023-11-08
纪晓慧 计划开始日期设置为2023-11-07
纪晓慧 计划截止日期2023-11-08 修改为2023-11-10
纪晓慧 优先级设置为次要
纪晓慧 修改了标题
纪晓慧 修改了描述
纪晓慧 修改了标题
wangding16 添加协作者wangding16
wangding16 负责人wangding16 修改为编译小伙
wangding16 取消协作者wangding16

用例2~6扫描的目的是啥,是否影响deja结果?
如果不影响deja结果,那么说明变动的IR不影响这个用例看护的特性,那么为什么要纠结某些具体IR的不同呢?

用例2~6扫描的目的是啥,是否影响deja结果?
如果不影响deja结果,那么说明变动的IR不影响这个用例看护的特性,那么为什么要纠结某些具体IR的不同呢?

@编译小伙 影响deja测试结果,用runtest可以跑出这些错误,编译命令是从log里截取出来的

可以使用以下runtest命令跑用例:

runtest --tool gcc tsan.exp=thread_leak1.c
runtest --tool gcc ubsan.exp=unreachable-3.c
runtest --tool gcc tree-ssa.exp=cunroll-12.c
runtest --tool gcc tree-ssa.exp=cunroll-4.c
runtest --tool gcc tree-ssa.exp=ssa-pre-27.c
runtest --tool gcc vect.exp=no-scevccp-outer-22.c

@编译小伙 影响deja测试结果,用runtest可以跑出这些错误,编译命令是从log里截取出来的

@纪晓慧 了解了,那需要请震宇分析一下失败的原因。

问题2定位到 Patch7: add-tsv110-pipeline-scheduling.patch
问题3定位到 Patch26: arm-adjust-be-ldrd-strd.patch
问题4定位到 Patch26: arm-adjust-be-ldrd-strd.patch
问题5定位到 Patch24: floop-interchange.patch
问题6定位到 Patch24: floop-interchange.patch

floop-interchange.patch 的引入是因为以前计划在SPEC2006上提升一些性能,因此尝试了一下高版本的一些优化,选择了几个有一些效果的优化进行回合,整体提升约1%左右。
目前20.03 gcc 7.3并没有需要SPEC 2006性能场景,该选项也无其他使用场景,因此我觉得可以去掉这个patch。

arm-adjust-be-ldrd-strd.patch 是 arm 场景的一个特性,openEuler并没有arm场景,实际上该特性并没有人使用,我觉得可以直接去掉。

add-tsv110-pipeline-scheduling.patch 是tsv110流水线特性,这个我觉得需要分析一下,属于常用的特性。

eastb233 通过src-openeuler/gcc Pull Request !359任务状态待办的 修改为已完成

使用20.03 LTS-SP4 RC5转测repo,用例thread_leak1.c回归结果:不通过
输入图片说明

openEuler包构建时会strip掉二进制的符号,libtsan被strip后会丢失符号,导致需要匹配的pattern中本应该

SUMMARY ...... in main

现在变成了

SUMMARY ...... in __interceptor_pthread_create

使用开源版本GCC 7.3.0也是该现象,属于正常情况。

使用20.03 LTS-SP4 RC5转测repo,用例unreachable-3.c回归结果:通过
输入图片说明

使用20.03 LTS-SP4 RC5转测repo,用例cunroll-12.c回归结果:通过
输入图片说明

使用20.03 LTS-SP4 RC5转测repo,用例cunroll-4.c回归结果:通过
输入图片说明

使用20.03 LTS-SP4 RC5转测repo,用例ssa-pre-27.c回归结果:通过
输入图片说明

使用20.03 LTS-SP4 RC5转测repo,用例no-scevccp-outer-22.c回归结果:通过
输入图片说明

纪晓慧 任务状态已完成 修改为待办的

在开源gcc的lib64文件夹下执行strip libtsan.so.0.0.0后,配置工具链:

export PATH=/root/install/bin:$PATH
export LD_LIBRARY_PATH=/root/install/lib64:$LD_LIBRARY_PATH

执行:runtest --tool tsan.exp=thread_leak1.c结果如下,和系统自带gcc跑出的结果相同
输入图片说明

eastb233 任务状态待办的 修改为已完成

使用20.03 LTS-SP4 RC5转测repo里gcc源码本地构建,用例成功通过
输入图片说明

纪晓慧 任务状态已完成 修改为已验收

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(5)
5329419 openeuler ci bot 1632792936
1
https://gitee.com/src-openeuler/gcc.git
git@gitee.com:src-openeuler/gcc.git
src-openeuler
gcc
gcc

搜索帮助

344bd9b3 5694891 D2dac590 5694891