22 个版本
使用旧的 Rust 2015
0.1.21 | 2022 年 9 月 24 日 |
---|---|
0.1.20 | 2022 年 7 月 23 日 |
0.1.18 | 2022 年 4 月 2 日 |
0.1.17 | 2022 年 2 月 15 日 |
0.1.2 | 2018 年 12 月 29 日 |
176 在 Rust 模式 中
907,989 每月下载量
用于 1,152 个 crate (5 个直接)
76KB
1.5K SLoC
可移植堆栈操作
该 crate 提供了非常可移植的函数来控制堆栈指针并检查堆栈属性。该 crate 不试图提供对任何操作的任何安全抽象,唯一的目标是正确性、可移植性和效率(按此顺序)。因此,您在这个 crate 中看到的大多数函数都是不安全的。
除非您正在编写堆栈操作的堆栈抽象,否则这不是您想要的 crate。相反,请考虑这个 crate 的安全抽象之一。一个好的地方是查看 crates.io 的反向依赖列表。
平台支持
以下表格列出了支持的目标和架构,并附有当前支持和目标知识的说明。三列“可用”、“测试”和“调用堆栈”表示支持级别逐渐提高。
- “可用”基本上意味着代码可以构建,并为该目标生成了汇编文件;
- “测试”意味着汇编代码已经过测试或以其他方式验证为正确。对于大多数目标,这也意味着已经设置了持续集成;
- “调用堆栈”意味着汇编代码已经以适当的方式编写,以支持堆栈回溯和显示调用帧(即
gdb backtrace
可以按预期工作)。
目标 | 支持 | |||
---|---|---|---|---|
架构 | 操作系统 | 可用 | 测试 | 调用堆栈 |
注释 | ||||
x86_64 | apple-ios | 是 | 是 | 是 |
本地测试了目标。 |
||||
windows | 是 | 是 | 是,但已禁用 | |
在 Windows 上以常规方式分配的堆栈在 Windows 上不可用,并且正确分配堆栈的函数是 Windows 实现细节。作为(不必要地慢和灵活)的替代方案,使用 Fibers。 |
||||
* | 是 | 是 | 是 | |
i686 i586 i386 |
apple-ios | 是 | 未知 | 未知 |
linux-android | 未知 | 未知 | 未知 | |
汇编文件可用,但尚未验证目标是否可以构建 |
||||
windows | 否 | 否 | 否 | |
代码在我的本地机器上技术上是可以工作的,但在AppVeyor上异常处理没有正确工作,这使得我不愿将其标记为已工作。 在 Windows 上以常规方式分配的堆栈在 Windows 上不可用,并且正确分配堆栈的函数是 Windows 实现细节。作为(不必要地慢和灵活)的替代方案,使用 Fibers。 |
||||
* | 是 | 是 | 是 | |
aarch64 | apple-ios | 是 | 未知 | 是 |
aarch64-apple-ios尚未测试。运行这些测试需要iOS硬件。 |
||||
fuchsia unknown-cloudabi |
未知 | 未知 | 是 | |
windows | 否 | 否 | 否 | |
在 Windows 上以常规方式分配的堆栈在 Windows 上不可用,并且正确分配堆栈的函数是 Windows 实现细节。作为(不必要地慢和灵活)的替代方案,使用 Fibers。 |
||||
* | 是 | 是 | 是 | |
arm armv7 |
apple-ios | 是 | 未知 | 未知 |
armv7-apple-ios尚未测试。运行这些测试需要iOS硬件。 |
||||
windows | 否 | 否 | 否 | |
在 Windows 上以常规方式分配的堆栈在 Windows 上不可用,并且正确分配堆栈的函数是 Windows 实现细节。作为(不必要地慢和灵活)的替代方案,使用 Fibers。 |
||||
* | 是 | 是 | 是 | |
armv5te | * | 未知 | 未知 | 未知 |
thumbv6 thumbv7 |
* | 未知 | 未知 | 未知 |
mips mipsel |
linux | 是 | 是 | 是 |
仅支持o32 ABI,并将用于所有32位MIPS目标。 |
||||
mips64 mips64el |
linux | 是 | 是 | 是 |
powerpc | linux | 是 | 是 | 是 |
在程序中某些已定义的范围内调用堆栈生成可能失败,尽管通常的编译器生成的代码在类似点也会失败。 |
||||
powerpc64 | linux | 是 | 是 | 是 |
在程序中某些已定义的范围内调用堆栈生成可能失败,尽管通常的编译器生成的代码在类似点也会失败。 |
||||
AIX | 是 | 是 | 是 | |
powerpc64le | linux | 是 | 是 | 是 |
在程序中某些已定义的范围内调用堆栈生成可能失败,尽管通常的编译器生成的代码在类似点也会失败。 |
||||
s390x | linux | 是 | 本地 | 是 |
CI上的测试运行器挂起,已在qemu-system-s390x虚拟机上进行了本地验证。将来可能通过qemu的全系统仿真添加CI测试。 |
||||
sparc | linux | 未知 | 未知 | 未知 |
存在32位SPARC的Rust目标,但实际上没有Linux发行版有32位SPARC发行版,因此验证不可行。 实际的汇编代码已保守编写,模仿了64位SPARC代码,因此有一定的可能性能工作。 |
||||
sparc64 | linux | 是 | 本地 | 是 |
已在GCC Farm Project机器上手动验证其工作。将来可能通过qemu的全系统仿真添加CI测试。 |
||||
sparc9 | solaris | 是 | 未知 | 未知 |
使用与sparc64-linux-gnu目标相同的汇编代码。该目标没有rustc构建,因此目前无法验证该目标的正确运行。 |
||||
wasm | * | 否 | 否 | 否 |
此库不适用于目标。WASM没有指定的C ABI,调用堆栈甚至不在地址空间中,看起来也无法操作。 |
||||
asmjs | * | 否 | 否 | 否 |
可行性和必要性尚未确定。 |
||||
nvptx | * | 否 | 否 | 否 |
可行性和必要性尚未确定。 |
||||
msp430 | * | 否 | 否 | 否 |
尚未着手... |
||||
riscv32 | * | 是 | 否 | 未知 |
虽然汇编代码尚未测试,但它直接复制了64位版本。除非有非显而易见的错误,否则应该能正常工作。 |
||||
riscv64 | * | 是 | 本地 | 未知 |
已在本地使用C调用者测试了riscv64的汇编代码。 |
||||
loongarch64 | * | 是 | 本地 | 未知 |
已在本地使用C调用者测试了loongarch64的汇编代码。 |
许可
PSM许可采用以下之一
- Apache License, Version 2.0, (LICENSE-APACHE或https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT或https://opensource.org/licenses/MIT)
任选其一。
无运行时依赖
~180KB