On Tue, Aug 1, 2017 at 11:35 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > 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.
Ah, indeed. OK then. Thanks, Uros.