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