|
1 |
| -# Portable Stack Manipulation |
2 |
| - |
3 |
| -This crate provides very portable functions to control the stack pointer and inspect the properties |
4 |
| -of the stack. This crate does not attempt to provide safe abstractions to any operations, the |
5 |
| -only goals are correctness, portability and efficiency (in that exact order). As a consequence most |
6 |
| -functions you’ll see in this crate are unsafe. |
7 |
| - |
8 |
| -Unless you’re writing a safe abstraction over stack manipulation, this is not the crate you |
9 |
| -want. Instead consider one of the safe abstractions over this crate. A good place to look at is |
10 |
| -the crates.io’s reverse dependency list. |
| 1 | +<div align="center"> |
| 2 | + <h1><code>psm</code></h1> |
| 3 | + <p> |
| 4 | + <strong>A portable library of stack introspection and manipulation operations</strong> |
| 5 | + </p> |
| 6 | +</div> |
| 7 | + |
| 8 | +This crate provides functions to control the stack pointer and inspect the properties of the stack. |
| 9 | +This crate does not attempt to provide safe or Rust-idiomatic abstractions to any of the |
| 10 | +operations. The only goals are correctness, portability and efficiency (in this exact order). As a |
| 11 | +consequence most functions you’ll see in this crate are unsafe and require the caller to maintain a |
| 12 | +variety of invariants. |
| 13 | + |
| 14 | +Unless you are writing a safe abstraction over stack manipulation or need extremely precse control |
| 15 | +over your stack, this is probably not the crate you want. Instead consider one of the safe |
| 16 | +abstractions based on this crate. A good place to look at is the crates.io’s reverse dependency |
| 17 | +list. |
11 | 18 |
|
12 | 19 | # Platform support
|
13 | 20 |
|
14 |
| -The following table lists supported targets and architectures with notes on the level of current |
15 |
| -support and knowledge about the target. The three columns “Available”, “Tested” and “Callstack” |
16 |
| -imply an increasingly high level of support. |
| 21 | +The following table lists targets and architectures supported by this crate, alongside the notes on |
| 22 | +the current level of support and behaviour. The three columns “Available”, “Tested” and “Callstack” |
| 23 | +indicate different degrees of support: |
17 | 24 |
|
18 |
| -* “Available” basically means that the code builds and the assembly files have been written for the |
19 |
| - target; |
20 |
| -* “Tested” means that the assembly code has been tested or otherwise verified to be correct. For |
21 |
| - most targets it also means that continuous integration is set up; |
22 |
| -* “Callstack” means that the assembly code has been written with due care to support unwinding the |
23 |
| - stack and displaying the call frames (i.e. `gdb backtrace` works as expected). |
| 25 | +* On platforms marked “available” this library builds and contains necessary functionality to |
| 26 | + introspect or manipulate the stack (see the `psm_stack_information` and `psm_stack_manipulation` |
| 27 | + macros); |
| 28 | +* “Tested” platforms have had their implementations tested or otherwise verified to be correct. For |
| 29 | + many such targets it also means that we have a continuous integration setup; |
| 30 | +* “Callstack” indicates that, in addition to the library being tested, it has been verified |
| 31 | + functions based on stack unwinding (e.g. `gdb backtrace`) continue to work correctly. |
24 | 32 |
|
25 | 33 | <table>
|
| 34 | + |
26 | 35 | <tr>
|
27 |
| -<th rowspan="1" colspan="2">Target</th> |
28 |
| -<th colspan="3">Support</th> |
| 36 | +<th rowspan="1" colspan="2">Target</th> <th colspan="3">Support</th> |
29 | 37 | </tr>
|
30 | 38 | <tr>
|
31 | 39 | <th rowspan="2">Architecture</th>
|
@@ -510,11 +518,9 @@ The assembly code for loongarch64 has been tested locally with a C caller.
|
510 | 518 |
|
511 | 519 | # License
|
512 | 520 |
|
513 |
| -PSM is licensed under either of |
| 521 | +`psm` is licensed under either of |
514 | 522 |
|
515 |
| - * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or |
516 |
| - https://www.apache.org/licenses/LICENSE-2.0) |
517 |
| - * MIT license ([LICENSE-MIT](LICENSE-MIT) or |
518 |
| - https://opensource.org/licenses/MIT) |
| 523 | + * [Apache License, Version 2.0](<https://www.apache.org/licenses/LICENSE-2.0>) |
| 524 | + * [MIT license](<https://opensource.org/licenses/MIT>) |
519 | 525 |
|
520 | 526 | at your option.
|
0 commit comments