Je désier coder une fonction qui fait un appelle système en asm avec du
c. Mais lors de la compilation, j'obtiens l'erreur suivant les deux cas :
/tmp/ccIpc6qu.o: In function `zwrite':
test.c:(.text+0x1c): undefined reference to `fd'
test.c:(.text+0x24): undefined reference to `buf'
test.c:(.text+0x2c): undefined reference to `count'
collect2: ld returned 1 exit status
Cas 1 :
int zwrite(int fd, const void *buf, short int count) {
__asm__("movq $1, %rax");
__asm__("movq %k, %rdi"::[k] "m" (fd));
__asm__("movq buf, %rsi");
__asm__("movq count, %rdx");
__asm__("syscall");
return 0;
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Antoine Leca
ZarkXe écrivit :
Je désier coder une fonction qui fait un appelle système en asm avec du c. Mais lors de la compilation, j'obtiens l'erreur suivant les deux cas :
/tmp/ccIpc6qu.o: In function `zwrite': test.c:(.text+0x1c): undefined reference to `fd' test.c:(.text+0x24): undefined reference to `buf' test.c:(.text+0x2c): undefined reference to `count'
Cas 1 : int zwrite(int fd, const void *buf, short int count) { __asm__("movq $1, %rax"); __asm__("movq %k, %rdi"::[k] "m" (fd));
fd, buf et count sont des raccourcis désignant (en fonction de l'ABI que tu utilises) des registres (de mémoire, RCX, RDX, RSI, RDI ou R8). Je pense donc que la contrainte à utiliser est "r" plutôt que "m". "g" peut peut-être remplacer les deux avec profit.
Là (et idem pour la macro), je crois que tu anticipes un peu sur les capacités de GCC...
Antoine
ZarkXe écrivit :
Je désier coder une fonction qui fait un appelle système en asm avec du
c. Mais lors de la compilation, j'obtiens l'erreur suivant les deux cas :
/tmp/ccIpc6qu.o: In function `zwrite':
test.c:(.text+0x1c): undefined reference to `fd'
test.c:(.text+0x24): undefined reference to `buf'
test.c:(.text+0x2c): undefined reference to `count'
Cas 1 :
int zwrite(int fd, const void *buf, short int count) {
__asm__("movq $1, %rax");
__asm__("movq %k, %rdi"::[k] "m" (fd));
fd, buf et count sont des raccourcis désignant (en fonction de l'ABI que
tu utilises) des registres (de mémoire, RCX, RDX, RSI, RDI ou R8). Je
pense donc que la contrainte à utiliser est "r" plutôt que "m".
"g" peut peut-être remplacer les deux avec profit.
Je désier coder une fonction qui fait un appelle système en asm avec du c. Mais lors de la compilation, j'obtiens l'erreur suivant les deux cas :
/tmp/ccIpc6qu.o: In function `zwrite': test.c:(.text+0x1c): undefined reference to `fd' test.c:(.text+0x24): undefined reference to `buf' test.c:(.text+0x2c): undefined reference to `count'
Cas 1 : int zwrite(int fd, const void *buf, short int count) { __asm__("movq $1, %rax"); __asm__("movq %k, %rdi"::[k] "m" (fd));
fd, buf et count sont des raccourcis désignant (en fonction de l'ABI que tu utilises) des registres (de mémoire, RCX, RDX, RSI, RDI ou R8). Je pense donc que la contrainte à utiliser est "r" plutôt que "m". "g" peut peut-être remplacer les deux avec profit.
Là (et idem pour la macro), je crois que tu anticipes un peu sur les capacités de GCC...
Antoine
ZarkXe
Le 24/10/2011 10:51, Antoine Leca a écrit :
ZarkXe écrivit :
Je désier coder une fonction qui fait un appelle système en asm avec du c. Mais lors de la compilation, j'obtiens l'erreur suivant les deux cas :
/tmp/ccIpc6qu.o: In function `zwrite': test.c:(.text+0x1c): undefined reference to `fd' test.c:(.text+0x24): undefined reference to `buf' test.c:(.text+0x2c): undefined reference to `count'
Cas 1 : int zwrite(int fd, const void *buf, short int count) { __asm__("movq $1, %rax"); __asm__("movq %k, %rdi"::[k] "m" (fd));
fd, buf et count sont des raccourcis désignant (en fonction de l'ABI que tu utilises) des registres (de mémoire, RCX, RDX, RSI, RDI ou R8). Je pense donc que la contrainte à utiliser est "r" plutôt que "m". "g" peut peut-être remplacer les deux avec profit.
Je désier coder une fonction qui fait un appelle système en asm avec du
c. Mais lors de la compilation, j'obtiens l'erreur suivant les deux cas :
/tmp/ccIpc6qu.o: In function `zwrite':
test.c:(.text+0x1c): undefined reference to `fd'
test.c:(.text+0x24): undefined reference to `buf'
test.c:(.text+0x2c): undefined reference to `count'
Cas 1 :
int zwrite(int fd, const void *buf, short int count) {
__asm__("movq $1, %rax");
__asm__("movq %k, %rdi"::[k] "m" (fd));
fd, buf et count sont des raccourcis désignant (en fonction de l'ABI que
tu utilises) des registres (de mémoire, RCX, RDX, RSI, RDI ou R8). Je
pense donc que la contrainte à utiliser est "r" plutôt que "m".
"g" peut peut-être remplacer les deux avec profit.
Je désier coder une fonction qui fait un appelle système en asm avec du c. Mais lors de la compilation, j'obtiens l'erreur suivant les deux cas :
/tmp/ccIpc6qu.o: In function `zwrite': test.c:(.text+0x1c): undefined reference to `fd' test.c:(.text+0x24): undefined reference to `buf' test.c:(.text+0x2c): undefined reference to `count'
Cas 1 : int zwrite(int fd, const void *buf, short int count) { __asm__("movq $1, %rax"); __asm__("movq %k, %rdi"::[k] "m" (fd));
fd, buf et count sont des raccourcis désignant (en fonction de l'ABI que tu utilises) des registres (de mémoire, RCX, RDX, RSI, RDI ou R8). Je pense donc que la contrainte à utiliser est "r" plutôt que "m". "g" peut peut-être remplacer les deux avec profit.