X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gprof%2Fsym_ids.c;h=c214f14314dbe49a17b0522b2e7be0ec1dbc3bbf;hb=0874fd075b2a519022259a3cc48e650dc1daeeab;hp=d41a716b78e5c6c4657cf60ef276f4652c77c2b1;hpb=01f0fe5e0450edf168c1f612feb93cf588e4e7ea;p=deliverable%2Fbinutils-gdb.git diff --git a/gprof/sym_ids.c b/gprof/sym_ids.c index d41a716b78..c214f14314 100644 --- a/gprof/sym_ids.c +++ b/gprof/sym_ids.c @@ -1,12 +1,12 @@ /* sym_ids.c - Copyright 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of GNU Binutils. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -19,32 +19,35 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +#include "gprof.h" #include "libiberty.h" #include "safe-ctype.h" -#include "gprof.h" #include "search_list.h" #include "source.h" #include "symtab.h" #include "cg_arcs.h" #include "sym_ids.h" +#include "corefile.h" + +struct match + { + int prev_index; /* Index of prev match. */ + Sym *prev_match; /* Previous match. */ + Sym *first_match; /* Chain of all matches. */ + Sym sym; + }; -static struct sym_id +struct sym_id { struct sym_id *next; char *spec; /* Parsing modifies this. */ Table_Id which_table; bfd_boolean has_right; - struct match - { - int prev_index; /* Index of prev match. */ - Sym *prev_match; /* Previous match. */ - Sym *first_match; /* Chain of all matches. */ - Sym sym; - } - left, right; - } - *id_list; + struct match left, right; + }; + +static struct sym_id *id_list; static void parse_spec (char *, Sym *); @@ -218,12 +221,19 @@ parse_id (struct sym_id *id) static bfd_boolean match (Sym *pattern, Sym *sym) { - return (pattern->file ? pattern->file == sym->file : TRUE) - && (pattern->line_num ? pattern->line_num == sym->line_num : TRUE) - && (pattern->name - ? strcmp (pattern->name, - sym->name+(discard_underscores && sym->name[0] == '_')) == 0 - : TRUE); + if (pattern->file && pattern->file != sym->file) + return FALSE; + if (pattern->line_num && pattern->line_num != sym->line_num) + return FALSE; + if (pattern->name) + { + const char *sym_name = sym->name; + if (*sym_name && bfd_get_symbol_leading_char (core_bfd) == *sym_name) + sym_name++; + if (strcmp (pattern->name, sym_name) != 0) + return FALSE; + } + return TRUE; } @@ -263,7 +273,7 @@ extend_match (struct match *m, Sym *sym, Sym_Table *tab, bfd_boolean second_pass requests---you get what you ask for! */ void -sym_id_parse () +sym_id_parse (void) { Sym *sym, *left, *right; struct sym_id *id;