私は以前のバージョンのLinuxをコンパイルしようとしていますが、git://github.com/ azru0512/linux-0.12.gitコンパイル '' カーネル/ blk_drv/ramdisk.c 'ながら'、私はramdisk.cで、'asm'をリロードしている間に 'CREG'クラスのレジスタを見つけることができません - memcpyインラインasm
if (CURRENT-> cmd == WRITE) {
(void) memcpy(addr,
CURRENT->buffer,
len);
} else if (CURRENT->cmd == READ) {
(void) memcpy(CURRENT->buffer,
addr,
len);
} else
panic("unknown ramdisk-command");
され、memcpyのは、
extern inline void * memcpy(void * dest,const void * src, int n)
{
__asm__("cld\n\t"
"rep\n\t"
"movsb"
::"c" (n),"S" (src),"D" (dest)
:"cx","si","di");
return dest;
}
は何以下のエラーメッセージ、
ramdisk.c:36:10: error: can't find a register in class 'CREG' while reloading 'asm'
ramdisk.c:40:10: error: can't find a register in class 'CREG' while reloading 'asm'
ramdisk.c:36:10: error: 'asm' operand has impossible constraints
ramdisk.c:40:10: error: 'asm' operand has impossible constraints
を得ました
私はmemcpy(include/string.h)のインラインasmの問題だと思うので、私はそれからclobberリストを削除しますが、運がありません。あなたは何がうまくいかないかを見つけるのを助けてくれますか?ありがとう!
私がクロバーリストを削除ramdisk.cライン36-40と周辺のコード – hirschhornsalz
を表示すると便利でしょう。あなたが "最適化を有効にする"ことを意味しているのかどうかはわかりませんが、私は-O [0..3]を動かさずに試してみます。インライン接頭辞を削除すると、 "memcpy"の多重定義が返されます。 – chenwj
その後、ヘッダに移動します – hirschhornsalz