Folks,

As many of you probably know Etnus is working on support for UPC in
our TotalView debugger.

Since there are many different compiler groups producing UPC
compilers, and there is a good chance that more than one UPC compiler
will use DWARF2 debugging format, I would like to propose a standard
set of DWARF2 encodings for UPC specific debug information.

This should

1) minimise the work I have to do, since I'll know how the UPC
   information is represented in DWARF2 by all the compilers.
2) save the compiler groups work, since there will be an existing
   specification to work to, and they won't have to make it up for
   themselves.
3) provide folks who aren't using DWARF2 with a view of the
   information which a UPC enabled debugger will require, so that they
   can more easily add it to whatever debug format they are using.

I did propose this to the DWARF 2.1 committee for formal
standardisation, however their opinion was that

1) It's too late for complex new proposals.
2) They've never heard of UPC and it's "experimental" so shouldn't be
   in the standard. :-(
3) The proposal didn't have backing from multiple compiler groups, so
   they didn't want to standardise something other groups might
   disagree with.

I have therefore withdrawn the proposal from the DWARF2.1
committee. We may collectively want to raise the issue there again
(possibly during their public comment period) if we agree that the
proposal is sensible and see benefit in having it in the formal DWARF
2.1 standard.

Here's the proposal. Note that the specific values for constants used
here are all in the "Vendor extension" ranges of DWARF2, at "random"
values in the hope of avoiding conflicts with existing vendor
extensions; should we wish to submit this to the DWARF 2.1 committee
the values would then change to be in the standard-assigned ranges.

 Proposal 

**********

Additional discussion (not part of the proposal)
------------------------------------------------
Any UPC debugger must know about the shared property of types,
therefore that is the key component of the proposal. Support for the
"strict" and "relaxed" qualifiers is less important, since the
debugger is unlikely to be able to enforce these properties in its
accesses to variables. These tags are included for completeness so
that the debugger can correctly show the user the type they have used
when declaring a variable.

The AT_threads_scaled attribute could potentially be removed, provided
that the compiler can generate normal DWARF for a run-time sized
array, referencing some process' variable which contains the value of
"THREADS", or the appropriate array dimension. The problems with this
are that

1) It does not make it easy for the debugger to display the array
   as being declared "[34*THREADS]", rather than as being "[*]"
2) It may not be simple for the compiler to find a variable containing
   THREADS.

This attribute is, of course, unnecessary in a "static THREADS"
compilation environment.

Comments, brickbats to me, (and the list) please.

-- Jim