]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Fix minor address arithmetic issues in System.Dwarf_Lines
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 24 Feb 2023 18:10:00 +0000 (19:10 +0100)
committerMarc Poulhiès <poulhies@adacore.com>
Tue, 23 May 2023 07:59:06 +0000 (09:59 +0200)
Offset calculations should use the operator of System.Storage_Elements.

gcc/ada/

* libgnat/s-dwalin.adb (Enable_Cache): Use the subtract operator of
System.Storage_Elements to compute the offset.
(Symbolic_Address): Likewise.

gcc/ada/libgnat/s-dwalin.adb

index d38bc058e3b7792df69f30389bb54c0512da559d..d35d03a8a2f86ecae47b58d28c09763ed763f4f2 100644 (file)
@@ -1542,7 +1542,7 @@ package body System.Dwarf_Lines is
                exit when Ar_Start = Null_Address and Ar_Len = 0;
 
                Len   := uint32 (Ar_Len);
-               Start := uint32 (Address'(Ar_Start - C.Low));
+               Start := uint32 (Storage_Count'(Ar_Start - C.Low));
 
                --  Search START in the array
 
@@ -1762,7 +1762,7 @@ package body System.Dwarf_Lines is
 
       if C.Cache /= null then
          declare
-            Addr_Off : constant uint32 := uint32 (Address'(Addr - C.Low));
+            Off : constant uint32 := uint32 (Storage_Count'(Addr - C.Low));
 
             First, Last, Mid : Natural;
          begin
@@ -1772,17 +1772,17 @@ package body System.Dwarf_Lines is
 
             while First <= Last loop
                Mid := First + (Last - First) / 2;
-               if Addr_Off < C.Cache (Mid).First then
+               if Off < C.Cache (Mid).First then
                   Last := Mid - 1;
-               elsif Addr_Off >= C.Cache (Mid).First + C.Cache (Mid).Size then
+               elsif Off >= C.Cache (Mid).First + C.Cache (Mid).Size then
                   First := Mid + 1;
                else
                   exit;
                end if;
             end loop;
 
-            if Addr_Off >= C.Cache (Mid).First
-              and then Addr_Off < C.Cache (Mid).First + C.Cache (Mid).Size
+            if Off >= C.Cache (Mid).First
+              and then Off < C.Cache (Mid).First + C.Cache (Mid).Size
             then
                Line_Offset := Offset (C.Cache (Mid).Line);
                S := Read_Symbol (C.Obj.all, Offset (C.Cache (Mid).Sym));