Bernd Schmidt <ber...@codesourcery.com> writes: > On 10/06/11 05:17, Ian Lance Taylor wrote: >> Thinking about it I think this is the wrong approach. The -fsplit-stack >> code by definition has to wrap the entire function and it can not modify >> any callee-saved registers. We should do shrink wrapping before >> -fsplit-stack, not the other way around. > > Sorry, I'm not following what you're saying here. Can you elaborate?
Basically -fsplit-stack wraps the entire function in code that (on x86_64) looks like cmpq %fs:112, %rsp jae .L2 movl $24, %r10d movl $0, %r11d call __morestack ret .L2: There is absolutely no reason to try to shrink wrap that code. It will never help. That code always has to be first. It especially has to be first because the gold linker recognizes the prologue specially when a split-stack function calls a non-split-stack function, in order to request a larger stack. Therefore, it seems to me that we should apply shrink wrapping to the function as it exists *before* the split-stack prologue is created. The flag_split_stack bit should be moved after the flag_shrink_wrap bit. Ian