1
Softwareentwicklung / Binutils LD 2.36.1
« am: 14. April 2021, 02:30 »
Hallo zusammen.
Ich habe bis jetzt zuverlässig den binutils ld mit version 2.26 verwendet. Ich dachte mir aber es wird mal Zeit für ein Update auf Version 2.36.1 (die zum jetzigen Zeitpunkt aktuellste Version). Das erstellen des ELF-Linkers und des Cross-Linkers hat auch relativ gut funktioniert. Nur habe ich jetzt Problem, dass beim Linken der Programme für mein OS ich folgende Fehlermeldung bekomme:
Ich habe dann mal ausprobiert was die Fehlermeldung auch vorschlägt. Also `-Wl,--no-relax` zum Makefile hinzugefügt und siehe da es funktioniert. Nur ich würde gerne Verstehen, warum es ohne dieses Flag nicht funktioniert.
Nach ein paar Nachforschungen habe ich rausgefunden, dass diese Fehlermeldung erscheint bei einem Overflow, da die relative Addressierung in x64 ja trotzdem 32-bit signed ist. Aber der 2.26 Linker hat ja damit auch kein Problem und das Binary ist nur ein paar KB gross.
Weiss jemand von euch was das Problem sein könnte?
Ich habe bis jetzt zuverlässig den binutils ld mit version 2.26 verwendet. Ich dachte mir aber es wird mal Zeit für ein Update auf Version 2.36.1 (die zum jetzigen Zeitpunkt aktuellste Version). Das erstellen des ELF-Linkers und des Cross-Linkers hat auch relativ gut funktioniert. Nur habe ich jetzt Problem, dass beim Linken der Programme für mein OS ich folgende Fehlermeldung bekomme:
Code: [Auswählen]
~/YourOS/crosstools/env/lib/gcc/x86_64-pc-youros/7.5.0/../../../../x86_64-pc-youros/bin/ld: failed to convert GOTPCREL relocation; relink with --no-relax
Nun ist noch anzumerken, dass ich die Programme an die 512GiB-Grenze (0x8000000000) linke. Das hat bisher gut funktioniert (man muss halt mit -fpic kompilieren). Nur mit dem neuen Linker klappt das nicht mehr. Das passiert auch, wenn ich die selben Objekt-Dateien nehme wie für den 2.26 Linker.Ich habe dann mal ausprobiert was die Fehlermeldung auch vorschlägt. Also `-Wl,--no-relax` zum Makefile hinzugefügt und siehe da es funktioniert. Nur ich würde gerne Verstehen, warum es ohne dieses Flag nicht funktioniert.
Nach ein paar Nachforschungen habe ich rausgefunden, dass diese Fehlermeldung erscheint bei einem Overflow, da die relative Addressierung in x64 ja trotzdem 32-bit signed ist. Aber der 2.26 Linker hat ja damit auch kein Problem und das Binary ist nur ein paar KB gross.
Weiss jemand von euch was das Problem sein könnte?