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: FYI: [Ada] Rework ada_value_primitive_packed_val


> Looking at the code, I noticed the newly added casts, and thought of giving
> it a try at eliminating them.  See patches below.  WDYT?

They look good, thanks for doing that!

> >From b58eef432cc9705a3e95d2cf91b0f64ae102f2e1 Mon Sep 17 00:00:00 2001
> From: Pedro Alves <palves@redhat.com>
> Date: Sat, 10 Oct 2015 14:31:41 +0100
> Subject: [PATCH 1/2] ada-lang.c: malloc/alloca casts for C++
> 
> gdb/ChangeLog:
> 2015-10-10  Pedro Alves  <palves@redhat.com>
> 
> 	* ada-lang.c (ada_value_primitive_packed_val): Add casts to malloc
> 	and alloca calls.
> ---
>  gdb/ada-lang.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
> index 97f0c49..6d1998a 100644
> --- a/gdb/ada-lang.c
> +++ b/gdb/ada-lang.c
> @@ -2550,7 +2550,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
>  	 we do, is unpack the data into a byte-aligned buffer, and then
>  	 use that buffer as our object's value for resolving the type.  */
>        staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
> -      staging = malloc (staging_len);
> +      staging = (gdb_byte *) malloc (staging_len);
>        make_cleanup (xfree, staging);
>  
>        ada_unpack_from_contents (src, bit_offset, bit_size,
> @@ -2581,7 +2581,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
>        int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
>  
>        v = value_at (type, value_address (obj) + offset);
> -      src = alloca (src_len);
> +      src = (gdb_byte *) alloca (src_len);
>        read_memory (value_address (v), src, src_len);
>      }
>    else
> -- 
> 1.9.3
> 

> >From be61a6e02fc3dce50f4ce16faa3b8a458d2a451a Mon Sep 17 00:00:00 2001
> From: Pedro Alves <palves@redhat.com>
> Date: Sat, 10 Oct 2015 13:53:47 +0100
> Subject: [PATCH 2/2] ada-lang.c:ada_value_primitive_packed_val: const
>  correctness
> 
> gdb/ChangeLog:
> 2015-10-10  Pedro Alves  <palves@redhat.com>
> 
> 	* ada-lang.c (ada_value_primitive_packed_val): Constify
> 	locals.  Use value_contents_writeable.  Remove casts.
> ---
>  gdb/ada-lang.c | 18 ++++++++++--------
>  1 file changed, 10 insertions(+), 8 deletions(-)
> 
> diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
> index 6d1998a..383db99 100644
> --- a/gdb/ada-lang.c
> +++ b/gdb/ada-lang.c
> @@ -2525,7 +2525,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
>                                  struct type *type)
>  {
>    struct value *v;
> -  gdb_byte *src;                /* First byte containing data to unpack */
> +  const gdb_byte *src;                /* First byte containing data to unpack */
>    gdb_byte *unpacked;
>    const int is_scalar = is_scalar_type (type);
>    const int is_big_endian = gdbarch_bits_big_endian (get_type_arch (type));
> @@ -2536,9 +2536,9 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
>    type = ada_check_typedef (type);
>  
>    if (obj == NULL)
> -    src = (gdb_byte *) valaddr + offset;
> +    src = valaddr + offset;
>    else
> -    src = (gdb_byte *) value_contents (obj) + offset;
> +    src = value_contents (obj) + offset;
>  
>    if (is_dynamic_type (type))
>      {
> @@ -2574,20 +2574,22 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
>    if (obj == NULL)
>      {
>        v = allocate_value (type);
> -      src = (gdb_byte *) valaddr + offset;
> +      src = valaddr + offset;
>      }
>    else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
>      {
>        int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
> +      gdb_byte *buf;
>  
>        v = value_at (type, value_address (obj) + offset);
> -      src = (gdb_byte *) alloca (src_len);
> -      read_memory (value_address (v), src, src_len);
> +      buf = (gdb_byte *) alloca (src_len);
> +      read_memory (value_address (v), buf, src_len);
> +      src = buf;
>      }
>    else
>      {
>        v = allocate_value (type);
> -      src = (gdb_byte *) value_contents (obj) + offset;
> +      src = value_contents (obj) + offset;
>      }
>  
>    if (obj != NULL)
> @@ -2610,7 +2612,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
>      }
>    else
>      set_value_bitsize (v, bit_size);
> -  unpacked = (gdb_byte *) value_contents (v);
> +  unpacked = value_contents_writeable (v);
>  
>    if (bit_size == 0)
>      {
> -- 
> 1.9.3
> 


-- 
Joel


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