Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Don Breazeal <donb@codesourcery.com>
To: Yao Qi <qiyaoltc@gmail.com>, "Breazeal, Don" <Don_Breazeal@mentor.com>
Cc: "Gustavo, Luis" <Luis_Gustavo@mentor.com>,
	"gdb-patches@sourceware.org"	<gdb-patches@sourceware.org>
Subject: Re: [PATCH] Eliminate -var-create error for optzd ptr to struct
Date: Tue, 29 Mar 2016 17:14:00 -0000	[thread overview]
Message-ID: <56FAB7CB.20406@codesourcery.com> (raw)
In-Reply-To: <86r3etsdbh.fsf@gmail.com>

On 3/29/2016 5:01 AM, Yao Qi wrote:
> Don Breazeal <donb@codesourcery.com> writes:
> 
>>>> @@ -1203,9 +1203,10 @@ value_actual_type (struct value *value, int resolve_simple_types,
>>>>         /* If result's target type is TYPE_CODE_STRUCT, proceed to
>>>>   	 fetch its rtti type.  */
>>>>         if ((TYPE_CODE (result) == TYPE_CODE_PTR
>>>> -	  || TYPE_CODE (result) == TYPE_CODE_REF)
>>>> +	   || TYPE_CODE (result) == TYPE_CODE_REF)
>>>
>>> Is this just a formatting change?
>>
>> Yes.  I should have documented that in the ChangeLog.
> 
> If it is just a format change, you can move it to a separate patch, and
> commit it as obvious.  Don't mix format change with your bug fix patch.
> 

Hi Yao,
Here is the patch with the formatting change removed, and with the more
concise patch description posted most recent patchset.
Thanks,
--Don

----
This patch eliminates an error thrown when accessing the value of a
pointer to a structure where the pointer has been optimized out and
'set print object' is 'on'.  The error shows up as the rather ugly
value of the pointer variable in Eclipse.

If 'set print object' is 'on', GDB tries to determine the actual
(derived) type of the object rather than the declared type, which
requires dereferencing the pointer, which in this cases throws an
error because the pointer has been optimized out.

The fix is to simply ignore the 'print object on' setting for
pointers or references to structures when they have been optimized
out.  This means we just get the declared type instead of the actual
type, because in this case that's the best that we can do.

I'm working on setting things in motion for a patch to Eclipse that
recognizes optimized-out pointer-to-struct in this scenario and
prevents any subsequent attempt to dereference it from that end.

Tested on bare-metal powerpc board with Linux x86 host.

gdb/ChangeLog:
2016-03-29  Don Breazeal  <donb@codesourcery.com>

	* gdb/value.c (value_actual_type): Ignore the 'print object
	  on' setting if the object is a pointer to or reference to
	  a structure.

---
 gdb/value.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gdb/value.c b/gdb/value.c
index 738b2b2..95bfdb2 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -1205,7 +1205,8 @@ value_actual_type (struct value *value, int
resolve_simple_types,
       if ((TYPE_CODE (result) == TYPE_CODE_PTR
 	  || TYPE_CODE (result) == TYPE_CODE_REF)
 	  && TYPE_CODE (check_typedef (TYPE_TARGET_TYPE (result)))
-	     == TYPE_CODE_STRUCT)
+	     == TYPE_CODE_STRUCT
+	  && !value_optimized_out (value))
         {
           struct type *real_type;

-- 
1.8.1.1


  reply	other threads:[~2016-03-29 17:14 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1456273154-28629-1-git-send-email-donb@codesourcery.com>
2016-02-24  1:14 ` Luis Machado
2016-02-24 16:31   ` Don Breazeal
2016-02-25 12:22     ` Pedro Alves
2016-03-28 21:33       ` [PATCH v2 0/2] Optzd-out ptr: Error handling improvement Don Breazeal
2016-03-28 21:34         ` [PATCH v2 2/2] Optzd-out ptr: Eliminate -var-create error Don Breazeal
2016-03-28 21:34         ` [PATCH v2 1/2] Optzd-out ptr: New test for error handling Don Breazeal
2016-03-29 11:58           ` Yao Qi
2016-03-29 17:13             ` Don Breazeal
2016-03-30 14:37               ` Yao Qi
2016-04-06 21:34                 ` Don Breazeal
2016-03-29 12:01     ` [PATCH] Eliminate -var-create error for optzd ptr to struct Yao Qi
2016-03-29 17:14       ` Don Breazeal [this message]
2016-03-30 14:35         ` Yao Qi
2016-04-01 16:01           ` Don Breazeal
2016-04-04 10:42             ` Yao Qi
2016-04-04 17:16               ` Don Breazeal
2016-04-04 21:28           ` Don Breazeal
     [not found] <861t6knro9.fsf@gmail.com>
2016-04-05 18:51 ` Don Breazeal
2016-04-05 19:00   ` Pedro Alves
2016-04-05 20:39     ` Don Breazeal
2016-04-06  9:05       ` Yao Qi
2016-04-06 21:41         ` Don Breazeal
2016-04-06 22:24           ` Pedro Alves
2016-04-07 14:12           ` Yao Qi

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=56FAB7CB.20406@codesourcery.com \
    --to=donb@codesourcery.com \
    --cc=Don_Breazeal@mentor.com \
    --cc=Luis_Gustavo@mentor.com \
    --cc=gdb-patches@sourceware.org \
    --cc=qiyaoltc@gmail.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