[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: static class member as interrupt handler works, but not if class is
From: |
Matthijs Kooijman |
Subject: |
Re: static class member as interrupt handler works, but not if class is templated |
Date: |
Mon, 12 Apr 2021 13:53:38 +0200 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
> > - figure out, where the special handling of the __vector_10 seems to
> > happen, and why it is not happening in the class template case. This
> > might help diagnose if and where to fix it within the compiler.
>
> That is compiler internals... yes, if it is a compiler bug, it is the
> way to have a solution. But in that case, it seems to be a generic
> problem for gcc as attributes are not assigned to any templated class
> member functions. No idea if this is related to the target ( avr ) or
> generic for all platforms. But I never did any change inside the
> compiler. Any help is welcome!
My suspiciou would be that this is a generic gcc problem, where the
"asm" attribute is not honoured for template functions. It probably also
makes some sense, since a template is intended to be instantiated
multiple times, and each instantiation gets a name that is generated
based on (I believe) the template arguments passed, so I suspect that
the "generate a name for this template instantiation" code doesn't look
at the asm attribute.
Also note that *if* it would, then each instantiation would use the same
name and multiple instanations would result in duplicate symbols. If you
would bring this up as a gcc bug, I wouldn't be surprised that it would
be closed as wontfix for this reason.
Another workaround that I think hasn't been suggested yet, would be to
just define a global `__vector_10` function and from that just call your
templated static member. Combined with the `always_inline` attribute,
you can ensure that the call is inlined and there is no runtime overhead
(with LTO, this probably already happens when there's just a single call
to the member).
Maybe not as nice and self-contained as the asm attribute, but it does
allow multiple instantiations (where the global function defines which
instantiation is going to be used for the ISR).
Gr.
Matthijs
signature.asc
Description: PGP signature
- Re: static class member as interrupt handler works, but not if class is templated, (continued)
- Re: static class member as interrupt handler works, but not if class is templated, David Brown, 2021/04/12
- Re: static class member as interrupt handler works, but not if class is templated, David Kelly, 2021/04/12
- Re: static class member as interrupt handler works, but not if class is templated, Russell Shaw, 2021/04/10
- Re: static class member as interrupt handler works, but not if class is templated, Anton Staaf, 2021/04/10
- Re: static class member as interrupt handler works, but not if class is templated, Trampas Stern, 2021/04/11
Re: static class member as interrupt handler works, but not if class is templated, Klaus, 2021/04/10
Re: static class member as interrupt handler works, but not if class is templated, Peter Sommerlad (C++), 2021/04/12
- Re: static class member as interrupt handler works, but not if class is templated, Klaus Rudolph, 2021/04/12
- Re: static class member as interrupt handler works, but not if class is templated,
Matthijs Kooijman <=
- Re: static class member as interrupt handler works, but not if class is templated, Klaus Rudolph, 2021/04/12
- Re: static class member as interrupt handler works, but not if class is templated, David Brown, 2021/04/12
- Re: static class member as interrupt handler works, but not if class is templated, Klaus Rudolph, 2021/04/12
- Re: static class member as interrupt handler works, but not if class is templated, Anton Staaf, 2021/04/12
- Re: static class member as interrupt handler works, but not if class is templated, Klaus Rudolph, 2021/04/12