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>
|
||||
|
||||
* sim-profile.c (PROFILE_PC_FREQ, PROFILE_PC_NR_BUCKETS,
|
||||
|
|
|
@ -67,7 +67,8 @@ enum {
|
|||
OPTION_MEMORY_ALIAS,
|
||||
OPTION_MEMORY_CLEAR,
|
||||
OPTION_MEMORY_FILL,
|
||||
OPTION_MEMORY_MAPFILE
|
||||
OPTION_MEMORY_MAPFILE,
|
||||
OPTION_MAP_INFO
|
||||
};
|
||||
|
||||
static DECLARE_OPTION_HANDLER (memory_option_handler);
|
||||
|
@ -113,6 +114,9 @@ static const OPTION memory_options[] =
|
|||
{ {"info-memory", no_argument, NULL, OPTION_MEMORY_INFO },
|
||||
'\0', NULL, NULL,
|
||||
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 }
|
||||
};
|
||||
|
@ -520,6 +524,45 @@ memory_option_handler (SIM_DESC sd, sim_cpu *cpu, int opt,
|
|||
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:
|
||||
sim_io_eprintf (sd, "Unknown memory option %d\n", opt);
|
||||
return SIM_RC_FAIL;
|
||||
|
|
Loading…
Reference in a new issue