010322.3 W T. Allen Ada DW_OP_calli crossing shared library boundaries


(This is a different approach than either of the 2 suggestions I made in
earlier emails. Previously, I had misunderstood the exact workings of
DW_OP_calli. This newer, simpler approach should minimize the impact on the

With DWARF 2.0.0, our (Concurrent's) compilers implemented several attributes
which were intended to be "suffix" location descriptions, and were appended
to other location descriptions automatically by our debugger, which
recognized them. This was intended to reduce the space of the DWARF2
information by separating out location expression idioms, and representing
them only once in the program.

The DW_OP_call* operators provide a better mechanism.

To support our Ada compiler's approach of describing entities only once, the
only thing needed is the ability for a DW_OP_calli operator to reference a
subroutine in another shared object. This is analogous the the earlier
proposal (010322.1) for the ability for DW_FORM_ref_addr to reference a DIE
in another shared object.

I think the best way to allow DW_OP_calli to have this functionality is
merely to allow the DW_OP_addr operator to push an address that requires


  | Literal Encodings
  | ...
  | 2. DW_OP_addr
  | The DW_OP_addr operation has a single operand that encodes a machine
  | address and whose size is the size of an address on the target
  | architecture. The address may be unrelocated even in an executable
  | file or shared object to support references to addresses in other shared
  | objects, or from a shared object to the static executable file. In such
  | a case, the relocation must be performed by the consumer.

Withdrawn with the request that it be redrafted.