diff options
| author | Randy Dunlap <rdunlap@infradead.org> | 2017-12-08 13:19:19 -0500 |
|---|---|---|
| committer | Jason Wessel <jason.wessel@windriver.com> | 2018-01-25 09:41:07 -0500 |
| commit | 1e0ce03bf142454f38a5fc050bf4fd698d2d36d8 (patch) | |
| tree | 75272222ff9c084703ffecd31da4853522a1cfbd /kernel/debug | |
| parent | 6909e29fdefbb7aa643021279daef6ed10c81528 (diff) | |
kdb: make "mdr" command repeat
The "mdr" command should repeat (continue) when only Enter/Return
is pressed, so make it do so.
Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
Cc: Daniel Thompson <daniel.thompson@linaro.org>
Cc: Jason Wessel <jason.wessel@windriver.com>
Cc: kgdb-bugreport@lists.sourceforge.net
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Diffstat (limited to 'kernel/debug')
| -rw-r--r-- | kernel/debug/kdb/kdb_main.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c index 69e70f4021fe..ff6047d3b73f 100644 --- a/kernel/debug/kdb/kdb_main.c +++ b/kernel/debug/kdb/kdb_main.c | |||
| @@ -1566,6 +1566,7 @@ static int kdb_md(int argc, const char **argv) | |||
| 1566 | int symbolic = 0; | 1566 | int symbolic = 0; |
| 1567 | int valid = 0; | 1567 | int valid = 0; |
| 1568 | int phys = 0; | 1568 | int phys = 0; |
| 1569 | int raw = 0; | ||
| 1569 | 1570 | ||
| 1570 | kdbgetintenv("MDCOUNT", &mdcount); | 1571 | kdbgetintenv("MDCOUNT", &mdcount); |
| 1571 | kdbgetintenv("RADIX", &radix); | 1572 | kdbgetintenv("RADIX", &radix); |
| @@ -1575,9 +1576,10 @@ static int kdb_md(int argc, const char **argv) | |||
| 1575 | repeat = mdcount * 16 / bytesperword; | 1576 | repeat = mdcount * 16 / bytesperword; |
| 1576 | 1577 | ||
| 1577 | if (strcmp(argv[0], "mdr") == 0) { | 1578 | if (strcmp(argv[0], "mdr") == 0) { |
| 1578 | if (argc != 2) | 1579 | if (argc == 2 || (argc == 0 && last_addr != 0)) |
| 1580 | valid = raw = 1; | ||
| 1581 | else | ||
| 1579 | return KDB_ARGCOUNT; | 1582 | return KDB_ARGCOUNT; |
| 1580 | valid = 1; | ||
| 1581 | } else if (isdigit(argv[0][2])) { | 1583 | } else if (isdigit(argv[0][2])) { |
| 1582 | bytesperword = (int)(argv[0][2] - '0'); | 1584 | bytesperword = (int)(argv[0][2] - '0'); |
| 1583 | if (bytesperword == 0) { | 1585 | if (bytesperword == 0) { |
| @@ -1613,7 +1615,10 @@ static int kdb_md(int argc, const char **argv) | |||
| 1613 | radix = last_radix; | 1615 | radix = last_radix; |
| 1614 | bytesperword = last_bytesperword; | 1616 | bytesperword = last_bytesperword; |
| 1615 | repeat = last_repeat; | 1617 | repeat = last_repeat; |
| 1616 | mdcount = ((repeat * bytesperword) + 15) / 16; | 1618 | if (raw) |
| 1619 | mdcount = repeat; | ||
| 1620 | else | ||
| 1621 | mdcount = ((repeat * bytesperword) + 15) / 16; | ||
| 1617 | } | 1622 | } |
| 1618 | 1623 | ||
| 1619 | if (argc) { | 1624 | if (argc) { |
| @@ -1630,7 +1635,10 @@ static int kdb_md(int argc, const char **argv) | |||
| 1630 | diag = kdbgetularg(argv[nextarg], &val); | 1635 | diag = kdbgetularg(argv[nextarg], &val); |
| 1631 | if (!diag) { | 1636 | if (!diag) { |
| 1632 | mdcount = (int) val; | 1637 | mdcount = (int) val; |
| 1633 | repeat = mdcount * 16 / bytesperword; | 1638 | if (raw) |
| 1639 | repeat = mdcount; | ||
| 1640 | else | ||
| 1641 | repeat = mdcount * 16 / bytesperword; | ||
| 1634 | } | 1642 | } |
| 1635 | } | 1643 | } |
| 1636 | if (argc >= nextarg+1) { | 1644 | if (argc >= nextarg+1) { |
| @@ -1640,8 +1648,15 @@ static int kdb_md(int argc, const char **argv) | |||
| 1640 | } | 1648 | } |
| 1641 | } | 1649 | } |
| 1642 | 1650 | ||
| 1643 | if (strcmp(argv[0], "mdr") == 0) | 1651 | if (strcmp(argv[0], "mdr") == 0) { |
| 1644 | return kdb_mdr(addr, mdcount); | 1652 | int ret; |
| 1653 | last_addr = addr; | ||
| 1654 | ret = kdb_mdr(addr, mdcount); | ||
| 1655 | last_addr += mdcount; | ||
| 1656 | last_repeat = mdcount; | ||
| 1657 | last_bytesperword = bytesperword; // to make REPEAT happy | ||
| 1658 | return ret; | ||
| 1659 | } | ||
| 1645 | 1660 | ||
| 1646 | switch (radix) { | 1661 | switch (radix) { |
| 1647 | case 10: | 1662 | case 10: |
