CC_HAVE_STACKPROTECTOR_SYSREGが見つかる場所

CC_HAVE_STACKPROTECTOR_SYSREGが見つかる場所

kernel.ubuntu.comからUbuntuのソースコードをダウンロードした後、arm64の設定を設定してみました。以下のコマンドを実行すると、

LANG=C fakeroot debian/rules ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- editconfigs

arm64の設定変更を選択すると設定メニューが表示され、以下はSTACKPROTECT(passed)を検索したときの画面です/STACKPROTECT。 STACKPROTECTOR_PER_TASKを「y」に設定したいのですが、これにはCC_HAVE_STACKPROTECTOR_SYSREGを設定する必要があります。しかし、これはターゲットプロセッサに関連しているようで、arm64プロセッサ(世代)を選択する必要があります。これはどこで設定できますか?で見つかりませんGeneral Setup

ここに画像の説明を入力してください。

ベストアンサー1

HAVE_ を含むオプションは通常、オプション自体ではなくビルド環境によって異なります。

Arch/arm64/Kconfig でこの定義を表示できます。

config CC_HAVE_STACKPROTECTOR_SYSREG
        def_bool $(cc-option,-mstack-protector-guard=sysreg -mstack-protector-guard-reg=sp_el0 -mstack-protector-guard-offset=0)

したがって、コンパイラがそれをサポートしているかどうかをテストできます。たとえば、私のx86_64 gccは明らかにサポートしていませんが、aarch64コンパイラ(arm64カーネルの構築に使用されます!)はこれを行います。

$ echo "int main() { return 0; }" | gcc -x c - -c -o /dev/null -mstack-protector-guard=sysreg -mstack-protector-guard-reg=sp_el0 -mstack-protector-guard-offset=0
gcc: error: unrecognized argument in option ‘-mstack-protector-guard=sysreg’
gcc: note: valid arguments to ‘-mstack-protector-guard=’ are: global tls
$ echo "int main() { return 0; }" | aarch64-linux-gnu-gcc -x c - -c -o /dev/null -mstack-protector-guard=sysreg -mstack-protector-guard-reg=sp_el0 -mstack-protector-guard-offset=0
$

コマンドを試して、なぜ失敗するのかを確認してください。最新のgccが必要な場合があります。オンラインの人々は、sp_el0それがGCC 8には存在しないと文句を言うので、私はそれがgcc 9または10頃に導入されたと信じています。

おすすめ記事