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
0.11内核rd_load@ramdisk.c中memcpy函数好像有bug相关推荐
- Linux 0.11内核分析04:多进程视图
目录 1 进程概念的引入 1.1 使用CPU的直观想法 1.2 直观用法的缺点 1.3 直观用法的改进 1.4 进程的概念 1.4.1 保存程序执行状态 1.4.2 进程与PCB 1.5 Linux ...
- Linux 0.11内核分析01:概述
目录 1. 什么是操作系统 1.1 计算机硬件组成 1.2 操作系统基本结构 2. 操作系统核心视图 2.1 多进程视图 2.1.1 操作系统的相关演变 2.1.2 核心思想 2.2 文件视图 2.2 ...
- 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 ...
- 关于VC++6.0中getline函数的一个bug
关于VC++6.0中getline函数的一个bug 最近在调试程序时,发现getline函数在VC++6.0和其他编译器上运行结果不一样,比如有如下这段程序: #include <iostrea ...
- Linux 0.11 内核解析:中断相关(1)asm.s文件中断处理分析
0 源代码 有两个版本的,一个是带中文注释,Intel格式的:一个是不带注释是AT&T格式的. Linux 0.11 中文注释版 Linux 0.11 源码,基于<Linux内核完全注释 ...
- Linux 0.11内核分析03:系统调用
目录 1 概述 1.1 什么是系统调用 1.2 为什么需要系统调用 2 系统调用基础设施 2.1 安装系统门 2.1.1 中断描述符 2.1.2 中断描述符安装函数 2.1.3 安装0x80系统门 2 ...
- linux 0.11 内核学习 -- bootsect.s, 万里长征第一步
呵呵,终于将linux 0.11 下面的boot文件夹下的三个文件读完,下面是相关注释,没有汇编基础的人也是可以读的.废话少说,下面就是linux的源码了. 参考资料 Linux内核完全注释.pdf ...
- linux 0.11 内核学习路线
转载至 http://tieba.baidu.com/p/4871637101 当初一开始拿到赵炯的书时是兴奋的,代码几乎每行都有注释,心想这不手到擒来的吗.但是代码看到十几行就看不下去了,没错就是十 ...
- LINUX 0.11内核完全剖析学习笔记-第三章内核编程语言和环境
一.编译器 linux 0.11 集成了两种汇编器.一种是能产生16位代码的as86汇编器,使用配套的ld86链接器:另一种是GUN汇编器gas,使用GNU ld链接器俩链接产生的目标文件. 1.1 ...
最新文章
- activeMq 安装
- 用Python模拟浏览器操作
- mysql 主键互换_MySQL-什么方法可以快速的交换两条记录的ID?
- java保护访问,Java中的受保护的访问修饰符
- Linux常用的几个监控系统性能的命令
- 章节十五、6-log4 2-用默认的配置
- 如何解决css样式表在不同浏览器中显示效果不同的问题
- Linux内核4.17再获捷报
- Java面经背诵版(一)
- matlab求两向量夹角_matlab入门练习
- 如何将域名解析到指定的端口(linux服务器,超级简单,图文)
- Datawhale组队学习周报(第029周)
- 用递归+缓存求阶乘和排列组合数
- 程序员多数性功能不行_不会盲打的程序员和不懂技术的 CTO
- 国际会议查询方式和相关会议
- 字长16位的计算机 它表示是,计算机应用基础(第2版)在线作业
- 纽约大学深度学习PyTorch课程笔记(自用)Week3
- 通过游戏编程学Python(6)— 英汉词典、背单词
- 计算机英语口语面试自我介绍,英语口语面试自我介绍范文
- 第一个Android应用程序 (二)