Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Ross Morley <ross@tensilica.com>
To: Nick Roberts <nickrob@snap.net.nz>
Cc: gdb@sources.redhat.com
Subject: Re: -var-create on invalid expression causes seg. fault
Date: Sun, 20 Feb 2005 17:44:00 -0000	[thread overview]
Message-ID: <42184BBA.6030007@tensilica.com> (raw)
In-Reply-To: <16919.48311.476960.352611@farnswood.snap.net.nz>

Thanks for your input Nick, but I don't think it's what I need.

I already know exactly where the problem is (I debugged it under gdb).
What I don't know is the right way to fix it.
Also I believe this bug exists in 6.3 because the offending code is
the same, though I haven't tried to reproduce it there.

I should have mentioned that a seg. fault does not always immediately
result. It just depends how the freed memory is used after it's freed.
If it's allocated again and its new owner alters the location that was
var->value to contain 0 or some other bad address, the seg. fault will
occur.  Otherwise the problem may lurk for a long time and show up
later in some obscure way or not at all. So it's a bit hard to reproduce
the seg. fault, but if you read my post and run it under gdb you should
easily be able to verify that a pointer to freed memory is dereferenced.

I'm hoping someone who knows the internals of MI variables can suggest
a good fix that won't break something else. It's not as simple as
clearing that hanging pointer... that will just cause a seg. fault
for sure when the pointer is dereferenced. If no one knows, I'll
probably just have to dive in and educate myself.

Ross


Nick Roberts wrote:

>>-var-create on an expression that's invalid (eg. "(*1)")
>>creates a variable and retains a ptr in var->value. That
>>gets freed by free_all_values() next command. Later a
>>-var-update or -var-evaluate-expression on that variable
>>dereferences the freed memory, causing a seg. fault.
>>    
>>
>
>Since you have 5.2.1 based sources, you could run it under gdb and the
>backtrace should show you where the problem occurs e.g. in the directory of
>your source, somthing like:
>
>/usr/bin/gdb ./gdb
>...
>(top-gdb) cd ~/
>(top-gdb) run -i=mi myprog
>...
>(gdb)
>-var-create - * *1
>&"Cannot access memory at address 0x1\n"
>^done,name="var1",numchild="0",type="int"
>(gdb) 
>-var-update *
>&"Cannot access memory at address 0x1\n"
>Segmentation fault
>(top-gdb) bt
>...
>
>  
>
>>I looked at the GDB 6.3 source and it seems to be the same.
>>    
>>
>
>  
>
>>Now why would anyone try to evaluate *1? It's some tool that
>>uses MI, one of our customers reported. I'm not clear on why
>>GDB even creates the variable in this case, but it does.
>>GDB should report an error, not crash.
>>    
>>
>
>GDB in CVS doesn't crash although it does allow a variable object to be set at
>a nonsensical address. Perhaps this behaviour should be changed. However, I
>don't think people on this list will be generally interested in debugging old
>versions of GDB.
>
>
>Nick
>
>  
>



  reply	other threads:[~2005-02-20  8:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-19 23:10 Nick Roberts
2005-02-20 17:44 ` Ross Morley [this message]
2005-02-23 16:23   ` Daniel Jacobowitz
2005-02-24  3:23     ` Ross Morley
2005-02-24  6:54       ` Ross Morley
2005-02-25 11:29     ` Nick Roberts
  -- strict thread matches above, loose matches on Subject: below --
2005-02-19  8:33 Ross Morley

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=42184BBA.6030007@tensilica.com \
    --to=ross@tensilica.com \
    --cc=gdb@sources.redhat.com \
    --cc=nickrob@snap.net.nz \
    /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