Hallo,
ich habe mein Speicher so konzipiert, dass die unteren 512GiB und die oberen 512GiB Kernelspace sind. Der obere Speicherbereich wird allerdings nur zur Verwaltung der Pagingtabellen verwendet. Der Userspace sitzt dazwischen. Programme werden an die Adresse 0x8000000000 geladen und dann ausgeführt. Jetzt habe ich das Problem, dass mir ld immer folgende Fehlermeldung ausgibt:
main.c:(.text+0x30): relocation truncated to fit: R_X86_64_32 against `.rodata'
Es wurde zwar schon
hier vermutet, dass 0x8000000000 nicht in 32-bit passt und deshalb diese Meldung ausgegeben wird, aber das macht für mich keinen Sinn, denn diese Meldung wird ja nur für Symbole, also (globale) Variablen oder Funktionen, ausgegeben. Diese werden ja relativ addressiert. Aber eigentlich sollte diese relative Addresse in 32-bit reinpassen, denn das Programm ist sicher kleiner als 4 GiB.
Meine aktuelle Konfiguration für mein Cross-gcc seht ihr
hier.
Ich hoffe ihr wisst eine Antwort auf mein Problem.