This is the mail archive of the
mailing list for the GCC project.
Re: Accessing IP on IA-64 with RTL
- From: Steve Ellcey <sje at cup dot hp dot com>
- To: wilson at specifixinc dot com
- Cc: gcc at gcc dot gnu dot org
- Date: Mon, 31 Jan 2005 09:43:28 -0800 (PST)
- Subject: Re: Accessing IP on IA-64 with RTL
> If you move the profile after the prologue, you will have to change the
> calling sequence. The current one assumes we are before the prologue,
> and creates its own register window for output arguments, which then
> gets overwritten by the register window created by the prologue. After
> the prologue, it should look like pretty much like any other function call.
> If we do call it after the prologue, that would fix PR 12455.
This implies that there would be an ABI change to glibc for IA64 Linux.
I am not sure how difficult this is or what GCC/glibc coordination is
required. I have never messed around with glibc before.
> Yuck. This should be fixed. We shouldn't be switching sections inside
> a function. This should use xdata instead of data. Probably better is
> to define NO_PROFILE_COUNTERS, as we shouldn't need this counter
> anyways, unless perhaps HPUX uses it. I'm pretty sure glibc won't use
> it. There are already a number of other linux targets that define this.
Linux does not seem to need it, the existing assembly language stub does
not do anything with it and does not even pass it to the C profiling
routine (__mcount) that does the real work. HP-UX does seem to need it
I am not sure what xdata is. The data location for the counter is
created in final.c (profile_function) by:
int align = MIN (BIGGEST_ALIGNMENT, LONG_TYPE_SIZE);
ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT));
targetm.asm_out.internal_label (file, "LP", current_function_funcdef_no);
assemble_integer (const0_rtx, LONG_TYPE_SIZE / BITS_PER_UNIT, align, 1);