https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63534

--- Comment #4 from Stupachenko Evgeny <evstupac at gmail dot com> ---
Profiling implementation has hard coded "%ebx" use.
There are at least 2 quick solutions to resolve this:

1. Disable the changes for PIC profiling

Lead to different behavior with and without profiling of code with EBX asm
insertions. However could be applied as temporary solution as there are no EBX
asm insertions right now.

2.
print:
  push %ebx
  call    __x86.get_pc_thunk.bx
  addl    $_GLOBAL_OFFSET_TABLE_, %ebx

and pop %ebx at the end

Here:
  else if (flag_pic)
    {
#ifndef NO_PROFILE_COUNTERS
      fprintf (file, "\tleal\t%sP%d@GOTOFF(%%ebx),%%" PROFILE_COUNT_REGISTER
"\n",
               LPREFIX, labelno);
#endif
      fprintf (file, "1:\tcall\t*%s@GOT(%%ebx)\n", mcount_name);
    }

Lower profiling performance in PIC mode.

I vote for the second solution and can prepare patch for this.

Reply via email to