5 ms·
Why are "unbalanced" rets not good? Also, am I wrong that, at least in most Unixish systems, interrupts use a separate stack register from that of user space c
by thyrsus 12y ago
Why are "unbalanced" rets not good?
Also, am I wrong that, at least in most Unixish systems, interrupts use a separate stack register from that of user space code, and thus, with care, one can avoid corruption of the direct thread addresses?
- peterfirefly 12y agoBecause modern CPUs have a small internal return stack for target predictions for return instructions. If your calls and returns are not balanced, you get mispredictions (or it gives up and stops predicting altogether). http://en.wikipedia.org/wiki/Branch_predictor#Prediction_of_function_returns http://en.wikipedia.org/wiki/Branch_predictor#Prediction_of_... http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0363g/Cihdbcef.html http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.... This type of branch predictor went mainstream in the late 90's with CPUs such as the AMD K6-2. It is not a correctness issue (as long as there's nothing else that thinks it can put stuff on the stack), just a performance issue. You should not expect that the code snippets you "return" to will leave the stack alone -- spill/fill and callee-save instructions etc will kill the part of the "stack" that has already been "returned" from which is fine as long as you don't want to reuse it. But I think you will.