When a regcache is initialized, the values of registers are not
fetched yet. Thus, initialize the register statuses to REG_UNKNOWN
instead of REG_UNAVAILABLE, because the latter rather means "we
attempted to fetch but could not obtain the value".
The definitions of the reg status enums (from
gdbsupport/common-regcache.h) as a reminder:
/* The register value is not in the cache, and we don't know yet
whether it's available in the target (or traceframe). */
REG_UNKNOWN = 0,
/* The register value is valid and cached. */
REG_VALID = 1,
/* The register value is unavailable. E.g., we're inspecting a
traceframe, and this register wasn't collected. Note that this
"unavailable" is different from saying the register does not
exist in the target's architecture --- in that case, the target
should have given us a target description that does not include
the register in the first place. */
REG_UNAVAILABLE = -1
Similarly, when the regcache is invalidated, change all the statuses
back to REG_UNKNOWN.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
switch_to_thread (thread);
/* Invalidate all registers, to prevent stale left-overs. */
- memset (regcache->register_status, REG_UNAVAILABLE,
+ memset (regcache->register_status, REG_UNKNOWN,
regcache->tdesc->reg_defs.size ());
fetch_inferior_registers (regcache, -1);
regcache->registers_fetched = true;
= (unsigned char *) xcalloc (1, tdesc->registers_size);
this->register_status
= (unsigned char *) xmalloc (tdesc->reg_defs.size ());
- memset ((void *) this->register_status, REG_UNAVAILABLE,
+ memset ((void *) this->register_status, REG_UNKNOWN,
tdesc->reg_defs.size ());
}
bool registers_owned = false;
unsigned char *registers = nullptr;
#ifndef IN_PROCESS_AGENT
- /* One of REG_UNAVAILABLE or REG_VALID. */
+ /* See gdbsupport/common-regcache.h. */
unsigned char *register_status = nullptr;
/* Construct a regcache using the register layout described by TDESC.