51 regcache->
flags[
i] &= ~(uint8_t)REGCACHE_ALLOC;
130 if (regcache->
dirty) {
147 if (!arch_has_reg(regcache->arch,reg)) { \
148 vwarnopt(LA_LIB,LF_REGCACHE,8,"reg %d not supported\n",reg); \
159 vwarn(
"called on fully-loaded regcache; BUG!!!\n");
162 if (sz >
sizeof(*regcache->
values)
168 if (regcache->
flags[reg] & REGCACHE_ALLOC) {
169 if (
sizeof(regval) < sz) {
170 memset((
void *)regcache->
values[reg],0,sz);
171 memcpy((
void *)regcache->
values[reg],®val,
sizeof(regval));
174 memcpy((
void *)regcache->
values[reg],®val,sz);
177 regcache->
values[reg] = regval;
190 if (regcache->
dirty) {
191 vwarn(
"called on dirty regcache; BUG!!!\n");
193 else if (!regcache->
valid) {
194 vwarn(
"called on regcache with no registers loaded\n");
217 verror(
"reg %d not supported\n",start);
222 verror(
"reg %d not supported\n",end);
227 for (i = start; i <= end; ++
i) {
237 return regcache->
dirty;
246 "reg %d not valid; cannot write unless loaded first!\n",reg);
254 if (
sizeof(regval) < sz) {
255 memset((
void *)regcache->
values[reg],0,sz);
256 memcpy((
void *)regcache->
values[reg],®val,
sizeof(regval));
259 memcpy((
void *)regcache->
values[reg],®val,sz);
262 regcache->
values[reg] = regval;
277 "reg %d not valid; cannot read unless loaded first!\n",reg);
285 if (
sizeof(*regval) > sz) {
286 memset((
void *)regval,0,
sizeof(*regval));
287 memcpy((
void *)regval,(
void *)regcache->
values[reg],sz);
290 memcpy((
void *)regval,(
void *)regcache->
values[reg],
sizeof(regval));
293 *regval = regcache->
values[reg];
309 if (
sizeof(*regval) > sz) {
310 memset((
void *)regval,0,
sizeof(*regval));
311 memcpy((
void *)regval,(
void *)regcache->
values[reg],sz);
314 memcpy((
void *)regval,(
void *)regcache->
values[reg],
sizeof(regval));
317 *regval = regcache->
values[reg];
324 void *regdata,
unsigned int reglen) {
329 if (sz >
sizeof(*regcache->
values)
335 if (regcache->
flags[reg] & REGCACHE_ALLOC) {
337 memset((
void *)regcache->
values[reg],0,sz);
338 memcpy((
void *)regcache->
values[reg],regdata,reglen);
341 memcpy((
void *)regcache->
values[reg],regdata,sz);
344 if (reglen <
sizeof(*regcache->
values)) {
345 memset(®cache->
values[reg],0,
sizeof(*regcache->
values));
346 memcpy(regdata,®cache->
values[reg],reglen);
354 regcache->
flags[reg] |= REGCACHE_VALID;
360 void *regdata,
unsigned int reglen) {
366 "reg %d not valid; cannot write unless loaded first!\n",reg);
375 memset((
void *)regcache->
values[reg],0,sz);
376 memcpy((
void *)regcache->
values[reg],regdata,reglen);
379 memcpy((
void *)regcache->
values[reg],regdata,sz);
382 if (reglen <
sizeof(*regcache->
values)) {
383 memset(®cache->
values[reg],0,
sizeof(*regcache->
values));
384 memcpy(regdata,®cache->
values[reg],reglen);
397 void **regdata,
unsigned int *reglen) {
403 "reg %d not valid; cannot read unless loaded first!\n",reg);
411 *regdata = (
void **)®cache->
values[reg];
415 *regdata = ®cache->
values[reg];
416 *reglen =
sizeof(*regcache->
values);
423 GHashTable *retval = NULL;
428 retval = g_hash_table_new_full(g_str_hash,g_str_equal,NULL,
free);
433 g_hash_table_insert(retval,
443 if (sz > (
int)
sizeof(
REGVAL)) {
445 memcpy(copy,(
void *)regcache->
values[j],sz);
449 memcpy(copy,(
void *)®cache->
values[j],
sizeof(
REGVAL));
451 g_hash_table_insert(retval,
460 int detail,
char *sep,
char *kvsep,
int flags) {
490 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
491 (rc >= bufsiz) ? 0 :bufsiz - rc,
494 uint8_t *data = (uint8_t *)regcache->
values[reg];
495 for (k = 0; k < sz; ++k) {
496 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
497 (rc >= bufsiz) ? 0 :bufsiz - rc,
503 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
504 (rc >= bufsiz) ? 0 :bufsiz - rc,
507 kvsep,(uint8_t)regcache->
values[reg]);
509 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
510 (rc >= bufsiz) ? 0 :bufsiz - rc,
513 kvsep,(uint8_t)regcache->
values[reg]);
517 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
518 (rc >= bufsiz) ? 0 :bufsiz - rc,
521 kvsep,(uint16_t)regcache->
values[reg]);
523 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
524 (rc >= bufsiz) ? 0 :bufsiz - rc,
527 kvsep,(uint16_t)regcache->
values[reg]);
531 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
532 (rc >= bufsiz) ? 0 :bufsiz - rc,
535 kvsep,(uint32_t)regcache->
values[reg]);
537 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
538 (rc >= bufsiz) ? 0 :bufsiz - rc,
541 kvsep,(uint32_t)regcache->
values[reg]);
545 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
546 (rc >= bufsiz) ? 0 :bufsiz - rc,
549 kvsep,(uint64_t)regcache->
values[reg]);
551 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
552 (rc >= bufsiz) ? 0 :bufsiz - rc,
555 kvsep,(uint64_t)regcache->
values[reg]);
574 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
575 (rc >= bufsiz) ? 0 :bufsiz - rc,
578 uint8_t *data = (uint8_t *)regcache->
values[j];
579 for (k = 0; k < sz; ++k) {
580 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
581 (rc >= bufsiz) ? 0 :bufsiz - rc,
587 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
588 (rc >= bufsiz) ? 0 :bufsiz - rc,
591 (uint8_t)regcache->
values[j]);
593 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
594 (rc >= bufsiz) ? 0 :bufsiz - rc,
597 (uint8_t)regcache->
values[j]);
601 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
602 (rc >= bufsiz) ? 0 :bufsiz - rc,
605 (uint16_t)regcache->
values[j]);
607 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
608 (rc >= bufsiz) ? 0 :bufsiz - rc,
611 (uint16_t)regcache->
values[j]);
615 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
616 (rc >= bufsiz) ? 0 :bufsiz - rc,
619 (uint32_t)regcache->
values[j]);
621 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
622 (rc >= bufsiz) ? 0 :bufsiz - rc,
625 (uint32_t)regcache->
values[j]);
629 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
630 (rc >= bufsiz) ? 0 :bufsiz - rc,
633 (uint64_t)regcache->
values[j]);
635 rc += snprintf((rc >= bufsiz) ? NULL : buf + rc,
636 (rc >= bufsiz) ? 0 :bufsiz - rc,
639 (uint64_t)regcache->
values[j]);
struct regcache * regcache_create(struct arch *arch)
#define vwarnopt(level, area, flags, format,...)
int max_snprintf_ordering
void regcache_mark_flushed(struct regcache *regcache)
#define REGCACHE_PRINT_PADDING
int regcache_read_reg_len(struct regcache *regcache, REG reg, void **regdata, unsigned int *reglen)
int regcache_init_reg(struct regcache *regcache, REG reg, REGVAL regval)
int regcache_write_reg(struct regcache *regcache, REG reg, REGVAL regval)
static uint64_t unsigned int i
unsigned int arch_regsize(struct arch *arch, REG reg)
void regcache_destroy(struct regcache *regcache)
void regcache_zero(struct regcache *regcache)
int regcache_isdirty_reg_range(struct regcache *regcache, REG start, REG end)
int regcache_read_reg(struct regcache *regcache, REG reg, REGVAL *regval)
#define verror(format,...)
int * snprintf_ordering[ARCH_SNPRINTF_DETAIL_LEVELS]
int regcache_isdirty(struct regcache *regcache)
#define vwarn(format,...)
int regcache_copy_all(struct regcache *sregcache, struct regcache *dregcache)
int arch_has_reg(struct arch *arch, REG reg)
const char * arch_regname(struct arch *arch, REG reg)
int regcache_write_reg_len(struct regcache *regcache, REG reg, void *regdata, unsigned int reglen)
#define vdebug(devel, areas, flags, format,...)
int regcache_isdirty_reg(struct regcache *regcache, REG reg)
void * calloc(size_t nmemb, size_t size)
int regcache_read_reg_ifdirty(struct regcache *regcache, REG reg, REGVAL *regval)
GHashTable * regcache_copy_registers(struct regcache *regcache)
int regcache_init_done(struct regcache *regcache)
int regcache_copy_dirty(struct regcache *sregcache, struct regcache *dregcache)
#define REGCACHE_PRINT_DEFAULTS
void * malloc(size_t size)
int regcache_snprintf(struct regcache *regcache, char *buf, int bufsiz, int detail, char *sep, char *kvsep, int flags)
#define ARCH_SNPRINTF_DETAIL_LEVELS
int regcache_init_reg_len(struct regcache *regcache, REG reg, void *regdata, unsigned int reglen)
void regcache_invalidate(struct regcache *regcache)