aboutsummaryrefslogtreecommitdiff
path: root/gdb/ChangeLog
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@adacore.com>2014-07-08 08:15:35 -0700
committerJoel Brobecker <brobecker@adacore.com>2014-08-01 07:44:27 -0700
commit6908c50982bc70ff9e035028b3bc300f80fed7e4 (patch)
tree472f5c1cbaa444198dabd8b7163824169ced6cb3 /gdb/ChangeLog
parent53e8f97d571973c3bfb04ef3d9a358ea4a0e8e62 (diff)
downloadbinutils-6908c50982bc70ff9e035028b3bc300f80fed7e4.zip
binutils-6908c50982bc70ff9e035028b3bc300f80fed7e4.tar.gz
binutils-6908c50982bc70ff9e035028b3bc300f80fed7e4.tar.bz2
Handle variable-sized fields in the interior of structure type
In Ada, variable-sized field can be located at any position of a structure. Consider for instance the following declarations: Dyn_Size : Integer := 1; type Table is array (Positive range <>) of Integer; type Inner is record T1 : Table (1 .. Dyn_Size) := (others => 1); T2 : Table (1 .. Dyn_Size) := (others => 2); end record; type Inner_Array is array (1 .. 2) of Inner; type Outer is record I0 : Integer := 0; A1 : Inner_Array; Marker : Integer := 16#01020304#; end record; Rt : Outer; What this does is declare a variable "Rt" of type Outer, which contains 3 fields where the second (A1) is of type Inner_Array. type Inner_Array is an array with 2 elements of type Inner. Because type Inner contains two arrays whose upper bound depend on a variable, the size of the array, and therefore the size of type Inner is dynamic, thus making field A1 a dynamically-size field. When trying to print the value of Rt, we hit the following limitation: (gdb) print rt Attempt to resolve a variably-sized type which appears in the interior of a structure type The limitation was somewhat making sense in C, but needs to be lifted for Ada. This patch mostly lifts that limitation. As a result of this patch, the type length computation had to be reworked a little bit. gdb/ChangeLog: * gdbtypes.c (resolve_dynamic_struct): Do not generate an error if detecting a variable-sized field that is not the last field. Fix struct type length computation. gdb/testsuite/ChangeLog: * gdb.base/vla-datatypes.c (vla_factory): Add new variable inner_vla_struct_object_size. * gdb.base/vla-datatypes.exp: Adjust last test, and mark it as xfail.
Diffstat (limited to 'gdb/ChangeLog')
-rw-r--r--gdb/ChangeLog6
1 files changed, 6 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2d50d35..af340f8 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2014-08-01 Joel Brobecker <brobecker@adacore.com>
+ * gdbtypes.c (resolve_dynamic_struct): Do not generate an error
+ if detecting a variable-sized field that is not the last field.
+ Fix struct type length computation.
+
+2014-08-01 Joel Brobecker <brobecker@adacore.com>
+
* amd64-windows-tdep.c (amd64_windows_frame_decode_insns):
Add debug trace.