2017-10-18 14 views
0

Je crée un script de lieur GNU .ld et je voudrais définir symboliquement l'origine de certaines sections de la mémoire. Ce qui suit ne fonctionne pas:Définition d'une constante symbolique pour l'origine du script GNU .ld

BASE_ADDR = 0x4000; 

MEMORY 
{ 
    m_interrupts  (RX) : ORIGIN = BASE_ADDR, LENGTH = 0x0200 
    m_bootloader_config (RX) : ORIGIN = BASE_ADDR + 0x3C0, LENGTH = 0x0040 
    m_text    (RX) : ORIGIN = BASE_ADDR + 0x400, LENGTH = 0x10000 - (BASE_ADDR + 0x400) 
    m_data    (RW) : ORIGIN = 0x1FFFF000, LENGTH = 0x4000 
} 

Il en résulte l'erreur suivante:

Invoking: Cross ARM C++ Linker 
../MKL27Z64xxx4_flash.ld:67: nonconstant expression for origin 
collect2: error: ld returned 1 exit status 

L'erreur fait référence à la ligne qui se lit comme suit:

m_interrupts  (RX) : ORIGIN = BASE_ADDR, LENGTH = 0x0200 

Ce qui me déconcerte est que BASE_ADDR semble assez constant pour moi. Y a-t-il une syntaxe spéciale que je dois invoquer pour convaincre ld que BASE_ADDR est constant?

+0

Cela semble fonctionner avec binutils 2.26 Quelle version utilisez-vous – wds

+0

Selon Eclipse, il utilise:.?" GNU ARM C/C++ compilateur croisé \t 2.4. 1.201704251808 \t ilg.gnuarmeclipse.managedbuild.cross.feature.group Liviu Ionescu " Vous ne savez pas quelle version particulière de l'éditeur de liens il utilise –

Répondre

0

les états manuels LD, pour la mémoire.

« L'origine est une expression pour l'adresse de départ de la région de mémoire L'expression doit à une constante avant l'allocation de mémoire est effectuée, ce qui signifie que vous ne pouvez pas utiliser une section symboles relatifs le mot-clé ORIGIN peut être abrégé org ou o (mais pas, par exemple, ORG) "

et l'expression:.. BASE_ADDR = 0X4000; est une section symbole relatif

le texte suivant aussi se rapporte :

"Toutefois, d'autres valeurs (telles que les valeurs de symbole) ne sont pas connues ou nécessaires avant l'allocation de stockage. Ces valeurs sont évaluées ultérieurement, lorsque d'autres informations (telles que les tailles des sections de sortie) peuvent être utilisées dans l'expression d'affectation de symbole. "

Proposer en utilisant les valeurs absolues dans les allocations de mémoire

+0

Sigh .C'est ce que je craignais - merci pour l'interprétation claire. –