Revision a87295e8 gdbstub.c

b/gdbstub.c
963 963

  
964 964
/* Send a gdb syscall request.
965 965
   This accepts limited printf-style format specifiers, specifically:
966
    %x - target_ulong argument printed in hex.
967
    %s - string pointer (target_ulong) and length (int) pair.  */
966
    %x  - target_ulong argument printed in hex.
967
    %lx - 64-bit argument printed in hex.
968
    %s  - string pointer (target_ulong) and length (int) pair.  */
968 969
void gdb_do_syscall(gdb_syscall_complete_cb cb, char *fmt, ...)
969 970
{
970 971
    va_list va;
971 972
    char buf[256];
972 973
    char *p;
973 974
    target_ulong addr;
975
    uint64_t i64;
974 976
    GDBState *s;
975 977

  
976 978
    s = gdb_syscall_state;
......
993 995
                addr = va_arg(va, target_ulong);
994 996
                p += sprintf(p, TARGET_FMT_lx, addr);
995 997
                break;
998
            case 'l':
999
                if (*(fmt++) != 'x')
1000
                    goto bad_format;
1001
                i64 = va_arg(va, uint64_t);
1002
                p += sprintf(p, "%" PRIx64, i64);
1003
                break;
996 1004
            case 's':
997 1005
                addr = va_arg(va, target_ulong);
998 1006
                p += sprintf(p, TARGET_FMT_lx "/%x", addr, va_arg(va, int));
999 1007
                break;
1000 1008
            default:
1009
            bad_format:
1001 1010
                fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
1002 1011
                        fmt - 1);
1003 1012
                break;

Also available in: Unified diff