Pull Request has been successfully merged by CANN-robot.
(Thank you for JankinEE's contribution.)变更摘要
本次变更将第三方测试框架 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 字节函数对齐,避免打桩覆写的跳转代码越界破坏相邻函数。


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
/approveor/lgtm- Commenting
/approveimplies 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. 👍


/lgtm


/approve


描述
打通 aarch64环境全量 UT。本 PR 包含四类变更:
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 已发布,本仓直接引用官方补丁资产。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 行为零变化。不涉及产品源码(src/)改动。
变更类型
请选择本次引入的变更类型:
关联的Issue
#1040
测试
已完成的测试用例和场景:
补充的UT用例:
无新增用例,本次为存量用例缺陷修复(修复后 x86/aarch64 双架构确定性通过)。
文档更新
合入检查