Отключить xsave в ld.so в glibc - PullRequest
0 голосов
/ 12 января 2019

Я хотел бы использовать запись GDB, но поскольку в ld.so glibc используются инструкции xsave, я получаю сообщение об ошибке «Запись процесса не поддерживает инструкцию 0xfae64 по адресу 0x7ffff7fe883c.»

Мне удалось исправить аналогичную ошибку с помощью двоичного исправления благодаря stackoverflow-ответу . Не удалось скомпилировать glibc с отладочными символами после получаса, поэтому я был бы рад, если бы было более быстрое решение. Я получил скомпилированную версию из здесь , но, похоже, более ранние версии не предлагаются (т.е. я сейчас использую glibc 2.28.r502.g065957a3704-1 и gdb 8.2.1). Как я могу заставить запись GDB работать?

1 Ответ

0 голосов
/ 13 января 2019

Проблема в том, что эмулятор x86, встроенный в gdb, не понимает много новых инструкций. Единственное исправление для этого - это ожидание новой версии с исправленными соответствующими инструкциями. Тем временем, этот поток предлагает несколько обходных путей:

  • загрузить двоичный файл с переменной окружения LD_BIND_NOW, установленной на 1, чтобы избежать запуска xsave в динамическом компоновщике
  • альтернативно, связать двоичный файл, который вы хотите отладить статически
  • альтернативно, ссылка с -z now, например. передав -Wl,-z,now компилятору C
...