Ada:指定地址子句时发出不兼容的对齐警告

Ada: Incompatible alignment warning issued when specifying an address clause

在具有严格对齐要求的体系结构上使用 import 子句时,是否有一种理想的方法来避免出现有关不兼容对齐的编译时警告?

GCC 手册 here 中描述了此行为。我正在使用 riscv64-elf-gnat 进行编译。启用所有警告,并将警告视为错误。我知道我可以抑制这个特定的警告。有没有一种理想的方法可以在代码中处理这种情况?

这个警告似乎很武断。在函数本身的异常处理块中似乎无法处理这种情况。 如有任何帮助,我们将不胜感激。

例如下面的代码:

   ----------------------------------------------------------------------------
   --  Read_Unsigned_8
   ----------------------------------------------------------------------------
   function Read_Unsigned_8 (
     Addr : System.Address
   ) return Unsigned_8 is
      Data : Unsigned_8
      with Import,
        Address => Addr;
   begin
      return Data;
   end Read_Unsigned_8;

引发此警告:

mmio.adb:23:09: warning: pragma Restrictions (No_Exception_Propagation) in effect
mmio.adb:23:09: warning: "Program_Error" may call Last_Chance_Handler
mmio.adb:23:09: warning: address value may be incompatible with alignment of object

使用 arm-eabi,您可以通过指定对齐方式来消除这种过于热情(更不用说 错误)的警告:

   Data : Unsigned_8
     with
       Import,
       Address   => Addr,
       Alignment => 1;