Il vous est peut être arrivé de devoir coder et tester des programmes en assembleur ARM (peut être même simplement par curiosité qui sait ?) sur des machine x86. Pour y arriver j'ai du installer arm-elf-as (l'assembleur arm de GNU), arm-elf-ld (edition des liens) et le debugger arm-elf-gdb le tout sur FreeBSD. La démarche n'étant pas triviale voici comment installer tous ces softs :

make -C /usr/ports/devel/cross-binutils TGTARCH=arm TGTABI=elf install clean
make -C /usr/ports/devel/cross-gdb TGTARCH=arm TGTABI=elf install clean

Si tout se passe bien et si le temps le permet vous êtes prêts à compiler et tester votre programme ASM ARM :

# Assemblage pour un cpu arm7tdmi par exemple. Avec les options de debug
arm-elf-as -mcpu=arm7tdmi -gstabs main.s -o main.o
# Edition des liens. Avec les options qui vont bien jetez un coup d'oeil à ld(1) en cas de doute
arm-elf-ld -Ttext=0x2000 -nostartfiles -o main main.o
# Lancement dans gdb
arm-elf-gdb ./main

Et amusez vous avec gdb :

GNU gdb 6.8
Copyright (C) 2008 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=i386-portbld-freebsd7.2 --target=arm-elf"...
(gdb) target sim
Connected to the simulator.
(gdb) load
Loading section .text, size 0x34 vma 0x2000
Start address 0x2000
Transfer rate: 416 bits in <1 sec.
(gdb) run
Starting program: /usr/home/phil/src/asm/main

Program exited normally.
(gdb)

Vite fait un petit aide mémoire gdb (je suis moi même un lecteur de mon blog ça m'aide en cas de doute) :

b étiquette|adresse, créer un breakpoint
d, (delete) supprimer tous les breakpoints
r, (run) lancer le programme
s, (step) avancer d'une instruction
i r, (info register) visualiser les registres
x étiquette|adresse, visualiser la mémoire
quit, quitter

N'oubliez pas qu'on peut lancer des make depuis gdb et recharger le programme avec load.

Tags: FreeBSD arm asm
comments powered by Disqus