2010-04-16 15 views
8

sto ricevendo un errore di link:Memoria errore movimentazione sezione

WARNING: /home/gulevich/development/camac-fedorov/camac/linux/k0607-lsi6/camac-k0607-lsi6.o (.ctors): unexpected non-allocatable section. 
Did you forget to use "ax"/"aw" in a .S file? 
Note that for example <linux/init.h> contains 
section definitions for use in .S files. 

Il codice causa l'errore (assemblaggio in C source):

# if defined(__ELF__) 
# define __SECTION_FLAGS ", \"aw\" , @progbits" 
/* writable flag needed for ld ".[cd]tors" sections bug workaround) */ 
# elif defined(__COFF__) 
# define __SECTION_FLAGS ", \"dr\"" 
/* untested, may be writable flag needed */ 
# endif 


asm 
(
".section .ctors" __SECTION_FLAGS "\n" 
".globl __ctors_begin__\n" 
"__ctors_begin__:\n" 
".previous\n" 
); 

C'è un modo per risolvere questo problema? L'idea è di inserire un oggetto vistabile __ctors_begin__ all'inizio di una determinata sezione di memoria. Questo codice è legacy che ha funzionato bene usando un sistema di compilazione diverso e un compilatore più vecchio.

Significato di questo codice assembly spiegato in an answer to my previous question.

+0

Quale compilatore C stai usando? – bdonlan

+0

Come nota aggiuntiva, il codice esatto che hai postato viene compilato correttamente in GCC 4.4.1 su ubuntu a 64 bit – bdonlan

+1

Questo è l'errore del tempo di collegamento, non uno di compilazione. Ecco le informazioni sulla versione: linker: GNU ld (GNU Binutils per Debian) 2.20.1-system.20100303; Compilatore : gcc (Debian 4.4.2-9) 4.4.3 20100108 (prerelease). – Basilevs

risposta

0

Un campo lungo: Forse il linker è in attesa di formato ELF (anziché COFF) e per qualche motivo __ELF__ non è definito? Hai controllato l'output del preprocessore per questa particolare build?

0

Vorrei dobule controllare il valore di __SECTION_FLAGS solo per essere sicuro che contenga effettivamente ax o aw. Sarei anche sicuro che lo __COFF__ non sia definito e che sia __ELF__. In caso contrario, potrebbe essere il momento di prendere (è possibile) una versione precedente o futura del compilatore/linker e vedere se questo risolve il problema. Magari potresti compilare il tuo codice come C++ e in qualche modo lasciare che il compilatore/linker/link scritps faccia ciò che dovrebbero fare? Non so, ma è qui che vorrei iniziare.

1

molto lungo, ma la sezione .ctors è definita come si desidera nella scrittura del linker? ld iirc ha un'opzione dettagliata per mostrare lo script del linker.

0

Le sezioni funzionano correttamente. Quindi ignorerò questo avvertimento.