On Fri, Mar 21, 2014 at 12:47:10PM +0100, Eric Botcazou wrote:
> > So the patch below makes it so that if HOST_WIDE_INT is wide enough then,
> > depending on whether the range type is signed or not, add_AT_unsigned or
> > add_AT_int is used. This is more efficient for small ranges. And makes it
> > so that the value can be deduced from the DW_FORM by the consumer (which
> > can assume again that DW_FORM_data[1248] are simply zero-extended and
> > that negative constant values are represented by DW_FORM_sdata).
> 
> FWIW this looks an improvement to me.

Thanks. I'll propose it as a real patch with ChangeLog.

> > I tested this on x86_64 with --enable-languages=c,ada,c++,fortran,java,objc
> > without regressions. I also made sure that the example ada program range
> > is recognized correctly by gdb with this patch.
> > 
> > A couple of questions:
> > 
> > - Are there more ada DWARF tests? Something like guality used for c/fortran?
> 
> In the compiler proper no, but there is (of course) the GDB testsuite.

Of course, thanks. I ran gdb make check against a gcc with and without this
patch without any test result changes.

> > - What values of HOST_BITS_PER_WIDE_INT are actually supported in GCC? The
> > dwarf2out.c code tries to handle 8, 16, 32 and 64 bits for
> >   dw_val_class_const_double.
> 
> 32 and 64

Phew. OK, that makes things simpler. I was afraid we had to handle much
more combinations.

> > - Which setups use 32bit (or lower?) HOST_BITS_PER_WIDE_INT?
> >   i686 seems to require 64BIT HOST_WIDE_INTs too these days.
> 
> Right, pure 32-bit hosted compilers are an endangered species and GNAT is 
> probably not fully functional for these architectures.
> 
> How did you run into the problem?  Can't you conduct some minimal testing on 
> 64-bit platforms by using 128-bit integers (not in Ada unfortunately)?

I admit that the problem was somewhat theoretical. I tried to convince
Joel that he didn't have to lookup the type each time in a GDB patch.
But he pointed out GCC sometimes outputs constant values as DW_FORM_data
that had to be sign-extended to be interpreted correctly. In other cases
GCC expects consumers to just zero-extend the value when DW_FORM_data is
used. I also work on another DWARF consumer (elfutils/libdw) that does
have that expectation. So I wanted to make GCC consistent. It now is for
64 HOST_BITS_PER_WIDE_INT arches, but not yet for 

Using 128-bit integers on 64-bit platforms doesn't expose the same issue.
On 64 HOST_BITS_PER_WIDE_INT arches a dw_val_class_const_double is encoded
as a DW_FORM_BLOCK (which would actually be an invalid encoding for a
DW_AT_higher or DW_AT_lower bound, but I don't know any language/construct
that would generate such 128-bit bounds ranges).

Cheers,

Mark
> 
> -- 
> Eric Botcazou

Reply via email to