From: Michael Snyder <msnyder@redhat.com>
To: gdb-patches@sources.redhat.com, rda@sources.redhat.com,
binutils@sources.redhat.com, Andrew Cagney <cagney@gnu.org>
Subject: [RFA] rda/samples: improve memory allocation
Date: Fri, 09 Jul 2004 21:39:00 -0000 [thread overview]
Message-ID: <40EF10A8.5060403@redhat.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 173 bytes --]
Two problems with existing code:
1) Grows the simulated memory one byte at a time, and
2) If target_mem.base ever moves down, doesn't compensate
by moving the contents up.
[-- Attachment #2: diff5 --]
[-- Type: text/plain, Size: 2499 bytes --]
2004-07-09 Michael Snyder <msnyder@redhat.com>
* samples/demo-target.c (demo_set_thread_mem): Allocate new
simulated memory in hunks, rather than one byte at a time.
If target_mem.base moves down, copy contents up.
Index: demo-target.c
===================================================================
RCS file: /cvs/cvsfiles/devo/rda/samples/demo-target.c,v
retrieving revision 1.19
diff -p -r1.19 demo-target.c
*** demo-target.c 21 Aug 2002 22:43:14 -0000 1.19
--- demo-target.c 9 Jul 2004 21:30:22 -0000
*************** demo_get_mem (struct gdbserv* serv,
*** 385,390 ****
--- 385,393 ----
return n;
}
+ #define ALLOC_UNIT 0x1000;
+ #define alloc_roundup(LEN) ((LEN / ALLOC_UNIT) + ALLOC_UNIT)
+
static long
demo_set_thread_mem (struct gdbserv *serv,
*************** demo_set_thread_mem (struct gdbserv *ser
*** 398,420 ****
gdbserv_reg_to_ulong (serv, addr, &request_base);
if (target_mem.len == 0)
{
! target_mem.buf = malloc (len);
! target_mem.len = len;
! gdbserv_reg_to_ulong (serv, addr, &target_mem.base);
}
else
{
if (request_base < target_mem.base)
{
! target_mem.len += target_mem.base - request_base;
target_mem.base = request_base;
target_mem.buf = realloc (target_mem.buf, target_mem.len);
}
if (request_base + len >
target_mem.base + target_mem.len)
{
! target_mem.len +=
! (request_base + len) - (target_mem.base + target_mem.len);
target_mem.buf = realloc (target_mem.buf, target_mem.len);
}
}
--- 401,427 ----
gdbserv_reg_to_ulong (serv, addr, &request_base);
if (target_mem.len == 0)
{
! target_mem.len = alloc_roundup (len);
! target_mem.buf = malloc (target_mem.len);
! target_mem.base = request_base;
}
else
{
if (request_base < target_mem.base)
{
! unsigned long oldlen = target_mem.len;
! unsigned long movlen = target_mem.base - request_base;
!
! target_mem.len += alloc_roundup (target_mem.base - request_base);
target_mem.base = request_base;
target_mem.buf = realloc (target_mem.buf, target_mem.len);
+ memmove (target_mem.buf + movlen, target_mem.buf, oldlen);
}
if (request_base + len >
target_mem.base + target_mem.len)
{
! target_mem.len += alloc_roundup ((request_base + len) -
! (target_mem.base + target_mem.len));
target_mem.buf = realloc (target_mem.buf, target_mem.len);
}
}
next reply other threads:[~2004-07-09 21:39 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-09 21:39 Michael Snyder [this message]
2004-07-10 3:26 Michael Elizabeth Chastain
2004-07-12 23:50 ` Michael Snyder
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=40EF10A8.5060403@redhat.com \
--to=msnyder@redhat.com \
--cc=binutils@sources.redhat.com \
--cc=cagney@gnu.org \
--cc=gdb-patches@sources.redhat.com \
--cc=rda@sources.redhat.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).