CC_HAVE_STACKPROTECTOR_SYSREG를 찾을 수 있는 위치

CC_HAVE_STACKPROTECTOR_SYSREG를 찾을 수 있는 위치

kernel.ubuntu.com에서 우분투 소스 코드를 다운로드한 후 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쯤에 도입되었다고 믿습니다.

관련 정보