Browse Source

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
tags/v0.1.0
duane 15 years ago
parent
commit
9689fa4802
1 changed files with 33 additions and 0 deletions
  1. +33
    -0
      src/jtag/jtag.c

+ 33
- 0
src/jtag/jtag.c 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)


Loading…
Cancel
Save