]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* dwarf2read.c (dwarf2_const_value_data): Never sign extend.
authorDoug Evans <dje@google.com>
Thu, 25 Nov 2010 19:42:31 +0000 (19:42 +0000)
committerDoug Evans <dje@google.com>
Thu, 25 Nov 2010 19:42:31 +0000 (19:42 +0000)
gdb/ChangeLog
gdb/dwarf2read.c

index 93a1853f73565fc0041fd9fc4a1a82ec3b1e5272..05a4fca83be801b229993ebc939849f385a23424 100644 (file)
@@ -1,3 +1,7 @@
+2010-11-25  Tom Tromey  <tromey@redhat.com>
+
+       * dwarf2read.c (dwarf2_const_value_data): Never sign extend.
+
 2010-11-18  Phil Muldoon  <pmuldoon@redhat.com>
 
        PR mi/11407
index 1e752357e00a5ea10f77e837fa1ce5aef9efdfda..55b3f082877de61b923ec2d58e9a1fb1466e28bb 100644 (file)
@@ -9165,8 +9165,13 @@ dwarf2_const_value (struct attribute *attr, struct symbol *sym,
 }
 
 
-/* Given an attr with a DW_FORM_dataN value in host byte order, sign-
-   or zero-extend it as appropriate for the symbol's type.  */
+/* Given an attr with a DW_FORM_dataN value in host byte order,
+   zero-extend it as appropriate for the symbol's type.  The DWARF
+   standard (v4) is not entirely clear about the meaning of using
+   DW_FORM_dataN for a constant with a signed type, where the type is
+   wider than the data.  The conclusion of a discussion on the DWARF
+   list was that this is unspecified.  We choose to always zero-extend
+   because that is the interpretation long in use by GCC.  */
 static void
 dwarf2_const_value_data (struct attribute *attr,
                         struct symbol *sym,
@@ -9175,12 +9180,7 @@ dwarf2_const_value_data (struct attribute *attr,
   LONGEST l = DW_UNSND (attr);
 
   if (bits < sizeof (l) * 8)
-    {
-      if (TYPE_UNSIGNED (SYMBOL_TYPE (sym)))
-       l &= ((LONGEST) 1 << bits) - 1;
-      else
-       l = (l << (sizeof (l) * 8 - bits)) >> (sizeof (l) * 8 - bits);
-    }
+    l &= ((LONGEST) 1 << bits) - 1;
 
   SYMBOL_VALUE (sym) = l;
   SYMBOL_CLASS (sym) = LOC_CONST;