* corefile.c (core_sym_class): Allow for ".constprop.N" cloned

functions.
This commit is contained in:
Alan Modra 2012-09-20 13:15:48 +00:00
parent 60aa667ec4
commit d165016dd7
2 changed files with 18 additions and 7 deletions

View File

@ -1,3 +1,8 @@
2012-09-20 Joe Seymour <jseymour@codesourcery.com>
* corefile.c (core_sym_class): Allow for ".constprop.N" cloned
functions.
2012-09-14 David Edelsohn <dje.gcc@gmail.com>
* configure: Regenerate.

View File

@ -1,7 +1,7 @@
/* corefile.c
Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009,
2010, 2011 Free Software Foundation, Inc.
2010, 2011, 2012 Free Software Foundation, Inc.
This file is part of GNU Binutils.
@ -68,7 +68,7 @@ parse_error (const char *filename)
static int
cmp_symbol_map (const void * l, const void * r)
{
return strcmp (((struct function_map *) l)->function_name,
return strcmp (((struct function_map *) l)->function_name,
((struct function_map *) r)->function_name);
}
@ -394,13 +394,19 @@ core_sym_class (asymbol *sym)
Allow for multiple iterations of both - apparently GCC can clone
clones and subprograms. */
int digit_seen = 0;
#define CLONE_NAME ".clone."
#define CLONE_NAME_LEN strlen (CLONE_NAME)
#define CLONE_NAME ".clone."
#define CLONE_NAME_LEN strlen (CLONE_NAME)
#define CONSTPROP_NAME ".constprop."
#define CONSTPROP_NAME_LEN strlen (CONSTPROP_NAME)
if (strlen (name) > CLONE_NAME_LEN
&& strncmp (name, CLONE_NAME, CLONE_NAME_LEN) == 0)
name += CLONE_NAME_LEN - 1;
else if (strlen (name) > CONSTPROP_NAME_LEN
&& strncmp (name, CONSTPROP_NAME, CONSTPROP_NAME_LEN) == 0)
name += CONSTPROP_NAME_LEN - 1;
for (name++; *name; name++)
if (digit_seen && *name == '.')
break;
@ -470,7 +476,7 @@ get_src_info (bfd_vma addr, const char **filename, const char **name, int *line_
/* Return number of symbols in a symbol-table file. */
static int
static int
num_of_syms_in (FILE * f)
{
const int BUFSIZE = 1024;
@ -479,7 +485,7 @@ num_of_syms_in (FILE * f)
char type;
char * name = (char *) xmalloc (BUFSIZE);
int num = 0;
while (!feof (f) && fgets (buf, BUFSIZE - 1, f))
{
if (sscanf (buf, "%s %c %s", address, &type, name) == 3)