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;
在具有严格对齐要求的体系结构上使用 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;