8
votes

Erreur de manutention de la section mémoire

Je reçois une erreur de temps de liaison: xxx pré>

Le code provoquant l'erreur (assemblage en C Source): p>

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


3 commentaires

Quel compilateur C utilisez-vous?


En tant que note ajoutée, le code exact que vous avez publié compilait bien dans GCC 4.4.1 sur Ubuntu 64 bits


C'est une erreur de temps de liaison, pas une compilation d'heure. Voici la version Information: Linker: GNU LD (GNU Binutils pour Debian) 2.20.1-System.20100303; Compilateur: GCC (Debian 4.4.2-9) 4.4.3 20100108 (PRERRELASE).


4 Réponses :


0
votes

Un long coup: Peut-être que votre lieur s'attend à ce que le format ELF (au lieu de COFF), et pour une raison quelconque el elf __ n'est pas défini? Avez-vous vérifié la sortie de préprocesseur pour cette version particulière?


0 commentaires

0
votes

je voudrais vérifier la valeur de __ section_flags juste pour être sûr que cela contient en effet une hache ou un aw. Je serais également sûr que __ coff __ n'est pas défini et que __ elf __ est. À défaut, il pourrait être temps d'attraper (est possible) une version précédente ou future du compilateur / liant et de voir si cela corrige votre problème. Peut-être pourriez-vous compiler votre code comme C ++ et d'une manière ou d'une autre, laissez-la sur les scritchs compilateur / liker / liker faire ce qu'ils sont censés faire? Dunno complètement, mais c'est là que je commencerais.


0 commentaires

1
votes

Un coup très long, mais la section est définie comme si vous voulez dans le script de liaison? LD IIRC a une option verbeuse pour afficher le script de liaison.


0 commentaires

0
votes

Les sections fonctionnent bien. Je vais donc ignorer cet avertissement.


0 commentaires