Hasty Briefsbeta

双语

Making portable my unportable transputer C compiler

2 days ago
  • 作者发现了一张1998年的软盘,里面有一个适用于transputer的C编译器,该编译器是在32位系统上使用DJGPP编译的。
  • 尝试在现代64位Macbook Air M1上编译这个1998年的编译器时,由于32位指针和整数的假设,暴露了许多可移植性问题。
  • 关键问题包括int和指针的互换使用、缺少函数原型、以及使用字节池来管理结构体而非结构类型。
  • 作者重写了代码,使用结构体处理包含文件、类型复制、结构定义和变量定义,以修复指针大小问题。
  • 从Am29000 C编译器移植的代码用正确的结构体替换了硬编码的字节偏移量,提高了可读性和可移植性。
  • 作者修复了25个与指针/int误用相关的错误,为表达式节点增加了字段,并用结构体替换了全局/局部变量数组。
  • 在macOS上编译成功后,在transputer模拟器上测试发现了漏洞,包括由错误的malloc实现导致的无限循环,通过增加RAM修复。
  • 最终编译器在macOS和transputer模拟器上生成了相同的汇编代码,证明了成功的可移植性。
  • 整个过程耗时三天,仓库展示了从原始版本到最终可移植版本的提交记录。