Как интерактивно отлаживать MIPS - PullRequest
1 голос
/ 25 января 2020

Я прохожу курс по организации и сборке компьютеров.

В классе мы изучаем MIPS. Это сделано для того, чтобы ввести основные понятия c, такие как конвейерная обработка. Мы пишем несколько простых программ MIPS для класса.

Я привык к gdb для отладки и обучения, а отладчик, который мы используем в классе, - SPIM. SPIM отстой. Это позволяет мне проходить через программу, но не позволяет в интерактивном режиме выполнять инструкции MIPS в произвольной точке выполнения. Мне сразу надоело выходить из SPIM, редактировать исходный код и снова запускать SPIM, переходя к нужной точке выполнения, только чтобы увидеть, что мне нужно сделать это снова, потому что я сделал еще одну ошибку.

Или возможно, я ошибаюсь, и SPIM это позволяет. Мой инструктор сказал, что эта функция не поддерживается, поэтому я ухожу от того, что он сказал. Я немного погуглил и не нашел обходного пути.

Я пробовал гуглить для интерактивных отладчиков MIPS, таких как gdb, но я не нашел ни одного. Я знаю, что GDB может отлаживать программы MIPS, но у меня нет машины MIPS для запуска программ MIPS.

Я запускаю Ubuntu в VMware. Как я могу интерактивно отлаживать программы MIPS, используя gdb или другим способом?

Редактировать : нашел справочный материал на Mips.com в их рекомендованной Linux Toolchain.

1 Ответ

1 голос
/ 30 января 2020

Вы можете использовать qemu в качестве эмулятора, gdb в качестве отладчика и gcc в качестве компилятора. Это универсальный набор инструментов для исследования различных архитектур.

Для Ubuntu вы можете установить зависимости с помощью следующей команды (возможно, список не полон для вашей системы - это ваше дело там):

sudo apt install gdb-multiarch qemu qemu-user gcc-multilib gcc-multilib-mips64-linux-gnuabi64

Теперь вы можете использовать gcc в качестве компилятора.

$ cat code.c 
#include<stdio.h>

int main()
{
    printf("Hello world!\n");
    return 0;
}
$ mips64-linux-gnuabi64-gcc code.c -static -g3

И запустить эмуляцию в qemu с сеансом отладки:

$ qemu-mips64 -g 1234 ./a.out

В gdb-multiarch использовать следующую процедуру :

symbol-file a.out
set arch mips:isa64
target remote :1234
b main
c

И вот ваша цель:

(gdb) x/5i main
   0x120003850 <main>:  daddiu  sp,sp,-32
   0x120003854 <main+4>:    sd  ra,24(sp)
   0x120003858 <main+8>:    sd  s8,16(sp)
   0x12000385c <main+12>:   sd  gp,8(sp)
   0x120003860 <main+16>:   move    s8,sp

Полагаю, вы можете адаптировать ее для своих задач. И MIPS арка настолько разнообразна, как вы можете видеть в команде gdb set arch.

...