约束限制
版本约束
内核版本:当前SysCare支持openEuler 22.03 SP1及以上版本。
硬件架构:x86_64 / aarch64。
应用约束
- 当前对LINE宏的处理需要对每个软件进行适配,当前仅考虑适配redis、nginx,其他未适配的软件可能会造成patch的size过大。后续会考虑引入参数支持用户自行适配。
- 用户态热补丁对于一个ELF文件,只支持一个补丁,如需修复多个bug,可将多个bugfix的patch文件同时传入补丁制作参数中,可制作出修复多个bug的热补丁。
语言约束
原理上补丁制作在object file一级进行比较,与编程语言无关。 当前仅测试了C / C++语言。
其他约束
- 当前仅支持64位系统;
- 当前仅支持ELF格式的热修复,暂不支持解释型语言;
- 当前仅支持gcc / g++编译器;
- 编译器需要支持
-gdwarf
、-ffunction-sections
、-fdata-sections
参数; - 仅支持DWARF格式的调试信息;
- 暂不支持交叉编译;
- 暂无法识别文件名相同,并且局部变量和函数名称完全一致的不同路径源码文件;
- 暂不支持汇编修改(包括
.S
文件及内联汇编); - 暂不支持新增外部符号(动态库依赖);
- 暂不支持对同一个二进制打多个补丁;
- 暂不支持C & C++ 混合编译;
- 暂不支持C++ exception修改;
- 暂不支持group section:
-g3
编译选项,特定编译优化选项,特定gcc plugin等; - 暂不支持新增ifunc:
__attribute__((ifunc("foo")))
; - 暂不支持新增TLS变量:
__thread int foo
。
文档捉虫