This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Clarification of cloned function names during profiling


I have been investigating gcc and gprof interaction. 
I have noticed something strange, even though I cannot reproduce an example.

In certain situations, GCC will produce functions called foo.isra.0 or foo.constprop.0. 
These function names are created by clone_function_name where suffix is isra or constprop.

On the other hand in gprof/corefile.c (function core_sym_class) of binutils, symbols that don't include a '.clone.' (which used to be generated by 4.5 at least) are discarded (from 2.23.2).
  for (name = sym->name; *name; ++name)
      if (*name == '$')
        return 0;

      while (*name == '.')
	  /* Allow both nested subprograms (which end with ".NNN", where N is
	     a digit) and GCC cloned functions (which contain ".clone").
	     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)
	  if (strlen (name) > CLONE_NAME_LEN
	      && strncmp (name, CLONE_NAME, CLONE_NAME_LEN) == 0)
	    name += CLONE_NAME_LEN - 1;

	  for (name++; *name; name++)
	    if (digit_seen && *name == '.')
	    else if (ISDIGIT (*name))
	      digit_seen = 1;
	      return 0;

My question is, how does this work with recent gcc's and binutils'? If I use -pg on gcc, will gcc stop outputting functions with isra, constprop, etc suffixes and revert to clone suffixes or will it just use .<number>?


Paulo Matos

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]