diff -u gdb-6.3-orig/gdb/gdbtypes.h gdb-6.3/gdb/gdbtypes.h --- gdb-6.3-orig/gdb/gdbtypes.h 2004-10-01 14:23:09.000000000 +0400 +++ gdb-6.3/gdb/gdbtypes.h 2005-05-31 10:19:42.000000000 +0400 @@ -304,6 +304,12 @@ #define TYPE_FLAG_FIXED_INSTANCE (1 << 15) + +#define TYPE_FLAG_VARIABLE_SIZED_ARRAY (1 << 16) +#define TYPE_VARIABLE_SIZED_ARRAY(t) (TYPE_INSTANCE_FLAGS(t) \ + & TYPE_FLAG_VARIABLE_SIZED_ARRAY) + + /* Array bound type. */ enum array_bound_type { diff -u gdb-6.3-orig/gdb/valprint.c gdb-6.3/gdb/valprint.c --- gdb-6.3-orig/gdb/valprint.c 2004-09-12 20:13:04.000000000 +0400 +++ gdb-6.3/gdb/valprint.c 2005-05-31 11:23:09.000000000 +0400 @@ -774,10 +774,15 @@ elttype = TYPE_TARGET_TYPE (type); eltlen = TYPE_LENGTH (check_typedef (elttype)); - len = TYPE_LENGTH (type) / eltlen; annotate_array_section_begin (i, elttype); + if (TYPE_VARIABLE_SIZED_ARRAY(type)) { + len = *(unsigned int*)valaddr; + valaddr += sizeof(unsigned int); + } else + len = TYPE_LENGTH (type) / eltlen; + for (; i < len && things_printed < print_max; i++) { if (i != 0)