Zenith-Team/RedHills

GitHub: Zenith-Team/RedHills

Red Hills 是 Clang 的定制分支,旨在实现与 Wii U 专有 Green Hills PowerPC 编译器的完全 ABI 兼容,为该平台的开源代码注入开发提供现代化工具链。

Stars: 0 | Forks: 0

banner redhills
wiiu discord docs
## 概述 **Red Hills** 是 Clang 19.1.7 的一个专门分支,旨在实现与专有的 Green Hills PowerPC Wii U 二进制文件 100% 的 ABI 兼容。我们已经摒弃了陈旧的 C++98 限制,为 Wii U 生态系统提供了一个现代化的、开源的工具链。它是专为 [Tachyon](https://github.com/Zenith-Team/Tachyon) Wii U 代码注入工具包设计的,并内置于其中。 ## 目标 - 实现与 GHS 完全的 [ABI 一致性](https://zenith.nsmbu.net/wiki/Green_Hills_C%2B%2B_ABI),使得由任一编译器构建的二进制文件可以相互调用,且无需担心行为差异。 ## 非目标 - 实现与 GHS 完全一致的代码生成(codegen)不是我们的目标,例如用于匹配反编译等用途。 - 支持无法结合使用的语言特性(如 C++ 异常)不是我们的目标。 - 成为 GHS 的直接替代品不是我们的目标,因此语言前端和驱动程序调用接口将不会保持一致。 - 维护对非 GHS 通用目标的任何形式的支持不是我们的目标,对于此类用例,请使用上游的 Clang 或其他替代方案。 ## 关键变更 可以在[此处](https://zenith.nsmbu.net/wiki/Green_Hills_C%2B%2B_ABI)的文档中找到关于 ABI 的详细指南。 ### 一致性 - **成员函数指针** (`ItaniumCXXABI`):修改了结构以反映 GHS 的生成和调用行为。 - **虚函数表** (`CGVTables`):修补了表数据和地址点的生成,以实现接口布局的一致性。 - **类布局** (`RecordLayoutBuilder`):从不使用尾部填充(tail padding),并将虚函数表指针放置在结构体的末尾。 - **多重继承** (`RecordLayoutBuilder`):仅从树中的第一个基类继承虚函数表指针。 - **分配构造函数** (`CGClass`):为空的 `this` 会导致对象在堆上进行分配。 - **统一析构函数** (`ItaniumCXXABI`):移除了基类析构函数和删除析构函数,完整析构函数通过使用一个标志位来同时处理这两者。 - **栈返回**:当使用指针参数 `sret` 在栈中返回值时,`this` 参数具有更高的优先级,而 `sret` 会被放置在其后。 ### 扩展 - **__builtin_mangle**:引入了一种在编译时将标识符转换为其修饰名(mangled form)字符串字面量的方法。 - 签名:`const char* __builtin_mangle(Decl, OptionalSignatureForOverloads)` - **PreserveAll**:在 PowerPC 上增加了对这种调用约定的支持,允许在不破坏处理器寄存器的情况下安全地 hook 函数。 - 为函数添加 `[[clang::preserve_all]]` 属性即可使用此特性。 ### 驱动程序默认设置 - **Triple**: `powerpc-eabi` - **异常**:已禁用(当前不兼容) - **RTTI**:已禁用(当前不兼容) - **线程安全静态变量**:已禁用 - **对齐分配**:已禁用 ## 限制 请查看 [issue 跟踪器](https://github.com/Zenith-Team/RedHills/issues) 以了解已知的一致性问题或缺失功能的列表。 ## 用法 请像使用标准 Clang 一样使用它,但是如果过度偏离默认标志,可能会导致破坏 ABI 一致性或代码生成损坏。 - 请注意,默认行为是仅编译而不进行链接,因为预期会手动调用 `ld` 来生成最终的 RPL。有关更多详细信息,请参阅 [Tachyon](https://github.com/Zenith-Team/Tachyon)。 ## 构建 1. 克隆代码仓库 2. 安装依赖项: - Clang - CMake - Ninja 3. 运行适用于您系统的相应设置脚本(`setup[OS].bat/sh`) 4. 使用 `ninja -C build clang` 发起编译 5. 构建好的文件将位于 `build/bin/` 查阅 [LLVM 入门](https://llvm.org/docs/GettingStarted.html#getting-the-source-code-and-building-llvm) 页面以获取有关构建和运行 Red Hills 的更多信息。 ### 特别鸣谢 - [Oliver Hunt](https://waffles.dog) - [The LLVM Project](https://llvm.org) ## 许可证 Red Hills 仓库中的所有代码均在 [Apache License v2.0 with LLVM Exceptions](https://llvm.org/LICENSE.txt) 下提供。
标签:ABI兼容, Bash脚本, Clang, PowerPC, SOC Prime, Wii U, 云资产清单, 开发工具, 编译器, 逆向工程