Commit 7743e588395535f1bc13f4f747069bae43935432

Authored by blueswir1
1 parent e189e748

Fix >4G physical memory dump for Sparc32


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3229 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 31 additions and 19 deletions
monitor.c
@@ -506,7 +506,7 @@ static void term_printc(int c) @@ -506,7 +506,7 @@ static void term_printc(int c)
506 } 506 }
507 507
508 static void memory_dump(int count, int format, int wsize, 508 static void memory_dump(int count, int format, int wsize,
509 - target_ulong addr, int is_physical) 509 + target_phys_addr_t addr, int is_physical)
510 { 510 {
511 CPUState *env; 511 CPUState *env;
512 int nb_per_line, l, line_size, i, max_digits, len; 512 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, @@ -569,7 +569,10 @@ static void memory_dump(int count, int format, int wsize,
569 } 569 }
570 570
571 while (len > 0) { 571 while (len > 0) {
572 - term_printf(TARGET_FMT_lx ":", addr); 572 + if (is_physical)
  573 + term_printf(TARGET_FMT_plx ":", addr);
  574 + else
  575 + term_printf(TARGET_FMT_lx ":", (target_ulong)addr);
573 l = len; 576 l = len;
574 if (l > line_size) 577 if (l > line_size)
575 l = line_size; 578 l = line_size;
@@ -637,18 +640,24 @@ static void do_memory_dump(int count, int format, int size, @@ -637,18 +640,24 @@ static void do_memory_dump(int count, int format, int size,
637 memory_dump(count, format, size, addr, 0); 640 memory_dump(count, format, size, addr, 0);
638 } 641 }
639 642
  643 +#if TARGET_PHYS_ADDR_BITS > 32
  644 +#define GET_TPHYSADDR(h, l) (((uint64_t)(h) << 32) | (l))
  645 +#else
  646 +#define GET_TPHYSADDR(h, l) (l)
  647 +#endif
  648 +
640 static void do_physical_memory_dump(int count, int format, int size, 649 static void do_physical_memory_dump(int count, int format, int size,
641 uint32_t addrh, uint32_t addrl) 650 uint32_t addrh, uint32_t addrl)
642 651
643 { 652 {
644 - target_long addr = GET_TLONG(addrh, addrl); 653 + target_phys_addr_t addr = GET_TPHYSADDR(addrh, addrl);
645 memory_dump(count, format, size, addr, 1); 654 memory_dump(count, format, size, addr, 1);
646 } 655 }
647 656
648 static void do_print(int count, int format, int size, unsigned int valh, unsigned int vall) 657 static void do_print(int count, int format, int size, unsigned int valh, unsigned int vall)
649 { 658 {
650 - target_long val = GET_TLONG(valh, vall);  
651 -#if TARGET_LONG_BITS == 32 659 + target_phys_addr_t val = GET_TPHYSADDR(valh, vall);
  660 +#if TARGET_PHYS_ADDR_BITS == 32
652 switch(format) { 661 switch(format) {
653 case 'o': 662 case 'o':
654 term_printf("%#o", val); 663 term_printf("%#o", val);
@@ -1752,11 +1761,11 @@ static void next(void) @@ -1752,11 +1761,11 @@ static void next(void)
1752 } 1761 }
1753 } 1762 }
1754 1763
1755 -static target_long expr_sum(void); 1764 +static target_phys_addr_t expr_sum(void);
1756 1765
1757 -static target_long expr_unary(void) 1766 +static target_phys_addr_t expr_unary(void)
1758 { 1767 {
1759 - target_long n; 1768 + target_phys_addr_t n;
1760 char *p; 1769 char *p;
1761 int ret; 1770 int ret;
1762 1771
@@ -1794,6 +1803,7 @@ static target_long expr_unary(void) @@ -1794,6 +1803,7 @@ static target_long expr_unary(void)
1794 case '$': 1803 case '$':
1795 { 1804 {
1796 char buf[128], *q; 1805 char buf[128], *q;
  1806 + target_long reg;
1797 1807
1798 pch++; 1808 pch++;
1799 q = buf; 1809 q = buf;
@@ -1808,11 +1818,12 @@ static target_long expr_unary(void) @@ -1808,11 +1818,12 @@ static target_long expr_unary(void)
1808 while (isspace(*pch)) 1818 while (isspace(*pch))
1809 pch++; 1819 pch++;
1810 *q = 0; 1820 *q = 0;
1811 - ret = get_monitor_def(&n, buf); 1821 + ret = get_monitor_def(&reg, buf);
1812 if (ret == -1) 1822 if (ret == -1)
1813 expr_error("unknown register"); 1823 expr_error("unknown register");
1814 else if (ret == -2) 1824 else if (ret == -2)
1815 expr_error("no cpu defined"); 1825 expr_error("no cpu defined");
  1826 + n = reg;
1816 } 1827 }
1817 break; 1828 break;
1818 case '\0': 1829 case '\0':
@@ -1820,7 +1831,7 @@ static target_long expr_unary(void) @@ -1820,7 +1831,7 @@ static target_long expr_unary(void)
1820 n = 0; 1831 n = 0;
1821 break; 1832 break;
1822 default: 1833 default:
1823 -#if TARGET_LONG_BITS == 64 1834 +#if TARGET_PHYS_ADDR_BITS > 32
1824 n = strtoull(pch, &p, 0); 1835 n = strtoull(pch, &p, 0);
1825 #else 1836 #else
1826 n = strtoul(pch, &p, 0); 1837 n = strtoul(pch, &p, 0);
@@ -1837,9 +1848,9 @@ static target_long expr_unary(void) @@ -1837,9 +1848,9 @@ static target_long expr_unary(void)
1837 } 1848 }
1838 1849
1839 1850
1840 -static target_long expr_prod(void) 1851 +static target_phys_addr_t expr_prod(void)
1841 { 1852 {
1842 - target_long val, val2; 1853 + target_phys_addr_t val, val2;
1843 int op; 1854 int op;
1844 1855
1845 val = expr_unary(); 1856 val = expr_unary();
@@ -1868,9 +1879,9 @@ static target_long expr_prod(void) @@ -1868,9 +1879,9 @@ static target_long expr_prod(void)
1868 return val; 1879 return val;
1869 } 1880 }
1870 1881
1871 -static target_long expr_logic(void) 1882 +static target_phys_addr_t expr_logic(void)
1872 { 1883 {
1873 - target_long val, val2; 1884 + target_phys_addr_t val, val2;
1874 int op; 1885 int op;
1875 1886
1876 val = expr_prod(); 1887 val = expr_prod();
@@ -1896,9 +1907,9 @@ static target_long expr_logic(void) @@ -1896,9 +1907,9 @@ static target_long expr_logic(void)
1896 return val; 1907 return val;
1897 } 1908 }
1898 1909
1899 -static target_long expr_sum(void) 1910 +static target_phys_addr_t expr_sum(void)
1900 { 1911 {
1901 - target_long val, val2; 1912 + target_phys_addr_t val, val2;
1902 int op; 1913 int op;
1903 1914
1904 val = expr_logic(); 1915 val = expr_logic();
@@ -1916,7 +1927,7 @@ static target_long expr_sum(void) @@ -1916,7 +1927,7 @@ static target_long expr_sum(void)
1916 return val; 1927 return val;
1917 } 1928 }
1918 1929
1919 -static int get_expr(target_long *pval, const char **pp) 1930 +static int get_expr(target_phys_addr_t *pval, const char **pp)
1920 { 1931 {
1921 pch = *pp; 1932 pch = *pp;
1922 if (setjmp(expr_env)) { 1933 if (setjmp(expr_env)) {
@@ -2179,7 +2190,8 @@ static void monitor_handle_command(const char *cmdline) @@ -2179,7 +2190,8 @@ static void monitor_handle_command(const char *cmdline)
2179 case 'i': 2190 case 'i':
2180 case 'l': 2191 case 'l':
2181 { 2192 {
2182 - target_long val; 2193 + target_phys_addr_t val;
  2194 +
2183 while (isspace(*p)) 2195 while (isspace(*p))
2184 p++; 2196 p++;
2185 if (*typestr == '?' || *typestr == '.') { 2197 if (*typestr == '?' || *typestr == '.') {
@@ -2219,7 +2231,7 @@ static void monitor_handle_command(const char *cmdline) @@ -2219,7 +2231,7 @@ static void monitor_handle_command(const char *cmdline)
2219 } else { 2231 } else {
2220 if ((nb_args + 1) >= MAX_ARGS) 2232 if ((nb_args + 1) >= MAX_ARGS)
2221 goto error_args; 2233 goto error_args;
2222 -#if TARGET_LONG_BITS == 64 2234 +#if TARGET_PHYS_ADDR_BITS > 32
2223 args[nb_args++] = (void *)(long)((val >> 32) & 0xffffffff); 2235 args[nb_args++] = (void *)(long)((val >> 32) & 0xffffffff);
2224 #else 2236 #else
2225 args[nb_args++] = (void *)0; 2237 args[nb_args++] = (void *)0;