更新日志
ICS2024
NEMU
- 特性
- 提升在AM上运行时的随机性
(补丁)
- 使用capstone替换LLVM进行反汇编
(补丁)
- DiffTest支持loongarch32r
(补丁)
- 重新添加x86
(补丁)
- 性能
- 物理内存的初始化只采用1个随机字节, 大幅提升该步骤的性能
(补丁)
- 通过缩小局部变量的作用域提升译码过程的性能
(补丁)
- 修复
- 修复在AM上无法调用文件操作的问题
(补丁)
- 修复关闭窗口后仍无法退出的问题
(补丁)
- 修复将NEMU编译到
riscv64-nemu时, NEMU中的ISA为riscv32的错误
(补丁)
- 修复在打开日志文件前调用
Log导致段错误的问题
(补丁)
- 修复
utils.h中ANSI_BG_MAGENTA的定义错误
(补丁)
- 重构
- 将
s->isa.inst.val简化为s->isa.inst
(补丁)
- 添加
panic()拦截不支持的译码类型
(补丁)
- 增大IO空间
(补丁)
- 构建
- 源文件无变化时无需重新链接
(补丁)
- 修复
CONFIG_CC为空时导致编译失败的问题
(补丁)
- 修复在macOS上SDL2库路径错误的问题
(补丁)
- 去除无用的宏定义
(补丁)
- 文档
- 修复
config.mk中的文字错误
(补丁)
- 更新license中的时间
(补丁)
Abstract-Machine
- 特性
- 在native中添加UART
(补丁)
- 为npc添加
uart_config函数
(补丁)
- 为
riscv??-nemu的_start符号添加大小属性
(补丁)
- 添加
riscv32mini-nemu
(补丁和
补丁)
- 为native新增其他架构
- 修复
- 修复
riscv??-nemu的trap.S中的寄存器数量错误
(补丁)
- 修复使用clang时libgcc中的编译错误
(补丁)
- 修复编译预处理指示符
(补丁)
- 修复链接时
jal跳转距离不够的错误
(补丁)
- 修复loongarch的
cte.c中变量名错误导致的编译错误
(补丁)
- 修复
x86-qemu中boot相关的strict aliasing bug
(补丁)
- 重构
- 去除klib中的无用代码
(补丁)
- 简单重构native GPU中
W和H相关的代码
(补丁)
- 构建
- 去除
Makefile的image-dep规则中的冗余依赖
(补丁)
- 避免Linux上的其他动态库链接到ELF中的符号
(补丁)
- 重构依赖规则
- 修复源文件无变化时仍然重新链接的问题
(补丁)
- 将
mainargs注入到bin文件, 避免重复编译trm.c
(补丁)
- 将链接脚本添加到依赖规则
(补丁)
- 不显示native的链接命令
(补丁)
native的IOE通过sdl2-config找到SDL.h
(补丁)
- 修复
x86-qemu中array subscript 0 is outside array bounds的警告
(补丁)
am-kernels
- 特性
- 新增若干测试
yiels-os(补丁)
bad-apple(补丁)
blockchain
(补丁和
补丁)
- 假设
uptime不从0开始, 从而支持typing-game的重新运行
(补丁)
- benchmark出错时向TRM返回非0值
(补丁)
- 性能
- 修复
- 修复
keyboard-test中char符号问题
(补丁)
- 修复
game of life的栈溢出问题
(补丁)
- 修复
hanoi中屏幕不刷新的问题
(补丁)
- 修复
alu-tests中的若干问题
- 修复由
-Wall和-Werror报告的错误
(补丁)
- 修复由clang报告的
-2147483648格式错误问题
(补丁)
- 修复
microbench中的uint32_t溢出问题
(补丁)
- 修复在性能较低的平台上
donut显示时间过短的问题
(补丁)
- 重构
- 构建
- 改进
cpu-tests的Makefile输出的信息
(补丁)
- 文档
- 补充
alu-tests和snake的license
(补丁)
Navy-apps
- 修复
- 修复
nplayer中的结束判断条件
(补丁)
- 拦截libbdf中字体文件打开错误的问题
(补丁)
- 用surface相关API实现
native的SDL渲染, 修复render API只能在主线程调用的问题
(补丁)
- 修复
nslider在Linux native上无法更新画面的问题
(补丁)
- 修复
libbdf在gcc 13上编译错误的问题
(补丁)
- 构建
- 修复git未追踪
scripts/riscv/common.mk的问题
(补丁)
- 修复
ar命令在macOS中出错的问题
(补丁)
- 重构依赖规则, 修复源文件无变化时仍然重新链接的问题
(补丁)
- 文档
- 添加关于
/proc/dispinfo的注释
(补丁)
ICS2023
NEMU
- 特性
- 重新添加mips32
(补丁)
- 新增loongarch32r
(补丁)
- 通过llvm反汇编时关闭伪指令
(补丁)
- 修复
- 修复译码非法指令时的未定义行为
(补丁)
- 更新spike版本, 修复macOS上因llvm版本较新导致的spike编译错误
(补丁)
- 修复
gen-expr中fscanf()未检查返回值导致的编译报错
(补丁)
- 修复
nemu/src/device/keyboard.c中宏可能与库的头文件中定义重名的问题
- 修复SDL在Wayland环境下窗口不弹出的问题
(补丁)
- 重构
- 构建
- 修复C++报告的
invalid suffix on literal警告
(补丁)
- 同步config文件
(补丁)
- 修复在llvm15上库函数路径变化导致的编译错误
(补丁)
- 修复在macOS上按键宏定义与系统库冲突的问题
(补丁)
- 将difftest动态库的符号默认设置为
visibility=hidden, 提升动态库内部符号引用的性能
(补丁)
- 修复Gentoo Linux中kconfig链接报错的问题
(补丁)
- 文档
- 更新启动debian的说明文档
(补丁)
- 修复
difftest-def.h中注释的文字错误
(补丁)
Abstract-Machine
- 特性
- 新增
loongarch32r-nemu
(补丁)
- 将
riscv64-npc改为riscv32e-npc
(补丁)
- 为
riscv32e-npc添加libgcc的若干支持, 用软件模拟乘除指令
(补丁)
- 添加用于生成logisim镜像文件的python脚本
(补丁)
- 修复
- 在mips32的
start.S中为异常入口0x80000180预留若干位置, 用于设置异常入口处的执行
(补丁)
- 修复sdl2-2.0.22-1后窗口有概率不显示的问题
(补丁)
- 修复native的
platform.c链接到RT-Thread中ftruncate()的问题
(补丁)
- 修复
riscv.h中通用寄存器数量在rve中不正确的问题
(补丁)
- 修复
riscv32-nemu中错误采用rve ABI的问题
(补丁)
- 重构
- 将
scripts/isa/目录下RISC-V相关的.mk文件合并成riscv.mk
(补丁)
- 将
am/include/arch/目录下RISC-V相关的.h文件合并成riscv.h
(补丁)
- 构建
- 去除ld 2.39引入的关于可执行栈和可读可写可执行的可加载段的警告
(补丁和
补丁)
- 使用riscv64-linux-gnu-gcc 11将CSR指令独立成zicsr扩展, 修复相关编译错误
(补丁)
- 支持将
LDFLAGS传递给native的g++
(补丁)
- 修复macOS上默认调用llvm-ar的问题
(补丁)
am-kernels
- 特性
- 新增ALU test, bf等应用, 移植自movfuscator项目
(补丁,
补丁,
补丁,
补丁,
补丁,
补丁,
补丁,
补丁,
补丁)
- 修复
- 修复native在glibc 2.39上运行thread-os时发生栈溢出的问题
(补丁)
- 重构
- 去除
cpu-tests中冗余的klib依赖
(补丁)
Navy-Apps
- 特性
- 新增loongarch32r
(补丁)
- 新增riscv32e
(补丁)
- 修复
- 修复native在glibc 2.39上段错误的问题
(补丁)
- 修复
LD_PRELOAD影响gdb的问题
(补丁)
- 重构
- 将CRT中
_start的定义集中在一个文件中, 方便使用__riscv宏进行判断
(补丁)
- 构建
- 添加缺失的文件
scripts/riscv/common.mk
(补丁)
- 文档
ICS2022
NEMU
- 特性
- 移除指令实现的IR层
- 支持向spike注入中断
- 使用LLVM库进行反汇编
(补丁)
- 添加NEMU作为REF的API(一生一芯中使用)
(补丁)
- 添加MMIO区间重叠的检查
(补丁)
- 修复
- 修复spike段错误的问题
(补丁)
- 修复监视点初始化时的数组溢出问题
(补丁)
- 修复
isa_logo字符串缺少\0的错误
(补丁)
- 去掉RTL中间表示, 用"抄手册"宏重构译码部分
(补丁)
- 修复
difftest_init()中缺少的参数
(补丁)
- 修复因
optind重定位错误导致spike触发段错误
(补丁)
- 修复移位运算的未定义行为
(补丁)
- 修复
ANSI文字错误
(补丁)
- 修复PMEM64的
printf格式错误
(补丁)
- 修复pmem右边界的计算
(补丁和
补丁)
- 修复字符串中的文字错误
(补丁)
- 修复
uint64_t的格式说明符
(补丁和
补丁)
- 重构
- 将
instr重命名为inst
- 去掉调用
dlopen()时不使用的RTLD_DEEPBIND
(补丁)
- 交换itrace中输出的字节序, 使其符合RISC-V的阅读习惯
(补丁)
- 重构物理内存左右边界的计算
(补丁)
- 简化
INSTPAT的写法
(补丁和
补丁)
- 构建
- 修复
clean-tools错误清除spike中子项目的问题
(补丁)
- 修复git忽略追踪
disasm.cc的问题
(补丁)
- 支持多个LLVM版本
(补丁和
补丁)
- 使用
ics-pa项目中的git函数
(补丁)
- 默认关闭设备
(补丁)
- 修复采用
-g编译时的LLVM相关的警告
(补丁)
- 使用ssh从github上克隆spike
(补丁)
- 修复LLVM 14中头文件
TargetRegistry.h移动导致的错误
(补丁)
- LLVM版本小于11时报错
(补丁)
- 去除
kconfig中冗余的动态库-ltinfo
(补丁)
- 文档
Abstract-Machine
- 特性
riscv64-npc支持乘除法指令
(补丁)
- 使用标准调试指令实现
nemu_trap
(补丁)
- 修复
- 修复定义
__NATIVE_USE_KLIB__时的死递归
(补丁)
- 构建
- 默认使用通常模式(而不是批处理模式)来运行NEMU
(补丁)
- 修复ubuntu 21.10下因glibc中的
SIGSTKSZ展开为函数调用而导致native编译出错的问题
(补丁)
am-kernels
- 构建
Nanos-lite
- 修复
- 修复
sizeof(struct timeval)在glibc和newlib中不一致的问题
(补丁)
Navy-apps
- 构建
ICS2021
NEMU
- 特性
- 为VGA添加sync寄存器
(补丁)
- 添加riscv64
(补丁)
- 引入"抄手册宏", 简化操作码译码的实现
(补丁)
- 添加spike作为RISC-V DiffTest的REF
- 暂时移除x86和mips
- 移除
cpu-tests的一键运行脚本, 将其合并到cpu-tests中
- 添加各种对宏进行相关测试的宏定义
- 添加一些将来可能会使用的资源, 包括启动Debian的说明, SD卡内核驱动等
- 在
cpu_exec()中调用device_update()
(补丁)
- 修复
- 修复
PMEM_SIZE设置与讲义不一致的问题
(补丁)
- 修复文字错误
fecth
(补丁)
- 修复框架代码
audio_play()未使用的编译警告
(补丁)
- 修复
BITMASK宏中的移位操作的未定义行为
(补丁)
- 修复
qemu-diff中调用calloc()时的类型错误
(补丁)
- 修复
config.mk中的文字错误
(补丁)
- 修复
MEM_RET_FAIL与MMU_TRANSLATE的数值冲突的问题
(补丁)
- 重构
- 去除
gen-expr中的无用代码
(补丁)
- 将简易调试器命名为
sdb
- 添加
hostcall()来封装计算指令以外的操作
- 用
host_read()/host_write()实现pmem_read()和pmem_write()
- 添加
mmio_read()/mmio_write()
- 将部分功能实现放到
utils/目录下
- 重构
qemu-diff中ISA相关的代码
- 将
load_val重命名为is_write
(补丁)
- 用
dnpc更新pc
(补丁)
- 将移位指令的命名修改成RISC-V风格
(补丁)
- 去除无用的
isa_mmu_state()
(补丁)
- 去除无用的
isa_hostcall()
(补丁)
- 构建
- 添加
Kconfig和menuconfig维护宏定义
- 将
Makefile拆成build.mk和native.mk, 前者用于在构建tools/目录下的工具时复用
- 在
Makefile中采用filelist维护需要编译的源文件
- 支持将NEMU编译到AM
- 去除
build.mk中无用的SO_CFLAGS
(补丁)
- 文档
- 在
Makefile中添加注释
(补丁)
- 修复
isa_raise_intr()中的注释
(补丁)
Abstract-Machine
- 特性
- NEMU的GPU通过向sync寄存器写入非零值实现屏幕的刷新
(补丁)
native的堆区移动到0x1000000, 以支持用户程序可在VME关闭时访问
(补丁)
native的GPU支持800x600模式
(补丁)
- 添加
riscv64-nemu
(补丁)
- 强制
native初始化时链接到glibc中的memcpy(), 在klib中的memcpy()实现不正确的情况下也能工作
- 为NEMU添加单核的MPE实现
- 支持
x86_64-qemu的交叉编译
- 添加
riscv64-mycpu(一生一芯中使用)
(补丁,
补丁,
补丁,
补丁)
- 添加spike
(补丁)
- 性能
- 移除
native在物理内存上的保护功能, 减少系统调用以提升性能
(补丁)
- 用哈希表实现
native的map()中的虚地址查找
- 修复
- 修复Linux 4.19内核中因恢复FPU上下文时
fxrstor64指令触发缺页而发送SIGSEGV的问题
(补丁)
- 修复
native在信号处理函数中调用非信号安全函数printf()的问题
- 修复
amdev.h被多次包含造成的问题
- 修复在
native上运行仙剑时遇到的SIGFPE问题, 需要在调用SDL_BlitSurface前清除等待中的FPU异常
- 修复
riscv64-mycpu模拟除法时的死递归问题
(补丁)
- 修复静态库的循环依赖问题
(补丁)
- 重构
- 移除
x86-nemu中无用的usp
(补丁)
- 在
native中使用SIGUSR2实现yield(), 提升代码的可移植性
- 在
native中使用函数调用从irq_handle()返回, 提升代码的可移植性
- 用surface相关API实现
native的SDL渲染
- 将
native平台相关的代码移动到platform.c中
- 用管道实现
native声卡中的数据同步
- 去除
boot目录
- 将
__amkcontext_start重命名为__am_kcontext_start
- klib中的函数默认调用
panic()
- 重构目录, 合并riscv32和riscv64
(补丁)
- 构建
- 清理NEMU客户程序中未使用的代码和数据
(补丁)
- 去除Ubuntu 20.04中在Comet Lake以上版本的CPU中编译出的
endbr32指令
(补丁)
- 待构建源文件列表为空时提示错误信息
- 若交叉编译器不存在, 则使用本地编译器
- 不同的架构复用相同的链接脚本
- 在mk文件中指定AM相关的源文件
(补丁)
- 在Ubuntu中禁用栈保护
(补丁)
- 文档
am-kernels
- 特性
microbench的时间精度提升至us
(补丁)
microbench添加huge规模输入, 用于真机测试
(补丁和)
补丁)
microbench的参考机器更换为i9-9900k
(补丁)
cpu-tests支持一键运行的结果统计
(补丁)
- 支持将NEMU编译到AM
(补丁)
- 当NEMU未成功编译到AM时, 恢复之前的config配置
(补丁)
- 修复
- 修复
cpu-tests的string测试中strcmp()的返回值检查
(补丁)
- 修复
litenes中多重定义的链接错误
(补丁)
- 重构
- 在
microbench中显式使用uint32_t和uint64_t
(补丁)
- 由
microbench自行对us部分进行输出格式化, 避免对%03d的依赖
(补丁)
- 将
am-tests中intr-test的pirntf()换成putch(), 降低对klib的依赖
(补丁)
- 构建
- 移除
cpu-tests中不再使用的构建规则
(补丁)
- 取消部分文件的可执行权限
(补丁)
Nanos-lite
- 修复
- 修复
HAS_NAVY=0时依赖错误的问题
(补丁)
- 修复框架代码
pg_alloc()未使用的编译警告
(补丁)
Navy-apps
- 特性
- 修复
- 修复NWM在退出时子进程仍然运行的问题
(补丁)
- 修复
libbdf和libbmp调用SDL_CreateRGBSurfaceFrom后的内存泄漏问题
(补丁)
- 重构
libminiSDL将fp从SDL_RWops的union成员中取出, 从而允许通过fmemopen实现内存文件
(补丁)
libSDL_image中要求IMG_Load_RW()的freesrc参数为0
(补丁)
- 构建
- 令
ramdisk.img大小为512字节的整数倍, 从而易于实现磁盘的特性
(补丁)
- 去除
make clean-all时的警告信息
(补丁)
make init时不检查ISA是否合法
(补丁)
make install时自动创建fsimg/bin/目录
(补丁)
- 文档
libSDL_mixer支持不同频率不同声道的多通道混声
(补丁)