From 7924771e5ddae1b0b9eecea8494d29e00358d562 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Tue, 16 Jun 1998 08:30:47 +0000 Subject: [PATCH] * PR 15693 fix. Wed Jun 10 18:04:35 1998 Frank Ch. Eigler * gdbtypes.c (get_discrete_bounds): Assign unsigned type flag for all-positive enum. (create_set_type): Ditto for all-positive set values. * values.c (unpack_field_as_long): Check for typedef in struct field unpacking. --- gdb/ChangeLog | 8 ++++++++ gdb/gdbtypes.c | 10 ++++++++++ gdb/values.c | 5 ++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 073b583003c..32d0820af65 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -52,6 +52,14 @@ end-sanitize-java * (decode_line_1): Move local variable defs into the block they are used in. (Improves code readability.) +Wed Jun 10 18:04:35 1998 Frank Ch. Eigler + + * gdbtypes.c (get_discrete_bounds): Assign unsigned type flag for + all-positive enum. + (create_set_type): Ditto for all-positive set values. + * values.c (unpack_field_as_long): Check for typedef in struct + field unpacking. + Wed Jun 10 14:06:05 1998 Jason Molenda (crash@bugshack.cygnus.com) * configure.in: Add some tests for gnu-regex.c's benefit. diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 7027cc9f22e..d55a87a0bc7 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -395,6 +395,12 @@ get_discrete_bounds (type, lowp, highp) if (TYPE_FIELD_BITPOS (type, i) > *highp) *highp = TYPE_FIELD_BITPOS (type, i); } + + /* Set unsigned indicator if warranted. */ + if(*lowp >= 0) + { + TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED; + } } else { @@ -519,6 +525,10 @@ create_set_type (result_type, domain_type) = (bit_length + TARGET_CHAR_BIT - 1) / TARGET_CHAR_BIT; } TYPE_FIELD_TYPE (result_type, 0) = domain_type; + + if(low_bound >= 0) + TYPE_FLAGS (result_type) |= TYPE_FLAG_UNSIGNED; + return (result_type); } diff --git a/gdb/values.c b/gdb/values.c index 3d4d45e96da..d7be2b00aff 100644 --- a/gdb/values.c +++ b/gdb/values.c @@ -1180,8 +1180,11 @@ unpack_field_as_long (type, valaddr, fieldno) int bitpos = TYPE_FIELD_BITPOS (type, fieldno); int bitsize = TYPE_FIELD_BITSIZE (type, fieldno); int lsbcount; + struct type *field_type; val = extract_unsigned_integer (valaddr + bitpos / 8, sizeof (val)); + field_type = TYPE_FIELD_TYPE (type, fieldno); + CHECK_TYPEDEF (field_type); /* Extract bits. See comment above. */ @@ -1198,7 +1201,7 @@ unpack_field_as_long (type, valaddr, fieldno) { valmask = (((ULONGEST) 1) << bitsize) - 1; val &= valmask; - if (!TYPE_UNSIGNED (TYPE_FIELD_TYPE (type, fieldno))) + if (!TYPE_UNSIGNED (field_type)) { if (val & (valmask ^ (valmask >> 1))) { -- 2.30.2