On Thu, 1 Mar 2012, Russell King - ARM Linux wrote:
On Thu, Mar 01, 2012 at 10:27:02AM +0000, Dave Martin wrote:
So, where there's a compelling reason to inline these things, we can use the existing techniques if we're alert to the risks. But in cases where there isn't a compelling reason, aren't we just inviting fragility unnecessarily?
The practical experience from the kernel suggests that there isn't a problem - that's not to say that future versions of gcc won't become a problem, and that the compiler guys may refuse to fix it.
I think it's a feature that we should be pressing gcc guys for - it's fairly fundamental to any programming which requires interfaces that require certain args in certain registers, or receive results in certain registers.
The options over this are basically:
- refusing to upgrade to any version of gcc which does not allow registers-in-asm
- doing the store-to-memory reload-in-asm thing
- hand-coding veneers for every call to marshall the registers
Each of those has its down sides, but I suspect with (1), it may be possible to have enough people applying pressure to the compiler guys that they finally see sense on this matter.
I tend to have a very practical approach about this sort of issues, so I am tempted to go with 1) if you agree.