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

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

  1. Linux 0.11内核分析04:多进程视图

    目录 1 进程概念的引入 1.1 使用CPU的直观想法 1.2 直观用法的缺点 1.3 直观用法的改进 1.4 进程的概念 1.4.1 保存程序执行状态 1.4.2 进程与PCB 1.5 Linux ...

  2. Linux 0.11内核分析01:概述

    目录 1. 什么是操作系统 1.1 计算机硬件组成 1.2 操作系统基本结构 2. 操作系统核心视图 2.1 多进程视图 2.1.1 操作系统的相关演变 2.1.2 核心思想 2.2 文件视图 2.2 ...

  3. Linux 0.11内核分析02:系统启动

    目录 1. 内核镜像的构建 1.1 内核源码结构 1.1.1 boot 1.1.2 fs 1.1.3 include 1.1.4 init 1.1.5 kernel 1.1.6 lib 1.1.7 m ...

  4. 关于VC++6.0中getline函数的一个bug

    关于VC++6.0中getline函数的一个bug 最近在调试程序时,发现getline函数在VC++6.0和其他编译器上运行结果不一样,比如有如下这段程序: #include <iostrea ...

  5. Linux 0.11 内核解析:中断相关(1)asm.s文件中断处理分析

    0 源代码 有两个版本的,一个是带中文注释,Intel格式的:一个是不带注释是AT&T格式的. Linux 0.11 中文注释版 Linux 0.11 源码,基于<Linux内核完全注释 ...

  6. Linux 0.11内核分析03:系统调用

    目录 1 概述 1.1 什么是系统调用 1.2 为什么需要系统调用 2 系统调用基础设施 2.1 安装系统门 2.1.1 中断描述符 2.1.2 中断描述符安装函数 2.1.3 安装0x80系统门 2 ...

  7. linux 0.11 内核学习 -- bootsect.s, 万里长征第一步

    呵呵,终于将linux 0.11 下面的boot文件夹下的三个文件读完,下面是相关注释,没有汇编基础的人也是可以读的.废话少说,下面就是linux的源码了. 参考资料 Linux内核完全注释.pdf ...

  8. linux 0.11 内核学习路线

    转载至 http://tieba.baidu.com/p/4871637101 当初一开始拿到赵炯的书时是兴奋的,代码几乎每行都有注释,心想这不手到擒来的吗.但是代码看到十几行就看不下去了,没错就是十 ...

  9. LINUX 0.11内核完全剖析学习笔记-第三章内核编程语言和环境

    一.编译器 linux 0.11 集成了两种汇编器.一种是能产生16位代码的as86汇编器,使用配套的ld86链接器:另一种是GUN汇编器gas,使用GNU ld链接器俩链接产生的目标文件. 1.1 ...

最新文章

  1. activeMq 安装
  2. 用Python模拟浏览器操作
  3. mysql 主键互换_MySQL-什么方法可以快速的交换两条记录的ID?
  4. java保护访问,Java中的受保护的访问修饰符
  5. Linux常用的几个监控系统性能的命令
  6. 章节十五、6-log4 2-用默认的配置
  7. 如何解决css样式表在不同浏览器中显示效果不同的问题
  8. Linux内核4.17再获捷报
  9. Java面经背诵版(一)
  10. matlab求两向量夹角_matlab入门练习
  11. 如何将域名解析到指定的端口(linux服务器,超级简单,图文)
  12. Datawhale组队学习周报(第029周)
  13. 用递归+缓存求阶乘和排列组合数
  14. 程序员多数性功能不行_不会盲打的程序员和不懂技术的 CTO
  15. 国际会议查询方式和相关会议
  16. 字长16位的计算机 它表示是,计算机应用基础(第2版)在线作业
  17. 纽约大学深度学习PyTorch课程笔记(自用)Week3
  18. 通过游戏编程学Python(6)— 英汉词典、背单词
  19. 计算机英语口语面试自我介绍,英语口语面试自我介绍范文
  20. 第一个Android应用程序 (二)

热门文章

  1. redmine 一键安装
  2. ML 05、分类、标注与回归
  3. SpringMVC源码之参数解析绑定原理
  4. 直播源码和短视频源码,相亲相爱的一家人
  5. 移动端web开发常见问题
  6. 盘点springmvc的常用接口
  7. RHCE系列之LVM----理论篇
  8. 可可肉的奋斗(第一天)2012-12-24
  9. Dubbo快速启动示例
  10. Python 网络服务相关 杂记