0

LLVM によって強制される CFI を使用して nginx をコンパイルしたいと考えています。objs ディレクトリの Makefile を変更します。変更内容: 1. コンパイラを変更:cc--> clang 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 (gold プラグインなど) をサポートする必要があります。LTO に関するいくつかの資料があります。

http://llvm.org/docs/GoldPlugin.html

私はまだこの問題に対処する方法を知りません。

4

1 に答える 1