public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Ulrich Weigand <uweigand@de.ibm.com>
To: gcc@gcc.gnu.org, gdb@sourceware.org
Cc: krebbel@linux.ibm.com
Subject: Issue with pointer types marked with scalar_storage_order
Date: Thu, 6 May 2021 14:33:08 +0200	[thread overview]
Message-ID: <20210506123308.GA27332@oc3748833570.ibm.com> (raw)

Hello,

for a few years now, GCC has supported the scalar_storage_order
attribute (and pragma) that allows specifying the storage order
(endianness) of structures.  This affects both the code GCC
generates to access variables declared using the attribute,
and also the debug info: GCC emits the DW_AT_endianity attribute
to allow debuggers to work correctly with those variables as well.

However, in one specific scenario this doesn't work correctly
right now: pointer types.  Currently, GCC *will* swap the storage
order for members of pointer type in a structure declared using
scalar_storage_order, but it will *not* emit DW_AT_endianity
for these fields -- and it really cannot, because the DWARF
standard allows DW_AT_endianity only for DW_TAG_base_type
type entries and not for DW_TAG_pointer_type entries.

I'm not really sure where exactly the bug is, because I'm not
quite sure if pointer types actually *should* be byte swapped.

On the one hand, the typical use case of scalar_storage_order
is to simplify accessing binary data (read from a file or the
network) that was generated on a "foreign" architecture that
uses a different byte order.  Those use cases are unlikely
to involve any pointer types, since pointer values from a
foreign system are typically not usable on the current
system anyway.

On the other hand, even the name of the attribute specifically
refers to *scalar* types, and the C standard does classsify
pointer types amongst the scalar type.  So maybe this was
originally intended?

If we do want to byte-swap pointer types, then I guess we need
to still fix the debug info problem, which I guess would at a
minimum require extending DWARF to allow DW_AT_endianity as an
attribute to DW_TAG_pointer_type (and then probably also
DW_TAG_reference_type, DW_TAG_rvalue_reference_type,
DW_TAG_ptr_to_member_type and possibly others).  Also, the
implementation in GDB would need to be changed accordingly.

Any comments or suggestions on what to do here?

Thanks,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU/Linux compilers and toolchain
  Ulrich.Weigand@de.ibm.com

             reply	other threads:[~2021-05-06 12:33 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-06 12:33 Ulrich Weigand [this message]
2021-05-06 14:07 ` Eric Botcazou
2021-05-07 12:45   ` Ulrich Weigand
2021-05-06 19:45 ` Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210506123308.GA27332@oc3748833570.ibm.com \
    --to=uweigand@de.ibm.com \
    --cc=gcc@gcc.gnu.org \
    --cc=gdb@sourceware.org \
    --cc=krebbel@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).