summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorblueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162>2007-09-24 18:39:04 +0000
committerblueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162>2007-09-24 18:39:04 +0000
commit7743e588395535f1bc13f4f747069bae43935432 (patch)
tree6103aad96973b63350aa499d0a9efe34b1738ff6
parente189e7486867e36c35f99cbac27d503ce4e7c71d (diff)
Fix >4G physical memory dump for Sparc32
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3229 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r--monitor.c50
1 files changed, 31 insertions, 19 deletions
diff --git a/monitor.c b/monitor.c
index 6e0c7ba534..8671173605 100644
--- a/monitor.c
+++ b/monitor.c
@@ -506,7 +506,7 @@ static void term_printc(int c)
}
static void memory_dump(int count, int format, int wsize,
- target_ulong addr, int is_physical)
+ target_phys_addr_t addr, int is_physical)
{
CPUState *env;
int nb_per_line, l, line_size, i, max_digits, len;
@@ -569,7 +569,10 @@ static void memory_dump(int count, int format, int wsize,
}
while (len > 0) {
- term_printf(TARGET_FMT_lx ":", addr);
+ if (is_physical)
+ term_printf(TARGET_FMT_plx ":", addr);
+ else
+ term_printf(TARGET_FMT_lx ":", (target_ulong)addr);
l = len;
if (l > line_size)
l = line_size;
@@ -637,18 +640,24 @@ static void do_memory_dump(int count, int format, int size,
memory_dump(count, format, size, addr, 0);
}
+#if TARGET_PHYS_ADDR_BITS > 32
+#define GET_TPHYSADDR(h, l) (((uint64_t)(h) << 32) | (l))
+#else
+#define GET_TPHYSADDR(h, l) (l)
+#endif
+
static void do_physical_memory_dump(int count, int format, int size,
uint32_t addrh, uint32_t addrl)
{
- target_long addr = GET_TLONG(addrh, addrl);
+ target_phys_addr_t addr = GET_TPHYSADDR(addrh, addrl);
memory_dump(count, format, size, addr, 1);
}
static void do_print(int count, int format, int size, unsigned int valh, unsigned int vall)
{
- target_long val = GET_TLONG(valh, vall);
-#if TARGET_LONG_BITS == 32
+ target_phys_addr_t val = GET_TPHYSADDR(valh, vall);
+#if TARGET_PHYS_ADDR_BITS == 32
switch(format) {
case 'o':
term_printf("%#o", val);
@@ -1752,11 +1761,11 @@ static void next(void)
}
}
-static target_long expr_sum(void);
+static target_phys_addr_t expr_sum(void);
-static target_long expr_unary(void)
+static target_phys_addr_t expr_unary(void)
{
- target_long n;
+ target_phys_addr_t n;
char *p;
int ret;
@@ -1794,6 +1803,7 @@ static target_long expr_unary(void)
case '$':
{
char buf[128], *q;
+ target_long reg;
pch++;
q = buf;
@@ -1808,11 +1818,12 @@ static target_long expr_unary(void)
while (isspace(*pch))
pch++;
*q = 0;
- ret = get_monitor_def(&n, buf);
+ ret = get_monitor_def(&reg, buf);
if (ret == -1)
expr_error("unknown register");
else if (ret == -2)
expr_error("no cpu defined");
+ n = reg;
}
break;
case '\0':
@@ -1820,7 +1831,7 @@ static target_long expr_unary(void)
n = 0;
break;
default:
-#if TARGET_LONG_BITS == 64
+#if TARGET_PHYS_ADDR_BITS > 32
n = strtoull(pch, &p, 0);
#else
n = strtoul(pch, &p, 0);
@@ -1837,9 +1848,9 @@ static target_long expr_unary(void)
}
-static target_long expr_prod(void)
+static target_phys_addr_t expr_prod(void)
{
- target_long val, val2;
+ target_phys_addr_t val, val2;
int op;
val = expr_unary();
@@ -1868,9 +1879,9 @@ static target_long expr_prod(void)
return val;
}
-static target_long expr_logic(void)
+static target_phys_addr_t expr_logic(void)
{
- target_long val, val2;
+ target_phys_addr_t val, val2;
int op;
val = expr_prod();
@@ -1896,9 +1907,9 @@ static target_long expr_logic(void)
return val;
}
-static target_long expr_sum(void)
+static target_phys_addr_t expr_sum(void)
{
- target_long val, val2;
+ target_phys_addr_t val, val2;
int op;
val = expr_logic();
@@ -1916,7 +1927,7 @@ static target_long expr_sum(void)
return val;
}
-static int get_expr(target_long *pval, const char **pp)
+static int get_expr(target_phys_addr_t *pval, const char **pp)
{
pch = *pp;
if (setjmp(expr_env)) {
@@ -2179,7 +2190,8 @@ static void monitor_handle_command(const char *cmdline)
case 'i':
case 'l':
{
- target_long val;
+ target_phys_addr_t val;
+
while (isspace(*p))
p++;
if (*typestr == '?' || *typestr == '.') {
@@ -2219,7 +2231,7 @@ static void monitor_handle_command(const char *cmdline)
} else {
if ((nb_args + 1) >= MAX_ARGS)
goto error_args;
-#if TARGET_LONG_BITS == 64
+#if TARGET_PHYS_ADDR_BITS > 32
args[nb_args++] = (void *)(long)((val >> 32) & 0xffffffff);
#else
args[nb_args++] = (void *)0;