https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107498

Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2022-11-01
             Status|UNCONFIRMED                 |WAITING
     Ever confirmed|0                           |1

--- Comment #5 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
Note that the fields are marked volatile in the source:

 union {
  struct {
   volatile indx_t pb_lower;
   volatile indx_t pb_upper;
  } pb;
  uint32_t pb_pages;
 } mp_pb;

But, yes, it looks like something went wrong earlier: mp is a pointer to
MDB_page, which is a structure containing a union containing a uint32_t field,
which gives it an alignment of 4 bytes, so mp must be a multiple of 4.  mp_pb
is a union containing a uint32_t field so it is at an offset multiple of 4.  So
&mp->mp_pb.pb must be a multiple of 4 and, assuming that it is contained in
%l0, the instruction:

  0x00000100000c8aec <+300>:    st  %l3, [ %l0 + 0xc ]

would therefore be legal.

Can anyone print the value of mp in the debugger?

Reply via email to