Нужно прокомментировать строку исходного кода QEMU
-
26-10-2019 - |
Вопрос
Существует определение для блока перевода в исходном коде QEMU (CPU-Exec.c)
Строка 127 говорит
Static TranslationBlock *TB_FIND_SLOW (TARGET_ULONG PC, TARGET_ULONG CS_BASE, UINT64_T FLAGS)
что это значит?
Решение
Это не определение для блока перевода, это функция, называемая tb_find_slow()
который возвращает указатель на блок перевода. Структура блока перевода определена в exec-all.h
.
Относительно того, что они есть, эта страница имеет краткое описание:
QEMU переводит собственные инструкции в «микро операции» и создает их как «блоки перевода». Когда происходит исполнение, одна из первых вещей, которая случается, заключается в том, что поиск сделан для поиска блока перевода, который уже был создан.
Другими словами, это своего рода компилятор.
Есть tb_find_fast()
Функция, которая использует хэш на основе количества состояния процессора (счетчик программы, селектор кода и флаги), который должен быть уникальным для каждого блока перевода. Если этот хэш не работает (результирующий блок перевода имеет другой ПК/CS/флаги), то он возвращается к медленному методу, который представляет собой последовательное сканирование списка блоков перевода.