Gast
#4778943
Wir arbeiten auf einen RX74M mit GCC for Renesas 4.8.0.201603-GNURX Toolchain und haben da ein ungutes Phänomen. Ab einer bestimmten Größe des Programmspeichers der gelinkt wird ändert sich plötzlich die Linking Reihenfolge in einer anderen section. Unser Projekt besteht aus Bootloader + Applikation welche sich einen gemeinsamen USB Host stack teilen. Dh. der bootloader startet benützt den USB Stack um nachzuschauen ob ein Stick angeschlossen ist und startet wenn nicht den Applikationsteil, welcher den gleichen USB Stack Teil verwendet um zB Daten auf den Stick zu schreiben. Ist eine neue Version des Applikationsteils vorhanden startet der Bootloader nicht die Applikation sondern flasht den Applikationsteil und startet den neuen danach. Deshalb ist es wichtig, dass beim Linken des Projektes immer der gleiche Code für den Stack Teil herauskommt da ansonsten der Controller ja abstürzt wenn der neue Applikationsteil den Stack anders benützt. Das komische daran ist, dass es schon ausreicht wenn der rodata Bereich der Applikation anwächst, also keine Funktionsaufrufe in der Lib o.ä. Nehmen wir an, dass ist die richtige linking order eines Teils der libgcc welcher in der Lib Section liegt: P 0xfffee2c0 0x3d0 libgcc.a(_udivdi3.o) 0xfffee2c0 __udivdi3 0xfffee2c0 _COM_DIV64u füge ich jetzt nur ein großes Array von const Daten im Applikationsteil hinzu (liegt in einer ganz anderen section) kommt plötzlich das heraus: P 0xfffee2c0 0x3d0 libgcc.a(_udivdi3.o) 0xfffee2c0 _COM_DIV64u 0xfffee2c0 __udivdi3 Also die Position von Lib Funktionen in einer ganz anderen section sind verdreht, dass passiert aber zB auch mit RAM Variable welche die Library nützt. Wie kann so etwas sein? Hab dazu auch ein support query bei Renesas gcc gestartet, aber vielleicht kann mir von hier jemand weiterhelfen. Danke im Voraus Reinhard