Forum: Mikrocontroller und Digitale Elektronik Wie macht man einen malloc() in ARMv7 Assembler?


von Olli Z. (z80freak)


Lesenswert?

Leider ist es mir noch nicht gelungen ein einfaches ARM Programm mit 
Code::Blocks zu compilieren. Trotz installiertem GNU GCC ARM Compiler 
samt Toolchain verliert sich CB in Abhängigkeiten weil es scheinbar bei 
einem ARM Project immer ein gewisses Eval-Board voraussetzt.

Daher frage ich mal so ins Forum: Wenn ich in C einen malloc() ausführe 
um z.B. einen Buffer für einen String zu alloziieren, wie schaut sowas 
im Resultat als Assembler-Code für ARMv7 aus?

von Axel S. (a-za-z0-9)


Lesenswert?

Olli Z. schrieb:
> Wenn ich in C einen malloc() ausführe
> um z.B. einen Buffer für einen String zu alloziieren, wie schaut sowas
> im Resultat als Assembler-Code für ARMv7 aus?

Na wie schaut wohl ein Aufruf einer Library-Funktion im Assemblerlisting 
aus? Ein Procedure Call. Technisch ein BL opcode.

Je nachdem ob du in den ungelinkten Objectcode oder in das gelinkte 
Executable schaust, wird die Zieladresse 0 oder die reale sein.

von M. Н. (Gast)


Lesenswert?

Axel S. schrieb:
> Na wie schaut wohl ein Aufruf einer Library-Funktion im Assemblerlisting
> aus? Ein Procedure Call. Technisch ein BL opcode.

Das setzt natürlich voraus, dass die libc auch in deinem Assembler 
Projekt mit eingelinkt werden muss. Theoretisch gibt es von der libc 
mehrere Implementierungen etc. Aber üblich ist ein "newlib"-Abklatsch

https://sourceware.org/newlib/

Dadrin ist dann malloc implementiert. malloc selbst benötigt dann noch 
systemspezifische Unterfunktionen (system calls). Auf einem 
Betriebssystem gehen die dann tatsächlich roh in die Systemcalls des 
Betriebssystems (über Software-Interrupt etc.). Auf einem embedded 
System fehlt meist das Handling dieser Systemcalls. Statdessen erwartet 
die libc, dass gewisse Funktionen implementiert sind. malloc benötigt 
bspw. den "sbrk" systemcall, der den Heap vergrößert. Diese Funktion 
muss systemspezifisch irgendwo implementiert sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.