dwarf2out.c (output_loc_list): Don't throw away 64K+ location descriptions for -gdwar...
authorJakub Jelinek <jakub@redhat.com>
Wed, 4 Jan 2017 20:03:59 +0000 (21:03 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 4 Jan 2017 20:03:59 +0000 (21:03 +0100)
* dwarf2out.c (output_loc_list): Don't throw away 64K+ location
descriptions for -gdwarf-5 and emit them as uleb128 instead of
2-byte data.

From-SVN: r244069

gcc/ChangeLog
gcc/dwarf2out.c

index 5568ec6c1a46546fba7f8e963a5deaaafdc98fed..242bf697bc457f47912f0b20841ffede230793a8 100644 (file)
@@ -1,3 +1,9 @@
+2017-01-04  Jakub Jelinek  <jakub@redhat.com>
+
+       * dwarf2out.c (output_loc_list): Don't throw away 64K+ location
+       descriptions for -gdwarf-5 and emit them as uleb128 instead of
+       2-byte data.
+
 2017-01-04  Kelvin Nilsen  <kelvin@gcc.gnu.org>
 
        PR target/78056
index 15b9a30a3072f2393a657f9429ee96b55a2794ec..8abeb7abf657d93544a8d00be8700ef8b3d80181 100644 (file)
@@ -9586,7 +9586,7 @@ output_loc_list (dw_loc_list_ref list_head)
         perhaps put it into DW_TAG_dwarf_procedure and refer to that
         in the expression, but >= 64KB expressions for a single value
         in a single range are unlikely very useful.  */
-      if (size > 0xffff)
+      if (dwarf_version < 5 && size > 0xffff)
        continue;
       if (dwarf_version >= 5)
        {
@@ -9638,8 +9638,6 @@ output_loc_list (dw_loc_list_ref list_head)
                      if (strcmp (curr2->begin, curr2->end) == 0
                          && !curr2->force)
                        continue;
-                     if ((unsigned long) size_of_locs (curr2->expr) > 0xffff)
-                       continue;
                      break;
                    }
                  if (curr2 == NULL || curr->section != curr2->section)
@@ -9740,8 +9738,13 @@ output_loc_list (dw_loc_list_ref list_head)
        }
 
       /* Output the block length for this list of location operations.  */
-      gcc_assert (size <= 0xffff);
-      dw2_asm_output_data (2, size, "%s", "Location expression size");
+      if (dwarf_version >= 5)
+       dw2_asm_output_data_uleb128 (size, "Location expression size");
+      else
+       {
+         gcc_assert (size <= 0xffff);
+         dw2_asm_output_data (2, size, "Location expression size");
+       }
 
       output_loc_sequence (curr->expr, -1);
     }