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); } }