From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by sourceware.org (Postfix) with ESMTPS id DDC033886C4F for ; Sat, 10 Apr 2021 13:33:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DDC033886C4F X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.3] ([2.243.127.166]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MnakX-1lwH9S0x2z-00je10; Sat, 10 Apr 2021 15:33:31 +0200 To: "gcc-help@gcc.gnu.org" , avr-gcc-list@nongnu.org From: Klaus Rudolph Subject: static class member as interrupt handler works, but not if class is templated Message-ID: <5f39cb4e-a445-bf19-ae90-b76c934aa930@gmx.de> Date: Sat, 10 Apr 2021 15:33:30 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:KtoFFaHPyCkkBZJ4HQTUH893U0I8o8Fi4Rg7hxypD/dzyYgZG2k XZgjYZmMtw7oill2D0FaSuqZKWdcAenTfclZku5YggjqbycoDyUdcklvP/ZNaXyRSeZFFvr k4E+NNhD729O5D3fODKgjsVrocx9R2zhqrEGftuHusZnkXwL4STBqPoJwdlo9P/YUFa+4X4 x92eIQO8rd1LXiLsM1CZw== X-UI-Out-Filterresults: notjunk:1;V03:K0:izW/605grv4=:ssupQgPl0JmbR2fRN5ezQB m2JXvQskKw/HbFJDtIiWA/tVVFkUXrGWpOIU4iABmVnQrVDQoQlUc5qbRITxl10UmZg171d7M 4hEbpBR1FnxEcIwF+4PGJUDo3Wst3LE9fnjdxPJ11eOqLoThUAYGHF2sbuyN7aP2EgyvDeR0z ovEwXOWrtYXExH15FeUDxrP/NZr2z6rtJ3TMP+XSWy2k27Y4ZquAd8lWUIp0UbJ11d84o/ZUs n9VdBz717TukutFBte4KE/ytbEbbJZGFmDH+NLDuy29enBvEbOfcy3sd5lbJ2kSEZVL/TmYDP HnWs/MnwDqyCzIGvXNkBb5BMe84aWkGynaijhnmE7F2QF5J6CPV/l7xuH52uMx3WOEh+j439z JcvhtbkUecMYPDTrUQWifMxfUG5XZbw6PElWtAxSER+0iH5A++PiLwBW30FVCFxCzIdcrdrru Ix4jbHk9ud943YUWdvcyMsFFDAyn1cNVhoIxxeo3N2gq9nVKKoj9rbgAjrpsh6ozRKt5H3E+x /W16enitIXQ5c+1gV4ztuNdSYTHNR1qLpjwdaU+uT6sLFYd/r7zcymK233UUwOHjvmi41gNWY pxS4XBQf2XNhXHBvng2eNUt0ps8wNEFS+uxiEJvfu96PDVPfRTDKPFk+Gk8bFNzclSbXo6zUS dK8dK/ZueudcjhdJdInPXH1LZ/ENJksuMxTqV2+/fLDI7nBrAKGIvRST3DqGBFi5yZ9K79T5A qeTk9r9bblojPv8QPRuvvJ1WwHCyj31MtsXy/43SUdm2RfqZbkAwP4Gz0SUAor4gDX44PZu/l xMjLhIvz3/ipJhVIebfGpfWzZIeOtwRvIE3WDpnvNh1Vy/+O4ZWQDrLUl19jKm4ua9NIUasjS 1VlXOAJDEf6csrqTVEJi79lm8hJpsFeE2kcYIQxrcIBpx8u2nSoYqCirEAK1uOO0sUC8sLUEF kiUFLXaJ9N1O2VL3RhIkA5C2HM2/5MRcqhQY3wve9kMLChP7WCORp5Lm3jG/nB6UC2+N6yrcf uZD+ZoV7qQCwKGfJvbguj1YoTznbH1TCBdjkmiNhQbPO9jyiLkKetww1jrdEY7DrE62pm7/Ih 5ClTltlciCz5kJYDw3q1LvkeM5oBK3L4ECAOZDA6qmHq6BmX+uQjIspq86vVmNnlS/XF3OzXa LheTuYik/XzMM9abwbAK6DmJVb0HholiIvCLtcbijLBVTH70nrNTENJGMGvO8SuDYn7U8= X-Spam-Status: No, score=-2.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-help@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-help mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 10 Apr 2021 13:33:44 -0000 Hi all, if I write a class with static member function I can use it as an interrupt handler as follows: class Dummy { static void Handler() __asm__("__vector_10") __attribute__((__signal__, __used__, __externally_visible__)); }; void Dummy::Handler() { } I can see the vector is entered in the handler table: 1c: 0c 94 34 00 jmp 0x68 ; 0x68 <__bad_interrupt> 20: 0c 94 34 00 jmp 0x68 ; 0x68 <__bad_interrupt> 24: 0c 94 34 00 jmp 0x68 ; 0x68 <__bad_interrupt> 28: 0c 94 36 00 jmp 0x6c ; 0x6c <__vector_10> 2c: 0c 94 34 00 jmp 0x68 ; 0x68 <__bad_interrupt> 30: 0c 94 34 00 jmp 0x68 ; 0x68 <__bad_interrupt> ################### But if the class becomes a template, the function is not longer entered in the handler. How can I fix it? template < int i > class Dummy { static void Handler() __asm__("__vector_10") __attribute__((__signal__, __used__, __externally_visible__)); }; template < int i> void Dummy::Handler() { } Dummy<1> d1; 20: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt> 24: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt> 28: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt> 2c: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt> 30: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt> I tried it with avr-g++ (Fedora 10.2.0-1.fc33) 10.2.0 Thanks!