CMS Pipelines ships the macro #LAL.  One would write:

  #LAL 2,'a message'

This expands to a LA 2,=c'...' and LA 3,<length>.  As the constant goes
into a literal pool I can substitute LARL for even length literals
without adding failures (unless the literal pool is more than 4G away).

The general case of

   #LAL 2,label

expands also to a LA.  I can change that to a LARL only when the
reference is to a control section.  If the label is declared in a dummy
section, there is no way around the USING and LA.  (If the label is
undefined at the time the #LAL macro is issued, all bets are off and I
must clearly be conservative and go LA).

So my question is:  How to determine whether a label is in a DSECT or
CSECT/RSECT?  I think I can determine whether the symbol is absolute
from the type attribute, so we don't need to worry about that.

Or is there a way to determine the name of the section a symbol is in?
If not, would a SETC function SECTION(x) returning the appropriate name
be useful in generl?   All it has to do is look in the symbol table and
return a null string for undefined or absolute.  A SETA function
returning the ESD number of the containing section would also solve my
problem (DSECTS have negative ESD IDs internally; absolute symbols are
in ESD 0).  SETA also gets round the problem of the symbol being in
private code, so it is really the best.

I guess there is the additional wrinkle that the target must be on a
halfword boundary, but I can add a trailing blank to a literal that is
an odd number of characters (as long as I don't mess up the length).

Any suggestions?

Reply via email to