]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR pch/51722 (Options "-g3" or "-ggdb3" or "-g3 -gdwarf-2" and other "-g..level3...
authorJakub Jelinek <jakub@redhat.com>
Tue, 3 Jan 2012 13:45:41 +0000 (14:45 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 3 Jan 2012 13:45:41 +0000 (14:45 +0100)
PR pch/51722
* dwarf2out.c (dwarf2out_start_source_file, dwarf2out_define,
dwarf2out_undef): Allocate e.info using ggc_strdup instead
of xstrdup.
(output_macinfo_op): Don't ggc_strdup fd->filename.
(optimize_macinfo_range): Allocate grp_name using XALLOCAVEC,
then ggc_strdup it.  Don't free inc->info or cur->info.
(output_macinfo): Don't free ref->info or file->info.

From-SVN: r182845

gcc/ChangeLog
gcc/dwarf2out.c

index c6a5fb77dea58814c8d82cd6f4102aeb518aa3f9..e5f0b66346d5cb2fb29626cd0b2e175125ecea64 100644 (file)
@@ -1,3 +1,14 @@
+2012-01-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR pch/51722
+       * dwarf2out.c (dwarf2out_start_source_file, dwarf2out_define,
+       dwarf2out_undef): Allocate e.info using ggc_strdup instead
+       of xstrdup.
+       (output_macinfo_op): Don't ggc_strdup fd->filename.
+       (optimize_macinfo_range): Allocate grp_name using XALLOCAVEC,
+       then ggc_strdup it.  Don't free inc->info or cur->info.
+       (output_macinfo): Don't free ref->info or file->info.
+
 2012-01-03  Ira Rosen  <irar@il.ibm.com>
 
        PR tree-optimization/51269
index b5537752b132ca68b23e311910341807eff67154..77c021bb00df284f1d044bf33103cc5523f36b00 100644 (file)
@@ -1,6 +1,6 @@
 /* Output Dwarf2 format symbol table information from GCC.
    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by Gary Funck (gary@intrepid.com).
    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
@@ -20549,7 +20549,7 @@ dwarf2out_start_source_file (unsigned int lineno, const char *filename)
       macinfo_entry e;
       e.code = DW_MACINFO_start_file;
       e.lineno = lineno;
-      e.info = xstrdup (filename);
+      e.info = ggc_strdup (filename);
       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
     }
 }
@@ -20595,7 +20595,7 @@ dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
        }
       e.code = DW_MACINFO_define;
       e.lineno = lineno;
-      e.info = xstrdup (buffer);;
+      e.info = ggc_strdup (buffer);
       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
     }
 }
@@ -20622,7 +20622,7 @@ dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
        }
       e.code = DW_MACINFO_undef;
       e.lineno = lineno;
-      e.info = xstrdup (buffer);
+      e.info = ggc_strdup (buffer);
       VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
     }
 }
@@ -20662,8 +20662,6 @@ output_macinfo_op (macinfo_entry *ref)
     {
     case DW_MACINFO_start_file:
       fd = lookup_filename (ref->info);
-      if (fd->filename == ref->info)
-       fd->filename = ggc_strdup (fd->filename);
       file_num = maybe_emit_file (fd);
       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
       dw2_asm_output_data_uleb128 (ref->lineno,
@@ -20802,8 +20800,8 @@ optimize_macinfo_range (unsigned int idx, VEC (macinfo_entry, gc) *files,
   linebuf_len = strlen (linebuf);
 
   /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum>  */
-  grp_name = XNEWVEC (char, 4 + encoded_filename_len + linebuf_len + 1
-                     + 16 * 2 + 1);
+  grp_name = XALLOCAVEC (char, 4 + encoded_filename_len + linebuf_len + 1
+                        + 16 * 2 + 1);
   memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
   tail = grp_name + 4;
   if (encoded_filename_len)
@@ -20824,14 +20822,13 @@ optimize_macinfo_range (unsigned int idx, VEC (macinfo_entry, gc) *files,
   inc = VEC_index (macinfo_entry, macinfo_table, idx - 1);
   inc->code = DW_MACRO_GNU_transparent_include;
   inc->lineno = 0;
-  inc->info = grp_name;
+  inc->info = ggc_strdup (grp_name);
   if (*macinfo_htab == NULL)
     *macinfo_htab = htab_create (10, htab_macinfo_hash, htab_macinfo_eq, NULL);
   /* Avoid emitting duplicates.  */
   slot = htab_find_slot (*macinfo_htab, inc, INSERT);
   if (*slot != NULL)
     {
-      free (CONST_CAST (char *, inc->info));
       inc->code = 0;
       inc->info = NULL;
       /* If such an entry has been used before, just emit
@@ -20846,7 +20843,6 @@ optimize_macinfo_range (unsigned int idx, VEC (macinfo_entry, gc) *files,
           i++)
        {
          cur->code = 0;
-         free (CONST_CAST (char *, cur->info));
          cur->info = NULL;
        }
     }
@@ -20909,7 +20905,6 @@ output_macinfo (void)
          if (!VEC_empty (macinfo_entry, files))
            {
              macinfo_entry *file = VEC_last (macinfo_entry, files);
-             free (CONST_CAST (char *, file->info));
              VEC_pop (macinfo_entry, files);
            }
          break;
@@ -20939,10 +20934,6 @@ output_macinfo (void)
          break;
        }
       output_macinfo_op (ref);
-      /* For DW_MACINFO_start_file ref->info has been copied into files
-        vector.  */
-      if (ref->code != DW_MACINFO_start_file)
-       free (CONST_CAST (char *, ref->info));
       ref->info = NULL;
       ref->code = 0;
     }
@@ -20976,7 +20967,6 @@ output_macinfo (void)
                                       ref->lineno);
          ASM_OUTPUT_LABEL (asm_out_file, label);
          ref->code = 0;
-         free (CONST_CAST (char *, ref->info));
          ref->info = NULL;
          dw2_asm_output_data (2, 4, "DWARF macro version number");
          if (DWARF_OFFSET_SIZE == 8)
@@ -20989,7 +20979,6 @@ output_macinfo (void)
       case DW_MACINFO_undef:
        output_macinfo_op (ref);
        ref->code = 0;
-       free (CONST_CAST (char *, ref->info));
        ref->info = NULL;
        break;
       default: