mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-16 12:24:19 +08:00
2002-05-02 Pierre Muller <muller@ics.u-strasbg.fr>
* p-lang.h (is_pascal_string_type): Declaration changed, new sixth argument of type char ** added. * p-lang.c (is_pascal_string_type): Implementation changed. Args length_pos, length_size, string_pos, char_size can now be NULL. New argument arrayname set to the field name of the char array. Return value set to char array field index plus one. * p-valprint.c (pascal_val_print): Adapt to new declaration of is_pascal_string_type function.
This commit is contained in:
@ -1,3 +1,15 @@
|
|||||||
|
2002-05-02 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||||
|
|
||||||
|
* p-lang.h (is_pascal_string_type): Declaration changed,
|
||||||
|
new sixth argument of type char ** added.
|
||||||
|
* p-lang.c (is_pascal_string_type): Implementation
|
||||||
|
changed. Args length_pos, length_size, string_pos, char_size
|
||||||
|
can now be NULL. New argument arrayname set to the field
|
||||||
|
name of the char array. Return value set to char array
|
||||||
|
field index plus one.
|
||||||
|
* p-valprint.c (pascal_val_print): Adapt to new declaration of
|
||||||
|
is_pascal_string_type function.
|
||||||
|
|
||||||
2002-05-02 Andrew Cagney <cagney@redhat.com>
|
2002-05-02 Andrew Cagney <cagney@redhat.com>
|
||||||
|
|
||||||
* gdbarch.sh (gdbarch_update_p): Revert 2002-05-02 Andrew Cagney
|
* gdbarch.sh (gdbarch_update_p): Revert 2002-05-02 Andrew Cagney
|
||||||
|
35
gdb/p-lang.c
35
gdb/p-lang.c
@ -44,7 +44,8 @@ extern void _initialize_pascal_language (void);
|
|||||||
but this does not happen for Free Pascal nor for GPC. */
|
but this does not happen for Free Pascal nor for GPC. */
|
||||||
int
|
int
|
||||||
is_pascal_string_type (struct type *type,int *length_pos,
|
is_pascal_string_type (struct type *type,int *length_pos,
|
||||||
int * length_size, int *string_pos, int *char_size)
|
int *length_size, int *string_pos, int *char_size,
|
||||||
|
char **arrayname)
|
||||||
{
|
{
|
||||||
if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
|
if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
|
||||||
{
|
{
|
||||||
@ -54,11 +55,17 @@ is_pascal_string_type (struct type *type,int *length_pos,
|
|||||||
&& strcmp (TYPE_FIELDS (type)[0].name, "length") == 0
|
&& strcmp (TYPE_FIELDS (type)[0].name, "length") == 0
|
||||||
&& strcmp (TYPE_FIELDS (type)[1].name, "st") == 0)
|
&& strcmp (TYPE_FIELDS (type)[1].name, "st") == 0)
|
||||||
{
|
{
|
||||||
*length_pos = TYPE_FIELD_BITPOS (type, 0) / TARGET_CHAR_BIT;
|
if (length_pos)
|
||||||
*length_size = TYPE_FIELD_TYPE (type, 0)->length;
|
*length_pos = TYPE_FIELD_BITPOS (type, 0) / TARGET_CHAR_BIT;
|
||||||
*string_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT;
|
if (length_size)
|
||||||
*char_size = 1;
|
*length_size = TYPE_FIELD_TYPE (type, 0)->length;
|
||||||
return 1;
|
if (string_pos)
|
||||||
|
*string_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT;
|
||||||
|
if (char_size)
|
||||||
|
*char_size = 1;
|
||||||
|
if (arrayname)
|
||||||
|
*arrayname = TYPE_FIELDS (type)[1].name;
|
||||||
|
return 2;
|
||||||
};
|
};
|
||||||
/* GNU pascal strings. */
|
/* GNU pascal strings. */
|
||||||
/* Three fields: Capacity, length and schema$ or _p_schema. */
|
/* Three fields: Capacity, length and schema$ or _p_schema. */
|
||||||
@ -66,12 +73,18 @@ is_pascal_string_type (struct type *type,int *length_pos,
|
|||||||
&& strcmp (TYPE_FIELDS (type)[0].name, "Capacity") == 0
|
&& strcmp (TYPE_FIELDS (type)[0].name, "Capacity") == 0
|
||||||
&& strcmp (TYPE_FIELDS (type)[1].name, "length") == 0)
|
&& strcmp (TYPE_FIELDS (type)[1].name, "length") == 0)
|
||||||
{
|
{
|
||||||
*length_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT;
|
if (length_pos)
|
||||||
*length_size = TYPE_FIELD_TYPE (type, 1)->length;
|
*length_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT;
|
||||||
*string_pos = TYPE_FIELD_BITPOS (type, 2) / TARGET_CHAR_BIT;
|
if (length_size)
|
||||||
|
*length_size = TYPE_FIELD_TYPE (type, 1)->length;
|
||||||
|
if (string_pos)
|
||||||
|
*string_pos = TYPE_FIELD_BITPOS (type, 2) / TARGET_CHAR_BIT;
|
||||||
/* FIXME: how can I detect wide chars in GPC ?? */
|
/* FIXME: how can I detect wide chars in GPC ?? */
|
||||||
*char_size = 1;
|
if (char_size)
|
||||||
return 1;
|
*char_size = 1;
|
||||||
|
if (arrayname)
|
||||||
|
*arrayname = TYPE_FIELDS (type)[2].name;
|
||||||
|
return 3;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -38,7 +38,8 @@ extern void pascal_type_print_method_args (char *, char *,
|
|||||||
|
|
||||||
/* These are in p-lang.c: */
|
/* These are in p-lang.c: */
|
||||||
|
|
||||||
extern int is_pascal_string_type (struct type *, int *, int *, int *, int*);
|
extern int
|
||||||
|
is_pascal_string_type (struct type *, int *, int *, int *, int *, char **);
|
||||||
|
|
||||||
extern void pascal_printchar (int, struct ui_file *);
|
extern void pascal_printchar (int, struct ui_file *);
|
||||||
|
|
||||||
|
@ -190,8 +190,8 @@ pascal_val_print (struct type *type, char *valaddr, int embedded_offset,
|
|||||||
as GDB does not recognize stabs pascal strings
|
as GDB does not recognize stabs pascal strings
|
||||||
Pascal strings are mapped to records
|
Pascal strings are mapped to records
|
||||||
with lowercase names PM */
|
with lowercase names PM */
|
||||||
if (is_pascal_string_type (elttype, &length_pos,
|
if (is_pascal_string_type (elttype, &length_pos, &length_size,
|
||||||
&length_size, &string_pos, &char_size)
|
&string_pos, &char_size, NULL)
|
||||||
&& addr != 0)
|
&& addr != 0)
|
||||||
{
|
{
|
||||||
ULONGEST string_length;
|
ULONGEST string_length;
|
||||||
@ -320,7 +320,7 @@ pascal_val_print (struct type *type, char *valaddr, int embedded_offset,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (is_pascal_string_type (type, &length_pos, &length_size,
|
if (is_pascal_string_type (type, &length_pos, &length_size,
|
||||||
&string_pos, &char_size))
|
&string_pos, &char_size, NULL))
|
||||||
{
|
{
|
||||||
len = extract_unsigned_integer (valaddr + embedded_offset + length_pos, length_size);
|
len = extract_unsigned_integer (valaddr + embedded_offset + length_pos, length_size);
|
||||||
LA_PRINT_STRING (stream, valaddr + embedded_offset + string_pos, len, char_size, 0);
|
LA_PRINT_STRING (stream, valaddr + embedded_offset + string_pos, len, char_size, 0);
|
||||||
|
Reference in New Issue
Block a user