Как устранить неопределенную ошибку инструкции во время симуляции Gem5 ARM fs

Сейчас я пытаюсь запустить программу, скомпилированную для arm64 на Gem5. Я использую sve / beta1 ветвь Gem5 , ядро ​​Linux 4.15 и программа делает использование glibc (он статически связан). Для запуска Gem5 я использую следующую команду:

./build/ARM/gem5.opt configs / example / arm / fs_bigLITTLE.py --arm-sve-vl = 8 --cpu-type = atomic --big-cpus = 2 --little-cpus = 2 - ядро = / dist / m5 / system / binaries / linux4_15 --dtb = / dist / m5 / system / binaries / armv8_gem5_v1_big_little_2_2.dtb --disk = / dist / m5 / system / disks / linaro-minimal-aarch64.img

Я успешно загружаю дистрибутив Linux, и двоичный файл также запускается. Однако через некоторое время я получаю следующее сообщение об ошибке:

[13602.881469] Program_Binary [1059]: undefined инструкция: pc = 000000006e018621 [13602.881484] Код: d503201f d11b43ff a9007bfd 910003fd (d50320ff)

Я не совсем уверен, какая инструкция вызывает это, но я предполагаю, что это инструкция (d11b43ff), которая, согласно справочному руководству ARM, является инструкцией msr. У кого-нибудь есть идея, как я могу решить эту проблему?


person user132792    schedule 25.06.2019    source источник


Ответы (2)


Применение изменений коммитов 260b0fc, 33b311d, 6efe7e1 и fcc379d ветви public / gem5 к ветка sve / beta1 исправила эту проблему как для моделирования FS, так и для SE.

person user132792    schedule 26.06.2019

В общем, выход один: пойти и реализовать недостающую инструкцию.

Более новый gem5 фактически печатает двоичный код операции нереализованной инструкции в сообщении об ошибке, которое затем можно использовать дизассемблер, чтобы определить, какая это инструкция: Использование objdump для архитектуры ARM: дизассемблирование на ARM Перед этим вам просто нужно было сначала найти код операции с objdump на основе адреса ПК.

В этом конкретном случае, поскольку вы находитесь в ветке, вы должны сначала создать минимальный (se.py, если возможно, потому что простой) пример, который использует инструкцию, и посмотреть, было ли она исправлена ​​в master.

Как упоминалось в: Как скомпилировать и запустить исполняемый файл в режиме эмуляции системных вызовов gem5 с помощью se.py? однако в последние несколько месяцев было исправлено предварительное исправление MRS glibc на commit 260b0fc5381a47c681e7ead8e4f13aad45069665, которое еще не было зайти в sve / beta1. Можешь попробовать сорвать вишню и посмотреть, что получится?

person Ciro Santilli    schedule 25.06.2019
comment
Хорошо, после еще нескольких часов проб и ошибок я решил эту проблему. Оказывается, этой проблемы не было в репозитории public / gem5. Применение изменений коммитов 260b0fc, 33b311d, 6efe7e1 и fcc379d к ветке sve / beta1 устранило эту проблему. - person user132792; 26.06.2019
comment
@ user132792 круто, спасибо, что поделились полным списком выбора вишни! - person Ciro Santilli; 26.06.2019