From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27162 invoked by alias); 12 Jul 2004 23:53:18 -0000 Mailing-List: contact rda-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Post: List-Help: , Sender: rda-owner@sources.redhat.com Received: (qmail 27143 invoked from network); 12 Jul 2004 23:53:17 -0000 Message-ID: <40F3246A.5030101@redhat.com> Date: Mon, 12 Jul 2004 23:53:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.4.2) Gecko/20040301 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Andrew Cagney CC: gdb-patches@sources.redhat.com, binutils@sources.redhat.com, rda@sources.redhat.com, Michael Elizabeth Chastain Subject: [RFA] rda/samples: improve memory allocation, ver. 1.1 Content-Type: multipart/mixed; boundary="------------010907010005040404000005" X-SW-Source: 2004-q3/txt/msg00007.txt.bz2 This is a multi-part message in MIME format. --------------010907010005040404000005 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 47 Resubmitted with corrections from Michael C.: --------------010907010005040404000005 Content-Type: text/plain; name="diff5" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diff5" Content-length: 2505 2004-07-09 Michael Snyder * 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/src/src/rda/samples/demo-target.c,v retrieving revision 1.1 diff -p -r1.1 demo-target.c *** demo-target.c 28 Aug 2002 01:22:28 -0000 1.1 --- demo-target.c 12 Jul 2004 23:47:54 -0000 *************** demo_get_mem (struct gdbserv* serv, *** 384,389 **** --- 384,392 ---- return n; } + #define ALLOC_UNIT 0x1000 + #define alloc_roundup(LEN) ((((LEN)+ALLOC_UNIT-1) / ALLOC_UNIT) * ALLOC_UNIT) + static long demo_set_thread_mem (struct gdbserv *serv, *************** demo_set_thread_mem (struct gdbserv *ser *** 397,419 **** 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); } } --- 400,426 ---- 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); } } --------------010907010005040404000005--