LINUX.ORG.RU

arm - эмуляция sdiv/udiv

 , , sdiv


0

1

Сделали arm несколько удобных опциональных инструкций.
Есть несколько бинарников, в которых используются эти инструкции. Хочу их изменить, чтобы они запускались так же и на cortex-a8.
Казалось бы, всё просто: заменить sdiv op0 op1 op2 на:
mov r0 op1
mov r1 op2
bl addr<div_func>
mov r0 op0
и определить div_func из какой-нибудь библиотеки. Но что делать с регистрами? Ведь они могут после понадобиться? Да и такие действия тоже не всегда сработают (напр. для r2 r1 r0) Может, со стеком можно что-то сделать?
И я пока не совсем понял, как влинковать эмулирующую функцию.

★★★★★

Но что делать с регистрами? Ведь они могут после понадобиться?

Какими именно?

Harald ★★★★★
()

Хочу их изменить,

ты бинарники автоматически патчить хочешь, так что ли?

необязательно именно r0 - r2 использовать, можно операнды sdiv пушить в стек, а в div_func извлекать их

Harald ★★★★★
()
Ответ на: комментарий от Harald

r0-r2 Со стеком - хорошая идея сейчас нашёл патч ядра для runtime эмуляции, правда, он медленней должен быть. Если не устроит, буду делать автоматический патчер.

mittorn ★★★★★
() автор топика
Последнее исправление: mittorn (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.