New syntax for IVMS prolog epilog size

Nick Clifton nickc@redhat.com
Fri Sep 11 09:31:00 GMT 2009


Hi Douglas,

>  From the HP Dwarf extensions manual:

Hmm, this makes it sound like the new directive ought to be called 
something like:

   .dw_at_hp_prologue

> If the value of DW_AT_HP_prologue has class constant, then the integer 
> value of the attribute gives the offset of the one and only prologue end 
> relative to the base of reference.
> 
> -------------
> Note: This is the case we are discussing above,

[I am being lazy here and asking you rather than looking this up:]  Is 
the integer value discussed above LEB128 encoded ?  If so then there is 
no need to worry about having a size modifier added to the 
.dw.at_hp_prologue directive.

Also, if this integer value is the offset of the prologue end then why 
did your original gcc patch compute "(end - start) / 16 * 3" ?  Or did I 
misread that ?

> but it gets more 
> complicated for multiple prologues (and epilogues), for which we need 
> SLEB slot offsets, and possibly even addresses.
> -------------


> If the value of DW_AT_HP_prologue has class block, then the block 
> contains a sequence of values. The first value is a signed non-zero LEB 
> integer value. There are two cases:
> 1.If the first value is positive, it is a count of the number of signed 
> LEB integer values that follow. Each such value is an (instruction slot) 
> offset relative to the base of reference to a prologue end location.
> 
> This case applies when there is more than one prologue end location, but 
> they are all in the same section as the base of reference.
> 2.If the first value is negative, its absolute value is a count of the 
> number of addresses that follow. Each such address is a prologue end 
> location.

The (theoretical) advantage to calling the new directive 
.dw_at_hp_prologue is that its syntax could be defined to handle these 
cases as well.  Ie something like:

   .dw_at_hp_prologue <start_label>, <end_label> { , <start_label> , 
<end_label> }

Then the code could evaluate the list of labels.  If there is only one 
pair then the first case applies.  If there are multiple pairs and the 
start label is the same for all of them then the last case applies, 
otherwise the middle case applies.

Cheers
   Nick




More information about the Binutils mailing list