0.11内核rd_load@ramdisk.c中memcpy函数好像有bug

0.11内核rd_load@ramdisk.c中memcpy函数好像有bug,如:
#define memcpy(dst,src,n)
    __asm__("cld;rep;movsl"::"D"((long)(dst)),"S"((long)(src)), "c"((long)(n)/4))

//memcpy(cp, bh->b_data, BLOCK_SIZE);
    for (j=0; j<BLOCK_SIZE; j++)
        cp[j] = bh->b_data[j];

    if (block == 256+1) {
        struct d_super_block * s2 = (struct d_super_block *) cp;
        if (s2->s_magic != SUPER_MAGIC) {
            /* No ram disk image present, assume normal floppy boot */
            DBUG("ds=0x%x es=0x%x fs=0x%x pid=%d", get_ds(), get_es(), get_fs(), current->pid);
            DBUG("TEST1 super block failed, s2->s_magic != SUPER_MAGIC");
        }
        s2 = (struct d_super_block *) bh->b_data;
        if (s2->s_magic != SUPER_MAGIC) {
            /* No ram disk image present, assume normal floppy boot */
            DBUG("TEST2 super block failed, s2->s_magic != SUPER_MAGIC");
        }  else {
            DBUG("TEST2 OK");
        }
    }
跟踪发现:使用memcpy函数复制,内容没有复制过来.
使用字节拷贝可以正常复制,是gcc-4.4.3 (ubuntu-8.04 server)bug?

objdump -d ramdisk.o
发现:
 25b:    0f 84 8f 01 00 00        je     3f0 <rd_load+0x330>
 261:    8b 75 00                 mov    0x0(%ebp),%esi
 264:    b9 00 04 00 00           mov    $0x400,%ecx
 269:    fc                       cld    
 26a:    f3 a4                    rep movsb %ds:(%esi),%es:(%edi)
 
 对%edi未设置

原文地址:https://www.cnblogs.com/mull/p/7851854.html