aboutsummaryrefslogtreecommitdiff
path: root/gdb/p-valprint.c
diff options
context:
space:
mode:
authorPierre Muller <muller@sourceware.org>2009-02-10 00:12:57 +0000
committerPierre Muller <muller@sourceware.org>2009-02-10 00:12:57 +0000
commit581594903a0e952e9976f6f41f12968dd51189ee (patch)
treebe45958e78ef659417b18dd2881c4118e7c6947a /gdb/p-valprint.c
parent669fe67027cc3dda3eac265464a3500430e53cbe (diff)
downloadgdb-581594903a0e952e9976f6f41f12968dd51189ee.zip
gdb-581594903a0e952e9976f6f41f12968dd51189ee.tar.gz
gdb-581594903a0e952e9976f6f41f12968dd51189ee.tar.bz2
2009-02-10 Pierre Muller <muller@ics.u-strasbg.fr>
* p-lang.c (is_pascal_string_type): Fix comment. Determine exact size of char elements for GPC strings. (pascal_printstr): Handle char width of 2 or 4. * p-valprint.c (pascal_val_print): Handle char of width 2 or 4.
Diffstat (limited to 'gdb/p-valprint.c')
-rw-r--r--gdb/p-valprint.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c
index 9b1b7ff..27ae619 100644
--- a/gdb/p-valprint.c
+++ b/gdb/p-valprint.c
@@ -79,7 +79,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
print_spaces_filtered (2 + 2 * recurse, stream);
}
/* For an array of chars, print with string syntax. */
- if (eltlen == 1
+ if ((eltlen == 1 || eltlen == 2 || eltlen == 4)
&& ((TYPE_CODE (elttype) == TYPE_CODE_INT)
|| ((current_language->la_language == language_pascal)
&& (TYPE_CODE (elttype) == TYPE_CODE_CHAR)))
@@ -93,14 +93,15 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
/* Look for a NULL char. */
for (temp_len = 0;
- (valaddr + embedded_offset)[temp_len]
+ extract_unsigned_integer (valaddr + embedded_offset +
+ temp_len * eltlen, eltlen)
&& temp_len < len && temp_len < options->print_max;
temp_len++);
len = temp_len;
}
- LA_PRINT_STRING (stream, valaddr + embedded_offset, len, 1, 0,
- options);
+ LA_PRINT_STRING (stream, valaddr + embedded_offset, len,
+ eltlen, 0, options);
i = len;
}
else
@@ -165,14 +166,17 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
/* For a pointer to char or unsigned char, also print the string
pointed to, unless pointer is null. */
- if (TYPE_LENGTH (elttype) == 1
- && (TYPE_CODE (elttype) == TYPE_CODE_INT
- || TYPE_CODE(elttype) == TYPE_CODE_CHAR)
+ if (((TYPE_LENGTH (elttype) == 1
+ && (TYPE_CODE (elttype) == TYPE_CODE_INT
+ || TYPE_CODE (elttype) == TYPE_CODE_CHAR))
+ || ((TYPE_LENGTH (elttype) == 2 || TYPE_LENGTH (elttype) == 4)
+ && TYPE_CODE (elttype) == TYPE_CODE_CHAR))
&& (options->format == 0 || options->format == 's')
&& addr != 0)
{
/* no wide string yet */
- i = val_print_string (addr, -1, 1, stream, options);
+ i = val_print_string (addr, -1, TYPE_LENGTH (elttype), stream,
+ options);
}
/* also for pointers to pascal strings */
/* Note: this is Free Pascal specific: