Douglas B Rupp wrote:
The HP debugger on IA64 VMS defines a new Dwarf2 attribute that computes the
offset of the end of the prologue from the beginning of the function. To
implement this an end prologue label must be emitted and some related info
saved in dwarf2out.c.
However I've noted that calling debug_hooks->end_prologue as it is now
results in a label at the beginning of the prologue, not the end. I've
attached the obvious fix below, but I fear it might mess up sdbout.c. Should
I create a new hook or investigate the impact on sdbout and try to fix it?

Belatedly looking at this, you seem to be confused over the purpose of the NOTE_INSN_FUNCTION_BEG note. It does not mark the beginning of the function. That is the first RTL insn. Instead, it marks the beginning of the function body.

If you compile without optimization, then this is the same as the prologue end. If you compile with optimization, then the function body and the prologue overlap. Now the question is, do you really want to mark the beginning of the function body (which may be before the prologue end), or the end of the prologue (which may be after the function body beginning). Either way, it is likely that someone may not be happy. However, in general, the former (function body beginning) is more useful to end users, as otherwise they won't be able to debug all of the code in the function body. So the current code in final.c looks correct.

Othogonal to this, there is the problem of what to do with these notes when instruction scheduling is enabled. It looks like the current code just always moves notes to the beginning of the basic block containing them. That means effectively that the function beginning is always before the prologue. However, the prologue end note also ends up before the prologue in the same place. So using that one doesn't help. The only solution is a more general one. In the scheduler, before scheduling, you need to mark all instructions that originally came from the prologue. After scheduling, you go back through, find the first non-prologue instruction, and insert the NOTE_INSN_FUNCTION_BEG note before it. You find the last prologue instruction, and insert the NOTE_INSN_PROLOGUE_END note after it. You would also have to do the same (reversed) for the epilogue. It isn't clear if this extra work is worthwhile.
--
Jim Wilson, GNU Tools Support, http://www.specifix.com

Reply via email to