From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by sourceware.org (Postfix) with ESMTPS id A7C4A385840A for ; Mon, 11 Oct 2021 13:39:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A7C4A385840A Received: by mail-lf1-x12b.google.com with SMTP id n8so71481729lfk.6 for ; Mon, 11 Oct 2021 06:39:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition; bh=4ZSvgXNq7ZyOOx3oyJlT2I68YECKs+fCl20sgul4NYY=; b=BEmgWT/Y5yHbq38fIzknW1NGq2J3Sqg0ZlAeQMt3VvZsMlOfXWA5JqFRYIMRvVEPYA RLdplRQrpXoQnfICZo0Ylna3lz9SgbTsD3jUVxdlYLlsK2pjHGS6vhRGH/IyS2szW7GE QG1wKQosWesza0NreP/Z6rG6Hmbzb5xr9bGd7aclc3zKDm6kO50ZJ7w+jVfoEiI3WbCP IJ2IEMFyDkWQd2b/D8xKIirhRholXE4PVVZBBnIlSStqlg9I/pdtNEDFPw2/ChGJNs/v Sv6QR4+1MtfXGr3xSMq1g3zUukbeC3wOrz5xHuOAjGzRDDqPsI2ipNg6WsuStM/YZTw6 1tOQ== X-Gm-Message-State: AOAM531V5lgfCqnLdvgDCEOGUNkDadRexBo5SFNywdWkG5vauHgYtfr8 BeT89X7Cb4Id4IbO7f1H4l/rFS2Kb9wfeQ== X-Google-Smtp-Source: ABdhPJzJXDH8g/6GO6po94mEtNHG6y1SY0zwDsW75zYXdkDmTyjbdi2SU5xA7waltFNc0EPg+Fbc4Q== X-Received: by 2002:a05:6512:10cf:: with SMTP id k15mr27103268lfg.617.1633959575334; Mon, 11 Oct 2021 06:39:35 -0700 (PDT) Received: from adacore.com ([2a02:2ab8:224:2ce:72b5:e8ff:feef:ee60]) by smtp.gmail.com with ESMTPSA id 9sm841919ljo.78.2021.10.11.06.39.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Oct 2021 06:39:34 -0700 (PDT) Date: Mon, 11 Oct 2021 13:39:33 +0000 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Cc: Patrick Bernardi Subject: [Ada] RTEMS: use hardware interrupts instead of signals for interrupt handling Message-ID: <20211011133933.GA1518942@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="wac7ysb48OaltWcw" Content-Disposition: inline X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Oct 2021 13:39:44 -0000 --wac7ysb48OaltWcw Content-Type: text/plain; charset=us-ascii Content-Disposition: inline RTEMS supports attaching interrupt handlers to hardware interrupt vectors, which is superior to the current approach of attaching handlers to signals. Direct attachment of handlers removes the execution overhead of converting hardware interrupts to signals and their subsequent propagation to the interrupt manager. It also removes the limitation of the number of hardware interrupts that can be supported under the signals model, as RTEMS is limited to 32 signals. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * Makefile.rtl (VxWorks): Rename s-inmaop__vxworks.adb to s-inmaop__hwint.adb. (RTEMS): Use s-inmaop__hwint.adb, s-intman__rtems.adb/s, s-taprop__rtems.adb. * libgnarl/a-intnam__rtems.ads: Remove signals definitions and replace with Hardware_Interrupts. * libgnarl/s-inmaop__vxworks.adb: Rename as... * libgnarl/s-inmaop__hwint.adb: ... this. * libgnarl/s-interr__hwint.adb: Remove unnecessary comments. * libgnarl/s-intman__rtems.ads, libgnarl/s-intman__rtems.adb: New files. * libgnarl/s-osinte__rtems.adb: Add RTEMS API bindings. (Binary_Semaphore_Create, Binary_Semaphore_Delete, Binary_Semaphore_Obtain, Binary_Semaphore_Release, Binary_Semaphore_Flush, Interrupt_Connect, Interrupt_Number_To_Vector): New functions. * libgnarl/s-osinte__rtems.ads (Num_HW_Interrupts, Signal): Removed. (NSIG, Interrupt_Range): New. (Binary_Semaphore_Create, Binary_Semaphore_Delete, Binary_Semaphore_Obtain, Binary_Semaphore_Release, Binary_Semaphore_Flush, Interrupt_Connect, Interrupt_Number_To_Vector): Remove Import pragma. * libgnarl/s-taprop__rtems.adb: New file. --wac7ysb48OaltWcw Content-Type: application/gzip Content-Disposition: attachment; filename="patch.diff.gz" Content-Transfer-Encoding: base64 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 --wac7ysb48OaltWcw--