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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.