diff options
Diffstat (limited to 'arch/frv/kernel/gdb-stub.c')
| -rw-r--r-- | arch/frv/kernel/gdb-stub.c | 88 |
1 files changed, 36 insertions, 52 deletions
diff --git a/arch/frv/kernel/gdb-stub.c b/arch/frv/kernel/gdb-stub.c index 48a0393e7cee..7ca8a6b19ac9 100644 --- a/arch/frv/kernel/gdb-stub.c +++ b/arch/frv/kernel/gdb-stub.c | |||
| @@ -182,8 +182,6 @@ extern volatile u32 __attribute__((section(".bss"))) gdbstub_trace_through_excep | |||
| 182 | static char input_buffer[BUFMAX]; | 182 | static char input_buffer[BUFMAX]; |
| 183 | static char output_buffer[BUFMAX]; | 183 | static char output_buffer[BUFMAX]; |
| 184 | 184 | ||
| 185 | static const char hexchars[] = "0123456789abcdef"; | ||
| 186 | |||
| 187 | static const char *regnames[] = { | 185 | static const char *regnames[] = { |
| 188 | "PSR ", "ISR ", "CCR ", "CCCR", | 186 | "PSR ", "ISR ", "CCR ", "CCCR", |
| 189 | "LR ", "LCR ", "PC ", "_stt", | 187 | "LR ", "LCR ", "PC ", "_stt", |
| @@ -383,8 +381,8 @@ static int gdbstub_send_packet(char *buffer) | |||
| 383 | } | 381 | } |
| 384 | 382 | ||
| 385 | gdbstub_tx_char('#'); | 383 | gdbstub_tx_char('#'); |
| 386 | gdbstub_tx_char(hexchars[checksum >> 4]); | 384 | gdbstub_tx_char(hex_asc_hi(checksum)); |
| 387 | gdbstub_tx_char(hexchars[checksum & 0xf]); | 385 | gdbstub_tx_char(hex_asc_lo(checksum)); |
| 388 | 386 | ||
| 389 | } while (gdbstub_rx_char(&ch,0), | 387 | } while (gdbstub_rx_char(&ch,0), |
| 390 | #ifdef GDBSTUB_DEBUG_PROTOCOL | 388 | #ifdef GDBSTUB_DEBUG_PROTOCOL |
| @@ -674,8 +672,7 @@ static unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fa | |||
| 674 | if ((uint32_t)mem&1 && count>=1) { | 672 | if ((uint32_t)mem&1 && count>=1) { |
| 675 | if (!gdbstub_read_byte(mem,ch)) | 673 | if (!gdbstub_read_byte(mem,ch)) |
| 676 | return NULL; | 674 | return NULL; |
| 677 | *buf++ = hexchars[ch[0] >> 4]; | 675 | buf = pack_hex_byte(buf, ch[0]); |
| 678 | *buf++ = hexchars[ch[0] & 0xf]; | ||
| 679 | mem++; | 676 | mem++; |
| 680 | count--; | 677 | count--; |
| 681 | } | 678 | } |
| @@ -683,10 +680,8 @@ static unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fa | |||
| 683 | if ((uint32_t)mem&3 && count>=2) { | 680 | if ((uint32_t)mem&3 && count>=2) { |
| 684 | if (!gdbstub_read_word(mem,(uint16_t *)ch)) | 681 | if (!gdbstub_read_word(mem,(uint16_t *)ch)) |
| 685 | return NULL; | 682 | return NULL; |
| 686 | *buf++ = hexchars[ch[0] >> 4]; | 683 | buf = pack_hex_byte(buf, ch[0]); |
| 687 | *buf++ = hexchars[ch[0] & 0xf]; | 684 | buf = pack_hex_byte(buf, ch[1]); |
| 688 | *buf++ = hexchars[ch[1] >> 4]; | ||
| 689 | *buf++ = hexchars[ch[1] & 0xf]; | ||
| 690 | mem += 2; | 685 | mem += 2; |
| 691 | count -= 2; | 686 | count -= 2; |
| 692 | } | 687 | } |
| @@ -694,14 +689,10 @@ static unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fa | |||
| 694 | while (count>=4) { | 689 | while (count>=4) { |
| 695 | if (!gdbstub_read_dword(mem,(uint32_t *)ch)) | 690 | if (!gdbstub_read_dword(mem,(uint32_t *)ch)) |
| 696 | return NULL; | 691 | return NULL; |
| 697 | *buf++ = hexchars[ch[0] >> 4]; | 692 | buf = pack_hex_byte(buf, ch[0]); |
| 698 | *buf++ = hexchars[ch[0] & 0xf]; | 693 | buf = pack_hex_byte(buf, ch[1]); |
| 699 | *buf++ = hexchars[ch[1] >> 4]; | 694 | buf = pack_hex_byte(buf, ch[2]); |
| 700 | *buf++ = hexchars[ch[1] & 0xf]; | 695 | buf = pack_hex_byte(buf, ch[3]); |
| 701 | *buf++ = hexchars[ch[2] >> 4]; | ||
| 702 | *buf++ = hexchars[ch[2] & 0xf]; | ||
| 703 | *buf++ = hexchars[ch[3] >> 4]; | ||
| 704 | *buf++ = hexchars[ch[3] & 0xf]; | ||
| 705 | mem += 4; | 696 | mem += 4; |
| 706 | count -= 4; | 697 | count -= 4; |
| 707 | } | 698 | } |
| @@ -709,10 +700,8 @@ static unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fa | |||
| 709 | if (count>=2) { | 700 | if (count>=2) { |
| 710 | if (!gdbstub_read_word(mem,(uint16_t *)ch)) | 701 | if (!gdbstub_read_word(mem,(uint16_t *)ch)) |
| 711 | return NULL; | 702 | return NULL; |
| 712 | *buf++ = hexchars[ch[0] >> 4]; | 703 | buf = pack_hex_byte(buf, ch[0]); |
| 713 | *buf++ = hexchars[ch[0] & 0xf]; | 704 | buf = pack_hex_byte(buf, ch[1]); |
| 714 | *buf++ = hexchars[ch[1] >> 4]; | ||
| 715 | *buf++ = hexchars[ch[1] & 0xf]; | ||
| 716 | mem += 2; | 705 | mem += 2; |
| 717 | count -= 2; | 706 | count -= 2; |
| 718 | } | 707 | } |
| @@ -720,8 +709,7 @@ static unsigned char *mem2hex(const void *_mem, char *buf, int count, int may_fa | |||
| 720 | if (count>=1) { | 709 | if (count>=1) { |
| 721 | if (!gdbstub_read_byte(mem,ch)) | 710 | if (!gdbstub_read_byte(mem,ch)) |
| 722 | return NULL; | 711 | return NULL; |
| 723 | *buf++ = hexchars[ch[0] >> 4]; | 712 | buf = pack_hex_byte(buf, ch[0]); |
| 724 | *buf++ = hexchars[ch[0] & 0xf]; | ||
| 725 | } | 713 | } |
| 726 | 714 | ||
| 727 | *buf = 0; | 715 | *buf = 0; |
| @@ -1471,22 +1459,22 @@ void gdbstub(int sigval) | |||
| 1471 | *ptr++ = 'O'; | 1459 | *ptr++ = 'O'; |
| 1472 | ptr = mem2hex(title, ptr, sizeof(title) - 1,0); | 1460 | ptr = mem2hex(title, ptr, sizeof(title) - 1,0); |
| 1473 | 1461 | ||
| 1474 | hx = hexchars[(brr & 0xf0000000) >> 28]; | 1462 | hx = hex_asc_hi(brr >> 24); |
| 1475 | *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; | 1463 | ptr = pack_hex_byte(ptr, hx); |
| 1476 | hx = hexchars[(brr & 0x0f000000) >> 24]; | 1464 | hx = hex_asc_lo(brr >> 24); |
| 1477 | *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; | 1465 | ptr = pack_hex_byte(ptr, hx); |
| 1478 | hx = hexchars[(brr & 0x00f00000) >> 20]; | 1466 | hx = hex_asc_hi(brr >> 16); |
| 1479 | *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; | 1467 | ptr = pack_hex_byte(ptr, hx); |
| 1480 | hx = hexchars[(brr & 0x000f0000) >> 16]; | 1468 | hx = hex_asc_lo(brr >> 16); |
| 1481 | *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; | 1469 | ptr = pack_hex_byte(ptr, hx); |
| 1482 | hx = hexchars[(brr & 0x0000f000) >> 12]; | 1470 | hx = hex_asc_hi(brr >> 8); |
| 1483 | *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; | 1471 | ptr = pack_hex_byte(ptr, hx); |
| 1484 | hx = hexchars[(brr & 0x00000f00) >> 8]; | 1472 | hx = hex_asc_lo(brr >> 8); |
| 1485 | *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; | 1473 | ptr = pack_hex_byte(ptr, hx); |
| 1486 | hx = hexchars[(brr & 0x000000f0) >> 4]; | 1474 | hx = hex_asc_hi(brr); |
| 1487 | *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; | 1475 | ptr = pack_hex_byte(ptr, hx); |
| 1488 | hx = hexchars[(brr & 0x0000000f)]; | 1476 | hx = hex_asc_lo(brr); |
| 1489 | *ptr++ = hexchars[hx >> 4]; *ptr++ = hexchars[hx & 0xf]; | 1477 | ptr = pack_hex_byte(ptr, hx); |
| 1490 | 1478 | ||
| 1491 | ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0); | 1479 | ptr = mem2hex(crlf, ptr, sizeof(crlf) - 1, 0); |
| 1492 | *ptr = 0; | 1480 | *ptr = 0; |
| @@ -1500,12 +1488,10 @@ void gdbstub(int sigval) | |||
| 1500 | 1488 | ||
| 1501 | /* Send trap type (converted to signal) */ | 1489 | /* Send trap type (converted to signal) */ |
| 1502 | *ptr++ = 'T'; | 1490 | *ptr++ = 'T'; |
| 1503 | *ptr++ = hexchars[sigval >> 4]; | 1491 | ptr = pack_hex_byte(ptr, sigval); |
| 1504 | *ptr++ = hexchars[sigval & 0xf]; | ||
| 1505 | 1492 | ||
| 1506 | /* Send Error PC */ | 1493 | /* Send Error PC */ |
| 1507 | *ptr++ = hexchars[GDB_REG_PC >> 4]; | 1494 | ptr = pack_hex_byte(ptr, GDB_REG_PC); |
| 1508 | *ptr++ = hexchars[GDB_REG_PC & 0xf]; | ||
| 1509 | *ptr++ = ':'; | 1495 | *ptr++ = ':'; |
| 1510 | ptr = mem2hex(&__debug_frame->pc, ptr, 4, 0); | 1496 | ptr = mem2hex(&__debug_frame->pc, ptr, 4, 0); |
| 1511 | *ptr++ = ';'; | 1497 | *ptr++ = ';'; |
| @@ -1513,8 +1499,7 @@ void gdbstub(int sigval) | |||
| 1513 | /* | 1499 | /* |
| 1514 | * Send frame pointer | 1500 | * Send frame pointer |
| 1515 | */ | 1501 | */ |
| 1516 | *ptr++ = hexchars[GDB_REG_FP >> 4]; | 1502 | ptr = pack_hex_byte(ptr, GDB_REG_FP); |
| 1517 | *ptr++ = hexchars[GDB_REG_FP & 0xf]; | ||
| 1518 | *ptr++ = ':'; | 1503 | *ptr++ = ':'; |
| 1519 | ptr = mem2hex(&__debug_frame->fp, ptr, 4, 0); | 1504 | ptr = mem2hex(&__debug_frame->fp, ptr, 4, 0); |
| 1520 | *ptr++ = ';'; | 1505 | *ptr++ = ';'; |
| @@ -1522,8 +1507,7 @@ void gdbstub(int sigval) | |||
| 1522 | /* | 1507 | /* |
| 1523 | * Send stack pointer | 1508 | * Send stack pointer |
| 1524 | */ | 1509 | */ |
| 1525 | *ptr++ = hexchars[GDB_REG_SP >> 4]; | 1510 | ptr = pack_hex_byte(ptr, GDB_REG_SP); |
| 1526 | *ptr++ = hexchars[GDB_REG_SP & 0xf]; | ||
| 1527 | *ptr++ = ':'; | 1511 | *ptr++ = ':'; |
| 1528 | ptr = mem2hex(&__debug_frame->sp, ptr, 4, 0); | 1512 | ptr = mem2hex(&__debug_frame->sp, ptr, 4, 0); |
| 1529 | *ptr++ = ';'; | 1513 | *ptr++ = ';'; |
| @@ -1548,8 +1532,8 @@ void gdbstub(int sigval) | |||
| 1548 | /* request repeat of last signal number */ | 1532 | /* request repeat of last signal number */ |
| 1549 | case '?': | 1533 | case '?': |
| 1550 | output_buffer[0] = 'S'; | 1534 | output_buffer[0] = 'S'; |
| 1551 | output_buffer[1] = hexchars[sigval >> 4]; | 1535 | output_buffer[1] = hex_asc_hi(sigval); |
| 1552 | output_buffer[2] = hexchars[sigval & 0xf]; | 1536 | output_buffer[2] = hex_asc_lo(sigval); |
| 1553 | output_buffer[3] = 0; | 1537 | output_buffer[3] = 0; |
| 1554 | break; | 1538 | break; |
| 1555 | 1539 | ||
| @@ -2059,8 +2043,8 @@ void gdbstub_exit(int status) | |||
| 2059 | } | 2043 | } |
| 2060 | 2044 | ||
| 2061 | gdbstub_tx_char('#'); | 2045 | gdbstub_tx_char('#'); |
| 2062 | gdbstub_tx_char(hexchars[checksum >> 4]); | 2046 | gdbstub_tx_char(hex_asc_hi(checksum)); |
| 2063 | gdbstub_tx_char(hexchars[checksum & 0xf]); | 2047 | gdbstub_tx_char(hex_asc_lo(checksum)); |
| 2064 | 2048 | ||
| 2065 | /* make sure the output is flushed, or else RedBoot might clobber it */ | 2049 | /* make sure the output is flushed, or else RedBoot might clobber it */ |
| 2066 | gdbstub_tx_char('-'); | 2050 | gdbstub_tx_char('-'); |
