This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [V2 09/23] vla: changed string length semantic.


Hi Keven,

the regression discussed in
	Re: [V2 00/23] Fortran dynamic array support
	https://sourceware.org/ml/gdb-patches/2014-07/msg00278.html

is IMO here:

On Fri, 11 Jul 2014 11:21:21 +0200, Keven Boell wrote:
> @@ -14590,8 +14680,26 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
>  	  baton = obstack_alloc (obstack, sizeof (*baton));
>  	  baton->referenced_type = die_type (target_die, target_cu);
>  	  baton->locexpr.per_cu = cu->per_cu;
> -	  baton->locexpr.size = DW_BLOCK (target_attr)->size;
> -	  baton->locexpr.data = DW_BLOCK (target_attr)->data;
> +
> +	  if (additional_data != NULL && additional_data_size > 0)
> +	    {
> +	      gdb_byte *data;
> +
> +	      data = obstack_alloc (&cu->objfile->objfile_obstack,
> +	              DW_BLOCK (attr)->size + additional_data_size);
> +	      memcpy (data, DW_BLOCK (attr)->data, DW_BLOCK (attr)->size);
> +	      memcpy (data + DW_BLOCK (attr)->size,
> +	              additional_data, additional_data_size);
> +
> +	      baton->locexpr.data = data;
> +	      baton->locexpr.size = DW_BLOCK (attr)->size + additional_data_size;
> +	    }
> +	  else
> +	    {
> +	      baton->locexpr.data = DW_BLOCK (attr)->data;
> +	      baton->locexpr.size = DW_BLOCK (attr)->size;
> +	    }
> +
>  	  prop->data.baton = baton;
>  	  prop->kind = PROP_LOCEXPR;
>  	  gdb_assert (prop->data.baton != NULL);

it was correctly using 'target_attr' but now it uses 'attr' instead.

The gdb.ada/ regression gets fixed for me by the attached patch.


Jan
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index e4f5240..f3e3f56 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -14684,18 +14684,20 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
 	      gdb_byte *data;
 
 	      data = obstack_alloc (&cu->objfile->objfile_obstack,
-	              DW_BLOCK (attr)->size + additional_data_size);
-	      memcpy (data, DW_BLOCK (attr)->data, DW_BLOCK (attr)->size);
-	      memcpy (data + DW_BLOCK (attr)->size,
+		      DW_BLOCK (target_attr)->size + additional_data_size);
+	      memcpy (data, DW_BLOCK (target_attr)->data,
+		      DW_BLOCK (target_attr)->size);
+	      memcpy (data + DW_BLOCK (target_attr)->size,
 	              additional_data, additional_data_size);
 
 	      baton->locexpr.data = data;
-	      baton->locexpr.size = DW_BLOCK (attr)->size + additional_data_size;
+	      baton->locexpr.size = (DW_BLOCK (target_attr)->size
+				     + additional_data_size);
 	    }
 	  else
 	    {
-	      baton->locexpr.data = DW_BLOCK (attr)->data;
-	      baton->locexpr.size = DW_BLOCK (attr)->size;
+	      baton->locexpr.data = DW_BLOCK (target_attr)->data;
+	      baton->locexpr.size = DW_BLOCK (target_attr)->size;
 	    }
 
 	  prop->data.baton = baton;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]