[cfe-dev] RFC: Support x86 interrupt and exception handlers
H. Peter Anvin via cfe-dev
cfe-dev at lists.llvm.org
Tue Sep 22 12:21:46 PDT 2015
On 09/22/15 04:52, David Chisnall wrote:
> On 22 Sep 2015, at 12:47, H.J. Lu <hjl.tools at gmail.com> wrote:
>>
>> since __builtin_exception_error () is the same as
>> __builtin_return_address (0) and __builtin_interrupt_data () is
>> address of __builtin_exception_error () + size of register.
>
> Except that they’re *not*. __builtin_return_address(0) is guaranteed to be the same for the duration of the function. __builtin_exception_error() needs to either:
>
> 1) Fetch the values early with interrupts disabled, store them in a
> well-known location, and load them from this place when the intrinsic
> is called, or
>
> 2) Force any function that calls the intrinsic (and wants a
> meaningful result) to run with interrupts disabled, which is
> something that the compiler can’t verify without knowing the full
> chain of code from the interrupt handler to the current point (and
> therefore prone to error).
>
> It is trivial to write a little bit of inline assembly that reads
> these values from the CPU and expose that for C code. There is a
> good reason why no one does this.
>
This is why it makes no sense for the intrinsics to be callable from
anywhere except inside the interrupt handler. It is really nothing
other than a way to pass arguments -- whether or not it is simpler for
the compilers to implement than supporting a different function
signature is beyond my scope of expertise.
-hpa
More information about the cfe-dev
mailing list