Autor Thema: Binutils LD 2.36.1  (Gelesen 5108 mal)

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« 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:
~/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?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

 

Einloggen