Commit 7743e588395535f1bc13f4f747069bae43935432
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 | 506 | } |
507 | 507 | |
508 | 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 | 511 | CPUState *env; |
512 | 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 | 569 | } |
570 | 570 | |
571 | 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 | 576 | l = len; |
574 | 577 | if (l > line_size) |
575 | 578 | l = line_size; |
... | ... | @@ -637,18 +640,24 @@ static void do_memory_dump(int count, int format, int size, |
637 | 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 | 649 | static void do_physical_memory_dump(int count, int format, int size, |
641 | 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 | 654 | memory_dump(count, format, size, addr, 1); |
646 | 655 | } |
647 | 656 | |
648 | 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 | 661 | switch(format) { |
653 | 662 | case 'o': |
654 | 663 | term_printf("%#o", val); |
... | ... | @@ -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 | 1769 | char *p; |
1761 | 1770 | int ret; |
1762 | 1771 | |
... | ... | @@ -1794,6 +1803,7 @@ static target_long expr_unary(void) |
1794 | 1803 | case '$': |
1795 | 1804 | { |
1796 | 1805 | char buf[128], *q; |
1806 | + target_long reg; | |
1797 | 1807 | |
1798 | 1808 | pch++; |
1799 | 1809 | q = buf; |
... | ... | @@ -1808,11 +1818,12 @@ static target_long expr_unary(void) |
1808 | 1818 | while (isspace(*pch)) |
1809 | 1819 | pch++; |
1810 | 1820 | *q = 0; |
1811 | - ret = get_monitor_def(&n, buf); | |
1821 | + ret = get_monitor_def(®, buf); | |
1812 | 1822 | if (ret == -1) |
1813 | 1823 | expr_error("unknown register"); |
1814 | 1824 | else if (ret == -2) |
1815 | 1825 | expr_error("no cpu defined"); |
1826 | + n = reg; | |
1816 | 1827 | } |
1817 | 1828 | break; |
1818 | 1829 | case '\0': |
... | ... | @@ -1820,7 +1831,7 @@ static target_long expr_unary(void) |
1820 | 1831 | n = 0; |
1821 | 1832 | break; |
1822 | 1833 | default: |
1823 | -#if TARGET_LONG_BITS == 64 | |
1834 | +#if TARGET_PHYS_ADDR_BITS > 32 | |
1824 | 1835 | n = strtoull(pch, &p, 0); |
1825 | 1836 | #else |
1826 | 1837 | n = strtoul(pch, &p, 0); |
... | ... | @@ -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 | 1854 | int op; |
1844 | 1855 | |
1845 | 1856 | val = expr_unary(); |
... | ... | @@ -1868,9 +1879,9 @@ static target_long expr_prod(void) |
1868 | 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 | 1885 | int op; |
1875 | 1886 | |
1876 | 1887 | val = expr_prod(); |
... | ... | @@ -1896,9 +1907,9 @@ static target_long expr_logic(void) |
1896 | 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 | 1913 | int op; |
1903 | 1914 | |
1904 | 1915 | val = expr_logic(); |
... | ... | @@ -1916,7 +1927,7 @@ static target_long expr_sum(void) |
1916 | 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 | 1932 | pch = *pp; |
1922 | 1933 | if (setjmp(expr_env)) { |
... | ... | @@ -2179,7 +2190,8 @@ static void monitor_handle_command(const char *cmdline) |
2179 | 2190 | case 'i': |
2180 | 2191 | case 'l': |
2181 | 2192 | { |
2182 | - target_long val; | |
2193 | + target_phys_addr_t val; | |
2194 | + | |
2183 | 2195 | while (isspace(*p)) |
2184 | 2196 | p++; |
2185 | 2197 | if (*typestr == '?' || *typestr == '.') { |
... | ... | @@ -2219,7 +2231,7 @@ static void monitor_handle_command(const char *cmdline) |
2219 | 2231 | } else { |
2220 | 2232 | if ((nb_args + 1) >= MAX_ARGS) |
2221 | 2233 | goto error_args; |
2222 | -#if TARGET_LONG_BITS == 64 | |
2234 | +#if TARGET_PHYS_ADDR_BITS > 32 | |
2223 | 2235 | args[nb_args++] = (void *)(long)((val >> 32) & 0xffffffff); |
2224 | 2236 | #else |
2225 | 2237 | args[nb_args++] = (void *)0; | ... | ... |