On 30/04/19 22:48, Jeff Law wrote:
> On 4/30/19 11:24 AM, Matthew Malcomson wrote:
>> On 30/04/19 18:01, Jeff Law wrote:
>>> On 4/30/19 10:48 AM, Matthew Malcomson wrote:
>>>> Hi Jeff,
>>>>
>>>> On 30/04/19 16:29, Jeff Law wrote:
>>>>> On 1/4/19 9:03 AM, Matthew Malcomson wrote:
>>>>>> Hi there,
>>>>>>
>>>>>> I'm trying to figure out precisely what NOTE_INSN_FUNCTION_BEG means and
>>>>>> hoping someone here knows.
>>>>> It doesn't mean very much anymore.   I believe it was used to
>>>>> distinguish between stuff like copying incoming arguments into pseudos
>>>>> and real user code.
>>>>>
>>>>> However, in a world with instruction scheduling and other code motion it
>>>>> just doesn't have much use because it's so imprecise, particularly as we
>>>>> get deeper into the RTL pipeline.
>>>>>
>>>>
>>>> Ah, I guess an imprecise marker probably needs an imprecise definition ;-)
>>>>
>>>>>>
>>>>> Well, the question I'd ask is precisely what are you trying to mark?
>>>>
>>>>
>>>> I'm wanting to mark the first instruction from "user code".
>>>> I'm trying to fix PR88432, where gdb puts the breakpoint from the
>>>> "start" command in the wrong place.
>>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88432
>>>>
>>>> Gdb breaks on the second debug line entry in a function, which in
>>>> practice is the instruction directly after NOTE_INSN_FUNCTION_BEG.
>>>>
>>>>
>>>> The "fuzzy" definition from gccint.info didn't seem to explain what was
>>>> to happen with compiler inserted code that was not part of the prologue,
>>>> and this was what I was hoping to nail down.
>>>>
>>>> When looking, it seemed the note was being used in three slightly
>>>> different ways (I went into more information in the cover letter of my
>>>> [RFC] patch https://gcc.gnu.org/ml/gcc-patches/2019-01/msg00543.html ),
>>>> and I was hoping to get a precise definition so I could decide what
>>>> approach to take.
>>> ISTM that we should place the stack protector bits before the
>>> NOTE_INSN_FUNCTION_BEG.  At least in the non-optimizing compile case
>>> that should make the right thing happen.
>>>
>>> Jeff
>>>
>>
>> Yeah, unfortunately I saw that moving that note would break some other
>> places -- where the note is used as a marker for where to insert some
>> other code.
>>
>> The one I can remember (sort of) was that asan stack protection code is
>> inserted just before "parm_birth_insn" (which is
>> NOTE_INSN_FUNCTION_BEG), and that needs to be done before the non-local
>> goto save area as per the solution for bugzilla 88186.
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81186
>>
>> That was why I ended up suggesting multiple notes -- it's currently
>> trying to satisfy more than one criteria and they're not quite compatible.
> Well, we obviously have to keep arg setup, asan, stack protector and
> nonlocal stuff in the same relative order, but I believe they should all
> ultimately land before the NOTE_INSN_FUNCTION_BEG.  THe question is how
> to make that happen :-)
> 

It's pretty easy if we can replace the uses of NOTE_INSN_FUNCTION_BEG 
with another note:

In order to satisfy how it's used in `final_start_function_1`, 
`sjlj_emit_function_enter` in except.c and the nonlocal stuff I could 
add a differently named note at the current position.

Then I could move NOTE_INSN_FUNCTION_BEG to after everything 
automatically added since it's then only used by the debug information.

How would you feel about a modification of my RFC patch
https://gcc.gnu.org/ml/gcc-patches/2019-01/msg00543.html ,
where the uses of the suggested NOTE_INSN_DEBUG_FUNCTION_BEG are 
satisfied by NOTE_INSN_FUNCTION_BEG and a new NOTE_INSN_VAR_END where 
the current NOTE_INSN_FUNCTION_BEG is?

Reply via email to