Avoid crash with GCC trunk
authorTom Tromey <tromey@adacore.com>
Mon, 17 May 2021 19:07:25 +0000 (13:07 -0600)
committerTom Tromey <tromey@adacore.com>
Mon, 17 May 2021 19:07:25 +0000 (13:07 -0600)
With GCC trunk, gdb.ada/access_to_packed_array.exp causes a GDB crash.
The problem is that ptype tries to resolve a dynamic type.  However,
the inferior is not running, so there are no frames.

This patch updates dwarf2_evaluate_loc_desc::get_frame_base to handle
this situation.

gdb/ChangeLog
2021-05-17  Tom Tromey  <tromey@adacore.com>

* dwarf2/loc.c (dwarf2_evaluate_loc_desc::get_frame_base): Throw
if frame is null.

gdb/ChangeLog
gdb/dwarf2/loc.c

index 39cdb3a50ef8e3b0f09e42f4c3790f54462e2198..4589251f0228cad967194c0e3fba82520abe3506 100644 (file)
@@ -1,3 +1,8 @@
+2021-05-17  Tom Tromey  <tromey@adacore.com>
+
+       * dwarf2/loc.c (dwarf2_evaluate_loc_desc::get_frame_base): Throw
+       if frame is null.
+
 2021-05-17  Tom Tromey  <tromey@adacore.com>
 
        * nat/linux-osdata.c (user_from_uid, time_from_time_t)
index aec50da4b6da9437709f3b06849f4274d978bb02..e816f926696a183a90ae9fba1a1a3680ccf9f276 100644 (file)
@@ -785,6 +785,9 @@ public:
      its length in LENGTH.  */
   void get_frame_base (const gdb_byte **start, size_t * length) override
   {
+    if (frame == nullptr)
+      error (_("frame address is not available."));
+
     /* FIXME: cagney/2003-03-26: This code should be using
        get_frame_base_address(), and then implement a dwarf2 specific
        this_base method.  */