This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] dwarf2out: Represent bound_info with normal constant values if possible.
- From: Mark Wielaard <mjw at redhat dot com>
- To: Eric Botcazou <ebotcazou at adacore dot com>
- Cc: gcc-patches at gcc dot gnu dot org, Joel Brobecker <brobecker at adacore dot com>
- Date: Sun, 23 Mar 2014 09:54:36 +0100
- Subject: Re: [PATCH] dwarf2out: Represent bound_info with normal constant values if possible.
- Authentication-results: sourceware.org; auth=none
- References: <1395337588-28129-1-git-send-email-mjw at redhat dot com> <3461370 dot jp3zc280vu at polaris>
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