Comments (4)
cc. @cmuellner @apazos @topperc @asb @aswaterman
from riscv-elf-psabi-doc.
Thanks @kito-cheng for posting this issue.
A few remarks about the clipped figures from the PDF file posted in the discussion:
- The current ABI states that βthe frame pointer register will point to the Canonical Frame Address or CFA, which is the stack pointer value on entry to the current procedure.β
- In the alternative ABI "the frame pointer points to the saved return address in the CM.PUSH/CM.POP stack frame".
- If we opt for an alternative ABI for no-omit-frame-pointer + Zcmp and rely on the linker to do compatibility checks for ABI mix, I think we would need an ELF attribute that indicates that the frame pointer is enabled so the linker can implement the proper checks.
from riscv-elf-psabi-doc.
The previously attached PDF of the slides is out of date. Please use the latest version at:
https://docs.google.com/presentation/d/1Qk-pNJ5svY8trYW3Smk073ok9pcEJFc5hsx4rbOoj5M
from riscv-elf-psabi-doc.
I would suggest to point the fp
within each stack frame one word after the saved s0
value, so that -XLEN/8(fp)
is the saved fp
and -2*XLEN/8(fp)
is the saved ra
. This allows stack trace code to support both conventions (mixed, even) in the common case that stack bounds are known:
[unwind psuedocode]
while ((fp - stack_base) < stack_size) {
if ((fp[-1] - stack_base) < stack_size) {
ra = fp[-2]; fp = fp[-1]; /* Zcmp optimized convention */
} else {
ra = fp[-1]; fp = fp[-2]; /* ABI 1.1 convention */
}
print(ra);
}
This works because valid stack addresses are disjoint from valid instruction addresses.
A preprocessor define will be needed to communicate the use of the new ABI to unwinders when there is not enough information at runtime to distinguish stack and instruction addresses. It might be worth defining an ELF attribute for future-proofing, although mixing code using both frame pointer conventions may not be an error.
from riscv-elf-psabi-doc.
Related Issues (20)
- Specify relocation overflow checks HOT 1
- Specify a platform reserved register HOT 20
- Should calling convention also define ptrdiff_t? HOT 1
- Should we use lw/sw in push pop when we used ILP32, whether it's RV32 or RV64 HOT 3
- Operation semantics of __bf16 datatype HOT 2
- representation of GNU C fixed-size vectors HOT 4
- Deprecate R_RISCV_RVC_LUI? HOT 4
- Define GOT-Relative data relocation HOT 8
- Embedding R_RISCV_RELAX to another relocations HOT 7
- Define gp(x3) as global VLENB HOT 4
- Bitfield integer calling convention garbled
- Calling convention uses RV64GQ without definition or reference HOT 3
- Calling convention description of va_list et al. are unclear HOT 2
- Interpretation of floating-point types
- Linux ABI for Pointer Masking HOT 19
- Change branch from "master" to "main" HOT 1
- Add CREL support HOT 3
- Add RELR support HOT 6
- Question about medlow's single 2 GiB address range HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from riscv-elf-psabi-doc.