[gcc r12-3740] [Ada] Follow-up tweaks to System.Dwarf_Line

Pierre-Marie de Rodat pmderodat@gcc.gnu.org
Tue Sep 21 15:26:54 GMT 2021


https://gcc.gnu.org/g:97c5d522c6ee36b7ed1824d1eb6b8f30172c1818

commit r12-3740-g97c5d522c6ee36b7ed1824d1eb6b8f30172c1818
Author: Eric Botcazou <ebotcazou@adacore.com>
Date:   Tue Jul 6 12:18:57 2021 +0200

    [Ada] Follow-up tweaks to System.Dwarf_Line
    
    gcc/ada/
    
            * libgnat/s-dwalin.adb (Skip_Form): Fix cases of DW_FORM_addrx
            and DW_FORM_implicit_const.  Replace Constraint_Error with
            Dwarf_Error.

Diff:
---
 gcc/ada/libgnat/s-dwalin.adb | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/gcc/ada/libgnat/s-dwalin.adb b/gcc/ada/libgnat/s-dwalin.adb
index 530b8029427..74700e68bfc 100644
--- a/gcc/ada/libgnat/s-dwalin.adb
+++ b/gcc/ada/libgnat/s-dwalin.adb
@@ -1114,8 +1114,6 @@ package body System.Dwarf_Lines is
       case Form is
          when DW_FORM_addr =>
             Skip := Offset (Ptr_Sz);
-         when DW_FORM_addrx =>
-            Skip := Offset (uint32'(Read_LEB128 (S)));
          when DW_FORM_block1 =>
             Skip := Offset (uint8'(Read (S)));
          when DW_FORM_block2 =>
@@ -1161,11 +1159,12 @@ package body System.Dwarf_Lines is
             begin
                return;
             end;
-         when DW_FORM_udata
-            | DW_FORM_ref_udata
+         when DW_FORM_addrx
             | DW_FORM_loclistx
+            | DW_FORM_ref_udata
             | DW_FORM_rnglistx
             | DW_FORM_strx
+            | DW_FORM_udata
            =>
             declare
                Val : constant uint32 := Read_LEB128 (S);
@@ -1173,7 +1172,7 @@ package body System.Dwarf_Lines is
             begin
                return;
             end;
-         when DW_FORM_flag_present =>
+         when DW_FORM_flag_present | DW_FORM_implicit_const =>
             return;
          when DW_FORM_ref_addr
             | DW_FORM_sec_offset
@@ -1187,10 +1186,10 @@ package body System.Dwarf_Lines is
                null;
             end loop;
             return;
-         when DW_FORM_implicit_const | DW_FORM_indirect =>
-            raise Constraint_Error;
+         when DW_FORM_indirect =>
+            raise Dwarf_Error with "DW_FORM_indirect not implemented";
          when others =>
-            raise Constraint_Error;
+            raise Dwarf_Error with "DWARF form not implemented";
       end case;
 
       Seek (S, Tell (S) + Skip);


More information about the Gcc-cvs mailing list