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未设置

0.11内核rd_load@ramdisk.c中memcpy函数好像有bug的更多相关文章

  1. 利用bochs调试Linux 0.11内核

    引导程序调试软件bochs,跟配套的linux0.11内核img下载地址分别是: http://sourceforge.net/projects/bochs/http://www.oldlinux.o ...

  2. cflow察看工程函数调用关系+Linux 0.11 内核实验环境

    http://savannah.gnu.org/projects/cflow http://tinylab.org/linux-0.11-lab/ http://ftp.gnu.org/gnu/cfl ...

  3. C中memcpy函数用法

    1.函数原型 void *memcpy(void *destin,void *source,unsigned n); 其中, destin代表用于存储复制内容的目标数组,类型强制转换为void*指针. ...

  4. Linux内核0.11体系结构 ——《Linux内核完全注释》笔记打卡

    0 总体介绍 一个完整的操作系统主要由4部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如图0.1所示.操作系统内核程序主要用于对硬件资源的抽象和访问调度. 图0.1 操作系统组成部分 内核 ...

  5. Linux内核0.11代码阅读(转)

    最近决定开始阅读Linux 0.11的源代码. 学习Linux操作系统的核心概念最好的方法莫过于阅读源代码.而Linux当前最新的源代码包已经有70MB左右,代码十分庞大,要想深入阅读十分困难.而Li ...

  6. Linux0.11内核--内存管理之1.初始化

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5597705.html ] Linux内核因为使用了内存分页机制,所以相对来说好理解些.因为内存 ...

  7. Linux0.11内核剖析--内核体系结构

    一个完整可用的操作系统主要由 4 部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如下图所示: 用户应用程序是指那些字处理程序. Internet 浏览器程序或用户自行编制的各种应用程序: ...

  8. Linux 0.11源码阅读笔记-块设备驱动程序

    块设备驱动程序 块设备驱动程序负责实现对块设备数据的读写功能.内核代码统一使用缓冲块间接和块设备(如磁盘)交换数据,缓冲区数据通过块设备驱动程序和块设备交换数据. 块设备的管理 块设备表 内核通过一张 ...

  9. Linux 0.11源码阅读笔记-总览

    Linux 0.11源码阅读笔记-总览 阅读源码的目的 加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代 ...

随机推荐

  1. 当模版引擎遇到点("."),会按照下列顺序查询:

    字典查询,例如:foo["bar"] 属性或方法查询,例如:foo.bar 数字索引查询,例如:foo[bar]

  2. DataSnap服务器从xe2升级到xe5报错的处理

    DataSnap服务器从xe2升级到xe5环境下,能够正常编译,但运行后会报错,如下图: 处理参考: http://blogs.embarcadero.com/pawelglowacki/2013/0 ...

  3. LD_RUN_PATH和LD_LIBRARY_PATH是干什么的?

    1. 使用场合 LD_RUN_PATH在链接时使用 LD_LIBRARY_PATH在执行时使用 2. 如何指定环境变量 export LD_LIBRARY_PATH=/opt/jello/lib:$L ...

  4. P4137 Rmq Problem / mex

    目录 链接 思路 线段树 莫队 链接 https://www.luogu.org/problemnew/show/P4137 思路 做了好几次,每次都得想一会,再记录一下 可持久化权值线段树 区间出现 ...

  5. Mysql优化知识点总结(转自CS-Notes)

    转载地址:https://github.com/CyC2018/CS-Notes/blob/master/notes/MySQL.md 一.索引 B+ Tree 原理 MySQL 索引 索引优化 索引 ...

  6. sublime使用技巧总结

    软件右下角可以选择文档语法模式 Ctrl + Shift + P ------------------命令模式sshtml模糊匹配-----语法切换到html模式,同理所得,ss+相应文件名匹配相应模 ...

  7. to do list_hadoop

    1.页面翻译 2.UI优化 vue.js reactive.js 3.Hadoop生态学习 Spark.Kafka.Druid……

  8. Leetcode167-Two Sum II Input array is sorted-Easy

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  9. UVA12558 埃及分数

    #include<iostream> #include<cstdio> #include<set> #include<memory.h> using n ...

  10. react native 渐变组件 react-native-linear-gradient

    github:  https://github.com/react-native-community/react-native-linear-gradient 安装:yarn add  react-n ...