Merged
[fix] 修复aarch64环境UT运行报错 #5664
JankinEEAdd on Sep 23
[fix] 修复aarch64环境UT运行报错 #5664
Merged
JankinEEAdd on Sep 23
JankinEE
JankinEE
Sep 23

描述

打通 aarch64环境全量 UT。本 PR 包含四类变更:

  1. mockcpp 三方件升级 v2.7-h4 → v2.7-h6(cmake/third_party/mockcpp.cmake):h4 的 aarch64 跳板为单条 B 指令(±128MB),大型 UT 二进制中打桩距离超限静默失效;h6 采用 movz/movk 装载完整 64 位地址 + br x16 寄存器跳转(不压栈不改动 x30/sp,桩内抛出的 C++ 异常可沿正常编译帧 unwind),并恢复 IsEqual 对 class/union 类型的 memcmp 比较(无 operator== 的类型如 returnValue(结构体) 不再编译失败)。其中 br x16 跳板与 IsEqual 两处缺陷已回馈上游并合入 mockcpp PR#29(issue #2),v2.7-h6 release 已发布,本仓直接引用官方补丁资产。
  2. aarch64 UT 链接适配(cmake/intf_pub_gccnative.cmake):aarch64 下自动检测并以 lld 链接(自动插入 range extension thunk,根治 BL ±128MB 限制下超大 UT 二进制 R_AARCH64_CALL26 链接失败);UT 编译增加 -falign-functions=32(mockcpp 跳板覆写函数入口 20 字节,需对齐保护);修复 44 处 CMakeLists 中 --no-whole-archi → --no-whole-archive 拼写(lld 不接受 GNU ld 的缩写,GNU ld 语义不变)。x86 行为零变化。
  3. 16 处存量用例/桩缺陷修复(均为 x86 上靠栈残留值"运气通过"的缺陷,aarch64 下现形):RaTlvInit mock/桩补 tlv_handle 出参填充(4 处);returnValue 补 s32/int32_t 类型转换(UT 8 处 + ST 7 处,mockcpp 严格校验桩返回类型);ALLTOALLV 用例补 sendCounts 数组(CollOperator 构造只初始化 union 单成员);UT 桩 RaQpDestroy 增加句柄池范围校验(测试残留的堆句柄在进程退出析构时越界解引用段错误);P2P WaitWithTimeout 三用例按生产端格式重写 uniqueId 序列化(原格式与构造函数解析不匹配,读越过流末尾)。
  4. 文档同步:三方件清单/SECURITY/中英文 build.md 更新为 v2.7-h6。

不涉及产品源码(src/)改动。

变更类型

请选择本次引入的变更类型:

关联的Issue

#1040

测试

已完成的测试用例和场景:

  1. aarch64(鲲鹏/GCC13/lld):build.sh -u 全量编译通过,ctest 63 个测试套件全部通过(含 26 处异常注入用例,验证 br x16 跳板的异常 unwind 能力);
  2. x86_64:编译选项与 coverage 行为与 master 完全一致,全量 UT 回归通过;
  3. 覆盖本 PR 修改的 17 个测试文件对应目标(hccl_v2_utest、hccl_utest_misc、hccl_utest_test_next_resource、aicpu_kfc 系列等),以及曾失败的 CCU_A2A_Mesh、StreamTest、P2P WaitWithTimeout、ReportHcclOpInfo_alltoallv 等用例;
  4. 恢复了 3 个曾因 mockcpp 缺陷跳过的 aarch64 异常注入用例,现全部通过。

补充的UT用例:
无新增用例,本次为存量用例缺陷修复(修复后 x86/aarch64 双架构确定性通过)。

文档更新

  • Third_Party_Open_Source_Software_List.yaml:mockcpp 版本 v2.7-h6
  • SECURITY.md / SECURITY_en.md:mockcpp 源码包与补丁公网地址声明(v2.7-h6)
  • docs/zh/build/build.md、docs/en/build/build.md:三方件版本表更新为 v2.7-h6

合入检查

likedislike
Pull Request has been successfully merged by CANN-robot.
(Thank you for JankinEE's contribution.)
JankinEEJankinEE
Sep 23 Created pull request, commit 8ba99f9d
atomgit-bot
atomgit-bot
Sep 23 Comments:

变更摘要

本次变更将第三方测试框架 mockcpp 的补丁版本从 v2.7-h4 升级到 v2.7-h5,并针对 v2.7-h5 补丁丢失 v2.7-h4 中 IsEqual 对 class/union 类型的 memcmp 比较逻辑这一回归问题,引入本仓内置的兼容补丁 mockcpp-2.7-h5_isequal_fix.patch 进行恢复;同时在 cmake/intf_pub_gccnative.cmake 中为 aarch64 架构增加 -falign-functions=32 编译选项,以配合 mockcpp 在函数入口覆写 32 字节跳转代码的打桩机制,修复 aarch64 环境下 UT 运行报错。

主要改动

  • 升级 mockcpp 补丁版本: 在 Third_Party_Open_Source_Software_List.yaml 与 cmake/third_party/mockcpp.cmake 中将版本/安装路径由 v2.7-h4 更新为 v2.7-h5,补丁文件名与下载地址同步改为 mockcpp-2.7-h5.patch,并更新对应 URL_HASH。
  • 新增 IsEqual 兼容补丁: 新增 cmake/third_party/mockcpp-2.7-h5_isequal_fix.patch,为 IsEqual<T>::eval 增加 std::is_class/std::is_union 分支,对 class/union 类型改用 memcmp 比较,恢复 v2.7-h4 的行为,避免无 operator== 的自定义类型(如 returnValue 结构体)实例化 IsEqual<T> 时编译失败。
  • 串联应用兼容补丁: 在 mockcpp.cmake 中新增变量 MOCKCPP_ISEQUAL_FIX_PATCH 指向内置补丁,并将 PATCH_COMMAND 由单条 patch -p1 改为在 h5 补丁之后追加应用该兼容补丁。
  • 增加 aarch64 函数对齐选项: 在 cmake/intf_pub_gccnative.cmake 的 intf_llt_pub_base 接口编译选项中,通过 $<$<STREQUAL:${CMAKE_SYSTEM_PROCESSOR},aarch64>:-falign-functions=32> 条件添加 32 字节函数对齐,避免打桩覆写的跳转代码越界破坏相邻函数。
likedislike
Incorrect?
atomgit-bot
atomgit-bot
Sep 23 Comments:

代码审查

✅ 未发现问题

likedislike
Incorrect?
CANN-robotCANN-robotCollaborators
Sep 23 Added label: cann-cla/yes
CANN-robot
CANN-robotCollaborators
Sep 23 Comments:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
cmake ✅ 严正行, 劳大钊 (2/2) ✅ 严正行 (1/1)
docs ✅ 臧燕, 劳大钊 (2/2) ✅ 臧燕 (1/1)
repo-cann/hcomm ✅ 严正行, 丁炜秦, 劳大钊 (3/2) ✅ 严正行, 丁炜秦 (2/1)
test ✅ 劳大钊, 丁炜秦 (2/2) ✅ 丁炜秦 (1/1)
test/ut/aicpu_kfc ✅ 闫庆尚, 劳大钊 (2/2) ✅ 闫庆尚 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

jankin_weng, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
279 messages are collapsed here。 See more
laodazhao1Collaborators
20 days ago Comments:

/lgtm

likedislike
yanqingshang
20 days ago Comments:

/approve

likedislike
zangyanCollaborators
20 days ago Comments:

/approve

likedislike
CANN-robotCANN-robotCollaborators
20 days ago Added label: lgtmapproved
CANN-robotCANN-robotCollaborators
20 days ago Merged pull request