| Index: emcore/trunk/libc/tlsf/tlsf.c |
| — | — | @@ -901,7 +901,7 @@ |
| 902 | 902 | ** - an extended buffer size will leave the newly-allocated area with
|
| 903 | 903 | ** contents undefined
|
| 904 | 904 | */
|
| 905 | | -void* tlsf_realloc(tlsf_pool tlsf, void* ptr, size_t size)
|
| | 905 | +void* tlsf_realign(tlsf_pool tlsf, void* ptr, size_t align, size_t size)
|
| 906 | 906 | {
|
| 907 | 907 | pool_t* pool = tlsf_cast(pool_t*, tlsf);
|
| 908 | 908 | void* p = 0;
|
| — | — | @@ -931,7 +931,8 @@ |
| 932 | 932 | */
|
| 933 | 933 | if (adjust > cursize && (!block_is_free(next) || adjust > combined))
|
| 934 | 934 | {
|
| 935 | | - p = tlsf_malloc(tlsf, size);
|
| | 935 | + if (align > 4) p = tlsf_memalign(tlsf, align, size);
|
| | 936 | + else p = tlsf_malloc(tlsf, size);
|
| 936 | 937 | if (p)
|
| 937 | 938 | {
|
| 938 | 939 | const size_t minsize = tlsf_min(cursize, size);
|
| — | — | @@ -956,3 +957,8 @@ |
| 957 | 958 |
|
| 958 | 959 | return p;
|
| 959 | 960 | }
|
| | 961 | +
|
| | 962 | +void* tlsf_realloc(tlsf_pool tlsf, void* ptr, size_t size)
|
| | 963 | +{
|
| | 964 | + return tlsf_realign(tlsf, ptr, 4, size);
|
| | 965 | +}
|
| Index: emcore/trunk/libc/tlsf/tlsf.h |
| — | — | @@ -31,6 +31,7 @@ |
| 32 | 32 | /* malloc/memalign/realloc/free replacements. */
|
| 33 | 33 | void* tlsf_malloc(tlsf_pool pool, size_t bytes) ICODE_ATTR;
|
| 34 | 34 | void* tlsf_memalign(tlsf_pool pool, size_t align, size_t bytes) ICODE_ATTR;
|
| | 35 | +void* tlsf_realign(tlsf_pool pool, void* ptr, size_t align, size_t size) ICODE_ATTR;
|
| 35 | 36 | void* tlsf_realloc(tlsf_pool pool, void* ptr, size_t size) ICODE_ATTR;
|
| 36 | 37 | void tlsf_free(tlsf_pool pool, void* ptr) ICODE_ATTR;
|
| 37 | 38 |
|
| Index: emcore/trunk/export/syscallwrappers.h |
| — | — | @@ -220,6 +220,8 @@ |
| 221 | 221 | #define read_battery_mw __emcore_syscall->read_battery_mw |
| 222 | 222 | #define read_input_mw __emcore_syscall->read_input_mw |
| 223 | 223 | #define read_battery_state __emcore_syscall->read_battery_state |
| | 224 | +#define tlsf_realign __emcore_syscall->tlsf_realign |
| | 225 | +#define realign __emcore_syscall->realign |
| 224 | 226 | |
| 225 | 227 | |
| 226 | 228 | #endif |
| Index: emcore/trunk/export/syscallapi.h |
| — | — | @@ -278,6 +278,8 @@ |
| 279 | 279 | typeof(read_battery_mw) *read_battery_mw; |
| 280 | 280 | typeof(read_input_mw) *read_input_mw; |
| 281 | 281 | typeof(read_battery_state) *read_battery_state; |
| | 282 | + typeof(tlsf_realign) *tlsf_realign; |
| | 283 | + typeof(realign) *realign; |
| 282 | 284 | }; |
| 283 | 285 | |
| 284 | 286 | |
| Index: emcore/trunk/malloc.c |
| — | — | @@ -53,12 +53,12 @@ |
| 54 | 54 | return ptr;
|
| 55 | 55 | }
|
| 56 | 56 |
|
| 57 | | -void* realloc(void* ptr, size_t size)
|
| | 57 | +void* realign(void* ptr, size_t align, size_t size)
|
| 58 | 58 | {
|
| 59 | 59 | mutex_lock(&malloc_mutex, TIMEOUT_BLOCK);
|
| 60 | 60 | size_t oldsize = tlsf_block_size(ptr);
|
| 61 | 61 | struct scheduler_thread* owner = *((struct scheduler_thread**)(ptr + oldsize - 4));
|
| 62 | | - ptr = tlsf_realloc(global_mallocpool, ptr, size + 4);
|
| | 62 | + ptr = tlsf_realign(global_mallocpool, ptr, align, size + 4);
|
| 63 | 63 | if (ptr)
|
| 64 | 64 | {
|
| 65 | 65 | size = tlsf_block_size(ptr);
|
| — | — | @@ -68,6 +68,11 @@ |
| 69 | 69 | return ptr;
|
| 70 | 70 | }
|
| 71 | 71 |
|
| | 72 | +void* realloc(void* ptr, size_t size)
|
| | 73 | +{
|
| | 74 | + return realign(ptr, 4, size);
|
| | 75 | +}
|
| | 76 | +
|
| 72 | 77 | void reownalloc(void* ptr, struct scheduler_thread* owner)
|
| 73 | 78 | {
|
| 74 | 79 | mutex_lock(&malloc_mutex, TIMEOUT_BLOCK);
|
| Index: emcore/trunk/malloc.h |
| — | — | @@ -31,6 +31,7 @@ |
| 32 | 32 |
|
| 33 | 33 | void* malloc(size_t size) ICODE_ATTR;
|
| 34 | 34 | void* memalign(size_t align, size_t size) ICODE_ATTR;
|
| | 35 | +void* realign(void* ptr, size_t align, size_t size) ICODE_ATTR;
|
| 35 | 36 | void* realloc(void* ptr, size_t size) ICODE_ATTR;
|
| 36 | 37 | void reownalloc(void* ptr, struct scheduler_thread* owner);
|
| 37 | 38 | void free(void* ptr) ICODE_ATTR;
|
| Index: emcore/trunk/syscallapi.c |
| — | — | @@ -242,5 +242,7 @@ |
| 243 | 243 | .read_battery_mwh_current = read_battery_mwh_current, |
| 244 | 244 | .read_battery_mw = read_battery_mw, |
| 245 | 245 | .read_input_mw = read_input_mw, |
| 246 | | - .read_battery_state = read_battery_state |
| | 246 | + .read_battery_state = read_battery_state, |
| | 247 | + .tlsf_realign = tlsf_realign, |
| | 248 | + .realign = realign |
| 247 | 249 | }; |