[PATCH, x86, 63534] Fix '-p' profile for 32 bit PIC mode
Jakub Jelinek
jakub@redhat.com
Fri Oct 24 14:35:00 GMT 2014
On Fri, Oct 24, 2014 at 06:12:15PM +0400, Evgeny Stupachenko wrote:
> The following patch align stack for mcount and there should be no
> problems with unwind as ix86_frame_pointer_required is true when
> crtl->profile is true and flag_fentry is false (we call mcount after
> function prolog).
> When flag_fentry is true it is set to false in 32bit PIC mode:
> if (!TARGET_64BIT_P (opts->x_ix86_isa_flags) && opts->x_flag_pic)
> {
> if (opts->x_flag_fentry > 0)
> sorry ("-mfentry isn%'t supported for 32-bit in combination "
> "with -fpic");
> opts->x_flag_fentry = 0;
> }
What is wrong in emitting the set_got right before the PROLOGUE_END
note and that way sharing a single load from both?
This looks just as a hack.
> 2014-10-24 Evgeny Stupachenko <evstupac@gmail.com>
>
> PR target/63534
> * config/i386/i386.c (x86_function_profiler): Add GOT register init
> for mcount call.
>
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index 6235c4f..2dff29c 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -39124,13 +39124,22 @@ x86_function_profiler (FILE *file, int
> labelno ATTRIBUTE_UNUSED)
> else
> x86_print_call_or_nop (file, mcount_name);
> }
> + /* At this stage we can't detrmine where GOT register is, as RA can allocate
> + it to any hard register. Therefore we need to set it once again. */
> else if (flag_pic)
> {
> + pic_labels_used |= 1 << BX_REG;
> + fprintf (file,"\tsub\t$16, %%esp\n");
> + fprintf (file,"\tmovl\t%%ebx, (%%esp)\n");
> + fprintf (file,"\tcall\t__x86.get_pc_thunk.bx\n");
> + fprintf (file,"\taddl\t$_GLOBAL_OFFSET_TABLE_, %%ebx\n");
> #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);
> + fprintf (file,"\tmovl\t(%%esp), %%ebx\n");
> + fprintf (file,"\tadd\t$16, %%esp\n");
> }
> else
> {
>
Jakub
More information about the Gcc-patches
mailing list