Ich muß an einem First-Level-Bootloader für ein ARM-System herumbasteln. Dafür brauche ich eine softfloat-Version von gcc, da zur Laufzeit des Programms nichts zur Verfügung steht, was die entsprechenden Exceptions abfangen kann. Leider gelingt es mir nicht, den gcc als softfloat-Version zu bauen, obwohl ich die entsprechenden Schalter benutze. Im Netz finde ich eine Menge Leute mit ähnlichen Problemen, aber leider keine Lösung. Kennt sich jemand besser aus und kann helfen?
Gast
#1878442
Richtig gepatcht? http://git.buildroot.net/buildroot/tree/toolchain/gcc/
Nein, den Patch kannte ich noch nicht. Ich benutze allerdings auch nicht buildroot... Ich werde das mal probieren. Danke schonmal.
Hi First-Level Loader und float? Das passt irgendwie nicht zusammen. Für was brauchst du denn floating point beim booten des Systems? Selberbauen ist aber einfach: http://ymorin.is-a-geek.org/projects/crosstool Matthias
Ich brauchte kein Float, lediglich Integer-Division und Modulo (auf welcher Page im Flash ist die Adresse X?)... Der GCC, den mir crosstool ausgespuckt hat, konnte das nicht. Division ist dem ARM unbekannt, deshalb muß der Compiler das in Software emulieren. Die "bare metal" Version des Compilers erzeugt Code, der versucht, entsprechende Routinen aus einer C-Lib aufzurufen, die dann natürlich nicht gefunden werden. Das Problem ist jetzt aber gelöst, ich habe die entsprechenden Assembler-Routinen aus der Lib kopiert und manuell dazugelinkt. Und schon funktioniert es. Der Begriff "softfloat" war natürlich irreführend.
Hi mal mit -lgcc versucht? Die entsprechenden Routinen finden sich in der libgcc.a und die wird eigentlich immer beim Bauen des Compilers gleich mitgebaut. Mit crosstools-ng ist das auch wirklich einfach. Matthias
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.