[llvmlinux] Builtin: stack pointer

Andrew Pinski pinskia at gmail.com
Thu Mar 27 10:44:39 UTC 2014


On Thu, Mar 27, 2014 at 3:25 AM, Renato Golin <renato.golin at linaro.org> wrote:
> On 27 March 2014 10:12, Andreas Schwab <schwab at 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


More information about the LLVMLinux mailing list