FT32 makes use of multiple address spaces.
authorJames Bowman <james.bowman@ftdichip.com>
Tue, 7 Nov 2017 01:10:18 +0000 (01:10 +0000)
committerJames Bowman <jamesbowman@gcc.gnu.org>
Tue, 7 Nov 2017 01:10:18 +0000 (01:10 +0000)
FT32 makes use of multiple address spaces. When trying to inspect
objects in GDB, GDB was treating them as a straight "const". The cause
seems to be in GCC DWARF2 output.

This output is handled in gcc/gcc/dwarf2out.c, where modified_type_die()
checks that TYPE has qualifiers CV_QUALS. However while TYPE has
ADDR_SPACE qualifiers, the modified_type_die() explicitly discards the
ADDR_SPACE qualifiers.

This patch retains the ADDR_SPACE qualifiers as modified_type_die()
outputs the DWARF type tree.  This allows the types to match, and correct
type information for the object is emitted.

[gcc]

2017-11-06  James Bowman  <james.bowman@ftdichip.com>

* gcc/dwarf2out.c (modified_type_die): Retain ADDR_SPACE
qualifiers.
        (add_type_attribute) likewise.

From-SVN: r254484

gcc/ChangeLog
gcc/dwarf2out.c

index 9353fd3..3690705 100644 (file)
@@ -1,3 +1,9 @@
+2017-11-06  James Bowman  <james.bowman@ftdichip.com>
+
+       * gcc/dwarf2out.c (modified_type_die): Retain ADDR_SPACE
+       qualifiers.
+        (add_type_attribute) likewise.
+
 2017-11-06  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config/i386/i386.c (ix86_can_use_return_insn_p): Use reference
index 7344767..f396997 100644 (file)
@@ -12481,7 +12481,8 @@ modified_type_die (tree type, int cv_quals, bool reverse,
   dw_die_ref mod_scope;
   /* Only these cv-qualifiers are currently handled.  */
   const int cv_qual_mask = (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE
-                           | TYPE_QUAL_RESTRICT | TYPE_QUAL_ATOMIC);
+                           | TYPE_QUAL_RESTRICT | TYPE_QUAL_ATOMIC | 
+                           ENCODE_QUAL_ADDR_SPACE(~0U));
   const bool reverse_base_type
     = need_endianity_attribute_p (reverse) && is_base_type (type);
 
@@ -20708,7 +20709,7 @@ add_type_attribute (dw_die_ref object_die, tree type, int cv_quals,
     return;
 
   type_die = modified_type_die (type,
-                               cv_quals | TYPE_QUALS_NO_ADDR_SPACE (type),
+                               cv_quals | TYPE_QUALS (type),
                                reverse,
                                context_die);