On Tue, Aug 1, 2017 at 2:25 PM, Uros Bizjak <ubiz...@gmail.com> wrote: > On Tue, Aug 1, 2017 at 11:23 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >> On Tue, Aug 1, 2017 at 2:11 PM, Uros Bizjak <ubiz...@gmail.com> wrote: >>> On Tue, Aug 1, 2017 at 11:05 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >>>> On Tue, Aug 1, 2017 at 1:49 PM, Uros Bizjak <ubiz...@gmail.com> wrote: >>>>> On Tue, Aug 1, 2017 at 9:46 PM, H.J. Lu <hongjiu...@intel.com> wrote: >>>>>> Add some tests for implementing interrupt handlers with naked attribute. >>>>>> >>>>>> OK for trunk? >>>>>> >>>>>> H.J. >>>>>> --- >>>>>> * gcc.dg/guality/pr25967-1.c: New test. >>>>>> * gcc.dg/guality/pr25967-2.c: Likewise. >>>>>> * gcc.dg/torture/pr25967-1.c: Likewise. >>>>>> * gcc.dg/torture/pr25967-2.c: Likewise. >>>>> >>>>> OK with a small change below. >>>>> >>>> >>>>>> +void >>>>>> +fn (void) >>>>>> +{ >>>>>> + struct interrupt_frame *frame; >>>>>> + uword_t error; >>>>>> + asm ("lea " WORD_SIZE "(%%" STACK_POINTER "), %0" : "=r" (frame) : ); >>>>>> + asm ("mov (%%" STACK_POINTER "), %0" : "=r" (error) : ); >>>>> >>>>> The above two asm needs to be volatile. They are not "simple" asm, and >>>>> access stack pointer behind the compilers back. And please merge them >>>>> to one multi-line volatile asm statement. >>>>> >>>> >>>> >>>> This is what I am checking in. >>> >>> OTOH, these asms can be avoided with something like: >>> >>> --cut here-- >>> typedef unsigned int uword_t __attribute__ ((mode (__word__))); >>> >>> struct interrupt_frame >>> { >>> uword_t ip; >>> uword_t cs; >>> uword_t flags; >>> uword_t sp; >>> uword_t ss; >>> }; >>> >>> void >>> __attribute__((naked)) >>> test (void) >>> { >>> register uword_t sp __asm__("sp"); >>> >>> long *error = (long *) sp; >>> struct interrupt_frame *frame >>> = (struct interrupt_frame *) (sp + sizeof (uword_t)); >>> >>> ... >>> >> >> How about this? OK for trunk? > > Even better. > > Can we introduce asm_goto to the jmp in the main asm? >
asm goto doesn't work since it only takes labels. But interrupt handler must be a function. -- H.J.