<div dir="ltr"><div>Hi,</div><div>I am toying with an idea of having LLVM generate code that has position-independent stacks.   This would be a very useful property for implementing all sorts of micro-thread libraries (I am thinking something similar to Python <a href="http://stackoverflow.com/a/17447308">greenlets</a>), because you'd be able to easily save threadlet state from one OS thread and later restore it into another.</div>
<div><br></div><div>On the surface, it seems entirely do-able - basically, one needs to get rid of all the things that point into the stack.  It should be sufficient to:</div><div>1. write a function pass that finds all local variables, whose address is ever taken, and hoists them into a heap-allocated secondary "stack frame", </div>
<div>2. either turn off frame base pointers, or make sure they are adjusted after the stack had been relocated,</div><div>3. ... can't think of anything else, actually.</div><div><br></div><div>What do you guys think?  Any reasons this approach wouldn't fly?</div>
<div><br></div><div>Vadim</div></div>