以前のバージョンの Linux をコンパイルしようとしています。ソース コードは git://github.com/azru0512/linux-0.12.git からダウンロードできます。「kernel/blk_drv/ramdisk.c」のコンパイル中に、以下のエラー メッセージが表示されました。
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
ramdisk.cの内容は、
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;
}
memcpy (include/string.h) インライン asm の問題だと思うので、そこから clobber リストを削除しますが、運が悪いです。何が問題なのかを調べるのを手伝ってもらえますか? ありがとう!