Ubuntu

我在哪裡可以找到 CC_HAVE_STACKPROTECTOR_SYSREG

  • June 30, 2021

從 kernel.ubuntu.com 下載 ubuntu 原始碼後,我嘗試為 arm64 設置配置。當我在下面執行命令時,

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

並選擇更改 arm64 的配置,出現配置菜單,下面是我搜尋 STACKPROTECT(按/STACKPROTECT)時的螢幕。我想將 STACKPROTECTOR_PER_TASK 設置為“y”,但為此我必須設置 CC_HAVE_STACKPROTECTOR_SYSREG。但這似乎與目標處理器有關,我將不得不選擇 arm64 處理器(代)。我可以在哪裡設置?我在General Setup.

在此處輸入圖像描述

包含 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_el0GCC 8 中不存在,所以我相信它是在 gcc 9 或 10 前後引入的。

引用自:https://unix.stackexchange.com/questions/656360