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?