This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: New syntax for IVMS prolog epilog size


Nick Clifton wrote:
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 ?

No, the single prologue is not encoded. I've been using data4 because that what I perceive the DEC "C" compiler to be using.


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 ?

You didn't misread and it that's the offset from the beginning of the function. "Start" was the function begin label, "End" the prologue end label. I guess I'm not understanding your question.



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




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]