我想用LLVM强制执行的CFI编译nginx。我修改了objs目录中的Makefile。修改包括: 1.更改编译器:cc - >铛 2.添加与CFI相关的参数:-flto -fvisibility = hidden -fsanitize = cfi 修改后的Makefile在
下面进行了说明CC = clang
CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -flto -fvisibility=hidden -fsanitize=cfi
CPP = cc -E
LINK = $(CC)
编译过程已通过。但是,在链接过程中会报告一些错误:
/usr/bin/ld: unrecognized option '-plugin'
/usr/bin/ld: use the --help option for usage information
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)
根据clang 6.0.0的文档,CFI方案依赖于链接时优化(LTO),并且使用的链接器必须支持LTO(例如黄金插件)。 关于LTO有一些材料:
http://llvm.org/docs/GoldPlugin.html
我仍然不知道如何处理这个问题,任何人都可以给我一些建议吗?
答案 0 :(得分:0)
为了帮助像我这样的其他新生,我提供更多细节: