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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.