|
Lines 27-32
static char *malloc_ptr = (char *) MALLOC_BASE;
Link Here
|
| 27 |
|
27 |
|
| 28 |
static char *last_alloc = 0; |
28 |
static char *last_alloc = 0; |
| 29 |
|
29 |
|
|
|
30 |
static char *align_ptr_to(char *ptr, unsigned long align) |
| 31 |
{ |
| 32 |
return (char *) ((((unsigned long) ptr) + (align - 1UL)) & |
| 33 |
~(align - 1UL)); |
| 34 |
} |
| 35 |
|
| 30 |
void *malloc (int size) |
36 |
void *malloc (int size) |
| 31 |
{ |
37 |
{ |
| 32 |
char *caddr; |
38 |
char *caddr; |
|
Lines 34-43
void *malloc (int size)
Link Here
|
| 34 |
caddr = malloc_ptr; |
40 |
caddr = malloc_ptr; |
| 35 |
malloc_ptr += size; |
41 |
malloc_ptr += size; |
| 36 |
last_alloc = caddr; |
42 |
last_alloc = caddr; |
| 37 |
malloc_ptr = (char *) ((((unsigned long) malloc_ptr) + 7) & (~7)); |
43 |
malloc_ptr = align_ptr_to(malloc_ptr, 8UL); |
| 38 |
return caddr; |
44 |
return caddr; |
| 39 |
} |
45 |
} |
| 40 |
|
46 |
|
|
|
47 |
int posix_memalign(void **memptr, unsigned long alignment, unsigned long size) |
| 48 |
{ |
| 49 |
char *caddr; |
| 50 |
|
| 51 |
if (alignment & (alignment - 1UL)) |
| 52 |
return -1; |
| 53 |
if (alignment & (sizeof(void *) - 1UL)) |
| 54 |
return -1; |
| 55 |
|
| 56 |
if (size == 0) { |
| 57 |
*memptr = (void *) 0; |
| 58 |
return 0; |
| 59 |
} |
| 60 |
|
| 61 |
caddr = align_ptr_to(malloc_ptr, alignment); |
| 62 |
malloc_ptr = (caddr + size); |
| 63 |
last_alloc = caddr; |
| 64 |
malloc_ptr = align_ptr_to(malloc_ptr, 8UL); |
| 65 |
|
| 66 |
*memptr = caddr; |
| 67 |
|
| 68 |
return 0; |
| 69 |
} |
| 70 |
|
| 41 |
void free (void *m) |
71 |
void free (void *m) |
| 42 |
{ |
72 |
{ |
| 43 |
if (m == last_alloc) |
73 |
if (m == last_alloc) |