Как использовать библиотеку в программе сборки MIPS?

Как использовать библиотеку (сделанную на c / c ++) в MIPS программа сборки, скомпилированная с использованием QtSpim(MIPS эмулятор)? Используя этот форум, я смог сделать это с помощью программы сборки Intel с помощью очень талантливого человека @rkhb. Это было решение, которое он предоставил:

Как использовать библиотеку в MSM или, точнее, в .lib файле?

Теперь я хочу сделать то же самое в MIPS сборка. Теперь, так как я использую процессор Intel и использую QtSpim бежать MIPS ассемблерные программы, как это сделать при использовании QtSpim ?

0

Решение

Для вызова скомпилированной функции C из ассемблера (или наоборот) регистры должны иметь следующее содержимое:

  • Регистры 4-7 должны содержать первые 4 аргумента
  • Использование новых регистров компиляторов Си 8-11 содержит еще 4 аргумента
  • Регистр 29 должен быть указателем стека
  • Более 4 или 8 (в зависимости от компилятора) должны храниться в стеке (насколько я знаю, n-й аргумент находится по адресу (n-1) * 4 + (регистр 29); первые 4 или 8 слова в стеке могут быть перезаписаны вызываемой подпрограммой
  • Процедура просто вызывается с помощью «JAL» или «JALR». Некоторые скомпилированные функции GNU C, скомпилированные с ключом «-PIC», предполагают инструкцию «JALR» с определенным регистром (28?), Так что регистр содержит адрес самой функции.
  • При возврате из функции регистр 2 содержит возвращаемое значение; зарегистрировать 3 старших 32 бита для 64-битных результатов

Если SPIM не поддерживает загрузку исполняемых файлов, а только исходный код, вы можете создать статически связанный исполняемый файл и выполнить разборку.

Вы можете передать разборку на симулятор SPIM.

Обратите внимание, что инструкции «системный вызов» («syscall» или «syscall #n») имеют разное значение в разных операционных системах. Если библиотека содержит системные вызовы, вы не можете использовать библиотеку, написанную для Linux в SPIM, и наоборот.

— Редактировать —

Библиотечные функции, скомпилированные с ключом «-pic», должны вызываться с использованием «JALR $ t9», поэтому регистр 25 («t9») содержит адрес вызываемой функции.

0

Другие решения


По вопросам рекламы [email protected]