This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] i386: Add some naked attribute tests
On Tue, Aug 1, 2017 at 2:25 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
> On Tue, Aug 1, 2017 at 11:23 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> On Tue, Aug 1, 2017 at 2:11 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
>>> On Tue, Aug 1, 2017 at 11:05 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>>> On Tue, Aug 1, 2017 at 1:49 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
>>>>> On Tue, Aug 1, 2017 at 9:46 PM, H.J. Lu <hongjiu.lu@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.