Как написать сборку Sparc и запустить ее двоичный файл в Qemu или Simics?

Я пытаюсь начать писать какую-то сборку Sparc, но не могу понять, как собрать и запустить код. Я написал arc с arcTools, но это так же далеко, как я пошел со сборкой. Я скачал как simics, так и qemu, но я не знаю, куда идти отсюда. Может кто-то указать мне верное направление? Благодарю.

1 ответ

Вы не сказали, какие операционные системы вы используете. В этом примере я предполагаю, что у вас есть linux и вы хотите написать простой автономный код sparc (для образовательных целей). Тебе понадобится binutils а также gdb составлен для sparc и qemu-sparc, Сохраните этот небольшой пример кода как test.s:

.globl _start
_start:
    mov %o0, %g0
1:
    inc %o0
    cmp %o0, 100
    bl 1b
    nop
    b .
    nop

использование as собрать и ld связать, следующим образом:

$ sparc-linux-as -g -o test.o test.s
$ sparc-linux-ld -g -o test test.o

Должен производить бинарный файл test:

$ file test
test: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), statically linked, not stripped

Сейчас начнем qemu-sparc настроить для gdb удаленная отладка (выберите порт по вашему выбору, я использовал 1234):

$ qemu-sparc -g 1234 test

Будет ждать gdb подключиться. В другом терминале запустите gdb для двоичного файла:

$ sparc-linux-gdb test
GNU gdb (GDB) 7.3.50.20111117-cvs-debian
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=sparc-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /var/tmp/test...done.
(gdb)

Прикрепить к qemu пример:

(gdb) target remote :1234
Remote debugging using :1234
_start () at test.s:3
3           mov %o0, %g0

С этого момента вы можете использовать gdb Как обычно, чтобы выполнить ваш код, проверьте регистры и память.

Другие вопросы по тегам