我正在观察 LLVM 支持的 Address Sanitizer 的确切执行情况。为此,我使用选项参数
-fsanitize
编译了一些测试代码,就像 -fsanitize=address
、-fsanitize=undefined
等。
这在典型的目标环境中工作得很好,例如 x86、MIPS 等。但是当我尝试使用 GNU RISC-V 工具链(riscv64-unknown-elf)编译代码时,除了 -fsanitize=undefined
之外的选项导致编译失败。
这是例子之一:我尝试使用精确的 riscv64 工具链来适应通用 ASan 并编译汇编代码文件,但 clang 无法编译整个代码。
几乎所有与此功能相关的文档都没有足够的直接信息,因此我无法确定这是正常结果。我预计 GNU risc-v 工具链中的通用 Address Sanitizer 功能没有相应的选项(UBSan 除外),但仍然不确定这一点。除了未定义的行为清理程序之外,clang 不支持 ASan 选项,这是正确的吗?还是我做错了什么?