LINUX.ORG.RU

Почему при компиляции ядра включены -mno-sse -mno-mmx и подобные?

 


1

1

Это связано с переполнением буфера?
Безопасно ли на локалхосте их убрать?
У меня нет должных знаний и поэтому не понимаю такие вещи, может кто-нибудь объяснить?

Ответ на: комментарий от firkax
# ./arch/x86/Makefile

#
# Prevent GCC from generating any FP code by mistake.
#
# This must happen before we try the -mpreferred-stack-boundary, see:
#
#    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383
#
KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx
KBUILD_RUSTFLAGS += -Ctarget-feature=-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2
call-monster
() автор топика
Последнее исправление: call-monster (всего исправлений: 1)

Эти флаги нужны, чтобы компилятор не задействовал соответствующие регистры в генерируемом коде. В коде ядра много завязано на то, что оно само никогда не трогает эти регистры без (дорогостоящего) сохранения и последующего восстановления. Если компилятор задействует эти регистры где попало, будет порча данных в выполняющихся процессах.

AEP ★★★★★
()

Потому что в ядре нет тяжёлых вычислений с плавающей точкой и оно может обойтись без аппаратного ускорения таких операций. В отличии от пользовательских приложений.

При этом для операций с плавающей точкой с аппаратным ускорением используются всякие штуки типа MMX, SSE и т. д., которые имеют свои регистры, отдельные от регистров центрального процессора. И их пришлось бы отдельно сохранять и восстанавливать при каждом системном вызове, чтобы что-нибудь не испортить в работе пользовательского кода.

А так они сохраняются и восстанавливаются только при переключении пользовательских процессов, а не каждый системный вызов.

Таким образом повышается производительность.

KivApple ★★★★★
()
Ответ на: комментарий от One

Ну, наверное, там где они нужны, они будут либо реализованы на асме, либо именно эти исходники будут собраны с нужными флагами (я что-то неприпомню, чтобы у GCC были инстринсики для хеширования и шифрования), а код вызывающий их будет заботиться о сохранении и восстановлении состояния пространства пользователя.

KivApple ★★★★★
()