OpenHarmony5.0 编译出现cfi错误分析
环境 系统:OpenHarmony 5.0.0release 设备:开发者手机 问题描述 在updater_service中添加一个自定义组件的时候,出现关于sanitize cfi的编译报错。 问题分析 根据报错信息defined(sanitize) && defined(sanitize.cfi) && sanitize.cfi == true,说明新增组件
环境
系统:OpenHarmony 5.0.0 release
设备:开发者手机
问题描述
在updater_service中添加一个自定义组件的时候,出现关于sanitize cfi的编译报错。
问题分析
根据报错信息defined(sanitize) && defined(sanitize.cfi) && sanitize.cfi == true,说明新增组件编译模块需要添加sanitize和sanitize.cfi等定义,源码中搜索BUILD.gn文件相关信息,可知编译模块中添加相关信息格式:
sanitize = {
cfi = true
cfi_cross_dso = true
debug = false
}
对应BUILD.gn中的编译模块中添加上述定义就可以解决该报错问题。
根因分析
OpenHarmony中4.x以后编译系统增加了sanitizer检查机制,参考:docs/en/device-dev/subsystems/subsys-build-reference.md
相关配置文件在vendor产品仓下的security_config/sanitizer_check_list.gni,
该配置文件中的enable_cfi_part_and_bypass_list字段配置了哪些部件会检查sanitize信息,以及部件中哪些组件sanitize检查直接pass,即不用在BUILD.gn中配置sanitize相关信息。
可以看到update_service部件下的update和updateservice组件在bypass列表,那么这两个组件即不用添加sanitize配置信息,如下图:
分析总结
有时候我们可能并不知道OpenHarmony新版本新增了哪些规则,那么就需要通过编译时的报错信息去分析build子系统来定位。
更多推荐
所有评论(0)