This repository has been archived by the owner on Mar 29, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
zby's testcase of NEMU
License
zhangboyang/NEMU-testcase
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
# NEMU-testcase zby's testcase of NEMU ZBY 的 NEMU 测试用例 关于 NEMU: NEMU 是复旦大学计算机系统基础课的大作业,目的是实现一个简单的教学用 x86 虚拟机。 复旦版是南大版的一个分叉项目 (fork),因为 NEMU 是南大的项目。 复旦版:https://github.com/fdu-ics/programming-assignment 南大版:https://github.com/nju-ics/ics2015 ======================================= 高级测试用例: testcase/src 目录下含有测试用例,其中有一部分是手写的,另一部分是用数据结构作业自动生成的。 其中一些运行时间会比较长,但不会超过三分钟。 我的 GCC 版本为 4.8.4,其他版本不保证运行没有问题。 使用方法: 将 testcase/src 目录下所有 .c 文件复制到你自己的 PA 对应目录下即可。 强烈建议对测试用例开启 -O2 编译优化: 由于 kernel, game 都是开启 -O2 优化来编译的,开启优化后,编译器产生的代码会有很大的不同, 因此强烈建议不开优化测一遍、开启优化再测一遍。 具体的开启编译优化的步骤是: 在 testcase/Makefile.part 的第一行,向 testcase_CFLAGS_EXTRA 中添加 -O2 选项。 一些测试用例的说明: LLneg.c 需要 NEG 指令更新 CF 标志,否则会测试失败,详情请看代码内的注释。 LLdiv.c 用减法和移位实现的 long long 型除法,可以解决虚拟机中不能进行 long long 除法的问题。 源项目:https://github.com/zhangboyang/LLdiv bad.c bad2.c 始终 HIT BAD TRAP。用来测试 NEMU 能不能 HIT BAD TRAP。 记得在交作业之前把它删掉以免引起误会。 movzx_high.c movsx_high.c 测试 MOVZX, MOVSX 中单字节寄存器的译码是否正确。 memcmp.c 由于某种幸运的原因,SHR 指令不更新 ZF 也能通过测试,详情请看代码内的注释。 poj*.c la*.c 用脚本自动生成的测试用例(见后)。来源是数据结构课作业。 ======================================= 增强版的 trap.h: 经过我修改的 trap.h 支持真机测试(见后),同时增加了 REALMACHINE_NOTSUITABLE 宏表明 某一个测试样例不适合在真机上进行测试。 如果你不愿意使用该 trap.h,可以删掉含有 REALMACHINE_NOTSUITABLE 的文件。 注意:该文件并不是我创建的,而是从 NEMU 项目中的文件修改而来,因此该文件并不适用根目录下 的 LICENSE 文件中的许可证内容。我只能按照 GitHub 默认的“允许fork”原则发布。 内嵌汇编的参考资料: 有一些测试样例用到了内嵌汇编,用来测试指令级的行为。 参考资料:http://www.cnblogs.com/taek/archive/2012/02/05/2338838.html 在真机上运行测试用例: 在真机上运行测试用例可以检测测试用例的正确性,用 realtest.sh 脚本可以实现这一点。 realtest.sh 的用法: ./realtest.sh : 测试 testcase/src 下的所有测试用例 ./realtest.sh someprogram.c : 仅测试 testcase/src/someprogram.c 关于真机运行的细节: 在真机运行测试用例时,如果直接运行会遇到访问违例的问题,可以通过 mmap 进行内存映射来解决。 具体的代码在 realtest.c 中。 自动生成测试用例: testcasegen.sh 脚本可以用来自动生成测试用例。 testcasegen.sh 的用法: ./testcasegen.sh path_to_some_c_src.c input_data.txt testcasename.c 将以 input_data.txt 为输入数据,运行 path_to_some_c_src.c 中的程序并产生输出。 并且将可以直接在 NEMU 中运行的 C 源代码文件命名为 testcasename.c 并拷贝到相应位置。 输入数据和输出数据会内嵌在生成出来的 C 源代码文件中。 输入的代码应该是类似 OJ 的输入输出形式,即用 scanf 读入数据,用 printf 输出数据。 因为是自己手写的 printf 和 scanf,所以只支持简单的 %d %lld %s %c 格式符, *不*支持这些格式符的高级用法如 %1d %10s 等。除 printf 外还支持 puts putchar 进行输出。 输入输出部分代码(即生成模板)在 testcase/naive-stdio-template.c 中。 源项目:https://github.com/zhangboyang/naive-stdio
About
zby's testcase of NEMU
Topics
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published