--- printcmd.c | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) --- a/printcmd.c +++ b/printcmd.c @@ -2343,32 +2343,37 @@ ui_printf (char *arg, struct ui_file *st switch (argclass[i]) { case string_arg: - { - gdb_byte *str; - CORE_ADDR tem; - int j; + if (TYPE_CODE (check_typedef (value_type (val_args[i]))) + == TYPE_CODE_ARRAY) + fprintf_filtered (stream, current_substring, + (char *) value_contents (val_args[i])); + else + { + gdb_byte *str; + CORE_ADDR tem; + int j; - tem = value_as_address (val_args[i]); + tem = value_as_address (val_args[i]); - /* This is a %s argument. Find the length of the string. */ - for (j = 0;; j++) - { - gdb_byte c; + /* This is a %s argument. Find the length of the string. */ + for (j = 0;; j++) + { + gdb_byte c; - QUIT; - read_memory (tem + j, &c, 1); - if (c == 0) - break; - } + QUIT; + read_memory (tem + j, &c, 1); + if (c == 0) + break; + } - /* Copy the string contents into a string inside GDB. */ - str = (gdb_byte *) alloca (j + 1); - if (j != 0) - read_memory (tem, str, j); - str[j] = 0; + /* Copy the string contents into a string inside GDB. */ + str = (gdb_byte *) alloca (j + 1); + if (j != 0) + read_memory (tem, str, j); + str[j] = 0; - fprintf_filtered (stream, current_substring, (char *) str); - } + fprintf_filtered (stream, current_substring, (char *) str); + } break; case wide_string_arg: {