sim: add --map-info option
There are options for listing the current device/hw tree and memory regions, but no way to find out at run time all the current mappings. So add a new --map-info option akin to the --memory-info option which displays all the current mappings. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
da88a76442
commit
bef6be3d9f
2 changed files with 50 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2010-12-15 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
|
* sim-memopt.c (OPTION_MAP_INFO): Define.
|
||||||
|
(memory_options): Handle --map-info.
|
||||||
|
(memory_option_handler): Handle OPTION_MAP_INFO.
|
||||||
|
|
||||||
2010-11-22 Mike Frysinger <vapier@gentoo.org>
|
2010-11-22 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
* sim-profile.c (PROFILE_PC_FREQ, PROFILE_PC_NR_BUCKETS,
|
* sim-profile.c (PROFILE_PC_FREQ, PROFILE_PC_NR_BUCKETS,
|
||||||
|
|
|
@ -67,7 +67,8 @@ enum {
|
||||||
OPTION_MEMORY_ALIAS,
|
OPTION_MEMORY_ALIAS,
|
||||||
OPTION_MEMORY_CLEAR,
|
OPTION_MEMORY_CLEAR,
|
||||||
OPTION_MEMORY_FILL,
|
OPTION_MEMORY_FILL,
|
||||||
OPTION_MEMORY_MAPFILE
|
OPTION_MEMORY_MAPFILE,
|
||||||
|
OPTION_MAP_INFO
|
||||||
};
|
};
|
||||||
|
|
||||||
static DECLARE_OPTION_HANDLER (memory_option_handler);
|
static DECLARE_OPTION_HANDLER (memory_option_handler);
|
||||||
|
@ -113,6 +114,9 @@ static const OPTION memory_options[] =
|
||||||
{ {"info-memory", no_argument, NULL, OPTION_MEMORY_INFO },
|
{ {"info-memory", no_argument, NULL, OPTION_MEMORY_INFO },
|
||||||
'\0', NULL, NULL,
|
'\0', NULL, NULL,
|
||||||
memory_option_handler },
|
memory_option_handler },
|
||||||
|
{ {"map-info", no_argument, NULL, OPTION_MAP_INFO },
|
||||||
|
'\0', NULL, "List mapped regions",
|
||||||
|
memory_option_handler },
|
||||||
|
|
||||||
{ {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL }
|
{ {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
@ -520,6 +524,45 @@ memory_option_handler (SIM_DESC sd, sim_cpu *cpu, int opt,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case OPTION_MAP_INFO:
|
||||||
|
{
|
||||||
|
sim_core *memory = STATE_CORE (sd);
|
||||||
|
unsigned nr_map;
|
||||||
|
|
||||||
|
for (nr_map = 0; nr_map < nr_maps; ++nr_map)
|
||||||
|
{
|
||||||
|
sim_core_map *map = &memory->common.map[nr_map];
|
||||||
|
sim_core_mapping *mapping = map->first;
|
||||||
|
|
||||||
|
if (!mapping)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sim_io_printf (sd, "%s maps:\n", map_to_str (nr_map));
|
||||||
|
do
|
||||||
|
{
|
||||||
|
unsigned modulo;
|
||||||
|
|
||||||
|
sim_io_printf (sd, " map ");
|
||||||
|
if (mapping->space != 0)
|
||||||
|
sim_io_printf (sd, "0x%x:", mapping->space);
|
||||||
|
sim_io_printf (sd, "0x%08lx", (long) mapping->base);
|
||||||
|
if (mapping->level != 0)
|
||||||
|
sim_io_printf (sd, "@0x%x", mapping->level);
|
||||||
|
sim_io_printf (sd, ",0x%lx", (long) mapping->nr_bytes);
|
||||||
|
modulo = mapping->mask + 1;
|
||||||
|
if (modulo != 0)
|
||||||
|
sim_io_printf (sd, "%%0x%x", modulo);
|
||||||
|
sim_io_printf (sd, "\n");
|
||||||
|
|
||||||
|
mapping = mapping->next;
|
||||||
|
}
|
||||||
|
while (mapping);
|
||||||
|
}
|
||||||
|
|
||||||
|
return SIM_RC_OK;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
sim_io_eprintf (sd, "Unknown memory option %d\n", opt);
|
sim_io_eprintf (sd, "Unknown memory option %d\n", opt);
|
||||||
return SIM_RC_FAIL;
|
return SIM_RC_FAIL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue