更新日志
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
支持不同频率不同声道的多通道混声
(补丁)