Wie macht man einen malloc() in ARMv7 Assembler?

OP #7367759
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?

#7367774
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.

Gast #7370380
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren