Long time ago Rust used segmented stack (split stack), but switched to continuous stack around 2013. I am now working on ARM Cortex-M baremetal targets and trying to use segmented stack to prevent stack overflow. I would like to know how to let the current Rust compiler compile functions with segmented stack.
My understanding:
-
rustcneeds to emit the LLVM attributesplit-stackto the compiled functions. - Currently we have no
rustcoption that controls this behavior. Related discussion here. - I will need to modify the compiler source code to add the
split-stackattribute to the generated LLVM IR.
What I have done:
- Patched LLVM to emit the segmented stack function prologue for my embedded baremetal target.
- Wrote a runtime to support
__morestackcall. - Tested the LLVM patch and the runtime implementation by some test code written in C compiled with Clang (with
-fsplit-stackoption turned on). - Built
rustcfrom source with my patched LLVM and linked it torustup toolchain.
It seems that the only missing piece in the puzzle is to let rustc emit the split-stack attribute. Could someone please point me to the source file that is responsible for picking LLVM attributes for functions? Thanks!