Should a DW_OP_implicit_value be taken from the left end?

Andreas Arnez <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
The following patch changed how sub-values of a DW_OP_implicit_value are
extracted on big-endian platforms:

  https://sourceware.org/ml/gdb-patches/2011-08/msg00123.html

The patch seems to assume that the placement rule is similar as for
DW_OP_stack_value.  I think that's wrong; DW_OP_implicit_value should
always be taken from the left end.  (See rationale below for an
explanation.)  And I'd like to know whether anyone objects.

I'm in the process of preparing a patch series for fixing various
problems with DWARF piece handling, and the series currently contains a
patch for reverting the above patch's effect on DW_OP_implicit_value.

Rationale:

Since DW_OP_implicit_value can express arbitrary amounts of structured
or unstructured data, the notion of a "least significant byte" is
meaningless.  The patch above makes it impossible for a
DW_OP_implicit_pointer operation to refer to any sub-value within a
DW_OP_implicit_value on big-endian targets.

E.g., consider this code snippet:

  const char foo[] = "Hello, world!";
  char *a = &foo[0];
  char *b = &foo[7];

IMHO the compiler should be able to describe `foo' with a single
DW_OP_implicit_value operation and `a' and `b' as DW_OP_implicit_pointer
operations pointing into that value.

Any objections?

--
Andreas
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.