![在哪里可以找到 CC_HAVE_STACKPROTECTOR_SYSREG](https://linux22.com/image/15737/%E5%9C%A8%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E6%89%BE%E5%88%B0%20CC_HAVE_STACKPROTECTOR_SYSREG.png)
从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
。
答案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 左右引入的。