From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Keven Boell <keven.boell@intel.com>
Cc: gdb-patches@sourceware.org, sanimir.agovic@intel.com
Subject: [patch 2/2] Re: Crash regression(?) printing Fortran strings in bt [Re: [V2 00/23] Fortran dynamic array support]
Date: Fri, 01 Aug 2014 21:05:00 -0000 [thread overview]
Message-ID: <20140801210437.GA26082@host2.jankratochvil.net> (raw)
In-Reply-To: <20140729183023.GA17443@host2.jankratochvil.net>
[-- Attachment #1: Type: text/plain, Size: 329 bytes --]
Hi Keven,
in this patch I have tried to implement some sanity checking so that there
cannot happen what happened.
Unfortunately it has many regression in normal testcases, it would need to be
tuned more. But IMO it would be worth to implement some such checks, it is
easy to forget calling some dynamic-resolve.
Thanks,
Jan
[-- Attachment #2: vlastringsanityonly.patch --]
[-- Type: text/plain, Size: 3668 bytes --]
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index fbf13ce..145445f 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -14272,8 +14272,8 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
}
else
{
- TYPE_HIGH_BOUND (range_type) = DW_UNSND (attr);
TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST;
+ TYPE_HIGH_BOUND (range_type) = DW_UNSND (attr);
}
}
else
@@ -14283,13 +14283,13 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
attr = dwarf2_attr (die, DW_AT_byte_size, cu);
if (attr)
{
- TYPE_HIGH_BOUND (range_type) = DW_UNSND (attr);
TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST;
+ TYPE_HIGH_BOUND (range_type) = DW_UNSND (attr);
}
else
{
- TYPE_HIGH_BOUND (range_type) = 1;
TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST;
+ TYPE_HIGH_BOUND (range_type) = 1;
}
}
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 53cae2c..cf7ac26 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -2001,6 +2002,16 @@ resolve_dynamic_type (struct type *type, CORE_ADDR addr)
return resolve_dynamic_type_internal (type, addr, 1);
}
+/* See gdbtypes.h */
+
+LONGEST *
+dynamic_prop_get_const_val_ptr (struct dynamic_prop *prop)
+{
+ gdb_assert (prop->kind == PROP_CONST);
+
+ return &prop->data.const_val;
+}
+
/* Find the real type of TYPE. This function returns the real type,
after removing all layers of typedefs, and completing opaque or stub
types. Completion changes the TYPE argument, but stripping of
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 436edf8..78c8003 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -1212,9 +1212,9 @@ extern void allocate_gnat_aux_type (struct type *);
#define TYPE_INDEX_TYPE(type) TYPE_FIELD_TYPE (type, 0)
#define TYPE_RANGE_DATA(thistype) TYPE_MAIN_TYPE(thistype)->flds_bnds.bounds
#define TYPE_LOW_BOUND(range_type) \
- TYPE_RANGE_DATA(range_type)->low.data.const_val
+ (*dynamic_prop_get_const_val_ptr (&TYPE_RANGE_DATA(range_type)->low))
#define TYPE_HIGH_BOUND(range_type) \
- TYPE_RANGE_DATA(range_type)->high.data.const_val
+ (*dynamic_prop_get_const_val_ptr (&TYPE_RANGE_DATA(range_type)->high))
#define TYPE_LOW_BOUND_UNDEFINED(range_type) \
(TYPE_RANGE_DATA(range_type)->low.kind == PROP_UNDEFINED)
#define TYPE_HIGH_BOUND_UNDEFINED(range_type) \
@@ -1224,13 +1224,7 @@ extern void allocate_gnat_aux_type (struct type *);
#define TYPE_LOW_BOUND_KIND(range_type) \
TYPE_RANGE_DATA(range_type)->low.kind
#define TYPE_BYTE_STRIDE(range_type) \
- TYPE_RANGE_DATA(range_type)->stride.data.const_val
-#define TYPE_BYTE_STRIDE_BLOCK(range_type) \
- TYPE_RANGE_DATA(range_type)->stride.data.locexpr
-#define TYPE_BYTE_STRIDE_LOCLIST(range_type) \
- TYPE_RANGE_DATA(range_type)->stride.data.loclist
-#define TYPE_BYTE_STRIDE_KIND(range_type) \
- TYPE_RANGE_DATA(range_type)->stride.kind
+ (*dynamic_prop_get_const_val_ptr (&TYPE_RANGE_DATA(range_type)->stride))
/* Attribute accessors for the type data location. */
@@ -1767,6 +1761,10 @@ extern struct type *resolve_dynamic_type (struct type *type, CORE_ADDR addr);
/* * Predicate if the type has dynamic values, which are not resolved yet. */
extern int is_dynamic_type (struct type *type);
+/* Fetch const_val reference from PROP. It is never dynamically resolved,
+ the correct KIND is checked by gdb_assert. */
+extern LONGEST *dynamic_prop_get_const_val_ptr (struct dynamic_prop *prop);
+
extern struct type *check_typedef (struct type *);
#define CHECK_TYPEDEF(TYPE) \
prev parent reply other threads:[~2014-08-01 21:05 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-11 9:21 [V2 00/23] Fortran dynamic array support Keven Boell
2014-07-11 9:21 ` [V2 05/23] vla: make field selection work with vla Keven Boell
2014-07-11 9:21 ` [V2 16/23] test: correct ptype of dynamic arrays in Fortran Keven Boell
2014-07-11 9:21 ` [V2 01/23] dwarf: add dwarf3 DW_OP_push_object_address opcode Keven Boell
2014-07-11 9:21 ` [V2 09/23] vla: changed string length semantic Keven Boell
2014-07-18 15:38 ` Jan Kratochvil
2014-07-21 13:23 ` Keven Boell
2014-07-21 19:54 ` Jan Kratochvil
2014-07-22 15:27 ` Keven Boell
2014-07-11 9:21 ` [V2 08/23] vla: get dynamic array corner cases to work Keven Boell
2014-07-11 9:21 ` [V2 21/23] test: basic MI test for the dynamic array support Keven Boell
2014-07-11 9:21 ` [V2 12/23] vla: add NEWS entry for " Keven Boell
2014-07-11 9:58 ` Eli Zaretskii
2014-07-11 9:21 ` [V2 19/23] test: accessing dynamic array history values Keven Boell
2014-07-11 9:22 ` [V2 11/23] vla: add stride support to fortran arrays Keven Boell
2014-07-11 9:22 ` [V2 22/23] test: test sizeof for dynamic " Keven Boell
2014-07-11 9:22 ` [V2 15/23] test: dynamic arrays passed to subroutines Keven Boell
2014-08-01 20:11 ` Jan Kratochvil
2014-08-07 6:58 ` Keven Boell
2014-08-12 6:56 ` Keven Boell
2014-07-11 9:22 ` [V2 13/23] test: basic tests for dynamic array evaluations in Fortran Keven Boell
2014-07-11 9:22 ` [V2 18/23] test: dynamic arrays passed to functions Keven Boell
2014-07-11 9:22 ` [V2 07/23] vla: use value constructor instead of raw-buffer manipulation Keven Boell
2014-07-11 9:22 ` [V2 20/23] test: dynamic string evaluations Keven Boell
2014-07-11 9:22 ` [V2 17/23] test: evaluating allocation/association status Keven Boell
2014-07-11 9:22 ` [V2 23/23] test: stride support for dynamic arrays Keven Boell
2014-07-11 9:22 ` [V2 03/23] vla: introduce allocated/associated flags Keven Boell
2014-07-11 9:22 ` [V2 14/23] test: evaluate dynamic arrays using Fortran primitives Keven Boell
2014-07-11 9:22 ` [V2 02/23] dwarf: add DW_AT_data_location support Keven Boell
2014-07-11 9:22 ` [V2 06/23] vla: reconstruct value to compute bounds of target type Keven Boell
2014-07-11 9:22 ` [V2 04/23] vla: make dynamic fortran arrays functional Keven Boell
2014-07-11 9:28 ` [V2 10/23] vla: get Fortran dynamic strings working Keven Boell
2014-07-11 16:23 ` [V2 00/23] Fortran dynamic array support Jan Kratochvil
2014-07-16 16:19 ` Keven Boell
2014-07-16 16:33 ` Jan Kratochvil
2014-07-18 12:33 ` Keven Boell
2014-07-18 15:19 ` Jan Kratochvil
2014-07-29 19:35 ` Crash regression(?) printing Fortran strings in bt [Re: [V2 00/23] Fortran dynamic array support] Jan Kratochvil
2014-07-29 20:51 ` Jan Kratochvil
2014-08-01 7:20 ` Keven Boell
2014-08-01 7:22 ` Jan Kratochvil
2014-08-01 21:02 ` [patch 1/2] " Jan Kratochvil
2014-08-12 6:56 ` Keven Boell
2014-08-12 21:55 ` Jan Kratochvil
2014-08-14 20:03 ` Jan Kratochvil
2014-08-20 14:09 ` Keven Boell
2014-08-20 18:24 ` Jan Kratochvil
2014-08-21 7:27 ` Keven Boell
2014-08-21 14:29 ` Jan Kratochvil
2014-08-22 7:20 ` Jan Kratochvil
2014-08-01 21:05 ` Jan Kratochvil [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140801210437.GA26082@host2.jankratochvil.net \
--to=jan.kratochvil@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=keven.boell@intel.com \
--cc=sanimir.agovic@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox