public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Kevin Buettner <kevinb@redhat.com>
To: Josef Wolf <jw@raven.inka.de>, gdb@sources.redhat.com
Subject: Re: Why malloc() when target code is executed?
Date: Mon, 25 Aug 2003 18:25:00 -0000	[thread overview]
Message-ID: <1030825182531.ZM9704@localhost.localdomain> (raw)
In-Reply-To: Josef Wolf <jw@raven.inka.de> "Why malloc() when target code is executed?" (Aug 22, 10:48pm)

On Aug 22, 10:48pm, Josef Wolf wrote:

> I just noticed that ``print printf("Hello\n")'' call malloc() on the target
> to allocate the memory for the string. AFAICS, this memory never gets freed.
> Is there any reason not to allocate this memory on the stack? This would
> avoid this memory leak. In addition, this would make it possible to use this
> feature on embedded systems which often have either restricted memory or
> even dont have malloc() at all.

For printf(), allocating the string on the stack is (usually) okay. 
This is because printf() doesn't return a pointer to the string nor
does it write the string pointer to some data structure in the
inferior process.  Functions which did either of these could/would end
up with a dangling pointer if the string were to be allocated on the
stack.  OTOH, using malloc() (and never freeing the allocated space)
ensures gdb won't be responsible for the debugged program having a
dangling pointer reference.  I agree that it is not desirable for gdb
to introduce a memory leak in the debugged process, but it's even
worse for gdb to introduce dangling pointer references.

It might be tempting to special case printf() and perhaps several
other well behaved functions so parameter storage is allocated on the
stack instead of being malloc'd.  However, there is nothing preventing
the debugged process from overriding the usual well behaved function
definitions with less well behaved ones.  So, if this code for special
casing a handful of well behaved functions were added to GDB, there'd
need to be a user settable mode indicating such.  The default for such
a mode should be GDB's current behavior.

Kevin

  reply	other threads:[~2003-08-25 18:25 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-22 20:49 Josef Wolf
2003-08-25 18:25 ` Kevin Buettner [this message]
2003-08-25 19:57   ` Josef Wolf
2003-08-25 22:08     ` Andrew Cagney
2003-08-27 16:50   ` David Taylor

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=1030825182531.ZM9704@localhost.localdomain \
    --to=kevinb@redhat.com \
    --cc=gdb@sources.redhat.com \
    --cc=jw@raven.inka.de \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).