* elf-hppa.h (elf_hppa_final_link): If unable to find __gp in the
[deliverable/binutils-gdb.git] / gprof / corefile.c
index 3f3468b94911246caf059771461caada72159c31..790fc2862086e74cd53c163fa240f87c792e926a 100644 (file)
@@ -195,8 +195,8 @@ DEFUN (core_get_text_space, (core_bfd), bfd * core_bfd)
 
   if (!core_text_space)
     {
-      fprintf (stderr, _("%s: ran out room for %ld bytes of text space\n"),
-              whoami, core_text_sect->_raw_size);
+      fprintf (stderr, _("%s: ran out room for %lu bytes of text space\n"),
+              whoami, (unsigned long) core_text_sect->_raw_size);
       done (1);
     }
   if (!bfd_get_section_contents (core_bfd, core_text_sect, core_text_space,
@@ -371,7 +371,7 @@ DEFUN (get_src_info, (addr, filename, name, line_num),
       && fname && func_name && l)
     {
       DBG (AOUTDEBUG, printf ("[get_src_info] 0x%lx -> %s:%d (%s)\n",
-                             addr, fname, l, func_name));
+                             (unsigned long) addr, fname, l, func_name));
       *filename = fname;
       *name = func_name;
       *line_num = l;
@@ -392,7 +392,8 @@ DEFUN (get_src_info, (addr, filename, name, line_num),
  * entered.
  */
 void
-DEFUN (core_create_function_syms, (core_bfd), bfd * core_bfd)
+core_create_function_syms (core_bfd)
+     bfd *core_bfd ATTRIBUTE_UNUSED;
 {
   bfd_vma min_vma = ~0, max_vma = 0;
   int class;
@@ -446,7 +447,8 @@ DEFUN (core_create_function_syms, (core_bfd), bfd * core_bfd)
        {
          DBG (AOUTDEBUG,
               printf ("[core_create_function_syms] rejecting: 0x%lx %s\n",
-                      core_syms[i]->value, core_syms[i]->name));
+                      (unsigned long) core_syms[i]->value,
+                      core_syms[i]->name));
          continue;
        }
       /* This should be replaced with a binary search or hashed
@@ -545,7 +547,8 @@ DEFUN (core_create_function_syms, (core_bfd), bfd * core_bfd)
 
       DBG (AOUTDEBUG, printf ("[core_create_function_syms] %ld %s 0x%lx\n",
                              (long) (symtab.limit - symtab.base),
-                             symtab.limit->name, symtab.limit->addr));
+                             symtab.limit->name,
+                             (unsigned long) symtab.limit->addr));
       ++symtab.limit;
     }
 
@@ -575,7 +578,8 @@ DEFUN (core_create_function_syms, (core_bfd), bfd * core_bfd)
 void
 DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
 {
-  char prev_name[PATH_MAX], prev_filename[PATH_MAX];
+  char *prev_name, *prev_filename;
+  int prev_name_len, prev_filename_len;
   bfd_vma vma, min_vma = ~0, max_vma = 0;
   bfd_vma offset;
   Sym *prev, dummy, *sentinel, *sym;
@@ -600,16 +604,21 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
    * Of course, this is rather slow and it would be better if
    * bfd would provide an iterator for enumerating all line infos
    */
-  prev_name[0] = '\0';
+  prev_name_len = PATH_MAX;
+  prev_filename_len = PATH_MAX;
+  prev_name = xmalloc (prev_name_len);
+  prev_filename = xmalloc (prev_filename_len);
   ltab.len = 0;
-  prev_filename[0] = '\0';
   prev_line_num = 0;
   for (offset = 0; offset < core_text_sect->_raw_size; offset += min_insn_size)
     {
+      int len;
+
       vma = core_text_sect->vma + offset;
       if (!get_src_info (vma, &filename, &dummy.name, &dummy.line_num)
-         || (prev_line_num == dummy.line_num &&
-             strcmp (prev_name, dummy.name) == 0
+         || (prev_line_num == dummy.line_num
+             && prev_name != NULL
+             && strcmp (prev_name, dummy.name) == 0
              && strcmp (prev_filename, filename) == 0))
        {
          continue;
@@ -617,13 +626,32 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
 
       ++ltab.len;
       prev_line_num = dummy.line_num;
+
+      len = strlen (dummy.name);
+      if (len >= prev_name_len)
+       {
+         prev_name_len = len + 1024;
+         free (prev_name);
+         prev_name = xmalloc (prev_name_len);
+       }
       strcpy (prev_name, dummy.name);
+
+      len = strlen (filename);
+      if (len >= prev_filename_len)
+       {
+         prev_filename_len = len + 1024;
+         free (prev_filename);
+         prev_filename = xmalloc (prev_filename_len);
+       }
       strcpy (prev_filename, filename);
 
       min_vma = MIN (vma, min_vma);
       max_vma = MAX (vma, max_vma);
     }
 
+  free (prev_name);
+  free (prev_filename);
+
   /* make room for function symbols, too: */
   ltab.len += symtab.len;
   ltab.base = (Sym *) xmalloc (ltab.len * sizeof (Sym));
@@ -695,9 +723,10 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
          discard_underscores = 0;
        }
 
-      DBG (AOUTDEBUG, printf ("[core_create_line_syms] %d %s 0x%lx\n",
-                             ltab.limit - ltab.base, ltab.limit->name,
-                             ltab.limit->addr));
+      DBG (AOUTDEBUG, printf ("[core_create_line_syms] %lu %s 0x%lx\n",
+                             (unsigned long) (ltab.limit - ltab.base),
+                             ltab.limit->name,
+                             (unsigned long) ltab.limit->addr));
       ++ltab.limit;
     }
 
This page took 0.025174 seconds and 4 git commands to generate.