2010-04-16 5 views
8

Ich erhalte einen Link Zeitfehler:Speicherabschnitt Bedienungsfehler

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. 

Der Code den Fehler verursacht (Montage in C-Quelle):

# 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" 
); 

Gibt es eine Möglichkeit, dies zu beheben? Die Idee ist, am Anfang eines bestimmten Speicherbereichs eine Variable __ctors_begin__ zu setzen. Dieser Code ist ein Vermächtnis, das mit einem anderen Build-System und älteren Compiler funktioniert hat.

Bedeutung dieser Assembly-Code in an answer to my previous question erläutert.

+0

Welchen C-Compiler benutzen Sie? – bdonlan

+0

Als eine zusätzliche Notiz kompiliert der genaue Code gut in GCC 4.4.1 auf 64-Bit-Ubuntu – bdonlan

+1

Dies ist Link Zeit Fehler, keine Kompilierzeit eins. Hier ist Versionsinformation: Linker: GNU ld (GNU Binutils für Debian) 2.20.1-System.20100303; Compiler: gcc (Debian 4.4.2-9) 4.4.3 20100108 (Vorabversion). – Basilevs

Antwort

0

Eine Totale: Vielleicht erwartet Ihr Linker ELF-Format (statt COFF), und aus irgendeinem Grund __ELF__ ist nicht definiert? Haben Sie die Präprozessorausgabe für diesen bestimmten Build überprüft?

0

Ich würde dobule überprüfen Sie den Wert von __SECTION_FLAGS nur um sicher zu gehen, dass es tatsächlich Axt oder Aw enthält. Ich würde auch sicher sein, dass __COFF__ nicht definiert ist und dass __ELF__ ist. Wenn dies nicht gelingt, kann es an der Zeit sein, eine frühere oder zukünftige Version des Compilers/Linkers zu verwenden (ist möglich) und zu sehen, ob das Ihr Problem behebt. Vielleicht könnten Sie Ihren Code als C++ kompilieren und den Compiler/Linker/Link-Skripten das tun lassen, was sie tun sollen? Weiß nicht, aber hier würde ich anfangen.

1

sehr weit entfernt, aber ist der Abschnitt .ctors definiert, wie Sie im Linker-Skript wollen? ld iirc hat eine ausführliche Option, um das Linker-Skript anzuzeigen.

0

Abschnitte funktionieren gut. Also werde ich diese Warnung ignorieren.