Es geht um GNU Linker.Wie platziert man ein Symbol an einer bestimmten Adresse durch das Linker-Skript?
Ich habe eine (sagen wir mal) Variable namens myVar
. Jetzt möchte ich, dass meine Variable an einer bestimmten Adresse im Speicher abgelegt wird.
Der Compiler, den ich verwende, hat eine __attribute__ ((blablabla))
, die den Trick macht. Ich entscheide mich jedoch für das Linker-Skript.
Da jetzt konnte ich die Variable an bestimmten Adresse aus dem Linker Skript wie folgt einfach platzieren:
myVar = 0xDEAD;
Und es funktioniert tatsächlich. Das Problem ist, dass der Linker dumm ist und gelegentlich andere Variablen über meine Adresse verteilt. Und beide verhalten sich so, als wären sie in einer union
.
Ich denke, dass ich irgendwie dem Linker sagen muss, dass diese Adresse mit dieser Länge besetzt ist und nicht berührt werden sollte.
Wie auch immer, ich schätze, Sie bekommen die Idee. Irgendeine Hilfe?
Solche paraibles sind für Peripheriemodule in OS oder blankem typischerweise verwendet -Metall eingebetteter Code. Der richtige Ort für sie ist in einer Kopfzeile mit Makros. In einer Linkerdatei ist der von ihnen belegte Adressraum für reguläre Variablen nicht verfügbar. Mit dem grundsätzlichen Systemdesign ist also etwas nicht in Ordnung. Sehen Sie [ask] und stellen Sie [mcve] bereit. – Olaf
Was meinst du mit regulären Variablen? – Hairi
Variablen, die vom Compiler & Linker verwaltet werden, nicht Ihre absoluten Adressen. – Olaf