zoukankan      html  css  js  c++  java
  • 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未设置

  • 相关阅读:
    rxjs入门7之其它操作符复习
    rxjs入门6之合并数据流
    rxjs入门5之创建数据流
    rxjs入门4之rxjs模式设计
    boost_1.63.0编译VS2013
    c++基础类型之signed、unsigned的一个细节
    【排序】归并排序算法
    【排序】快速排序算法
    【排序】冒泡排序算法
    【排序】堆排序算法
  • 原文地址:https://www.cnblogs.com/mull/p/7851854.html
Copyright © 2011-2022 走看看