已关闭
[fix] h6 #28
[fix] h6 #28
已关闭
JankinEE创建于 24 天前关闭于 10 天前
JankinEE
JankinEE
24 天前

修复 #2

基于 v2.7.x-h6 分支:新增 mockcpp-2.7-h6.patch(对 h5 补丁的两处修复),并清理被取代的历史补丁与源码包副本,分支仅保留 Readme.opensource(三方软件合规元数据)与本补丁。

修复内容(详见 issue #2)

  1. aarch64 跳板改为 br x16 寄存器跳转风格,支持异常 unwind:h5 的 call 风格跳板(stp/blr/ldp/ret)是运行时手写机器码、无 unwind 信息,桩内抛出的 C++ 异常在 unwind 到跳板帧时中断,触发 std::terminate(hcomm 仓实测 26 处异常注入用例全部失败)。改为 movz/movk 装载 hook 完整 64 位地址到 x16(IP0 暂存寄存器)后 br x16:不压栈、不改动 x30/sp,异常沿正常编译帧 unwind 回被测代码 catch 分支,与 x86 行为等价,覆写由 32 字节减至 20 字节。
  2. 恢复 IsEqual 对 class/union 类型的 memcmp 比较(h4 逻辑回归):h5 补丁重新生成时丢失了 h4 的 if constexpr (std::is_class<T>::value || std::is_union<T>::value) 分支,无 operator++ 的自定义类型(如 returnValue(结构体))实例化 IsEqual 即编译失败。逐行恢复并补充 <type_traits>。

文件清理

删除 mockcpp-2.7.patch、mockcpp-2.7_py3.patch、mockcpp-2.7-h5.patch(被 h6 取代的历史版本)及 mockcpp-2.7.tar.gz、mockcpp-2.7.zip(源码包副本,历史分支与既有 release 中仍可获取);源码包权威来源为上游/OBS 镜像,消费方(如 hcomm)不从本分支取源码包。

验证

  • 补丁对原始 mockcpp-2.7 源码包的应用结果与"h5 补丁 + 两处修复"完全一致,未改动部分行为不变;
  • hcomm 仓 aarch64(鲲鹏/GCC13/lld)全量 UT 63 个套件全部通过,x86 回归无影响,完整验证记录见 issue #2;
  • 消费方 UT 编译需配合 -falign-functions=32(跳板覆写 20 字节,避免越过函数边界)。

期望

合入后发布 v2.7-h6 release(资产:mockcpp-2.7-h6.patch)。消费方 hcomm 的适配 PR:https://gitcode.com/cann/hcomm/pull/5664 (其仓内临时兼容补丁在本修复发布后将移除)。

likedislike
当前Pull Request已关闭, 关闭人@JankinEE
JankinEEJankinEE
24 天前 关联了issue:[aarch64] v2.7-h5补丁两处缺陷修复:桩内异常无法unwind(call风格跳板)及IsEqual对无operator==类型编译失败(h4逻辑回归)
JankinEEJankinEE
24 天前 强制推送  1 个提交:d002d9c1-[fix] v2.7-h5补丁修复:跳板改为br x16寄存器跳转支持异常unwind,恢复IsEqual对class/union类型的memcmp比较(修复#2)
JankinEEJankinEE
24 天前 修改标题为 “[fix] v2.7-h5补丁修复:br x16寄存器跳转支持异常unwind及IsEqual类型比较恢复(修复#2)”,原标题为“[fix] 新增v2.7-h6补丁:br x16寄存器跳转支持异常unwind及IsEqual类型比较恢复(修复#2)”
JankinEEJankinEE
24 天前 修改了pull request 的描述
JankinEEJankinEE
24 天前 修改了pull request 的描述
JankinEEJankinEE
10 天前 强制推送  1 个提交:713a2122-[fix] v2.7-h5补丁修复:跳板改为br x16寄存器跳转支持异常unwind,恢复IsEqual对class/union类型的memcmp比较(修复#2)
JankinEEJankinEE
10 天前 强制推送  1 个提交:1c821f07-[fix] 新增v2.7-h6补丁(修复#2),清理历史补丁与源码包文件
JankinEEJankinEE
10 天前 修改标题为 “[fix] 新增v2.7-h6补丁:br x16寄存器跳转支持异常unwind及IsEqual类型比较恢复,清理历史补丁文件(修复#2)”,原标题为“[fix] v2.7-h5补丁修复:br x16寄存器跳转支持异常unwind及IsEqual类型比较恢复(修复#2)”
JankinEEJankinEE
10 天前 修改了pull request 的描述
JankinEEJankinEE
10 天前 关闭了 pull request
JankinEEJankinEE
10 天前 重新打开了 pull request
JankinEEJankinEE
10 天前 修改标题为 “[fix] h6”,原标题为“[fix] 新增v2.7-h6补丁:br x16寄存器跳转支持异常unwind及IsEqual类型比较恢复,清理历史补丁文件(修复#2)”
JankinEEJankinEE
10 天前 关闭了 pull request