From 576f97700b15b15f404fee452f862b1949cb30de Mon Sep 17 00:00:00 2001 From: Per Bothner Date: Fri, 16 Sep 1994 07:29:44 +0000 Subject: [PATCH] * stabsread.c (read_type): Handle stub types for bitstrings. * stabsread.c (read_array_type): Check for stub domain type using TYPE_FLAG_STUB, not its length. * gdbtypes.c (create_set_type): Handle a stub domain type. --- gdb/ChangeLog | 5 +++++ gdb/gdbtypes.c | 23 +++++++++++------------ gdb/stabsread.c | 11 ++++++----- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 764704ae2d6..27a8e6c7da5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ Fri Sep 16 00:14:40 1994 Per Bothner (bothner@kalessin.cygnus.com) + * stabsread.c (read_type): Handle stub types for bitstrings. + * stabsread.c (read_array_type): Check for stub domain type + using TYPE_FLAG_STUB, not its length. + * gdbtypes.c (create_set_type): Handle a stub domain type. + * ch-exp.y: Get rid of some extra non-terminals, and move their rules into primitive_value. * ch-lang.c (chill_op_print_tab): Add '->'. diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index a87d9a1d4d2..c386a4244b7 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -466,24 +466,23 @@ create_set_type (result_type, domain_type) { result_type = alloc_type (TYPE_OBJFILE (domain_type)); } - domain_type = force_to_range_type (domain_type); TYPE_CODE (result_type) = TYPE_CODE_SET; TYPE_NFIELDS (result_type) = 1; TYPE_FIELDS (result_type) = (struct field *) TYPE_ALLOC (result_type, 1 * sizeof (struct field)); memset (TYPE_FIELDS (result_type), 0, sizeof (struct field)); + + if (! (TYPE_FLAGS (domain_type) & TYPE_FLAG_STUB)) + { + domain_type = force_to_range_type (domain_type); + low_bound = TYPE_LOW_BOUND (domain_type); + high_bound = TYPE_HIGH_BOUND (domain_type); + bit_length = high_bound - low_bound + 1; + TYPE_LENGTH (result_type) + = ((bit_length + TARGET_INT_BIT - 1) / TARGET_INT_BIT) + * TARGET_CHAR_BIT; + } TYPE_FIELD_TYPE (result_type, 0) = domain_type; - low_bound = TYPE_LOW_BOUND (domain_type); - high_bound = TYPE_HIGH_BOUND (domain_type); - bit_length = high_bound - low_bound + 1; - if (bit_length <= TARGET_CHAR_BIT) - TYPE_LENGTH (result_type) = 1; - else if (bit_length <= TARGET_SHORT_BIT) - TYPE_LENGTH (result_type) = TARGET_SHORT_BIT / TARGET_CHAR_BIT; - else - TYPE_LENGTH (result_type) - = ((bit_length + TARGET_INT_BIT - 1) / TARGET_INT_BIT) - * TARGET_CHAR_BIT; return (result_type); } diff --git a/gdb/stabsread.c b/gdb/stabsread.c index fa5c31fa70c..49d36ac5d97 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -1719,6 +1719,11 @@ read_type (pp, objfile) case 'S': type1 = read_type (pp, objfile); type = create_set_type ((struct type*) NULL, type1); + if (TYPE_FLAGS (type1) & TYPE_FLAG_STUB) + { + TYPE_FLAGS (type) |= TYPE_FLAG_TARGET_STUB; + add_undefined_type (type); + } if (is_string) TYPE_CODE (type) = TYPE_CODE_BITSTRING; if (typenums[0] != -1) @@ -2989,12 +2994,8 @@ read_array_type (pp, type, objfile) /* If we have an array whose element type is not yet known, but whose bounds *are* known, record it to be adjusted at the end of the file. */ - /* FIXME: Why check for zero length rather than TYPE_FLAG_STUB? I think - the two have the same effect except that the latter is cleaner and the - former would be wrong for types which really are zero-length (if we - have any). */ - if (TYPE_LENGTH (element_type) == 0 && !adjustable) + if ((TYPE_FLAGS (element_type) & TYPE_FLAG_STUB) && !adjustable) { TYPE_FLAGS (type) |= TYPE_FLAG_TARGET_STUB; add_undefined_type (type); -- 2.30.2