Как написать сборку 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
Как обычно, чтобы выполнить ваш код, проверьте регистры и память.