На x86-64, когда происходит сбой программы пользовательского режима Linux, но для этого сбоя имеется обработчик сигнала, всегда ли расширенное состояние AVX сохраняется в стек в формате XSAVE или это может быть в XSAVEC («сжатый») формат?
Мне интересно, чтобы я мог получить доступ к сохраненному контексту AVX в своем обработчике сигналов.
В частности, член ucontext_t fpregs указывает на структуру, содержащую состояние FXSAVE с плавающей запятой + SSE. _libc_fpstate содержит _fpx_sw_bytes, наложенный на &__glibc_reserved1[12]. Он содержит магическое значение FP_XSTATE_MAGIC1, обозначающее наличие контекста XSTATE (AVX и т. д.).
Однако, чтобы добраться до части контекста, содержащей, например, старшие половины регистров ymm, похоже, вам нужно использовать подфункцию CPUID 0x0D, чтобы получить смещение для этой конкретной функции XSTATE. Если ядро Linux записывает кадр сигнала пользовательского режима, используя XSAVEC вместо XSAVE, это будет означать, что алгоритм определения смещения другой.
Do Мне нужна поддержка форматов XSAVE и XSAVEC для поиска контекста AVX в замороженном контексте?
Подробнее здесь: https://stackoverflow.com/questions/782 ... -format-or