target: rewrite working area allocator
commit813f4a5411af9a397d6e9bbc682a43738b06baeb
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>
Mon, 13 Feb 2012 00:18:24 +0000 (13 01:18 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Thu, 23 Feb 2012 14:02:23 +0000 (23 14:02 +0000)
treed14449fb1e16db15003091b11d86dd12fcbc0a85
parentf0ef9960b6f4caacc69c4a839e6b759e8c6a9b82
target: rewrite working area allocator

The existing allocator couldn't reuse a freed allocation if the sizes
didn't match exactly. That led to problems when for example a flash write
routine had allocated all of the working area to speed up operation. A
subsequent verify pass couldn't allocate space for the checksum algorithm
even though all previous allocations had been freed.

This allocator is marginally more complex, but solves the above problem by
splitting larger free areas to fulfill smaller requests and by merging
released areas into adjacent free areas.

An initial free area, covering the entire specified address range, is set
up on first allocation, and all allocations are split off from (and
ultimately merged into) that one. It can also easily be adapted to support
several disjoint working areas for the same target, by setting up several
initial free areas and slightly modifying the merge code.

Change-Id: I6faaf9801312bb19a4fa4474694a0cd1c6e0ab54
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/445
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/target/target.c