On Thu, Mar 27, 2014 at 3:25 AM, Renato Golin <renato.go...@linaro.org> wrote: > On 27 March 2014 10:12, Andreas Schwab <sch...@suse.de> wrote: >> Can't you use __builtin_frame_address (0) instead? > > That would give me the frame pointer, not the stack pointer, and the > user would have to calculate manually the offset to get the actual > stack pointer, which would be target-specific, possibly making it even > worse. Is that what you meant?
So if we audit what the kernel uses this method. There is stack tracing code which is highly target dependent. And then there is current_thread_info which is also highly target dependent code (though it can use __builtin_frame_address(0) there since it is doing an alignment of a huge value at that point). I don't see why there needs to be an builtin function for this case, adding one extra instruction inside an inline-asm for the moving from the stack point to a normal register should be good enough. Take arch/arm64/include/asm/thread_info.h for an example, __builtin_frame_address(0) should be good enough since the sp and fp should be on the same page (that is what THREAD_SIZE is about). > (so you need to split by arch with ifdefs), Except it is already in the kernel anyways; not even by ifdefs but by different files so the reasoning adding a new builtin is not useful. Thanks, Andrew Pinski > > cheers, > --renato