* config/tc-i386.c (tc_i386_fix_adjustable): Change ifndef
[deliverable/binutils-gdb.git] / gprof / core.c
index d514178b06dc4969e23475612e30a1941f7096d8..3103dc281fca8c0dc583728c9c53c90f60c637f8 100644 (file)
@@ -3,6 +3,13 @@
 #include "core.h"
 #include "symtab.h"
 
+#ifndef MIN_INSN_SIZE
+/* If not defined in MACHINE_H, assume smallest instruction is 1 byte
+   long.  THis is safe but may be needlessly slow on machines where
+   all instructions are longer.  */
+#define MIN_INSN_SIZE 1
+#endif
+
 bfd *core_bfd;
 int core_num_syms;
 asymbol **core_syms;
@@ -59,7 +66,8 @@ DEFUN (read_function_mappings, (filename), const char *filename)
     }
 
   /* Now we know how big we need to make our table.  */
-  symbol_map = xmalloc (count * sizeof (struct function_map));
+  symbol_map = ((struct function_map *)
+               xmalloc (count * sizeof (struct function_map)));
 
   /* Rewind the input file so we can read it again.  */
   rewind (file);
@@ -199,15 +207,15 @@ DEFUN (core_sym_class, (sym), asymbol * sym)
   char sym_prefix;
   int i;
 
-  /*
-   * Must be a text symbol, and static text symbols don't qualify if
-   * ignore_static_funcs set.
-   */
-  if (!sym->section)
+  if (sym->section == NULL || (sym->flags & BSF_DEBUGGING) != 0)
     {
       return 0;
     }
 
+  /*
+   * Must be a text symbol, and static text symbols don't qualify if
+   * ignore_static_funcs set.
+   */
   if (ignore_static_funcs && (sym->flags & BSF_LOCAL))
     {
       DBG (AOUTDEBUG, printf ("[core_sym_class] %s: not a function\n",
@@ -263,7 +271,7 @@ DEFUN (core_sym_class, (sym), asymbol * sym)
    * other systems.  Perhaps it should be made configurable.
    */
   sym_prefix = bfd_get_symbol_leading_char (core_bfd);
-  if (sym_prefix && sym_prefix != sym->name[0]
+  if ((sym_prefix && sym_prefix != sym->name[0])
   /*
    * GCC may add special symbols to help gdb figure out the file
    * language.  We want to ignore these, since sometimes they mask
@@ -325,7 +333,6 @@ void
 DEFUN (core_create_function_syms, (core_bfd), bfd * core_bfd)
 {
   bfd_vma min_vma = ~0, max_vma = 0;
-  const char *filename, *func_name;
   int class;
   long i, j, found, skip;
 
@@ -424,24 +431,28 @@ DEFUN (core_create_function_syms, (core_bfd), bfd * core_bfd)
        * labels do not appear in the symbol table info, so this isn't
        * necessary.
        */
-      if (get_src_info (symtab.limit->addr, &filename, &func_name,
-                       &symtab.limit->line_num))
-       {
-         symtab.limit->file = source_file_lookup_path (filename);
-
-         if (strcmp (symtab.limit->name, func_name) != 0)
-           {
-             /*
-              * The symbol's address maps to a different name, so
-              * it can't be a function-entry point.  This happens
-              * for labels, for example.
-              */
-             DBG (AOUTDEBUG,
-               printf ("[core_create_function_syms: rej %s (maps to %s)\n",
-                       symtab.limit->name, func_name));
-             continue;
-           }
-       }
+      {
+       const char *filename, *func_name;
+       
+       if (get_src_info (symtab.limit->addr, &filename, &func_name,
+                         &symtab.limit->line_num))
+         {
+           symtab.limit->file = source_file_lookup_path (filename);
+
+           if (strcmp (symtab.limit->name, func_name) != 0)
+             {
+               /*
+                * The symbol's address maps to a different name, so
+                * it can't be a function-entry point.  This happens
+                * for labels, for example.
+                */
+               DBG (AOUTDEBUG,
+                    printf ("[core_create_function_syms: rej %s (maps to %s)\n",
+                            symtab.limit->name, func_name));
+               continue;
+             }
+         }
+      }
 #endif
 
       symtab.limit->is_func = TRUE;
@@ -530,7 +541,7 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
   prev_offset = -min_dist;
   prev_filename[0] = '\0';
   prev_line_num = 0;
-  for (offset = 0; offset < core_text_sect->_raw_size; ++offset)
+  for (offset = 0; offset < core_text_sect->_raw_size; offset += MIN_INSN_SIZE)
     {
       vma = core_text_sect->vma + offset;
       if (!get_src_info (vma, &filename, &dummy.name, &dummy.line_num)
@@ -579,7 +590,7 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
        }
 
       /* make name pointer a malloc'ed string: */
-      ltab.limit->name = strdup (ltab.limit->name);
+      ltab.limit->name = xstrdup (ltab.limit->name);
       ltab.limit->file = source_file_lookup_path (filename);
 
       ltab.limit->addr = core_text_sect->vma + offset;
This page took 0.024561 seconds and 4 git commands to generate.