Неопределенная инструкция TLBI для процессора armv8 в gem5 - PullRequest
0 голосов
/ 13 ноября 2018

Я столкнулся с ошибкой gem5 при запуске симуляции gem5 fs для aarch64 в режиме голого металла. Особенно, когда мой пользовательский загрузочный код пытался сделать недействительным TLB с помощью инструкции по сборке tlbi ALLE3, симулятор сообщил следующее сообщение:

system.cpu T0 : @core0+72    :   msr   tlbi_alle3, xzr    : IntAlu :
Undefined Instruction: Invoking Fault (AArch64 target EL) : Undefined Instruction cpsr:0x3c5 PC:0x2186c elr:0x2186c newVec: 0xa00

Кроме того, я тестировал с "tlbi ALLE1", но в итоге получилась та же ошибка. Для справки, я настроил тип процессора с помощью TimingSimpleCPU. Судя по сообщению, переданная инструкция tlbi в модели процессора ARM64 не реализована. Однако, поскольку я знаю, что gem5 успешно загружает Linux для aarch64 в режиме fs, мне интересно, как этот случай может обработать инструкцию tlbi. Другими словами, если инструкция tlbi действительно не реализована в gem5, я ​​думаю, что при загрузке Linux также должна была возникнуть та же ошибка. Могу ли я узнать, сталкивался ли кто-нибудь с неопределенной ошибкой инструкции tlbi в gem5? Спасибо за ваш ответ / комментарий заранее.

Update1 : Дальнейшее исследование показало, что tlbi VMALLE3 не вызвало ошибок, в то время как инструкция tlbi ALLE3 вызвала неопределенную ошибку инструкции.

1 Ответ

0 голосов
/ 13 ноября 2018

Ядро Linux использует только часть всех функций ARM.

Например, Linux v4.18 ARMv7 сломался, потому что начал использовать CSDB, и поэтому мы просто пометили эту инструкцию как проигнорированную на данный момент: https://github.com/gem5/gem5/commit/33b311d8d8b8d527d500d62a35b50be63e41b556, которая вместо этого просто выдает предупреждение, так как эта инструкция определяется реализацией и может быть NOP.

Примечательно, что есть несколько инструкций ARMv8.x, которые еще не реализованы.

Поэтому я рекомендую следующее:

  • grep .isa файлов в src/arch/arm/isa/ и поиск точной кодировки tlbi, которую вы используете.

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

    Уже есть попадания под tlbi, но убедитесь, что ваши точные байты инструкции идут в правильное место.

    GDB step debug gem5, если необходимо, и помните, что может быть ошибка декодирования и что байты на самом деле должны быть другой инструкцией.

  • На самом деле выполните загрузочную трассировку ядра Linux с помощью --debug-flags=Exec и посмотрите, содержит ли она упомянутую инструкцию.

  • Укажите линию сборки, которая воспроизводит проблему, и версию GNU GAS, используемую для ее сборки, чтобы другие могли ее воспроизвести.

Если вы обнаружите, что отсутствует кодировка и можете полностью ее реализовать, или если это определенная реализацией NOP, например CSDB, просто проигнорируйте ее с предупреждением, отправьте патч на Gerrit и CC me.

...