Fix for Hiroshi Ito discovery of mis-aligned memory allocation

git-svn-id: svn://svn.berlios.de/openocd/trunk@1205 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
duane 2008-12-04 01:15:13 +00:00
parent 051dcd9127
commit 9689fa4802
1 changed files with 33 additions and 0 deletions

View File

@ -463,6 +463,39 @@ void* cmd_queue_alloc(size_t size)
int offset;
u8 *t;
/*
* WARNING:
* We align/round the *SIZE* per below
* so that all pointers returned by
* this function are reasonably well
* aligned.
*
* If we did not, then an "odd-length" request would cause the
* *next* allocation to be at an *odd* address, and because
* this function has the same type of api as malloc() - we
* must also return pointers that have the same type of
* alignment.
*
* What I do not/have is a reasonable portable means
* to align by...
*
* The solution here, is based on these suggestions.
* http://gcc.gnu.org/ml/gcc-help/2008-12/msg00041.html
*
*/
union worse_case_align {
int i;
long l;
float f;
void *v;
};
#define ALIGN_SIZE (sizeof(union worse_case_align))
// The alignment process.
size = (size + ALIGN_SIZE -1) & (~(ALIGN_SIZE-1));
// Done...
if (*p_page)
{
while ((*p_page)->next)